# AutoScout24 Scraper — Cars, Prices, Specs & Dealer Contacts (`haketa/autoscout24-scraper`) Actor

Scrape AutoScout24 car listings across 8 European markets (DE, AT, BE, ES, FR, IT, LU, NL) by make, model, filters or URL. Get price, mileage, power, fuel, transmission, location, dealer name & phone, photos and specs. Export to JSON/CSV/Excel for price monitoring and automotive leads.

- **URL**: https://apify.com/haketa/autoscout24-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** E-commerce, Lead generation, Business
- **Features:** Limited permissions
- **Stats:** 7 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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

## AutoScout24 Scraper 🚗🇪🇺 — Cars, Prices, Specs & Dealer Contacts

**Extract structured car listings from [AutoScout24](https://www.autoscout24.com), Europe's largest pan-European automotive marketplace, with zero login and zero coding.** This **AutoScout24 scraper** turns search results across **8 European markets (Germany, Austria, Belgium, Spain, France, Italy, Luxembourg, and the Netherlands)** into a normalized, ready-to-use dataset — **price (€), price deal evaluation, mileage (km), first registration, power (kW & PS), fuel, transmission, engine displacement, fuel consumption, CO₂ emissions, full location, seller type, dealer name, dealer phone number, and photo gallery**.

Export your **AutoScout24 data** in bulk to **JSON, CSV, Excel, XML, or via the Apify API** for automotive price intelligence, dealer lead generation, and cross-border car sourcing.

> **Built for** used-car dealers and traders running daily repricing, data teams building vehicle-valuation and depreciation models, B2B lead-generation agencies harvesting **dealer phone numbers and addresses**, market analysts tracking EV and ICE supply across Europe, and automotive arbitrage buyers hunting under-priced vehicles.

[![Actor](https://img.shields.io/badge/Apify-Actor-00b04f?style=flat-square\&logo=apify)](https://apify.com/haketa/autoscout24-scraper)
[![Coverage](https://img.shields.io/badge/Markets-8%20EU%20Countries%20🇪🇺-003399?style=flat-square)](https://apify.com/haketa/autoscout24-scraper)
[![Leads](https://img.shields.io/badge/Dealer%20Leads-Phone%20%26%20Address-ff6600?style=flat-square)](https://apify.com/haketa/autoscout24-scraper)
[![Specs](https://img.shields.io/badge/Vehicle%20Specs-kW%20%7C%20PS%20%7C%20CO₂-brightgreen?style=flat-square)](https://apify.com/haketa/autoscout24-scraper)
[![Pagination](https://img.shields.io/badge/Pagination-1%2C000%2B%20Auto--Partitioned-blue?style=flat-square)](https://apify.com/haketa/autoscout24-scraper)
[![Output](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-2b7489?style=flat-square)](https://apify.com/haketa/autoscout24-scraper)
[![No code](https://img.shields.io/badge/No--code-Ready-9cf?style=flat-square)](https://apify.com/haketa/autoscout24-scraper)

***

### ⚡ At a glance

| Feature | Details |
| --- | --- |
| **Covered markets** | Germany (`D`), Austria (`A`), Belgium (`B`), Spain (`E`), France (`F`), Italy (`I`), Luxembourg (`L`), Netherlands (`NL`) |
| **Targeting modes** | Brand/model dropdowns + 12 search filters, custom brand slug (`makeOther`), or direct AutoScout24 search URLs (`startUrls`) |
| **Core data extracted** | Listing ID, title, make, model, variant, price (€), price rating, condition, registration date/year, mileage, kW/PS, fuel, gearbox, cc, CO₂, consumption, address, dealer name, phone, photos |
| **Optional detail mode** | `fetchDetails: true` adds full seller `description`, exterior `bodyColor`, and `warranty` duration |
| **Pagination & 1,000+ scale** | Automatic page traversal (`page=1..20`) + **automatic price-band, year-band, sort & brand partitioning** when `maxItems > 400` to bypass the 20-page single-search cap |
| **De-duplication** | 100% unique vehicles per run — deduplicated across all pages and partitions by `listingId` |
| **Speed & cost** | ~100 listings in ~15–25 seconds; ~500 listings in ~45 seconds on low-cost default proxy with automatic residential fallback |
| **Export formats** | JSON, CSV, Excel (XLSX), HTML, XML, RSS, and live REST API / webhooks |

***

### 🔎 Why scrape AutoScout24?

AutoScout24 hosts **over 2 million active vehicle listings** from tens of thousands of commercial dealerships and private sellers across continental Europe. Every listing combines three critical datasets in one place:

1. **Market pricing & deal scoring** — numeric asking price in euros (`price`), formatted price text, and AutoScout24's proprietary deal evaluation (`priceEvaluation`, indicating whether a vehicle is priced as a top deal, good price, or above market).
2. **Standardized technical specifications** — odometer mileage in kilometers, engine power in both **kW and PS**, fuel type (Petrol, Diesel, Electric, Hybrid, LPG, CNG), transmission type, engine displacement (`engineCc`), combined fuel consumption, and CO₂ emissions.
3. **B2B dealership contact intelligence** — seller type (`Dealer` vs. `PrivateSeller`), dealership company name (`sellerName`), sales contact (`sellerContact`), direct **phone number** (`phone`), street address, postal code, city, country, and dealer profile link (`dealerUrl`).

Collecting this data manually across 20-car search pages — or trying to normalize localized terminology across eight countries — is slow and error-prone. This **AutoScout24 data extractor** automates the entire workflow: it paginates automatically, partitions large searches to unlock **1,000+ results pagination**, normalizes fuel and gearbox values into clean English, deduplicates by `listingId`, and outputs an analysis-ready table.

***

### ✨ What this AutoScout24 scraper does

- ✅ **Two flexible targeting modes:** Pick a **Make** from 31 major brands (or type any exotic brand in `makeOther`), narrow by **Model** and filters, or paste any pre-filtered AutoScout24 search URL into **Start URLs**.
- ✅ **Automatic 1,000+ deep pagination:** AutoScout24 restricts any single search query to 20 pages (400 listings). When you set `maxItems > 400` (e.g. `1000` or `0` for unlimited), the scraper automatically partitions your search across price brackets, registration-year bands, sort directions, and brands so you can collect **1,000+ unique car listings** in a single run.
- ✅ **Complete pricing & deal rating:** Captures numeric euro `price`, formatted `priceText`, and AutoScout24's integer `priceEvaluation` deal indicator.
- ✅ **Full technical specs in English:** Extracts numeric `mileage` (km), `powerKw`, `powerPs`, `engineCc`, `fuelConsumption`, `co2Emissions`, and normalizes `fuel` (`Petrol`, `Diesel`, `Electric`, `Hybrid (Petrol)`, `Hybrid (Diesel)`, `LPG`, `CNG`) and `transmission` (`Automatic`, `Manual`, `Semi-automatic`) to English.
- ✅ **Rich B2B dealer lead extraction:** Separates `Dealer` from `PrivateSeller` ads and extracts `sellerName`, `sellerContact`, direct `phone` number, `dealerUrl`, `street`, `zip`, `city`, and `country`.
- ✅ **Full image gallery:** Returns the primary thumbnail (`imageUrl`), total photo count (`imageCount`), and the complete array of vehicle photo URLs (`images`).
- ✅ **Optional detail-page enrichment (`fetchDetails`):** Opens individual vehicle pages in parallel when you also need the full seller `description`, `bodyColor`, and `warranty`.

***

### 🎯 Use cases

| Persona | How they use AutoScout24 Scraper |
| --- | --- |
| **Used-Car Dealers & Auto Traders** | Monitor competitor inventory and asking prices daily across Germany, Austria, Belgium, and the Netherlands to reprice stock competitively. |
| **Cross-Border Car Sourcing & Arbitrage** | Spot under-priced vehicles (`priceEvaluation = 1` or `2`) across 8 EU countries the moment they are listed and contact the dealer immediately. |
| **B2B Lead Generation Agencies** | Build targeted European car-dealership lead lists with company names, street addresses, cities, and direct phone numbers segmented by brand or fleet size. |
| **Vehicle Valuation & Insurance Teams** | Assemble large comparable cohorts (`make` + `model` + `year` + `mileage` + `powerKw`) to train residual-value, leasing, and depreciation models. |
| **Automotive Marketplaces & Portals** | Ingest a clean, language-neutral European vehicle feed with standardized specs and photo galleries. |
| **Equity & Market Researchers** | Track EV vs. ICE inventory trends, average days-on-market proxies, and dealership pricing across European markets. |

***

### 📥 Input parameters

Every input field is optional. Running with default settings immediately collects 100 newest listings from Germany (`D`). Running with no filters at all returns a diverse multi-brand sample.

| Parameter | Type | Default / Prefill | Description |
| --- | --- | --- | --- |
| `make` | `string` (select) | `""` (All makes) | Choose from 31 popular brands (`volkswagen`, `bmw`, `mercedes-benz`, `audi`, `porsche`, `tesla`, etc.) or leave on `"All makes"`. |
| `makeOther` | `string` | `""` | Advanced: enter any brand slug not in the dropdown (e.g. `aston-martin`, `ds-automobiles`, `ferrari`). Overrides `make`. |
| `model` | `string` | `""` | Optional model slug (e.g. `3er`, `a4`, `golf`, `911`, `octavia`). Leave empty for all models of the brand. |
| `countries` | `array<string>` | `["D"]` | European country markets: `D` (Germany), `A` (Austria), `B` (Belgium), `E` (Spain), `F` (France), `I` (Italy), `L` (Luxembourg), `NL` (Netherlands). |
| `adType` | `string` (select) | `"both"` | Vehicle condition filter: `"both"` (New & Used), `"N"` (New only), or `"U"` (Used only). |
| `fuelType` | `string` (select) | `""` (Any) | Filter by fuel: `"B"` (Petrol), `"D"` (Diesel), `"E"` (Electric), `"2"` (LPG), `"3"` (CNG). |
| `transmission` | `string` (select) | `""` (Any) | Filter by gearbox: `"M"` (Manual), `"A"` (Automatic), `"S"` (Semi-automatic). |
| `priceFrom` / `priceTo` | `integer` | Empty | Minimum and maximum price in euros (`€`). |
| `yearFrom` / `yearTo` | `integer` | Empty | Earliest and latest first-registration year (e.g. `2018` to `2024`). |
| `mileageFrom` / `mileageTo` | `integer` | Empty | Minimum and maximum odometer reading in kilometers (`km`). |
| `excludeDamaged` | `boolean` | `false` | When `true`, hides accident and currently damaged vehicles. |
| `sortBy` | `string` (select) | `"age"` | Ordering: `"age"` (Newest first — recommended), `"price"`, `"mileage"`, or `"standard"` (relevance). |
| `fetchDetails` | `boolean` | `false` | Open each listing detail page to add `description`, `bodyColor`, and `warranty`. Leave `false` for fast collection. |
| `maxItems` | `integer` | `100` | Maximum number of unique listings to collect (`0` = unlimited, `1000+` = auto-partitioned deep scrape). |
| `startUrls` | `array<string>` | `[]` | Advanced: paste full AutoScout24 search URLs built on the website. Overrides the filter fields above. |
| `proxyConfiguration` | `object` | `{ "useApifyProxy": true }` | Apify Proxy configuration. Uses low-cost datacenter proxy by default and automatically escalates to DE residential if needed. |

#### Example 1 — Deep 1,000+ brand scrape across Germany & Austria

```json
{
  "make": "bmw",
  "countries": ["D", "A"],
  "adType": "U",
  "sortBy": "age",
  "maxItems": 1200
}
```

#### Example 2 — Targeted model valuation search (Audi A4, 2019+, Diesel, Automatic)

```json
{
  "make": "audi",
  "model": "a4",
  "countries": ["D", "NL", "B"],
  "yearFrom": 2019,
  "priceTo": 35000,
  "fuelType": "D",
  "transmission": "A",
  "excludeDamaged": true,
  "sortBy": "price",
  "maxItems": 400
}
```

#### Example 3 — Detail enrichment mode (Porsche 911 with full description & color)

```json
{
  "make": "porsche",
  "model": "911",
  "countries": ["D"],
  "fetchDetails": true,
  "maxItems": 100
}
```

#### Example 4 — Direct AutoScout24 Search URLs (`startUrls`)

```json
{
  "startUrls": [
    "https://www.autoscout24.de/lst/mercedes-benz/e-klasse?atype=C&cy=D&fregfrom=2020&priceto=45000"
  ],
  "maxItems": 1000
}
```

***

### 📤 Output & field reference

Each vehicle listing is stored as a structured JSON object. Below is a real record from a live run:

```json
{
  "listingId": "1342d3b6-7a7e-476e-bba9-f12564e5dc18",
  "title": "BMW X1 sDrive20i xLine /Navigation/Autom./Klima/LED Park-Assist./Sitzhzg.",
  "make": "BMW",
  "model": "X1",
  "modelGroup": "X1",
  "variant": "sDrive20i xLine /Navigation/Autom./Klima/LED Park-Assist.",
  "price": 19990,
  "priceText": "€ 19.990",
  "priceEvaluation": 1,
  "condition": "Used",
  "firstRegistration": "11/2017",
  "year": "2017",
  "mileage": 47454,
  "powerKw": 141,
  "powerPs": 192,
  "fuel": "Petrol",
  "transmission": "Automatic",
  "engineCc": 1998,
  "fuelConsumption": "5,70 l/100 km (komb.)",
  "co2Emissions": "130 g/km (komb.)",
  "damaged": false,
  "country": "DE",
  "city": "Ravensburg",
  "zip": "88213",
  "street": "Zuppingerstr. 9",
  "sellerType": "Dealer",
  "sellerName": "Autohaus Dreher, Wildmoser GmbH & Co. KG",
  "sellerContact": "Verkaufsteam Autohaus Dreher",
  "phone": "+4975118526049",
  "dealerUrl": "https://www.autoscout24.de/haendler/autohaus-dreher-wildmoser-gmbh-und-co-kg-ravensburg?atype=C",
  "imageUrl": "https://prod.pictures.autoscout24.net/listing-images/1342d3b6-..._fd4e2dfc-....jpg/250x188.webp",
  "imageCount": 28,
  "images": [
    "https://prod.pictures.autoscout24.net/listing-images/1342d3b6-..._fd4e2dfc-....jpg/250x188.webp"
  ],
  "url": "https://www.autoscout24.de/angebote/bmw-x1-sdrive20i-xline-...-1342d3b6-7a7e-476e-bba9-f12564e5dc18",
  "description": null,
  "bodyColor": null,
  "warranty": null,
  "searchTerm": "bmw",
  "scrapedAt": "2026-11-01T23:47:10.191Z"
}
```

#### 🚘 Vehicle identity & pricing fields

| Field | Type | Coverage | Description |
| --- | --- | --- | --- |
| `listingId` | `string` | 🟢 High (100%) | Unique AutoScout24 listing UUID. Used as the global de-duplication key. |
| `title` | `string` | 🟢 High (100%) | Full vehicle headline (`make` + `model` + `variant`). |
| `make` | `string` | 🟢 High (100%) | Vehicle manufacturer / brand name (e.g. `BMW`, `Volkswagen`, `Audi`). |
| `model` | `string` | 🟢 High (100%) | Vehicle model name (e.g. `X1`, `Golf`, `A4`). |
| `modelGroup` | `string` | 🟢 High (~98%) | Model series / family group. |
| `variant` | `string` | 🟢 High (~95%) | Trim line, engine badge, and headline equipment summary. |
| `price` | `integer` | 🟢 High (100%) | Numeric asking price in euros (`€`). |
| `priceText` | `string` | 🟢 High (100%) | Formatted display price (e.g. `€ 19.990`). |
| `priceEvaluation` | `integer` | 🟢 High (~96%) | AutoScout24 deal score (`1` = Top price, `2` = Good price, `3` = Fair price, etc.). |
| `condition` | `string` | 🟢 High (100%) | Normalized condition (`Used`, `New`, `Demonstration`, `Annual car`, `Employee car`, `Classic`). |
| `url` | `string` | 🟢 High (100%) | Direct link to the vehicle listing page on AutoScout24. |

#### ⚙️ Technical specification fields

| Field | Type | Coverage | Description |
| --- | --- | --- | --- |
| `firstRegistration` | `string` | 🟢 High (~96%) | First registration month and year (`MM/YYYY`, or `null` for brand-new unregistered cars). |
| `year` | `string` | 🟢 High (~96%) | 4-digit registration year extracted from `firstRegistration`. |
| `mileage` | `integer` | 🟢 High (100%) | Odometer reading in kilometers (`km`, integer). |
| `powerKw` | `integer` | 🟢 High (~99%) | Engine power in kilowatts (`kW`). |
| `powerPs` | `integer` | 🟢 High (~99%) | Engine power in metric horsepower (`PS` / `hp`). |
| `fuel` | `string` | 🟢 High (100%) | Normalized English fuel type (`Petrol`, `Diesel`, `Electric`, `Hybrid (Petrol)`, `Hybrid (Diesel)`, `LPG`, `CNG`, `Hydrogen`). |
| `transmission` | `string` | 🟢 High (~99%) | Normalized English gearbox (`Automatic`, `Manual`, `Semi-automatic`). |
| `engineCc` | `integer` | 🟡 Conditional (~90%) | Engine displacement in `cm³` (present on combustion/hybrid vehicles; `null` on pure EVs). |
| `fuelConsumption` | `string` | 🟢 High (~95%) | Combined fuel or energy consumption string. |
| `co2Emissions` | `string` | 🟢 High (~95%) | Combined CO₂ emissions string (`g/km`). |
| `damaged` | `boolean` | 🟢 High (100%) | Whether the vehicle is flagged as currently damaged. |

#### 📍 Location, dealer lead & media fields

| Field | Type | Coverage | Description |
| --- | --- | --- | --- |
| `country` | `string` | 🟢 High (100%) | ISO 2-letter country code (`DE`, `AT`, `BE`, `ES`, `FR`, `IT`, `LU`, `NL`). |
| `city` | `string` | 🟢 High (100%) | City or municipality where the vehicle is located. |
| `zip` | `string` | 🟢 High (100%) | Postal / ZIP code of the vehicle location. |
| `street` | `string` | 🟡 Conditional (~65%) | Street address (populated on commercial dealership listings; hidden by private sellers). |
| `sellerType` | `string` | 🟢 High (100%) | Seller classification: `Dealer` or `PrivateSeller`. |
| `sellerName` | `string` | 🟡 Conditional (~75%) | Dealership / company name (present on all `Dealer` listings). |
| `sellerContact` | `string` | 🟡 Conditional (~70%) | Named sales contact or team at the dealership. |
| `phone` | `string` | 🟡 Conditional (~75%) | Direct seller phone number (present on ~88–91% of commercial dealer ads). |
| `dealerUrl` | `string` | 🟡 Conditional (~75%) | Link to the dealership's AutoScout24 showroom page. |
| `imageUrl` | `string` | 🟢 High (~98%) | Primary vehicle photo URL. |
| `imageCount` | `integer` | 🟢 High (100%) | Total number of photos attached to the listing. |
| `images` | `array<string>` | 🟢 High (~98%) | Array of all gallery photo URLs. |

#### 🔎 Optional detail-mode & metadata fields

| Field | Type | Coverage | Description |
| --- | --- | --- | --- |
| `description` | `string` | 🟡 Conditional (`fetchDetails`) | Full plain-text vehicle description from the detail page (populated when `fetchDetails: true`). |
| `bodyColor` | `string` | 🟡 Conditional (`fetchDetails`) | Exterior paint color (populated when `fetchDetails: true`). |
| `warranty` | `string` | 🟡 Conditional (`fetchDetails`) | Warranty duration in months (populated when `fetchDetails: true`). |
| `searchTerm` | `string` | 🟢 High (100%) | Search label or URL that produced this record. |
| `scrapedAt` | `string` | 🟢 High (100%) | ISO-8601 UTC timestamp of extraction. |

***

### 🔁 Pagination & 1,000+ scale

AutoScout24 displays **20 vehicles per search page** and enforces a platform limit of **20 pages (400 listings) per single search query**.

To let you extract **1,000+ car listings** seamlessly in a single run without manual query splitting, this actor includes **automatic search partitioning**:

1. **Standard pagination (up to 400 items):** For runs with `maxItems <= 400`, the scraper walks `page=1, 2, …, 20` on your exact search criteria and finishes in seconds.
2. **Automatic multi-partition expansion (`maxItems > 400` or `0`):** Whenever your requested `maxItems` exceeds a single search window, the scraper automatically generates complementary partitions — slicing across **7 euro price bands** (`€0–8k`, `€8k–14k`, `€14k–20k`, `€20k–28k`, `€28k–40k`, `€40k–65k`, `€65k+`), **7 registration-year cohorts** (`2024+`, `2022–2023`, `2020–2021`, `2018–2019`, `2015–2017`, `2010–2014`, `≤2009`), **multiple sort directions** (`age`, `price`, `mileage`), and (when no specific brand is selected) **20 top automotive brands**.
3. **Global UUID deduplication:** Every vehicle across every page and partition is checked against an in-memory `Set` of `listingId` UUIDs, guaranteeing **0 duplicates** even when partitions overlap.

***

### ⚙️ How to use

1. **Open the actor in Apify Console:** Select a **Make** (or leave on *All makes*), optionally type a **Model**, choose your target **Countries**, and set any price, year, mileage, fuel, or gearbox filters.
2. **Set `maxItems`:** Keep `100` for a fast ~20-second sample, or set `1000`–`5000` (or `0` for unlimited) to trigger automatic multi-partition deep scraping.
3. **Click Start:** Listings stream into the Dataset tab in real time.
4. **Export or integrate:** Download as **JSON, CSV, Excel (XLSX), HTML, or XML**, or connect the dataset directly to Google Sheets, Airtable, Make, Zapier, n8n, or your database via the Apify API.

#### Run via API (cURL, Node.js & Python)

**cURL**

```bash
curl -X POST "https://api.apify.com/v2/acts/haketa~autoscout24-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "make": "bmw",
    "countries": ["D", "A", "NL"],
    "sortBy": "age",
    "maxItems": 1000
  }'
```

**JavaScript (Node.js)**

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/autoscout24-scraper').call({
    make: 'volkswagen',
    model: 'golf',
    countries: ['D'],
    yearFrom: 2019,
    maxItems: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} unique VW Golf listings`);
```

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/autoscout24-scraper").call(run_input={
    "make": "mercedes-benz",
    "countries": ["D", "B", "NL"],
    "maxItems": 1000,
})
for car in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(car["title"], car["price"], car["mileage"], car["phone"])
```

***

### 💡 Pro tips

- **Leave `fetchDetails: false` for 10× faster runs:** Search result pages already contain the price, deal evaluation, mileage, kW/PS, fuel, gearbox, CO₂, full dealer address, and **dealer phone number**. Only enable `fetchDetails: true` when you specifically need the free-text seller description, exterior paint color, or warranty months.
- **Filter for B2B dealer leads:** In your exported CSV/Excel or pipeline, filter on `sellerType = "Dealer"` and `phone != null` to get an immediate cold-calling or CRM outreach list of active European dealerships.
- **Spot instant arbitrage deals:** Filter on `priceEvaluation = 1` (Top Price) to isolate vehicles priced significantly below AutoScout24's market valuation model.
- **Get high-resolution photos:** Replace `/250x188.webp` at the end of any URL in `images` with `/1280x960.webp` to load full-resolution showroom images.

***

### ⚠️ Limitations & notes

- **Private seller privacy:** Private sellers (`sellerType: "PrivateSeller"`) rarely publish a street address or public phone number on search cards; `sellerName`, `street`, and `phone` are primarily populated on commercial `Dealer` listings.
- **EV engine displacement:** Pure electric vehicles (`fuel: "Electric"`) do not have a combustion engine displacement, so `engineCc` is legitimately `null` on EV records.

***

### ❓ FAQ

**Do I need an AutoScout24 account or API key?**
No. All data is extracted from publicly accessible AutoScout24 search listings with zero login required.

**How does the scraper collect more than 400 cars when AutoScout24 caps searches at 20 pages?**
When you set `maxItems > 400` (or `0` for unlimited), the actor automatically partitions your search across price brackets, registration-year ranges, sort directions, and brands, deduplicating every listing by `listingId` so you can collect **1,000+ unique cars** in a single run.

**How fast is the scraper?**
In listing mode (`fetchDetails: false`), 100 cars take **~15–25 seconds**, 500 cars take **~45–60 seconds**, and 1,000 cars take **~90–120 seconds**.

**Do I need residential proxies?**
No manual proxy setup is needed. The actor uses low-cost Apify datacenter proxies by default and automatically falls back to German residential proxies only if a request is rate-limited.

**Which European countries are supported?**
Germany (`D`), Austria (`A`), Belgium (`B`), Spain (`E`), France (`F`), Italy (`I`), Luxembourg (`L`), and the Netherlands (`NL`). You can select one, several, or all eight in `countries`.

**Are fuel and transmission values translated to English?**
Yes. Localized values (such as `Benzin`, `Elektro`, `Schaltgetriebe`, `Automatik`) are normalized into clean English (`Petrol`, `Electric`, `Manual`, `Automatic`) so your dataset is uniform.

***

### 🔗 Related scrapers

Building a multi-country automotive pricing or dealership lead database? Pair **AutoScout24 Scraper** with:

- [AutoTrader UK Scraper — Cars, Prices, Specs & Dealer Contacts](https://apify.com/haketa/autotrader-scraper) — UK's largest automotive marketplace.
- [CarGurus Scraper — Car Listings, Prices, IMV & Dealer Leads](https://apify.com/haketa/cargurus-scraper) — US car listings with Instant Market Value ratings.
- [Otomoto.pl Scraper — Poland Used Cars](https://apify.com/haketa/otomoto-scraper) — Poland's leading automotive portal.
- [YallaMotor Scraper — GCC New & Used Cars](https://apify.com/haketa/yallamotor-scraper) — Automotive listings across the UAE and Gulf markets.
- [KAYAK Car Rental Scraper — Prices, Agencies & Deals](https://apify.com/haketa/kayak-car-rental-scraper) — Daily car-rental rates and fleet availability.

***

### 📋 Changelog

#### v1.2 (2026-11)

- **Unlocked 1,000+ deep pagination:** Added automatic multi-partition expansion across price bands, registration-year cohorts, sort directions, and popular brands whenever `maxItems > 350`, seamlessly bypassing AutoScout24's 20-page (400-listing) single-query limit.
- **Start URL partitioning:** Direct `startUrls` now also auto-partition across price bands and sort orders when `maxItems > 350`.
- **Enhanced documentation:** Added `⚡ At a glance` summary table, emoji-grouped field tables with coverage indicators, and multi-language API examples.

#### v1.1 (2026-10)

- **Normalized condition & fuel mappings:** Added complete mapping for all AutoScout24 `offerType` codes and hybrid fuel labels.
- **Smart proxy escalation:** Added automatic fallback from datacenter to DE residential proxy on HTTP 403/429.

#### v1.0 (2026-07)

- Initial release covering 8 European markets, full technical specs, dealer contact extraction, and optional detail-page enrichment.

***

⭐ **Ready to build your European automotive dataset?** Click **Start** to extract clean AutoScout24 car listings to JSON, CSV, or Excel in seconds!

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/autoscout24-scraper/changelog.md

# Actor input Schema

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

Pick a car brand to search. Leave on "All makes" to get a mixed sample of the newest listings across every brand.

## `makeOther` (type: `string`):

Only if your brand is not in the list above. Type the brand exactly as it appears in an AutoScout24 URL, e.g. 'aston-martin' or 'ds-automobiles'. This overrides the dropdown.

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

Narrow to one model, e.g. '3er', 'a4', 'golf', 'corsa'. Works best together with a make. Leave empty for all models.

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

Which country markets to include. AutoScout24 covers most of Europe. Leave empty for all covered countries.

## `adType` (type: `string`):

Show new cars, used cars, or both.

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

Only show cars with this fuel type. Leave on "Any" for all.

## `transmission` (type: `string`):

Only show cars with this gearbox. Leave on "Any" for all.

## `priceFrom` (type: `integer`):

Minimum price in euros. Leave empty for no minimum.

## `priceTo` (type: `integer`):

Maximum price in euros. Leave empty for no maximum.

## `yearFrom` (type: `integer`):

Earliest first-registration year, e.g. 2015. Leave empty for any.

## `yearTo` (type: `integer`):

Latest first-registration year. Leave empty for any.

## `mileageFrom` (type: `integer`):

Minimum mileage in km. Leave empty for any.

## `mileageTo` (type: `integer`):

Maximum mileage in km. Leave empty for any.

## `excludeDamaged` (type: `boolean`):

Hide accident and damaged listings.

## `sortBy` (type: `string`):

How results are ordered. "Newest first" gives the freshest, most diverse mix.

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

Open each listing for extra data: full description, exterior colour and warranty. Slower and uses more traffic — leave off for fast collection (the list already includes price, specs, location and dealer phone).

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

Maximum number of unique listings to collect. Set 0 for unlimited. When maxItems exceeds a single search's 20-page (400-listing) window, the scraper automatically partitions across price bands, years, and brands to collect 1,000+ listings. Default 100.

## `startUrls` (type: `array`):

Power-user option: paste full AutoScout24 search URLs to scrape directly. Build the search you want on autoscout24.com, then copy the address here. When set, this overrides the brand and filters above.

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

Datacenter by default (low-cost); auto-escalates to DE residential if blocked.

## Actor input object example

```json
{
  "make": "",
  "countries": [
    "D"
  ],
  "adType": "both",
  "fuelType": "",
  "transmission": "",
  "excludeDamaged": false,
  "sortBy": "age",
  "fetchDetails": false,
  "maxItems": 100,
  "startUrls": [
    "https://www.autoscout24.com/lst/audi/a5?atype=C&cy=D&fregfrom=2018"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listingId` (type: `string`):

AutoScout24 listing ID

## `title` (type: `string`):

Full vehicle title

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

Brand

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

Model

## `modelGroup` (type: `string`):

Model group/series

## `variant` (type: `string`):

Version/variant

## `price` (type: `string`):

Numeric price in euros

## `priceText` (type: `string`):

Formatted price

## `priceEvaluation` (type: `string`):

AutoScout24 price evaluation

## `condition` (type: `string`):

New / Used / Demo etc.

## `firstRegistration` (type: `string`):

First registration (MM/YYYY)

## `year` (type: `string`):

First registration year

## `mileage` (type: `string`):

Odometer in km

## `powerKw` (type: `string`):

Power in kW

## `powerPs` (type: `string`):

Power in PS/HP

## `fuel` (type: `string`):

Fuel type

## `transmission` (type: `string`):

Gearbox

## `engineCc` (type: `string`):

Engine displacement in cm³

## `fuelConsumption` (type: `string`):

Combined consumption

## `co2Emissions` (type: `string`):

Combined CO₂ emissions

## `damaged` (type: `string`):

Whether the vehicle is currently damaged

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

Country code

## `city` (type: `string`):

City

## `zip` (type: `string`):

Postal code

## `street` (type: `string`):

Street address

## `sellerType` (type: `string`):

Dealer or Private

## `sellerName` (type: `string`):

Dealer/company name

## `sellerContact` (type: `string`):

Contact person

## `phone` (type: `string`):

Seller phone number

## `dealerUrl` (type: `string`):

Dealer profile URL

## `imageUrl` (type: `string`):

First image URL

## `imageCount` (type: `string`):

Number of photos

## `images` (type: `string`):

All image URLs

## `url` (type: `string`):

Listing detail page URL

## `description` (type: `string`):

Full description (with Fetch details)

## `bodyColor` (type: `string`):

Exterior colour (with Fetch details)

## `warranty` (type: `string`):

Warranty in months (with Fetch details)

## `searchTerm` (type: `string`):

Search used

## `scrapedAt` (type: `string`):

Extraction timestamp

# 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": [
        "D"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/autoscout24-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": ["D"],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/autoscout24-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": [
    "D"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/autoscout24-scraper --silent --output-dataset

```

## MCP server setup

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