# AutoScout24 Scraper — Cars, Prices & Dealers (EU) (`tortuga/autoscout24-scraper`) Actor

Scrape AutoScout24 car listings in 8 EU countries by search URL or make/model + filters: price, price rating, mileage, year, power, fuel, dealer, photos; optional specs & equipment.

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

## Pricing

from $0.35 / 1,000 car listing scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 & Dealers (EU)

Scrape car listings from AutoScout24, Europe's largest online car marketplace, in all eight AutoScout24 countries: Germany, Italy, France, the Netherlands, Belgium, Austria, Spain and Luxembourg. Paste any AutoScout24 search URL, or just type a make and model and pick filters (price, first registration, mileage, fuel, gearbox, power, body type, condition, seller type, postcode and radius). You get price, AutoScout24's price rating, mileage, first registration, power, fuel, gearbox, location, dealer name and rating, and every photo. Turn on details to add the description, the full equipment list, colour, previous owners, accident and service-history flags, emissions and consumption.

The actor reads the same structured data AutoScout24 uses to render its pages, so prices, mileage and dates are exact numbers instead of scraped text. It works with autoscout24.com, .de, .it, .fr, .nl, .be, .at, .es and .lu, rotates proxy IPs, never logs in, and never collects phone numbers. You pay only for the listings you get.

### What data does AutoScout24 Scraper extract?

Every listing from a search page gives you:

| Field | Description |
|---|---|
| `id`, `url` | AutoScout24 listing id (UUID) and listing URL |
| `title`, `make`, `model`, `modelGroup`, `version` | e.g. "Volkswagen Golf 7 Variant 2.0 TDI DSG Style", `Volkswagen`, `Golf`, `Golf`, `7 Variant 2.0 TDI DSG Style` |
| `variant`, `condition` | AutoScout24's model variant (Sedan, Touring, Variant, ...) and `used`, `new`, `employee car`, `demonstration`, `pre-registered` or `classic` |
| `price`, `currency`, `priceFormatted` | Asking price as a number, `EUR`, and the text shown ("€ 20,430") |
| `priceRating` | AutoScout24's price label: `top-price`, `good-price`, `fair-price`, `somewhat-expensive`, `expensive` (null when the site shows none) |
| `originalPrice` | Crossed-out earlier price on reduced deals |
| `mileageKm`, `firstRegistration`, `year` | Mileage in km, first registration as `YYYY-MM`, and its year |
| `fuel`, `gearbox`, `powerKw`, `powerHp`, `engineSizeCc` | Fuel type, transmission, power in kW and hp, displacement |
| `fuelConsumption`, `co2Emission`, `co2Class`, `electricRange` | As shown on the card, e.g. "5,8 l/100 km (komb.)", "151 g/km (komb.)" |
| `isDamaged`, `isNewListing` | Damaged-vehicle flag and AutoScout24's "new listing" badge |
| `countryCode`, `zip`, `city`, `street` | Where the car is (street only for dealers) |
| `sellerType`, `sellerId` | `dealer` or `private`, and the AutoScout24 customer id |
| `dealerName`, `dealerContactName`, `dealerRating`, `dealerRatingCount`, `dealerUrl` | Dealer name, the contact person the dealer publishes, star rating, number of reviews, dealer page |
| `imageUrl`, `images`, `imageCount` | First photo and all photo URLs (1280x960 JPEG) |
| `searchUrl`, `scrapedAt`, `detailsFetched` | The search the listing came from, when it was scraped, and whether details were added |

Turn on **Include listing details** to also open each listing page and add:

| Field | Description |
|---|---|
| `description` | The seller's full description as plain text |
| `equipment`, `equipmentByCategory` | Every equipment item ("Automatic climate control, 2 zones", "Apple CarPlay", ...), also grouped by category |
| `bodyType`, `bodyColor`, `manufacturerColor`, `paintType` | e.g. `Station Wagon`, `Black`, "Deep Black Perleffekt", `Metallic` |
| `upholstery`, `upholsteryColor`, `seats`, `doors` | Interior and layout |
| `previousOwners`, `hadAccident`, `fullServiceHistory`, `nonSmoking` | History as declared by the seller |
| `newInspection`, `lastServiceDate`, `nextInspectionDate`, `warranty` | Inspection (TÜV/HU), service and warranty info |
| `gears`, `cylinders`, `weightKg`, `driveTrain`, `engineSizeCc` | Technical data |
| `fuelCategory`, `primaryFuel`, `consumptionCombined`, `consumptionText`, `co2GramsPerKm`, `emissionClass`, `emissionSticker`, `electricRangeKm` | Fuel, consumption (l/100 km), CO2 (g/km), Euro norm, German emission sticker, electric range |
| `originalMarket`, `hsnTsn` | Original market and the German HSN/TSN type code |
| `priceNegotiable`, `vatDeductible`, `netPrice`, `priceOnRequest`, `marketMedianPrice` | Price flags, net price for VAT-deductible cars, and the market median AutoScout24 uses for its price rating |
| `latitude`, `longitude` | Dealer location (private sellers: rounded to about 1 km) |
| `listedAt`, `status` | When the listing was created and its status |
| `dealerRatingAverage`, `dealerRecommendPercent`, `dealerCustomerSince`, `dealerHomepage` | More dealer facts |
| `images`, `imageCount` | The full photo gallery |

### How to scrape AutoScout24

1. Either open autoscout24.com (or your country's site), set filters, and copy the results URL into **Start URLs**, or fill in **Make** and **Model** (as in AutoScout24 URLs: `bmw` + `3-series`, `mercedes-benz` + `c-class`, `volkswagen` + `golf`) and the filters you need.
2. Pick **Countries** (empty = all eight) and a **Sort** order ("Newest first" for fresh listings).
3. Set **Max items** to cap the run and the cost, and turn on **Include listing details** if you need description, equipment and history.
4. Click **Start** and export the dataset as JSON, CSV or Excel, or read it through the API.

### Input example

Make, model and filters:

```json
{
  "make": "bmw",
  "model": "3-series",
  "countries": ["DE", "AT"],
  "priceFrom": 15000,
  "priceTo": 30000,
  "yearFrom": 2019,
  "mileageTo": 100000,
  "fuelTypes": ["D"],
  "gearbox": ["A"],
  "sellerType": "dealer",
  "sort": "newest",
  "maxItems": 500,
  "includeDetails": true
}
```

Or search URLs straight from the browser, on any AutoScout24 site:

```json
{
  "startUrls": [
    { "url": "https://www.autoscout24.de/lst/porsche/911?atype=C&cy=D&fregfrom=2015&sort=price&desc=0" },
    { "url": "https://www.autoscout24.it/lst/fiat/500?atype=C&cy=I&zip=Milano&zipr=50" }
  ],
  "maxItems": 1000
}
```

### Output example

```json
{
  "id": "87614ac6-e469-40a9-a556-66d367585b8d",
  "url": "https://www.autoscout24.com/offers/volkswagen-golf-7-variant-2-0-tdi-dsg-style-diesel-black-cat_ma74mo2084-87614ac6-e469-40a9-a556-66d367585b8d",
  "title": "Volkswagen Golf 7 Variant 2.0 TDI DSG Style",
  "make": "Volkswagen",
  "model": "Golf",
  "version": "7 Variant 2.0 TDI DSG Style",
  "variant": "Variant",
  "condition": "used",
  "price": 20430,
  "currency": "EUR",
  "priceFormatted": "€ 20,430",
  "priceRating": "good-price",
  "mileageKm": 72247,
  "firstRegistration": "2020-11",
  "year": 2020,
  "fuel": "Diesel",
  "gearbox": "Automatic",
  "powerKw": 110,
  "powerHp": 150,
  "engineSizeCc": 1968,
  "countryCode": "DE",
  "zip": "49124",
  "city": "Georgsmarienhütte",
  "street": "Topsloh 2 - 6",
  "sellerType": "dealer",
  "dealerName": "Starke Georgsmarienhütte GmbH & Co. KG",
  "dealerRating": 4.5,
  "dealerRatingCount": 40,
  "dealerUrl": "https://www.autoscout24.com/dealerinfo/starke-georgsmarienhuette-gmbh-und-co-kg?atype=C",
  "imageUrl": "https://prod.pictures.autoscout24.net/listing-images/87614ac6-..._c20aca9d-....jpg/1280x960.jpg",
  "imageCount": 15,
  "detailsFetched": true,
  "description": "Highlights\n- IQ.Light - LED-Matrix-Scheinwerfer\n- Navigationssystem Discover Pro ...",
  "equipment": ["Armrest", "Automatic climate control, 3 zones", "Cruise control", "..."],
  "bodyType": "Station Wagon",
  "bodyColor": "Black",
  "manufacturerColor": "Deep Black Perleffekt",
  "upholstery": "Velour",
  "seats": 5,
  "doors": 5,
  "previousOwners": 2,
  "hadAccident": false,
  "fullServiceHistory": true,
  "gears": 7,
  "cylinders": 4,
  "weightKg": 1520,
  "driveTrain": "Front Wheel Drive",
  "emissionClass": "Euro 6d-TEMP",
  "warranty": "12 months",
  "latitude": 52.19433,
  "longitude": 8.07139,
  "listedAt": "2026-10-09T22:12:12.398Z",
  "scrapedAt": "2026-10-10T00:23:48+00:00"
}
```

### How many results can I get from one search?

AutoScout24 shows at most 200 pages of 20 cars (4,000 listings) for any search. When a search has more and your **Max items** asks for more, the actor splits it into price bands automatically (each under 4,000 listings) and walks through all of them, cheapest band first, so "all BMWs in Germany" (60,000+) works in one run. Duplicates are removed. Turn off **Split large searches** to stop at the first 4,000 in the site's order instead.

### Which AutoScout24 countries and sites are supported?

All eight countries of the pan-European AutoScout24 search: Germany (DE), Italy (IT), France (FR), the Netherlands (NL), Belgium (BE), Austria (AT), Spain (ES) and Luxembourg (LU), through any of their sites (autoscout24.com, .de, .it, .fr, .nl, .be, .at, .es, .lu, plus the other AutoScout24 language sites such as .pl). The site only changes the language of text fields; **Site language** picks it for make/model searches. autoscout24.ch (Switzerland) is a separate marketplace and is not covered. Motorbike search URLs (`/lst-moto/...`) work too.

### Does it need an AutoScout24 account? Does it collect phone numbers?

No account, cookies or API key are needed: everything comes from public search and listing pages. Phone and WhatsApp numbers are hidden behind a click on AutoScout24 and are never collected. Private sellers are exported with postcode and town only (no street, coordinates rounded to about 1 km); dealers come with their public business address, rating and published contact person.

### Monitor changes on a schedule

Turn on **Only new or changed items** to watch a search: each run remembers what earlier runs returned and outputs only listings that are new or whose price changed, so a daily schedule gives you fresh cars and price drops. Unchanged listings are dropped before any listing page is opened and are not charged. **Max items** then sets how many listings are checked per run, so use **Sort: Newest first** and a window such as 200. Save the input as a task and add a Schedule in Apify (for example daily); give each watch its own **Monitoring key** if several schedules use the same search. Every output item has `changeType` (`new` or `changed`), and changed items have `previousValues` with the old price, e.g. `{"price": 21990}`.

### Pricing

$0.35 per 1,000 listings ($0.00035 per listing), with or without listing details. No start fee, no subscription. Platform usage is billed by Apify on top and is small: about $0.005 per 1,000 listings from search pages, and about $0.03-0.05 per 1,000 with details on (one extra page per listing).

### Integrations and API

Run it from Python or Node with the Apify client, schedule it to track prices or new stock, or send the dataset to Google Sheets, Zapier, Make or n8n. See the **API** tab for ready-made snippets.

### Is it legal to scrape AutoScout24?

This Actor collects only data that AutoScout24 shows publicly to every visitor: vehicle details, prices, photos, the listing location, and dealers' public business details. It does not log in and does not collect phone numbers or private sellers' addresses. You are responsible for how you use the data and for complying with AutoScout24's terms and applicable law (including GDPR for any personal data such as dealer contact names).

### Support

Missing a field, or a search URL that does not work? Open an issue in the **Issues** tab; it is usually answered within a day.

# Actor input Schema

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

AutoScout24 search result pages with any filters and sort set in the browser (autoscout24.com, .de, .it, .fr, .nl, .be, .at, .es, .lu), e.g. https://www.autoscout24.com/lst/bmw/3-series?cy=D\&fregfrom=2018. Single listing URLs (.../offers/..., .../angebote/...) are accepted too and return that car with full details. Leave empty to use the Make / Model search below.

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

Brand as it appears in AutoScout24 URLs, e.g. bmw, volkswagen, mercedes-benz, audi, tesla, alfa-romeo. The filters below apply to this search only, not to Start URLs. Leave empty for all makes.

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

Model or model line as in AutoScout24 URLs, e.g. 3-series, x5, golf, c-class, model-3, 911. Needs a Make. On the German site (Site = de) German slugs like 3er or c-klasse work too.

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

Where the cars are located. Leave empty for all eight AutoScout24 countries.

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

Minimum asking price in euros.

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

Maximum asking price in euros.

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

Earliest year of first registration, e.g. 2018.

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

Latest year of first registration.

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

Minimum mileage in kilometres.

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

Maximum mileage in kilometres.

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

Only these fuel types. Leave empty for all.

## `gearbox` (type: `array`):

Only these transmissions. Leave empty for all.

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

Minimum engine power in kW (1 kW = 1.36 hp; 100 kW = 136 hp).

## `powerToKw` (type: `integer`):

Maximum engine power in kW.

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

Only these body types. Leave empty for all.

## `conditions` (type: `array`):

Only these offer types. Leave empty for all (new and used).

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

Only dealers or only private sellers.

## `zipCode` (type: `string`):

Search around this postcode or city (e.g. 10115, Berlin, Milano). Combine with one country for exact postcodes.

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

Used with Postcode or city. AutoScout24 offers 10, 20, 50, 100, 150, 200, 250, 300 and 400 km. Default 50.

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

Order of the Make / Model search. 'Newest first' is best for monitoring new listings.

## `site` (type: `string`):

Which AutoScout24 front-end the Make / Model search runs on. It only changes the language of text fields (fuel, gearbox, equipment, ...) and the listing URLs; the cars are the same.

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

Stop after this many listings in total (across all searches). Keeps cost predictable. With 'Only new or changed items' on, this is the number of listings checked per run.

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

Also open every listing page for the full description, the equipment list, colour, upholstery, previous owners, accident-free / service-history flags, seats, doors, gears, cylinders, weight, emission class, CO2 and consumption, VAT / negotiable flags, the price-rating median, exact dealer coordinates and all photos. Same price per listing; one extra request per listing, so runs take longer and use more platform time (about $0.03-0.05 per 1,000 listings).

## `splitLargeSearches` (type: `boolean`):

AutoScout24 shows at most 4,000 listings (200 pages) per search. When a search has more and Max items asks for more, it is split into price bands automatically so you can get all of them (results then come cheapest band first).

## `onlyNewOrChanged` (type: `boolean`):

Remember what earlier runs of this search returned and output only new listings or listings whose price changed. Use with a Schedule; unchanged items are not charged. With this on, Max items is the number of listings checked per run (e.g. the newest 200).

## `monitoringKey` (type: `string`):

Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input

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

Apify Proxy (datacenter) works well for AutoScout24 and is the default. No residential or Unblocker traffic is needed.

## Actor input object example

```json
{
  "startUrls": [],
  "make": "bmw",
  "model": "3-series",
  "countries": [
    "DE"
  ],
  "sort": "standard",
  "site": "com",
  "maxItems": 100,
  "includeDetails": false,
  "splitLargeSearches": true,
  "onlyNewOrChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "startUrls": [],
    "make": "bmw",
    "model": "3-series",
    "countries": [
        "DE"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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