# Autohero Scraper — Used Car Listings Across 9 EU Countries (`studio-amba/autohero-scraper`) Actor

Scrape used-car listings from Autohero.com (Auto1 Group) in Germany, France, Spain, Italy, Austria, Netherlands, Belgium, Poland, and Sweden. Get prices, mileage, year, fuel, gearbox, damage history, and optionally VIN, equipment, and service records. No login, no cookies. Export JSON, CSV, Excel.

- **URL**: https://apify.com/studio-amba/autohero-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 4 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Autohero Scraper — Used Car Listings Across 9 EU Countries

Scrape used-car listings from [Autohero.com](https://www.autohero.com), the online used-car dealer of Auto1 Group. Autohero sells fully inspected cars from its own inventory in 9 European countries: Germany, France, Spain, Italy, Austria, the Netherlands, Belgium, Poland, and Sweden — roughly 20,000 cars at any time.

Every car comes with unusually deep data for a car site: documented accident and damage counts from Autohero's own inspection, previous-owner count, service-book status, and (with details enabled) the VIN, the full equipment list, and individual service-history records.

No login, no cookies, no API key. Export to JSON, CSV, Excel, or connect via the Apify API.

### What data you get

| Field | Description |
|---|---|
| `name`, `make`, `model`, `variant` | Full car identification, e.g. "Skoda Kodiaq 2.0 BiTDI RS 4x4" |
| `year` | First registration year |
| `mileage`, `mileageUnit` | Odometer reading in km |
| `price`, `currency` | Asking price in major units (EUR; PLN in Poland, SEK in Sweden) |
| `monthlyPayment` | Advertised financing rate per month |
| `fuelType`, `gearType`, `driveTrain` | petrol/diesel/electric/hybrid…, manual/automatic, front/rear/all-wheel |
| `powerKw`, `powerHp`, `engineCcm` | Engine power and displacement |
| `co2`, `consumptionCombined/City/Highway` | Emissions and fuel consumption |
| `previousOwners` | Number of previous owners |
| `accidentCount`, `damageCount` | Recorded accidents and documented cosmetic damages |
| `hasServiceBook`, `lastServiceOn` | Service-book status and last service date |
| `branchLocation` | Autohero branch where the car is stocked |
| `imageUrl` | Main photo in full resolution |
| `url` | Direct link to the car page |
| `vin` | Vehicle identification number (with `fetchDetails`) |
| `equipment` | Equipment list, first 30 items (with `fetchDetails`) |
| `serviceHistory` | Service records: date, mileage, type (with `fetchDetails`) |

### How to scrape Autohero data

1. Pick a **country** (Germany has the largest inventory, ~7,500 cars).
2. Optionally filter by **make** ("BMW", "Volkswagen", "Mercedes-Benz" — aliases like "VW" work), **model** ("X1", "Golf", "Clio"), **maxPrice**, **minYear**, **maxMileage**, **fuelType**, or **gearType**.
3. Set **maxResults** (default 100). Leave all filters empty to scrape the whole country catalogue.
4. Optionally enable **fetchDetails** to add VIN, equipment, service history, and image counts. This costs one extra request per car, so a full-country detail run takes noticeably longer.
5. Run the actor and export the dataset in the format you need.

The scraper talks to Autohero's own product API, so results match exactly what the website shows, including prices and availability.

#### Example input

```json
{
  "country": "de",
  "make": "BMW",
  "maxPrice": 30000,
  "minYear": 2019,
  "fuelType": "diesel",
  "maxResults": 100,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

#### Example output

```json
{
  "id": "5f7daa61-c635-4615-be9c-22aa3fa56c90",
  "name": "Skoda Kodiaq 2.0 BiTDI RS 4x4",
  "make": "Skoda",
  "model": "Kodiaq",
  "variant": "2.0 BiTDI RS 4x4",
  "year": 2019,
  "mileage": 88312,
  "mileageUnit": "km",
  "price": 29390,
  "currency": "EUR",
  "monthlyPayment": 404,
  "fuelType": "diesel",
  "gearType": "automatic",
  "driveTrain": "all-wheel-drive",
  "powerKw": 176,
  "powerHp": 239,
  "engineCcm": 1968,
  "co2": 167,
  "consumptionCombined": 6.4,
  "previousOwners": 1,
  "accidentCount": 0,
  "damageCount": 24,
  "hasServiceBook": false,
  "lastServiceOn": "2025-12-09",
  "branchLocation": "Workshop Ketzin, Ketzin, 14669",
  "imageUrl": "https://img-eu-c1.autohero.com/img/97e92dcb…/exterior/1/70cab346c7b04cf39f2f877f6465f689.jpg",
  "url": "https://www.autohero.com/de/skoda-kodiaq/id/5f7daa61-c635-4615-be9c-22aa3fa56c90/",
  "country": "de",
  "scrapedAt": "2026-07-11T19:04:12.345Z"
}
```

### Countries and inventory size

| Country | Store | Approx. cars |
|---|---|---|
| Germany | `de` | 7,400 |
| France | `fr` | 3,200 |
| Italy | `it` | 3,100 |
| Spain | `es` | 2,500 |
| Belgium | `be` | 1,300 |
| Poland | `pl` | 800 |
| Austria | `at` | 750 |
| Netherlands | `nl` | 430 |
| Sweden | `se` | 400 |

A full-country listing scrape finishes in a few minutes. Prices are returned in the local currency: EUR everywhere except Poland (PLN) and Sweden (SEK).

### Use cases

- **Price monitoring** — track asking prices for specific makes and models across countries, spot cross-border price gaps for the same car class.
- **Market research** — analyse the EU used-car market: which models dominate, how mileage and age affect pricing, EV vs combustion share per country.
- **Vehicle sourcing** — dealers and exporters can filter by price, year, mileage, and damage count, and get the VIN and full equipment list for shortlisted cars.
- **Data products** — feed clean, structured car data into valuation models, comparison sites, or alerting tools.

### FAQ

#### Is scraping Autohero legal?

The actor collects only publicly available product listings — the same data any visitor sees in a browser. It collects no personal data. Review Autohero's terms of service and consult a lawyer if you plan large-scale commercial use.

#### How fresh is the data?

Every run queries Autohero's live product API in real time. Prices, availability, and damage data are current as of the moment the run finishes.

#### Why are some cars marked with damages if Autohero sells inspected cars?

Autohero documents every cosmetic flaw (scratches, dents, stone chips) during inspection. A `damageCount` of 20 usually means 20 photographed minor blemishes, not a wreck — `accidentCount` is the field that tracks real accident history.

#### What does fetchDetails cost?

One extra API request per car. For 100 cars the difference is seconds; for a full German catalogue (~7,500 cars) it turns a 2-minute run into a run of an hour or more. The actor persists progress across platform migrations, so long detail runs resume instead of restarting.

#### Can I scrape all countries in one run?

One run scrapes one country store. To cover all 9, start 9 runs (they are cheap and fast) — or schedule them. Each country has its own separate inventory, so there is no overlap between runs.

### Related scrapers

More car-market scrapers from the same developer:

- [AutoTrader UK Scraper](https://apify.com/store?search=autotrader-uk-scraper) — UK's largest car marketplace
- [Car.gr Scraper](https://apify.com/store?search=car-gr-scraper) — Greek car classifieds
- [Polovni Automobili Scraper](https://apify.com/store?search=polovni-automobili-scraper) — Serbia's biggest car site
- [Hasznaltauto Scraper](https://apify.com/store?search=hasznaltauto-scraper) — Hungary's used-car marketplace
- [Mobile.bg Scraper](https://apify.com/store?search=mobile-bg-scraper) — Bulgaria's leading car classifieds

### Support

Found a bug or need an extra field? Open an issue on the actor's Issues tab and it will be looked at quickly.

# Actor input Schema

## `country` (type: `string`):

Autohero country store to scrape. Each country has its own inventory (Germany is the largest with ~7,500 cars).

## `make` (type: `string`):

Filter by car make, e.g. 'BMW', 'Volkswagen', 'Mercedes-Benz', 'Renault'. Case-insensitive; common aliases like 'VW' or 'Mercedes' work too. Leave empty for all makes.

## `model` (type: `string`):

Filter by model name as Autohero lists it, e.g. 'X1', 'Golf', 'C-Klasse', 'Clio'. Case-insensitive exact match. Leave empty for all models.

## `maxPrice` (type: `integer`):

Maximum price in the country's currency (EUR; PLN in Poland, SEK in Sweden). Example: 15000.

## `minYear` (type: `integer`):

Minimum first-registration year, e.g. 2020.

## `maxMileage` (type: `integer`):

Maximum mileage in kilometres, e.g. 50000.

## `fuelType` (type: `string`):

Filter by fuel type. Leave empty for all.

## `gearType` (type: `string`):

Filter by gearbox type. Leave empty for all.

## `fetchDetails` (type: `boolean`):

Enrich each car with its VIN, full equipment list (first 30 items), service-history records, and total image count. Costs one extra request per car: 100 cars is quick, but a full country catalogue means thousands of extra requests and a much longer run. Leave off for fast listing scrapes.

## `maxResults` (type: `integer`):

Maximum number of cars to return. The full EU inventory is roughly 20,000 cars; Germany alone is ~7,500.

## `proxyConfiguration` (type: `object`):

Proxy settings. The Autohero API is public and open, so default Apify proxies work well.

## Actor input object example

```json
{
  "country": "de",
  "make": "BMW",
  "fetchDetails": false,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "country": "de",
    "make": "BMW",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/autohero-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "country": "de",
    "make": "BMW",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/autohero-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "country": "de",
  "make": "BMW",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/autohero-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/autohero-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/AywnEjheVbnJLleh0/builds/iilNTZiXFG8lh52er/openapi.json
