# Autohero Scraper (`rastriq/autohero-scraper`) Actor

Scrape Autohero used cars in 9 European countries: prices, price drops, finance, specs, VIN, equipment, inspection damages and photos. Fast public API, server-side filters.

- **URL**: https://apify.com/rastriq/autohero-scraper.md
- **Developed by:** [Rastriq — Structured data from the world](https://apify.com/rastriq) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 cars

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 — European Used Car Prices, Price Drops, VIN & Inspection Data

**Autohero Scraper** extracts used car listings from [Autohero](https://www.autohero.com) in all 9 European markets — Germany, France, Spain, Italy, Austria, Netherlands, Belgium, Poland and Sweden (≈23,500 cars). Get prices and price history, finance offers, full specs, VIN, equipment, inspection damages and photos through Autohero's public GraphQL API: no browser, no proxy, server-side filters.

### 🚗 What is Autohero Scraper?

Autohero Scraper is a fast Autohero API scraper for pricing teams, dealers, marketplaces, fleet and remarketing analysts who need a clean, cross-country view of online used car retail in Europe.

- 🌍 **9 countries in one run** — compare the same model across markets (EUR, PLN, SEK).
- 📉 **Price drops** — first price, previous price, drop amount and %.
- 💳 **Finance offers** — financed price, monthly payment, term, VAT regime (margin vs VAT-deductible).
- 🔍 **Inspection data** — damage list by area and type, accidents, previous owners, service history, next inspection date.
- 🧰 **Full equipment** — flat list and grouped by category, plus VIN, dimensions, doors and seats.
- ⚡ **Batch details** — details are fetched for 25 cars per request, so enriched runs stay fast and cheap.

### 📋 What data does Autohero Scraper extract?

| Group | Fields |
|---|---|
| 🆔 Identity | `id` (durable UUID), `stockNumber`, `retailAdId`, `detailUrl`, `countryCode` |
| 🚘 Vehicle | `manufacturer`, `model`, `subType`, `subTypeExtra`, `builtYear`, `registrationDate`, `mileageKm`, `fuelType`, `isPlugInHybrid`, `gearType`, `driveTrain`, `powerKw`, `powerHp`, `engineCcm`, `acceleration0to100s` |
| 💶 Price | `price`, `currency`, `firstPrice`, `previousPrice`, `priceDropAmount`, `priceDropPct`, `vatType`, `vatDeductible` |
| 💳 Finance | `financedPrice`, `firstFinancedPrice`, `monthlyPayment`, `financingPeriodMonths`, `downPaymentAmount` |
| 🌱 Emissions | `co2gKm`, `emissionStandard`, `emissionSticker`, `energyEfficiencyClass`, fuel / electric consumption |
| 🧾 History | `previousOwners`, `numberOfAccidents`, `numberOfDamages`, `hasFullServiceHistory`, `lastServiceDate`, `usps` |
| 📍 Branch | `branchName`, `branchCity`, `branchZipcode`, `branchStreet`, `branchArea` |
| 📅 Dates | `firstImportedAt`, `firstPublishedAt`, `publishedAt`, `availableToBuyFrom` |
| 🔧 Details *(optional)* | `vin`, `bodyType`, `colorOutside`, `doorCount`, `seatCount`, `horsePower`, dimensions, `loadVolumeLiters`, `equipment`, `equipmentByCategory`, `topFeatures`, `damages`, `wasInAccident`, `inspectionExpiryDate` |
| 🖼️ Media | `imageUrl` + *(optional)* `imageUrls`, `damageImageUrls`, `panoramaImageUrls` |
| ✅ Quality | `_quality_flags`, `_validation_errors`, `_detail_status`, `scrapedAt` |

Up to **99 fields per car**. Suspicious values are flagged, never dropped.

### ▶️ How to use Autohero Scraper

1. Click **Try for free** and open the Input tab.
2. Select one or more **countries** (empty = all 9).
3. Optionally filter by brand, model, fuel, gearbox, price, mileage, year or power, and choose a sort order.
4. Set **Max items per country** (0 = everything) and enable **car details** / **photo gallery** if needed.
5. Click **Start** and export to JSON, CSV or Excel, or use the views *Overview*, *Prices & finance*, *Specs & condition*, *Branches* and *Data quality*.

### ⚙️ Input parameters

| Parameter | Type | Description |
|---|---|---|
| `countries` | multi-select | `DE`, `FR`, `ES`, `IT`, `AT`, `NL`, `BE`, `PL`, `SE` |
| `brands` | list | Any capitalisation: `bmw`, `Mercedes-Benz`… |
| `models` | list | Text match, localised per market (`3er` in DE, `Serie 3` in ES) |
| `fuelTypes` | multi-select | Petrol, Diesel, Hybrid, Electric, LPG, CNG, Ethanol |
| `gearType` | select | any, Automatic, Manual |
| `minPrice` / `maxPrice` | integer | Market currency |
| `minMileage` / `maxMileage`, `minYear` / `maxYear`, `minPowerHp` / `maxPowerHp` | integer | Ranges |
| `sort` | select | Most popular, price, mileage, newest, monthly price, brand |
| `maxItems` | integer | Per country, 0 = all |
| `includeDetails`, `includeImages`, `imageSize` | options | Enrichment |
| `excludeComingSoon` | boolean | Skip not-yet-purchasable cars |

Example — automatic BMW and Audi under €30,000 in Germany and Spain, with details:

```json
{
  "countries": ["DE", "ES"],
  "brands": ["BMW", "Audi"],
  "gearType": "Automatic",
  "maxPrice": 30000,
  "includeDetails": true,
  "maxItems": 500
}
```

### 📦 Output example

```json
{
  "id": "bd2ab0e6-b734-41af-9aec-b0397db6931f",
  "countryCode": "ES",
  "title": "Kia Picanto 1.0 Concept",
  "price": 8599,
  "currency": "EUR",
  "firstPrice": 8999,
  "priceDropPct": 4.4,
  "financedPrice": 8190,
  "monthlyPayment": 152,
  "financingPeriodMonths": 84,
  "vatType": "margin",
  "mileageKm": 31190,
  "builtYear": 2014,
  "registrationDate": "2015-04-29",
  "fuelType": "Petrol",
  "gearType": "Automatic",
  "powerHp": 69,
  "emissionStandard": "EURO 5",
  "previousOwners": 3,
  "bodyType": "Coche pequeño",
  "colorOutside": "Blanco",
  "equipmentCount": 42,
  "damageCount": 19,
  "damages": [{ "area": "body", "type": "Arañazo" }, { "area": "tyresAndBrakes", "type": "Arañazo" }],
  "inspectionExpiryDate": "2027-06-09",
  "branchName": "Workshop Toledo",
  "detailUrl": "https://www.autohero.com/es/kia-picanto/id/bd2ab0e6-b734-41af-9aec-b0397db6931f/",
  "imageUrl": "https://img-eu-c1.autohero.com/img/dd28…/exterior/1/768x432-bd71….jpg",
  "scrapedAt": "2026-11-04T21:11:41.148Z",
  "_quality_flags": []
}
```

`RUN_SUMMARY` in the key-value store reports, per country, cars available vs extracted and coverage %.

### 💰 How much does it cost to scrape Autohero?

Autohero Scraper uses pay-per-event pricing with volume discounts by Apify plan. You pay a small start fee per run and a flat price per car delivered. Car details (VIN, equipment, inspection damages, photos) are included — no extra fee per detail. Platform usage is included in the price.

| Apify plan | Price per 1,000 cars | All 9 Autohero markets (~23,500 cars) |
|---|---|---|
| Free | $1.50 | ≈ $35 |
| Starter (Bronze) | $1.40 | ≈ $33 |
| Scale (Silver) | $1.20 | ≈ $28 |
| Business (Gold) and above | $1.00 | ≈ $24 |

Run start: $0.005. Example: a 1,000-car test on the Free plan costs about $1.50. Set a maximum cost per run in the run options to stay in control.

### 🔗 Related Actors

- [Flexicar Scraper](https://apify.com/rastriq/flexicar-scraper) — Spain's largest used car dealer network, plus Portugal.
- [Autosphere.fr Scraper](https://apify.com/rastriq/autosphere-fr-scraper) — French dealer group stock with promotions and LOA offers.
- [Aramis Group Stock](https://apify.com/rastriq/aramis-group-stock) — Aramisauto, Clicars, Cardoen, brumbrum and CarSupermarket.

### ❓ FAQ

**Is it legal to scrape Autohero?** Autohero Scraper reads publicly available listings through the same API the website uses, without login or protection bypass. Check Autohero's terms and your local rules for your use case.

**Why are some prices in PLN or SEK?** Poland and Sweden list in local currency; `currency` tells you which. Price filters use the same currency.

**Which sort should I use for a full snapshot?** *Most popular*, *Newest listings* or *Lowest mileage* return every car exactly once. Price sorts are great with *Max items* (e.g. the 100 cheapest) but can skip ~1% of cars on full exports.

**Why do model names differ between countries?** Autohero localises model names (e.g. BMW `3er` vs `Serie 3`). Use brand filters plus `model` per market.

**Something missing?** Open an issue in the Issues tab.

# Actor input Schema

## `countries` (type: `array`):

Autohero markets to scrape. Empty = all 9.

## `brands` (type: `array`):

e.g. <code>BMW</code>, <code>Volkswagen</code>, <code>Mercedes-Benz</code>, <code>Kia</code> (any capitalisation). Empty = all.

## `models` (type: `array`):

Model text match. Names are localised by market, e.g. BMW <code>3er</code> (DE) vs <code>Serie 3</code> (ES); <code>Golf</code> works everywhere.

## `fuelTypes` (type: `array`):

Empty = all. Hybrid includes plug-in hybrids (see <code>isPlugInHybrid</code>).

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

Transmission.

## `minPrice` (type: `integer`):

In the market's currency (EUR / PLN / SEK).

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

In the market's currency (EUR / PLN / SEK).

## `minMileage` (type: `integer`):

Lower bound.

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

Upper bound.

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

Earliest year of manufacture.

## `maxYear` (type: `integer`):

Latest year of manufacture.

## `minPowerHp` (type: `integer`):

Lower bound.

## `maxPowerHp` (type: `integer`):

Upper bound.

## `excludeComingSoon` (type: `boolean`):

Skip cars that are listed but not yet purchasable.

## `sort` (type: `string`):

Result order per country. For complete snapshots use <i>Most popular</i>, <i>Newest</i> or <i>Lowest mileage</i> (verified to return every car once).

## `maxItems` (type: `integer`):

Maximum cars per country. 0 = all matching cars.

## `includeDetails` (type: `boolean`):

Adds VIN, body type, colour, doors, seats, official hp, dimensions, boot volume, full equipment (flat and by category), top features, inspection damages (area + type), accident history and next inspection date. Fetched in batches of 25 cars per request, so it stays fast and cheap.

## `includeImages` (type: `boolean`):

Adds all photo URLs, damage photos and 360° images (implies details). The main photo is always included.

## `imageSize` (type: `string`):

Size of the generated image URLs.

## `maxConcurrency` (type: `integer`):

Parallel detail batches.

## `maxRequestRetries` (type: `integer`):

Exponential backoff; failing detail batches are split automatically.

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

Not needed: Autohero's API is public. Enable only if you get blocked.

## `debug` (type: `boolean`):

Verbose logs.

## Actor input object example

```json
{
  "countries": [
    "ES"
  ],
  "gearType": "any",
  "excludeComingSoon": false,
  "sort": "most_popular",
  "maxItems": 50,
  "includeDetails": false,
  "includeImages": false,
  "imageSize": "medium",
  "maxConcurrency": 3,
  "maxRequestRetries": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "debug": false
}
```

# Actor output Schema

## `cars` (type: `string`):

All extracted cars.

## `overview` (type: `string`):

No description

## `summary` (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 = {
    "countries": [
        "ES"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rastriq/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 = {
    "countries": ["ES"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rastriq/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 '{
  "countries": [
    "ES"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rastriq/autohero-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rastriq/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/a3v8s63zuMcEi6G6u/builds/OffIYzig9H4MC9vGE/openapi.json
