# AutoScout24 Scraper - Used Car Listings & Prices (Europe) (`rjmacarthy/autoscout24-scraper`) Actor

Scrape AutoScout24 car listings from Germany, Austria, Italy, France, Netherlands, Belgium, Spain, Luxembourg and .com: price, AutoScout24 price rating, mileage, registration, fuel, power, dealer vs private, photos. Paste search URLs or use filters. Only-new + price-change monitor.

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

## Pricing

from $1.00 / 1,000 car listing scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Car Listings & Prices (Europe)

Scrape used and new car listings from **AutoScout24**, Europe's largest online car marketplace, on **autoscout24.de, .at, .it, .fr, .nl, .be, .es, .lu and .com**. Paste any AutoScout24 search URL from your browser (every filter is kept) or search by make, model, country, price, year, mileage and fuel. Each listing comes back as clean JSON with a numeric price, **AutoScout24's own price rating** ("Top price", "Good price"...), mileage, first registration, fuel, transmission, power, CO2, location, **dealer vs private seller**, and photos. Turn on **onlyNew** and schedule the Actor to get only new listings **and price drops** on each run. No start fee, no login, no browser, and no private-seller personal data.

### What data can you get?

| Field | Example | Notes |
|---|---|---|
| `title`, `make`, `model`, `modelGroup`, `modelVersion`, `variant` | BMW, 320, 3er, "320 d xDrive", Touring | |
| `price`, `currency` | 3999, EUR | numeric |
| `priceRating`, `priceRatingLabel` | good-price, Good price | AutoScout24's market comparison; null when not rated |
| `condition` | used | used, new, demo, ... |
| `mileageKm`, `firstRegistration` | 214000, 2011-05 | |
| `fuelType`, `transmission` | diesel, automatic | normalised English values; the site's wording is kept in `fuelTypeLocal` / `transmissionLocal` |
| `powerKw`, `powerHp`, `engineCcm` | 135, 184, 1995 | |
| `fuelConsumption`, `co2GPerKm` | "5,80 l/100 km (komb.)", 153 | when shown on the listing card |
| `countryCode`, `zip`, `city` | DE, 57462, Olpe | location of the car |
| `sellerType` | dealer / private | |
| `dealerName`, `dealerId`, `dealerUrl`, `dealerRating`, `dealerRatingCount` | Car Center Olpe | **dealers only**; always null for private sellers |
| `imageUrl`, `images`, `imageCount` | 720x540 photo URLs | up to `maxImages` per listing |
| `isTrending`, `resultType` | true, Organic | `Organic` or `Nfm` (placement shown before organic results) |
| `priceChanged`, `previousPrice` | true, 4290 | onlyNew mode |
| `id`, `url`, `searchUrl`, `scrapedAt` | | stable listing UUID |

### Use cases

- **Car dealers and resellers:** track competitor stock and prices in your region, and find cars that AutoScout24 itself rates as "Top price" or "Good price".
- **Price monitoring:** schedule a search with `onlyNew` and get only new listings and listings whose price changed, with the previous price.
- **Market research:** compare prices of a model across Germany, Italy, France, the Netherlands and other countries; build depreciation curves by year and mileage.
- **Import / export:** find cheaper cars in neighbouring EU countries.
- **Data science:** build training data for car-price models with clean numeric fields.

### How to use it

#### Example: paste a search URL (recommended)

Open AutoScout24, set any filters (make, model, price, year, body type, equipment, seller type...), copy the address bar and paste it:

```json
{
  "startUrls": [{ "url": "https://www.autoscout24.de/lst/bmw/3er?atype=C&cy=D&pricefrom=10000&fregfrom=2018" }],
  "maxItems": 100
}
```

#### Example: search with fields

```json
{
  "make": "tesla",
  "model": "model-3",
  "country": "de",
  "sort": "price-asc",
  "maxItems": 50
}
```

`country` is where the car is located: `de`, `at`, `it`, `fr`, `nl`, `be`, `es`, `lu`, or `all` (autoscout24.com, all eight countries). Other fields: `priceFrom`, `priceTo`, `yearFrom`, `yearTo`, `mileageTo`, `fuelType` (`petrol`, `diesel`, `electric`, `hybrid-petrol`, `hybrid-diesel`, `lpg`, `cng`, `hydrogen`, `ethanol`, `other`), `sort` (`relevance`, `newest`, `price-asc`, `price-desc`).

#### Example: new-listing and price-drop monitor

```json
{
  "make": "porsche",
  "model": "911",
  "country": "all",
  "sort": "newest",
  "maxItems": 0,
  "onlyNew": true,
  "stateKey": "porsche-911-eu"
}
```

Schedule it (e.g. daily). The first run outputs every listing as the baseline. Later runs read every result page of the search and output only **new** listings and listings whose **price changed** (`priceChanged: true`, `previousPrice`). Known listings with an unchanged price are skipped and **not charged**.

### Output example

Real output from the prefilled input (one item, photos shortened):

```json
{
  "id": "e45258fa-2a87-4243-be81-5ad09154290f",
  "url": "https://www.autoscout24.de/angebote/bmw-3er-i-sport-2-zonen-bi-xenon-stzhz-tuev-5-28-benzin-braun-cat_ma13gr100038ge26va106mt101tr189-e45258fa-2a87-4243-be81-5ad09154290f",
  "title": "BMW 316",
  "make": "BMW",
  "model": "316",
  "modelGroup": "3er",
  "modelVersion": "i *SPORT*2-ZONEN*BI-XENON*StzHZ*TÜV 5/28*",
  "variant": "Touring",
  "condition": "used",
  "price": 7490,
  "currency": "EUR",
  "priceRating": "good-price",
  "priceRatingLabel": "Good price",
  "mileageKm": 163845,
  "firstRegistration": "2014-03",
  "fuelType": "petrol",
  "fuelTypeLocal": "Benzin",
  "transmission": "manual",
  "transmissionLocal": "Schaltgetriebe",
  "powerKw": 100,
  "powerHp": 136,
  "engineCcm": 1598,
  "fuelConsumption": "5,9 l/100 km (komb.)",
  "co2GPerKm": 140,
  "countryCode": "DE",
  "zip": "85276",
  "city": "Pfaffenhofen an der Ilm",
  "sellerType": "dealer",
  "dealerId": "24363553",
  "dealerName": "MYAUTOCENTER OHG",
  "dealerUrl": "https://www.autoscout24.de/haendler/myautocenter-ohg?atype=C",
  "dealerRating": 4.5,
  "dealerRatingCount": 256,
  "imageUrl": "https://prod.pictures.autoscout24.net/listing-images/e45258fa-..._22938169-....jpg/720x540.webp",
  "images": ["https://prod.pictures.autoscout24.net/listing-images/e45258fa-..._22938169-....jpg/720x540.webp", "..."],
  "imageCount": 50,
  "isTrending": true,
  "resultType": "Organic",
  "priceChanged": null,
  "previousPrice": null,
  "searchUrl": "https://www.autoscout24.de/lst/bmw/3er?atype=C&cy=D",
  "scrapedAt": "2026-11-05T12:26:04.796Z"
}
```

### How much does it cost?

Pay per event, no start fee:

| Event | Price | When |
|---|---|---|
| `listing` | **$0.001** | one car listing saved to the dataset |

**1,000 listings ≈ $1.00.** In `onlyNew` mode you pay only for new and re-priced listings, so a daily monitor of a search with 300 cars and ~20 changes a day costs about $0.02 per run. Set **Maximum cost per run** in the run options and the Actor stops cleanly at that budget.

### Tips and limits

- **200 pages per search.** AutoScout24 shows at most 200 result pages (4,000 listings) for one search. For bigger markets, split the search by price or year ranges (e.g. one URL for €0–10,000, one for €10,000–20,000...). The run summary warns when a search hits the cap.
- **A make is required.** AutoScout24's robots.txt disallows searches without a make in the path (`/lst?...`), so URLs must look like `/lst/<make>[/<model>]`.
- **Slugs follow the site.** Use the make and model as they appear in AutoScout24 URLs (`mercedes-benz`, `3er` on .de, `3-series` on .com). The site redirects most common variants.
- **Belgium** URLs need the language prefix: `https://www.autoscout24.be/fr/lst/...` or `/nl/lst/...`.
- **autoscout24.ch** is a separate platform and is not supported.
- **Placements:** some listings carry `resultType: "Nfm"` (an AutoScout24 placement type) and are shown before the organic results regardless of the sort order; filter on `resultType` if you need strict ordering.
- **Search-card data only.** The Actor reads search result pages, not each listing's detail page (AutoScout24's robots.txt disallows the detail pages on several sites). Full equipment lists, descriptions and previous-owner counts are not included.
- **Duplicates** within a run are removed, also across several search URLs.
- For monitors, set `maxItems` high enough (or `0`) so the first run captures the whole search as a baseline, and keep searches below 4,000 results.

### FAQ

**Is it legal to scrape AutoScout24?**
The Actor only reads public search pages that anyone can open without logging in, follows the site's robots.txt and paces its requests. It does not collect personal data: no phone numbers, no e-mail addresses, no contact names and no street addresses, and private sellers are never named. You are responsible for using the data in line with AutoScout24's terms, the GDPR and other laws that apply to you. If in doubt, ask a lawyer.

**Do I need a proxy?**
Usually not. If AutoScout24 blocks the run (HTTP 403/429), the run stops with a clear message: enable Apify Proxy with automatic (datacenter) proxies. Residential proxies are not supported: if you select the RESIDENTIAL group, the Actor uses Apify datacenter proxy instead.

**Why do some listings have no price rating?**
AutoScout24 does not rate every car (rare models, new cars, some countries). Those listings have `priceRating: null`.

**Are prices in EUR?**
Yes, all supported sites list prices in EUR. `currency` is read from each listing.

**Can I get dealer phone numbers or e-mails?**
No. The Actor outputs the dealer's business name, ID, AutoScout24 page and rating, but no contact details.

### Integrations

- **Apify API:** start runs and download datasets from any language ([API docs](https://docs.apify.com/api/v2)), or use the JavaScript and Python clients.
- **Make, Zapier, n8n:** run the Actor on a schedule and send new listings or price drops to Google Sheets, Airtable, Slack, Telegram or e-mail.
- **Webhooks:** call your own endpoint when a run finishes.
- **MCP / AI agents:** call the Actor from Claude, ChatGPT or any MCP client through the Apify MCP server, e.g. "find Tesla Model 3 under €25,000 in Germany on AutoScout24".

### Changelog

- **0.1 (November 2026):** first release. Search URLs or fields for 9 AutoScout24 sites, price rating, dealer vs private, 720px photos, onlyNew monitor with price-change tracking.

### Ready-to-run examples

- [Scrape Tesla Model 3 prices in Germany, cheapest first](https://apify.com/rjmacarthy/autoscout24-scraper/examples/tesla-model-3-prices-germany-autoscout24)
- [Find the newest Porsche 911 listings across Europe](https://apify.com/rjmacarthy/autoscout24-scraper/examples/newest-porsche-911-listings-europe)

### More scrapers by the same developer

- [AliExpress Scraper - Product Search, Prices, Ratings & Details](https://apify.com/rjmacarthy/aliexpress-scraper)
- [Flipkart Scraper - Prices, Ratings & Offers from Search](https://apify.com/rjmacarthy/flipkart-scraper)
- [Kleinanzeigen Scraper - Germany Classifieds Listings & Prices](https://apify.com/rjmacarthy/kleinanzeigen-scraper)
- [Property Finder Scraper - UAE Real Estate Listings (Dubai)](https://apify.com/rjmacarthy/propertyfinder-scraper)
- [Vinted Scraper: Listings, Prices & New-Item Monitor](https://apify.com/rjmacarthy/vinted-scraper)
- [Apple App Store Scraper: Apps, Search & Reviews](https://apify.com/rjmacarthy/app-store-scraper)

Browse all my Actors on [my Apify Store profile](https://apify.com/rjmacarthy).

### Support

Found a bug or need a field that is shown on AutoScout24 search pages? Open an issue on the Actor's **Issues** tab and include the search URL. Feature requests are welcome.

# Actor input Schema

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

Open a car search on autoscout24.de, .at, .it, .fr, .nl, .be, .es, .lu or .com, set any filters and paste the address, e.g. https://www.autoscout24.de/lst/bmw/3er?atype=C\&cy=D\&pricefrom=10000. All filters are kept. The URL must contain a make (/lst/<make>/...). When URLs are given, the search fields below are ignored. autoscout24.ch is a separate platform and not supported.

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

Used when no search URLs are given. Make as in AutoScout24 URLs, e.g. "bmw", "volkswagen", "mercedes-benz", "alfa-romeo".

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

Optional. Model as in AutoScout24 URLs, e.g. "golf", "a4", "3er" (on .de) / "3-series" (on .com). The site redirects most common spellings.

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

Searches that country's AutoScout24 site for cars located there. "All countries" uses autoscout24.com (DE, AT, BE, ES, FR, IT, LU, NL).

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

Optional minimum price.

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

Optional maximum price.

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

Optional, e.g. 2018.

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

Optional, e.g. 2022.

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

Optional maximum mileage in km.

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

Optional fuel filter.

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

Order of results. Use "Newest listings first" for monitoring with onlyNew.

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

Maximum listings to output per search URL (20 per results page). 0 = no limit (AutoScout24 shows at most 200 pages = 4,000 listings per search).

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

How many photo URLs to keep per listing (from the search card). 0 = all.

## `onlyNew` (type: `boolean`):

Monitor mode: remembers every listing (and its price) between runs and outputs only listings that are new or whose price changed (priceChanged, previousPrice). The first run outputs everything as a baseline.

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

onlyNew mode: separate monitors (e.g. one per schedule) use different names so their memory is kept apart.

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

Usually not needed. If AutoScout24 blocks the run (HTTP 403/429), enable Apify Proxy with automatic (datacenter) proxies. Residential proxies are not supported: if you select the RESIDENTIAL group, the Actor uses Apify datacenter proxy instead.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.autoscout24.de/lst/bmw/3er?atype=C&cy=D"
    }
  ],
  "country": "all",
  "sort": "relevance",
  "maxItems": 15,
  "maxImages": 5,
  "onlyNew": false,
  "stateKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Car, price, AutoScout24 price rating, mileage, registration and seller.

## `listingsFull` (type: `string`):

Every field, including specs, photos and price-change data.

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

Per-search status, counts, request statistics and warnings.

# 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": [
        {
            "url": "https://www.autoscout24.de/lst/bmw/3er?atype=C&cy=D"
        }
    ],
    "maxItems": 15,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rjmacarthy/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": [{ "url": "https://www.autoscout24.de/lst/bmw/3er?atype=C&cy=D" }],
    "maxItems": 15,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rjmacarthy/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": [
    {
      "url": "https://www.autoscout24.de/lst/bmw/3er?atype=C&cy=D"
    }
  ],
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rjmacarthy/autoscout24-scraper --silent --output-dataset

```

## MCP server setup

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