# AutoScout24 Scraper: Used Cars in 8 Countries, Deals & Alerts (`euroscrape/autoscout24-scraper`) Actor

AutoScout24 scraper & used car API: car listings from AutoScout24 in Germany, France, Italy, Spain, Netherlands, Belgium, Austria, Luxembourg in one run. Price, mileage, year, fuel, dealer or private, market price of similar cars, deal score, cheapest country, new-listing and price-drop alerts.

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

## Pricing

from $0.56 / 1,000 car listing delivereds

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: Used Cars in 8 Countries, Deals & Alerts

**Search AutoScout24 in Germany, France, Italy, Spain, the Netherlands, Belgium, Austria and Luxembourg in one run, and know which cars are priced under the market.** Give it a make and model, get every listing as a clean row: price in euros, mileage, first registration, fuel, gearbox, power, location, dealer or private seller, photos, and for each car the **price of the most similar cars across all countries** with a deal score.

![Used cars across countries, each listing priced against its market](https://api.apify.com/v2/key-value-stores/whPh2zNCcrRkrWi0g/records/demo-autoscout24-scraper.png?signature=KNcCKYQxYgFgVa08emOS)

- 🚗 **One search, eight countries**: the same car on autoscout24.de, .fr, .it, .es, .nl, .be, .at and .lu, with the same fields and prices in euros.
- 📊 **Market price per car**: the median of the most similar listings (same model, year, fuel, gearbox, power and mileage bands), a deal score from 0 to 100, and AutoScout24's own price rating when it shows one.
- 🌍 **Cheapest country**: median price, mileage and year per country, dealers vs private sellers, by fuel and by year, top deals of the search.
- 🔔 **Alerts**: name a monitor and schedule the Actor; each run returns only new listings and price drops, sent to Telegram, Discord, Slack or a webhook.
- 🔒 **No personal data**: private sellers stay anonymous; for dealers you get the company name, its AutoScout24 page and its business phone.

### ✨ Why this Actor

| | |
|---|---|
| 🧭 **Compare across borders** | A used car is often 10 to 25% cheaper two countries away. The summary says where, with medians per country computed on the cars you asked for. |
| 🎯 **Like with like** | A 2016 diesel automatic with 150,000 km is not compared with a 2022 petrol manual with 20,000 km. The market price of each car comes from its real comparables, and the Actor says how many it used and how confident it is. |
| 🧹 **Clean rows** | Price, mileage, year, power in kW and hp, engine size, consumption and CO₂ as numbers, not as strings to parse. |
| 🔁 **Monitor mode** | Daily runs with a monitor name return only what changed: new cars and price drops, with the previous price. |
| 💸 **Pay per car** | $0.0008 per listing delivered ($0.80 per 1,000 cars). The market summary and the first baseline of a monitor are free. |

### 🎯 Use cases

- **Buyers**: the cheapest BMW 320d Touring under 100,000 km in Germany, France and Italy, ranked by deal score, with an alert when a new one appears under your price.
- **Dealers and traders**: where a model is cheapest to source and where it sells highest; price drops on competitors' stock.
- **Export and import**: the price gap between countries for a given model and year, updated every day.
- **Market research and media**: median prices and mileage per country, by fuel and by year, for any model.

### 🚀 Examples

**BMW 320, three countries, registered from 2018, best deals first:**

```json
{
  "searches": ["BMW 320"],
  "countries": ["DE", "FR", "IT"],
  "yearFrom": 2018,
  "maxListingsPerSearchAndCountry": 100
}
```

**Tesla Model 3 under 30,000 € anywhere, dealers only, newest listings first, with a daily Telegram alert:**

```json
{
  "searches": ["Tesla Model 3"],
  "countries": ["DE", "AT", "BE", "ES", "FR", "IT", "LU", "NL"],
  "priceTo": 30000,
  "sellerType": "dealer",
  "sortBy": "newest",
  "monitorName": "model3-under-30k",
  "telegramBotToken": "123456:ABC…",
  "telegramChatId": "987654321"
}
```

**Your own AutoScout24 search URL, with its filters, in two countries:**

```json
{
  "searches": ["https://www.autoscout24.de/lst/volkswagen/golf?atype=C&fregfrom=2019&kmto=60000&gear=M"],
  "countries": ["DE", "NL"]
}
```

### 📦 Output

One row per car (`type: "listing"`), best deals first, and one free `marketSummary` row per search. The dataset has two ready-made views, **Listings** and **Market summary**, and exports to JSON, CSV or Excel.

A listing (real data; the dealer is a company):

```json
{
  "type": "listing",
  "title": "BMW 320 d Touring xDrive Aut. Advantage",
  "make": "BMW", "model": "320", "modelGroup": "3 Series", "variant": "Touring", "motorType": "320d",
  "condition": "used", "firstRegistration": "2020-01", "year": 2020, "mileageKm": 250000,
  "fuel": "Diesel", "transmission": "Automatic", "powerKw": 140, "powerHp": 190, "engineCcm": 1995,
  "price": 12990, "currency": "EUR", "priceLabel": "good_price",
  "country": "DE", "countryName": "Germany", "zip": "68519", "city": "Viernheim",
  "sellerType": "dealer", "dealerName": "…", "dealerUrl": "https://www.autoscout24.de/haendler/…", "dealerPhone": "+49 …",
  "imageUrl": "https://prod.pictures.autoscout24.net/listing-images/…/720x540.webp",
  "marketPriceEur": 19450, "marketConfidence": "high", "comparablesCount": 8,
  "priceVsMarketPct": -33, "dealScore": 83, "marketMismatch": false,
  "searchQuery": "BMW 320", "changeType": null,
  "url": "https://www.autoscout24.com/offers/…"
}
```

The market summary of a search (real data, three countries, 120 cars):

```json
{
  "type": "marketSummary",
  "searchQuery": "Tesla Model 3",
  "listingsFound": 120,
  "medianPriceEur": 26970,
  "medianMileageKm": 87550,
  "cheapestCountry": "FR",
  "priciestCountry": "DE",
  "countrySpreadPct": 18,
  "countries": [
    { "country": "FR", "countryName": "France", "listings": 40, "medianPriceEur": 24595, "medianMileageKm": 104486.5, "medianYear": 2020.5, "dealerShare": 85, "cheapestPriceEur": 17900 },
    { "country": "IT", "countryName": "Italy", "listings": 40, "medianPriceEur": 27050, "medianMileageKm": 87550, "medianYear": 2022, "dealerShare": 90, "cheapestPriceEur": 19900 },
    { "country": "DE", "countryName": "Germany", "listings": 40, "medianPriceEur": 28925, "medianMileageKm": 70557.5, "medianYear": 2022, "dealerShare": 95, "cheapestPriceEur": 19999 }
  ],
  "bySellerType": [ { "sellerType": "dealer", "listings": 108, "medianPriceEur": 27400 }, { "sellerType": "private", "listings": 12, "medianPriceEur": 24950 } ],
  "byFuel": [ { "fuel": "Electric", "listings": 120, "medianPriceEur": 26970 } ],
  "byYear": [ { "year": 2019, "listings": 14, "medianPriceEur": 21950, "medianMileageKm": 118000 }, { "year": 2022, "listings": 31, "medianPriceEur": 28900, "medianMileageKm": 62000 } ],
  "topDeals": [ { "title": "Tesla Model 3 Long Range", "year": 2021, "mileageKm": 98000, "country": "DE", "priceEur": 19999, "marketPriceEur": 27499, "dealScore": 77, "url": "…" } ],
  "sources": [ { "country": "DE", "status": "ok", "totalOnSite": 245, "collected": 40 } ]
}
```

### 🧮 How the numbers are computed

- **Market price of a car**: the listings of the same search are compared on what makes the price of a used car (make, model family, model, engine, year, fuel, gearbox, power band, mileage band, condition); the median price of the closest ones, weighted by similarity, is the market price. `marketConfidence` is `high` with 4 or more close comparables, `medium` with 5 or more looser ones; below that, no market price. When the comparables look like another car (price more than 4× or less than ¼ of theirs), `marketMismatch` is true and no score is given rather than a wrong one.
- **Deal score**: 50 means at the market price, 60 means 10% under, 100 far under, 0 far above. Damaged cars are kept out of the comparables.
- **Per country**: medians are computed on the cars collected for that country, so set `maxListingsPerSearchAndCountry` high enough (100 to 400) for a market study, and use the site's `relevance` or `newest` order rather than `price_asc`, which would bias the medians.

### 💰 Pricing

| Event | Price |
|---|---|
| Car listing delivered | **$0.80 / 1,000 listings** |
| Run start | $0.003 |
| Market summary, monitor baseline | free |

A 3-country search with 100 cars per country costs about $0.24. Apify subscribers pay less: −10% (Starter), −20% (Scale), −30% (Business). Set a **maximum cost per run** in the run options and the Actor stops cleanly when it is reached; everything already delivered stays in the dataset.

### ❓ FAQ

**Which countries?** The eight AutoScout24 country sites: Germany, Austria, Belgium, Spain, France, Italy, Luxembourg, Netherlands. Prices are in euros on all of them.

**How do I write a search?** Make and model as they appear on AutoScout24 (`BMW 320`, `Volkswagen Golf`, `Mercedes-Benz C 220`, `Peugeot 208`), a make alone (`Dacia`), or an AutoScout24 results URL copied from your browser: its filters are kept and the Actor only changes the country and the page. If a make is not recognised, the run says so in the summary instead of returning random cars.

**How many listings can I get?** AutoScout24 shows at most 20 pages of 20 per search and country, so 400. Narrow with price, year or mileage, or split into several searches.

**Why does a car have no market price?** Fewer than four comparable cars in the collected set, or its price is far from its comparables (`marketMismatch`). Collect more cars, or widen the countries.

**Is this personal data?** Private sellers are returned without name or phone. Dealers are companies: name, AutoScout24 page and business phone. Listing photos belong to their sellers and to AutoScout24.

**Does it use a proxy?** Apify Proxy datacenter IPs by default; the Actor only switches to residential IPs for a request that AutoScout24 refuses, so most runs cost nothing beyond the listings.

### 🔌 API, AI agents and integrations

- **API**: one call runs the Actor and returns the results, `POST https://api.apify.com/v2/acts/euroscrape~autoscout24-scraper/run-sync-get-dataset-items` (see the API tab for Python, JavaScript and cURL).
- **AI agents (MCP)**: add `https://mcp.apify.com?tools=euroscrape/autoscout24-scraper` to Claude, Cursor, VS Code or any MCP client, and the Actor becomes a tool your agent can call.
- **No-code automation**: start runs and pass the results on with Apify's integrations for n8n, Make and Zapier, or with a webhook when a run ends.
- **Exports**: every result set downloads as JSON, CSV, Excel or XML, and can be sent to Google Sheets.

### ⭐ Your feedback

Found a bug or missing a field? Open an issue on the Actor's Issues tab. A short review on the Apify Store helps other users find this Actor.

### 🔗 More from EuroScrape

- [EU Second-Hand Marketplaces Scraper: Vinted, OLX & More](https://apify.com/euroscrape/eu-marketplace-deals): one search on the top second-hand marketplace of 18 European countries, prices in €, cheapest country and resale margin.
- [Kleinanzeigen Scraper & Kleinanzeigen API: Deals & Alerts](https://apify.com/euroscrape/kleinanzeigen-scraper): German classifieds with market price per ad, negotiable-price flag and instant alerts.
- [Vinted Scraper & Vinted API: 26 Countries, Deals & Alerts](https://apify.com/euroscrape/vinted-scraper): search Vinted across 26 countries, prices with buyer fees, cheapest country and alerts on new listings.
- [Google Flights Scraper: Cheapest Dates, Prices & Price History](https://apify.com/euroscrape/google-flights-prices): flight prices for any route and dates, cheapest day to fly and price-drop alerts.
- [Impressum & Legal Notice Scraper: VAT, Registry, Contacts](https://apify.com/euroscrape/company-identity): the company behind any European website, checked in the register.

# Actor input Schema

## `searches` (type: `array`):

One car per line: make and model as written on AutoScout24 ("BMW 320", "Volkswagen Golf", "Tesla Model 3", "Mercedes-Benz C 220"), or a make alone ("Dacia"), or a full AutoScout24 results URL with your own filters.

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

AutoScout24 country sites to search. Prices are in euros everywhere.

## `maxListingsPerSearchAndCountry` (type: `integer`):

Up to 400 (AutoScout24 shows 20 pages of 20). The market summary is computed on everything collected.

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

Order of the site's results, which decides which listings are collected when the cap is reached.

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

Minimum price in euros.

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

Maximum price in euros.

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

E.g. 2018.

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

Latest first-registration year to keep, e.g. 2022.

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

Minimum mileage in km.

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

E.g. 100000.

## `powerFromKw` (type: `integer`):

Minimum engine power in kW (e.g. 100 kW = 136 hp).

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

Leave empty for all.

## `gearbox` (type: `string`):

Manual, automatic or both.

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

Dealers, private sellers or both.

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

New cars, used cars or both.

## `includeDamaged` (type: `boolean`):

Accident-damaged cars are excluded by default (they distort market prices).

## `minDealScore` (type: `integer`):

Keep only listings priced below similar cars: 60 = at least 10% under the market price of comparable cars, 50 = at market price. Leave empty to keep everything.

## `includeMarketSummary` (type: `boolean`):

One free row per search: median price, mileage and year per country, cheapest and priciest country, dealers vs private sellers, by fuel, by year, top deals.

## `monitorName` (type: `string`):

Name this search and schedule the Actor (e.g. every morning): each run then returns only NEW listings and PRICE DROPS since the previous run, with alerts below. The first run saves the baseline.

## `alertOn` (type: `string`):

In monitor mode, what each run returns and alerts on.

## `telegramBotToken` (type: `string`):

Alerts on Telegram: create a bot with @BotFather and paste its token.

## `telegramChatId` (type: `string`):

Your chat ID (send a message to your bot, then open api.telegram.org/bot<token>/getUpdates).

## `discordWebhookUrl` (type: `string`):

Alerts in a Discord channel: Channel settings → Integrations → Webhooks.

## `slackWebhookUrl` (type: `string`):

Alerts in Slack: create an Incoming Webhook for your channel.

## `webhookUrl` (type: `string`):

Receives one POST per run with the new listings and price drops (Make, Zapier, n8n…).

## `maxNotifications` (type: `integer`):

Maximum number of alert messages per run.

## `proxy` (type: `object`):

Apify Proxy is recommended: datacenter IPs first, residential only if AutoScout24 blocks the request.

## Actor input object example

```json
{
  "searches": [
    "BMW 320"
  ],
  "countries": [
    "DE",
    "FR",
    "IT"
  ],
  "maxListingsPerSearchAndCountry": 20,
  "sortBy": "relevance",
  "fuelTypes": [],
  "gearbox": "any",
  "sellerType": "any",
  "condition": "any",
  "includeDamaged": false,
  "includeMarketSummary": true,
  "alertOn": "new_and_price_drops",
  "maxNotifications": 30,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per car with market price and deal score, plus one market summary per search.

## `summary` (type: `string`):

Median price, mileage and year per country for each search, cheapest country, top deals.

## `runSummary` (type: `string`):

One row per car with market price and deal score, plus one market summary per search.

# 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 = {
    "searches": [
        "BMW 320"
    ],
    "countries": [
        "DE",
        "FR",
        "IT"
    ],
    "maxListingsPerSearchAndCountry": 20,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("euroscrape/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 = {
    "searches": ["BMW 320"],
    "countries": [
        "DE",
        "FR",
        "IT",
    ],
    "maxListingsPerSearchAndCountry": 20,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("euroscrape/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 '{
  "searches": [
    "BMW 320"
  ],
  "countries": [
    "DE",
    "FR",
    "IT"
  ],
  "maxListingsPerSearchAndCountry": 20,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call euroscrape/autoscout24-scraper --silent --output-dataset

```

## MCP server setup

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