# AutoScout24 Scraper (`cocoa_kit/autoscout24-scraper`) Actor

Scrape AutoScout24 car listings across Europe: prices, specs, price ratings, dealer contacts and GPS. Fast HTTP-only scraping, no 4,000-result limit, incremental mode for cheap monitoring.

- **URL**: https://apify.com/cocoa_kit/autoscout24-scraper.md
- **Developed by:** [Cocoa Kit](https://apify.com/cocoa_kit) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 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

Extract car listings from [AutoScout24](https://www.autoscout24.com), Europe's largest online car market, as clean structured data: prices, AutoScout24's own price ratings, mileage, specs, photos, dealer details and GPS coordinates. Search by make, model and country, or paste any AutoScout24 search URL.

Built to be **fast and cheap**: it reads AutoScout24's own data feed over plain HTTP. No browser, no proxy needed, and up to 400 listings per request.

### Why this scraper

- **Fast.** 100 listings in about 4 seconds. 30,000 listings in about 80 seconds.
- **No 4,000-result ceiling.** AutoScout24 never shows more than 4,000 results for one search. This Actor splits large searches automatically and returns every listing, so you can pull a whole country or a whole make.
- **Pay only for what changed.** Incremental mode remembers earlier runs and returns only new listings and price or mileage changes. A daily monitoring run usually costs a small fraction of a full scrape.
- **Price ratings included.** Every listing carries AutoScout24's deal classification (`top-price`, `good-price`, `fair-price`, ...), so you can rank deals without building your own valuation model.
- **Full-size photos.** Image URLs are returned at 1280x960, not as thumbnails.
- **Two depths, your choice.** Search-result data is rich enough for pricing and market analysis. Turn on full details when you need the description, equipment list, colours, emissions, owner history and coordinates.
- **Any search works.** Every filter on the website is supported: configure the search in your browser and paste the URL.
- **Eight markets.** Germany, Austria, Belgium, Spain, France, Italy, Luxembourg and the Netherlands, separately or combined: more than 2 million listings.

### What data do you get?

**Always (search-result data):**

| Group    | Fields                                                                                                                                     |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Vehicle  | make, model, model line, variant, version text, condition, first registration, mileage, fuel, transmission, power (kW and hp), engine size |
| Price    | price in EUR, formatted price, AutoScout24 price rating, previous price on price drops                                                     |
| Seller   | dealer or private, dealer name, contact person, phone numbers, dealer page, dealer rating and number of ratings                            |
| Location | country, city, postal code, street                                                                                                         |
| Media    | all photo URLs in full size, photo count                                                                                                   |

**With "Include full details":**

| Group       | Fields                                                                                                      |
| ----------- | ----------------------------------------------------------------------------------------------------------- |
| Description | seller's description as clean text, full equipment list                                                     |
| Body        | body type, colour, manufacturer colour name, paint type, upholstery, seats, doors                           |
| Drivetrain  | gears, cylinders, drive train, weight                                                                       |
| Environment | emission class, emission sticker, CO2 (g/km), combined consumption, electric range                          |
| History     | previous owners, full service history, non-smoker, accident history, next inspection, warranty              |
| Price       | net price, VAT rate, VAT deductible, negotiable                                                             |
| Extras      | GPS latitude and longitude, listing creation date, German HSN/TSN key, dealer stock number, country version |

### How to use it

1. Enter a **make** (for example `bmw`) and pick one or more **countries**, or paste an AutoScout24 URL.
2. Set **Max results**. Use `0` for everything.
3. Click **Start**, then download the results as JSON, CSV or Excel, or read them through the API.

That is all. Every other setting is optional.

### Input examples

**All BMW 3 Series in Germany and Austria, cheapest first**

```json
{
    "make": "bmw",
    "model": "3-series-all",
    "countries": ["DE", "AT"],
    "sort": "price-asc",
    "maxResults": 500
}
```

**Recent low-mileage diesel estates under EUR 25,000, with full details**

```json
{
    "make": "audi",
    "model": "a4",
    "countries": ["DE"],
    "priceTo": 25000,
    "yearFrom": 2020,
    "mileageTo": 60000,
    "fuelTypes": ["diesel"],
    "bodyTypes": ["station-wagon"],
    "includeDetails": true,
    "maxResults": 200
}
```

**Every electric car listed in the Netherlands**

```json
{
    "countries": ["NL"],
    "fuelTypes": ["electric"],
    "maxResults": 0
}
```

**Paste a search or listing URL from the website**

```json
{
    "startUrls": [
        { "url": "https://www.autoscout24.com/lst/tesla/model-3?cy=D&fregfrom=2021&kmto=80000" },
        { "url": "https://www.autoscout24.de/lst/porsche/911?cy=D&sort=price" }
    ],
    "maxResults": 1000
}
```

**Daily monitoring: only new listings and price changes**

```json
{
    "make": "volkswagen",
    "model": "golf",
    "countries": ["DE"],
    "maxResults": 0,
    "incrementalMode": true,
    "emitExpired": true
}
```

### Output example

One record per listing. This one was scraped with full details (photo and equipment lists shortened here):

```json
{
    "listingId": "74bf7a1a-65ac-4841-a8c0-9456f0b93109",
    "url": "https://www.autoscout24.com/offers/volkswagen-golf-vii-lim-comfortline-bmt-ahk-el-auskl-gasoline-silver-cat_ma74mo2084-74bf7a1a-65ac-4841-a8c0-9456f0b93109",
    "title": "Volkswagen Golf VII Lim. Comfortline BMT, AHK el.auskl.",
    "make": "Volkswagen",
    "model": "Golf",
    "modelGroup": "Golf",
    "variant": "Standard Model",
    "modelVersion": "VII Lim. Comfortline BMT, AHK el.auskl.",
    "vehicleType": "Car",
    "condition": "Used",
    "price": 9900,
    "priceFormatted": "€ 9,900",
    "currency": "EUR",
    "priceEvaluation": "top-price",
    "previousPriceFormatted": null,
    "mileageKm": 72200,
    "firstRegistration": "2013-01",
    "fuelType": "Gasoline",
    "transmission": "Manual",
    "powerKw": 103,
    "powerHp": 140,
    "engineDisplacementCcm": 1395,
    "sellerType": "Dealer",
    "sellerId": "64123646",
    "sellerName": "Example Automobile GmbH",
    "sellerContact": "Sales team",
    "sellerPhone": "+49231000000",
    "sellerPhones": ["+49231000000"],
    "dealerUrl": "https://www.autoscout24.com/dealerinfo/example-automobile-dortmund?atype=C",
    "sellerRatingStars": 4.5,
    "sellerRatingCount": 81,
    "country": "DE",
    "city": "Dortmund",
    "zip": "44225",
    "street": "Musterstraße 3",
    "imageCount": 16,
    "images": [
        "https://prod.pictures.autoscout24.net/listing-images/74bf7a1a-..._ea0df614-....jpg/1280x960.webp",
        "https://prod.pictures.autoscout24.net/listing-images/74bf7a1a-..._f593a5f1-....jpg/1280x960.webp"
    ],
    "scrapedAt": "2026-10-03T18:30:14.813Z",
    "netPrice": null,
    "vatRate": null,
    "vatDeductible": false,
    "priceNegotiable": false,
    "gears": null,
    "cylinders": 4,
    "driveTrain": "Front Wheel Drive",
    "weightKg": 1268,
    "bodyType": "Sedan",
    "bodyColor": "Silver",
    "bodyColorOriginal": "TUNGSTEN SILVER",
    "paintType": "Metallic",
    "upholstery": "Cloth",
    "upholsteryColor": "Grey",
    "numberOfSeats": 5,
    "numberOfDoors": 4,
    "emissionClass": "Euro 6",
    "emissionSticker": "4 (Green)",
    "co2EmissionsGKm": 119,
    "fuelConsumptionCombined": 5.2,
    "electricRangeKm": null,
    "previousOwners": 2,
    "hasFullServiceHistory": true,
    "nonSmoking": true,
    "hadAccident": false,
    "nextInspection": null,
    "warranty": null,
    "originalMarket": "Germany",
    "hsnTsn": "0603/BJG",
    "offerReference": null,
    "equipment": ["Air conditioning", "Armrest", "Automatic climate control", "Hill Holder", "Leather steering wheel"],
    "description": "Sonderausstattung:\nKlimaanlage Climatronic 2-Zonen, Metallic-Lackierung, Scheibenwaschdüsen heizbar, Sitzheizung vorn ...",
    "sellerRecommendPercentage": 92,
    "latitude": 51.47501,
    "longitude": 7.43732,
    "createdAt": "2026-09-30T11:10:15.715Z"
}
```

Without full details you get the fields down to `scrapedAt`. Values AutoScout24 does not publish for a listing are `null`.

The dataset has two ready-made views: **Overview** (the car) and **Sellers** (dealer and contact columns for lead lists).

### Monitoring with incremental mode

Turn on **Incremental mode** and schedule the Actor. Each run compares the search with what earlier runs delivered and saves only:

- `NEW`: listings that were not there before
- `UPDATED`: listings whose price or mileage changed, with `previousPrice`
- `EXPIRED` (optional): listings that disappeared, which usually means sold. Includes the last known price and `firstSeenAt`, so you can measure days on market
- `UNCHANGED` (optional): everything else

Unchanged listings are skipped before any detail page is opened, so they cost neither time nor money. The first run delivers the whole search and builds the baseline.

Memory is kept per search. Set a **State key** if you want to name it yourself, for example to share one baseline between several schedules.

`EXPIRED` records are only produced by runs that cover the whole search (Max results `0`, or higher than the number of matches), because a partial run cannot tell what is gone.

### Speed and limits

| Job                              | Typical time     |
| -------------------------------- | ---------------- |
| 100 listings                     | about 4 seconds  |
| 30,000 listings                  | about 80 seconds |
| 1,000 listings with full details | about 4 minutes  |
| 3,000 listings with full details | about 11 minutes |

Search-result data comes 400 listings at a time, so it is fast at any size. Full details need one request per listing, and AutoScout24 limits how many requests one address may send (roughly 300 per minute). The Actor paces itself just under that limit, which works out to about 16,000 detailed listings per hour. For large detail jobs, either use incremental mode so only new and changed listings are opened, or split the job into several runs.

### How much does it cost?

You pay per listing saved; see the **Pricing** tab for the current rate. There is nothing else to budget for: the Actor needs no proxy and no browser.

Tips to keep costs low:

- Leave **Include full details** off unless you need description, equipment or coordinates. Search-result data already covers price, mileage, power, fuel, seller and photos.
- Use **Incremental mode** for anything you run on a schedule.
- Set **Max results** to what you need.

### Use cases

- **Price and market analysis:** track asking prices, depreciation and supply by model, year and country.
- **Deal finding:** filter for `top-price` and `good-price` listings the moment they appear.
- **Dealer lead generation:** build dealer lists with address, phone, rating and stock.
- **Inventory monitoring:** watch a competitor's stock, see what sells and how fast.
- **Cross-border arbitrage:** compare the same model across eight countries.
- **Data for apps and AI:** feed valuation models, dashboards or agents with clean JSON.

### Integrations and API

Run the Actor from the Apify Console, on a schedule, or from code. Results are available as JSON, CSV, Excel, XML or RSS, and connect to Make, Zapier, n8n, Google Sheets, Slack and webhooks through Apify's integrations.

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("cocoa_kit/autoscout24-scraper").call(
    run_input={"make": "bmw", "countries": ["DE"], "maxResults": 200}
)
for car in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(car["title"], car["price"], car["priceEvaluation"])
```

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('cocoa_kit/autoscout24-scraper').call({
    make: 'bmw',
    countries: ['DE'],
    maxResults: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

AI agents can call the Actor through the [Apify MCP server](https://mcp.apify.com). Keep **Include full details** off and set **Max images per listing** to `0` or `1` for compact responses.

### FAQ

**Is there an official AutoScout24 API?**
Not for public listing data. This Actor is the practical alternative: the same data you see on the website, as structured records.

**How do I find the right make and model names?**
Use them as they appear in AutoScout24 URLs: `mercedes-benz`, `volkswagen`, `golf`, `a4`, `c-200`, `model-3`. Model lines work too, for example `3-series-all`. The easiest route is to run the search on the website and paste the URL. If a name is not recognised, the run stops with a clear message instead of scraping the wrong cars.

**Can I use filters that are not in the input form?**
Yes. Set them on autoscout24.com and paste the resulting URL into **AutoScout24 URLs**. Equipment, colour, seats, emission class and every other filter work this way.

**Can I scrape single listings?**
Yes. Paste listing URLs into **AutoScout24 URLs**. They are always returned with full details.

**Do national sites work?**
Yes. URLs from autoscout24.de, .at, .it, .fr, .es, .be, .nl and .lu are accepted, and text values come back in that site's language. Searches built from the filter fields use autoscout24.com and return English values.

**Is Switzerland covered?**
No. autoscout24.ch is a separate marketplace with different technology.

**Why do I get slightly fewer results than the website's count?**
The website's count is live and changes while a run is in progress, and promoted duplicates are removed. Every result is unique by `listingId`.

**Do I need a proxy?**
No. The Actor works without one, and in our tests a direct connection was faster than datacenter proxies. The proxy option exists for the rare case that requests start failing.

**Does the output contain personal data?**
Listings show the seller's business contact, and private sellers may show a name and phone number. Turn off **Include seller contact** if you do not need them. If you do use them, you are responsible for complying with GDPR and local marketing rules.

**Is scraping AutoScout24 legal?**
The Actor reads only publicly visible listing data. Scraping public data is generally lawful, but how you use it matters: review AutoScout24's terms and the laws that apply to you, especially for personal data.

### Support

Found a bug or missing a field? Open an issue on the **Issues** tab.

This Actor is not affiliated with or endorsed by AutoScout24. All trademarks belong to their owners.

# Actor input Schema

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

Car manufacturer as it appears in AutoScout24 URLs, for example bmw, mercedes-benz, volkswagen. Leave empty for all makes.

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

Model as it appears in AutoScout24 URLs, for example 320, golf, a4, model-3. Model lines also work: '3-series-all'. Needs a make.

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

Markets to search. Leave empty for all of Europe.

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

Maximum number of listings to save. 0 means no limit: the whole search, even when it has more than the 4,000 results AutoScout24 shows.

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

Open every listing for the full spec sheet: description, equipment list, colours, emissions, owners, service history, GPS coordinates and more. One extra request per listing, so runs take longer. Off = search-result data only (price, mileage, power, fuel, seller, location, photos), which is the fastest and cheapest mode.

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

Paste search-result URLs or single listing URLs from autoscout24.com or a national site (.de, .it, .fr, ...). When set, the filters below are ignored. Tip: configure any search on the website and paste the URL here.

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

Minimum price.

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

Maximum price.

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

Earliest first-registration year, for example 2018.

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

Latest first-registration year, for example 2024.

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

Minimum mileage in kilometres.

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

Maximum mileage in kilometres.

## `powerFrom` (type: `integer`):

Minimum engine power in kW.

## `powerTo` (type: `integer`):

Maximum engine power in kW.

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

Leave empty for any fuel.

## `transmissions` (type: `array`):

Leave empty for any transmission.

## `bodyTypes` (type: `array`):

Leave empty for any body type.

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

Vehicle condition.

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

Dealers, private sellers, or both.

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

Search around this postal code. Use together with exactly one country.

## `radiusKm` (type: `integer`):

Distance around the postal code.

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

Order of results. Matters when Max results is smaller than the number of matches.

## `incrementalMode` (type: `boolean`):

Remember what earlier runs delivered and save only listings that are new or whose price or mileage changed. Ideal for scheduled monitoring: you only pay for what changed.

## `stateKey` (type: `string`):

Name of the tracked search. Leave empty to derive it from the search itself; set it when you want several schedules to share or separate their memory.

## `emitUnchanged` (type: `boolean`):

Incremental mode: also save listings that did not change, marked UNCHANGED.

## `emitExpired` (type: `boolean`):

Incremental mode: also save a short record, marked EXPIRED, for each listing that disappeared (sold or withdrawn). Only on runs that cover the whole search (Max results = 0 or larger than the search).

## `includeSellerContact` (type: `boolean`):

Save the seller's contact person and phone numbers as published on the listing. Turn off if you do not need personal data.

## `maxImages` (type: `integer`):

Number of photo URLs to keep per listing. -1 keeps all, 0 keeps none.

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

Parallel requests. Lower it if you see failed requests.

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

Not needed in most cases: the Actor works without a proxy, which keeps runs cheap. Enable one only if requests start failing.

## Actor input object example

```json
{
  "make": "bmw",
  "countries": [
    "DE"
  ],
  "maxResults": 100,
  "includeDetails": false,
  "condition": "all",
  "sellerType": "all",
  "radiusKm": 50,
  "sort": "relevance",
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "includeSellerContact": true,
  "maxImages": -1,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

All scraped listings.

## `sellers` (type: `string`):

Seller and contact view of the same listings.

# 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 = {
    "make": "bmw",
    "countries": [
        "DE"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

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

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

```

## MCP server setup

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