# AutoScout24 All-Country Scraper (`fayoussef/autoscout24`) Actor

Our autoscout24 scraper makes it simple to collect listings at scale and in all countries. Works on autoscout24.de, .at, .fr, .it, .es, .nl, .be, .lu and .com

- **URL**: https://apify.com/fayoussef/autoscout24.md
- **Developed by:** [youssef farhan](https://apify.com/fayoussef) (community)
- **Categories:** Automation, Lead generation, Integrations
- **Stats:** 62 total users, 13 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.46 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## AutoScout24 Scraper — Extract Car Listings & Dealer Data Across Europe

Scrape AutoScout24 car listings from any European AutoScout24 domain and extract 50+ structured fields per vehicle — price, full specs, mileage, categorized equipment, GPS coordinates, dealer contact details, CO₂ data, and every photo URL. Built for car dealers, automotive market researchers, leasing firms, and data aggregators who need clean, cross-border vehicle data from Europe's largest car marketplace. It is one of the lowest-priced AutoScout24 scrapers on the Apify Store.

Works on **autoscout24.de, .at, .fr, .it, .es, .nl, .be, .lu and .com** — paste any search URL and the actor auto-detects the country and language.

**Two ways to say what you want.** Paste a search URL, or skip the site entirely and fill in a filter form: make, model, price, year, mileage, fuel, gearbox, body, equipment and 20 more. See [Search by filters](#search-by-filters-no-url-needed).

### What you get

**Listing info**

- `listing_id`, `listing_url` — unique ID and canonical localized URL
- `status` — Active or Inactive
- `created_at` — ad creation timestamp
- `offer_type` — Used, New, or Demo
- `ad_tier`, `is_mia` — ad placement metadata

**Pricing**

- `price` — numeric EUR value
- `price_formatted` — display string (e.g. "€ 9,200")
- `price_negotiable`, `is_final_price`, `vat_deductible` — VAT and negotiation flags

**Vehicle specs**

- `make`, `model`, `model_version`
- `body_type`, `body_color`, `paint_type`, `vehicle_type`
- `transmission`, `drive_train`, `fuel_type`, `fuel_type_formatted`
- `power_kw`, `power_hp`, `displacement_ccm`, `cylinders`, `gears`
- `doors`, `seats`, `weight_kg`
- `co2_emission`, `has_particle_filter`
- `fuel_consumption_combined`, `fuel_consumption_formatted`

**History & condition**

- `first_registration`, `first_registration_raw`
- `mileage_km`, `mileage_formatted`
- `had_accident`, `full_service_history`, `non_smoking`, `new_inspection`
- `previous_owners`, `legal_category`

**Equipment (categorized)**

- `equipment_comfortAndConvenience`, `equipment_safetyAndSecurity`, `equipment_entertainmentAndMedia`, `equipment_extras` — each a JSON array with a matching `_count`
- `total_equipment_count` — total options across all categories

**Location**

- `country`, `city`, `zip`, `street`
- `latitude`, `longitude` — exact GPS coordinates

**Seller / Dealer**

- `seller_id`, `seller_type`, `is_dealer`
- `seller_company`, `seller_contact_name`
- `seller_phone`, `seller_phone_raw` — formatted and dial-ready
- `dealer_homepage`, `dealer_region`, `warranty_exists`, `leads_range`

**Media**

- `main_image` — primary photo URL
- `all_images` — full array of photo URLs
- `image_count`, `has_360_view`

**Description**

- `description` — full listing text, HTML stripped

### Sample output

```json
{
  "listing_id": "53a8e594-eb3a-4871-9252-1e37b6d29816",
  "listing_url": "https://www.autoscout24.com/offers/53a8e594-eb3a-4871-9252-1e37b6d29816",
  "status": "Active",
  "created_at": "2025-09-30T12:17:46.407Z",
  "make": "BMW",
  "model": "114",
  "model_version": "114i CarPlay*Sièges Chauffants*Garantie",
  "body_type": "Sedan",
  "body_color": "White",
  "first_registration": "04/2014",
  "mileage_km": 136130,
  "mileage_formatted": "136,130 km",
  "power_kw": 75,
  "power_hp": 102,
  "transmission": "Manual",
  "drive_train": "Rear Wheel Drive",
  "fuel_type_formatted": "Gasoline",
  "doors": 5,
  "seats": 5,
  "had_accident": false,
  "full_service_history": true,
  "price": 9200,
  "price_formatted": "€ 9,200",
  "vat_deductible": false,
  "total_equipment_count": 44,
  "equipment_comfortAndConvenience": ["Cruise control", "Navigation system"],
  "equipment_entertainmentAndMedia": ["Apple CarPlay", "Bluetooth"],
  "country": "BE",
  "city": "Tubize",
  "zip": "1480",
  "latitude": 50.69989,
  "longitude": 4.20648,
  "seller_company": "Urban Car",
  "seller_phone": "+32 (0)474 - 734924",
  "is_dealer": true,
  "warranty_exists": true,
  "image_count": 15,
  "main_image": "https://prod.pictures.autoscout24.net/listing-images/53a8e594.jpg/1280x960.webp"
}
```

### Use cases

- ✓ Used car dealers tracking competitor pricing by make, model, and country across AutoScout24's European coverage
- ✓ Automotive market researchers building EUR-denominated price indices for new and used vehicles
- ✓ Leasing and fleet companies monitoring residual values and comparable listings in Germany, France, and Italy
- ✓ Data aggregators feeding pan-European vehicle comparison and valuation platforms
- ✓ Insurance and finance teams appraising vehicle portfolios against live market data
- ✓ Analysts studying equipment prevalence, fuel-type trends, and CO₂ distribution across the market

### Pricing

Pay per result, with no monthly base fee. The current rate is shown on this Actor's Store page.

The first page of results is **free** — test the output before any paid run. No credit card needed to start.

### Search by filters (no URL needed)

Building an AutoScout24 URL by hand is fiddly, so you do not have to. Leave **Start URLs** empty and fill in the **Search filters** section instead; the actor assembles the search for you.

```json
{
  "search_domain": "de",
  "countries": ["germany", "austria"],
  "makes": ["BMW"],
  "models": ["3 Series"],
  "fuel_types": ["diesel"],
  "transmission": ["automatic"],
  "price_from": 15000,
  "price_to": 30000,
  "first_registration_from": 2019,
  "equipment": ["leather-seats", "4wd"],
  "sort_by": "price"
}
```

What you can filter on:

| Group | Filters |
|---|---|
| Vehicle | Makes (293), models, body types, condition, seller type |
| Money | Price from/to, emission class |
| Age & use | First registration from/to, mileage from/to, listed within N days |
| Mechanical | Fuel type, transmission, cylinders, power from/to (hp or kW) |
| Comfort | Exterior/interior colour, upholstery, doors, seats, 80 equipment features |
| Location | AutoScout24 site, countries, postal code or city, radius |
| Output | Sort by, reverse order |

Notes that save time:

- **Start URLs always win.** If you fill in both, the filters are ignored and the run says so in the log. Clear Start URLs to use the form.
- **Models are optional and forgiving.** "3 Series" gives the whole family, "320" gives that model, and case, spaces and hyphens are ignored. A name that matches nothing is logged and skipped rather than failing the run.
- **Equipment is an AND.** Picking leather seats *and* a sunroof returns only cars with both, which narrows results fast. Four-wheel drive lives here too: AutoScout24 has no separate drivetrain filter.
- **Emission class is a floor.** Euro 6 returns Euro 6 and cleaner.
- **Country vs site are different things.** The site sets the language and market, countries set where the cars physically are. Searching .com with `countries: ["germany"]` returns German stock described in English.

### How it works

- **Input** one or more AutoScout24 search URLs, or the Search filters form above.
- Set **Max results** for an exact number of vehicles, or `start_page` / `end_page` to scrape a page range. Leave all three empty to scrape every page.
- Up to 100 concurrent workers fetch listing and detail pages in parallel for fast runs.
- Duplicate detection and stagnation checks stop the run cleanly when no new listings appear.
- Progress is saved to a **resumable state key** — interrupted runs pick up where they stopped.
- **Output** lands in the Apify dataset; export as JSON, CSV, or Excel from the UI or REST API.
- Schedule daily or weekly runs with Apify's built-in scheduler; optional Telegram alert on completion.

### Why this scraper

- **50+ fields per listing** — the most complete AutoScout24 dataset on the Store, including categorized equipment, GPS coordinates, CO₂ data, and VAT flags.
- **Lowest price on the Store** — competing actors charge 2–4× more.
- **Equipment pre-categorized** into Comfort, Safety, Entertainment, and Extras with item counts — usable for filtering or scoring with no extra parsing.
- **Resumable runs** — long scrapes across large markets never lose progress on restart.
- **Auto multi-locale** — one actor handles every European AutoScout24 domain; no per-country setup.

### Input example

By URL:

```json
{
  "start_urls": [
    {"url": "https://www.autoscout24.de/lst/bmw/1er?atype=C&desc=1&sort=age"},
    {"url": "https://www.autoscout24.fr/lst/audi/a3?atype=C&sort=price"}
  ],
  "start_page": 1,
  "end_page": 20
}
```

By filters, no URL:

```json
{
  "search_domain": "de",
  "countries": ["germany"],
  "makes": ["Audi", "BMW"],
  "price_to": 25000,
  "first_registration_from": 2020,
  "fuel_types": ["hybrid-gasoline", "electric"],
  "max_items": 500
}
```

Omit `end_page` to scrape all available pages for each search.

### FAQ

**Which AutoScout24 countries are supported?**
All of them. Paste a search URL from autoscout24.de, .at, .fr, .it, .es, .nl, .be, .lu, or .com — the actor detects the domain and language automatically.

**Can I scrape one specific dealer's inventory?**
Yes. Paste the dealer's profile URL (`/haendler/...`, `/concessionari/...`, `/verkopers/...`) straight into Start URLs and the actor resolves it to that dealer's full stock. A `cId` search URL like `https://www.autoscout24.de/lst?cId=5742&sort=age` also works if you already have the customer ID.

**Do I have to build a search URL?**
No. Leave Start URLs empty and use the Search filters section instead: pick make, model, price, year, fuel, equipment and the rest from dropdowns, and the actor builds the search. See [Search by filters](#search-by-filters-no-url-needed).

**My filter results do not match the same search on the site. Why?**
Almost always a missing **Model**. AutoScout24 hides part of the search in the URL *path*, not the query string, so `https://www.autoscout24.com/lst/audi/a4-allroad/ot_used/ft_diesel?priceto=6000` is filtered to the A4 allroad, used, diesel even though none of that appears after the `?`. Reproducing it needs `"makes": ["Audi"], "models": ["A4 allroad"], "conditions": ["used"], "fuel_types": ["diesel"]`. With only the make you get every Audi, which is a much bigger result set. Read the path segments of the URL you are comparing against: `/audi/a4-allroad` is make and model, `ot_used` is condition, `ft_diesel` is fuel.

**Why did my filters get ignored?**
Because Start URLs was not empty. A pasted URL always takes precedence over the filter form, and the run log says which filters were skipped. Clear Start URLs to search by filters.

**How many listings can one search return?**
About 4,000. AutoScout24 stops paginating any single search at 200 pages regardless of how many vehicles match, so a search matching 800,000 cars still yields roughly 4,000. To pull more, split the search into narrower slices (by price band, year, or country) and pass several at once. The **Sort by** field decides which 4,000 you get.

**Does it handle anti-bot blocking?**
Yes. Runs route through Apify residential proxies by default, with automatic retries and exponential backoff. You can also supply your own proxy URL.

**What output formats are available?**
JSON, CSV, and Excel — from the Apify dataset UI and the REST API.

**Are equipment lists arrays or strings?**
Arrays. Each category (`equipment_comfortAndConvenience`, etc.) is a JSON array with a matching `_count` field for easy filtering.

**How fresh is the data?**
Live. Every run fetches current listings directly from AutoScout24 at request time — nothing is cached.

**Does it support scheduling and resuming?**
Yes. Use Apify's scheduler for automated daily or weekly runs; resumable state means interrupted runs continue without re-scraping.

**Can I use it via API or MCP?**
Yes — callable via the Apify REST API and as an MCP server for AI agents (Claude, ChatGPT, Cursor). See below.

### Use via API or MCP

Call this actor programmatically via the Apify REST API:

```
POST https://api.apify.com/v2/acts/fayoussef~autoscout24/runs?token=YOUR_TOKEN
```

Or connect it as an MCP server for AI agents (Claude, ChatGPT, Cursor):

```
https://mcp.apify.com/actors/fayoussef~autoscout24
```

Full API docs: <https://docs.apify.com/api/v2>

### Need a custom scraper?

Need different fields, AutoScout24 combined with Mobile.de or other portals, or a fully managed pipeline into your CRM? Visit [automationbyexperts.com](https://automationbyexperts.com) for custom builds, retainers, and data-as-a-service.

# Actor input Schema

## `start_urls` (type: `array`):

Search or listing URLs copied from AutoScout24. Set your filters on the site, copy the address bar, paste it here. Detail URLs go straight to that vehicle, and dealer profile pages are expanded to that dealer's full stock. This field takes precedence: anything here means the Search filters section below is ignored. Leave it empty to search by filters instead.

## `max_items` (type: `integer`):

Stop after this many vehicles, even if more pages match. Leave empty for no limit. Use this for an exact number: pages hold about 20 listings each, so End page can only limit the output in steps of 20.

## `search_domain` (type: `string`):

Which AutoScout24 site to search. This sets the language of the listing text and the market; use Countries below to choose where the cars actually are. Counts differ slightly between sites for the same country.

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

Where the cars are located. Leave empty to search all of Europe.

## `makes` (type: `array`):

Vehicle makes to include. Leave empty for all makes.

## `models` (type: `array`):

Model names to narrow the makes above, for example "3 Series" or "Golf". A family name gives the whole range, a specific name like "320" gives just that model. Spelling is forgiving (case, spaces and hyphens are ignored). Requires at least one make.

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

New, used, or one of AutoScout24's other offer types. Leave empty for all.

## `seller_type` (type: `array`):

Dealer or private seller. Leave empty for both.

## `price_from` (type: `integer`):

Lowest asking price, in euros.

## `price_to` (type: `integer`):

Highest asking price, in euros.

## `first_registration_from` (type: `integer`):

Earliest first-registration year. This is the year filter European buyers want; AutoScout24 has no separate model-year filter.

## `first_registration_to` (type: `integer`):

Latest first-registration year.

## `mileage_from_km` (type: `integer`):

Lowest odometer reading, in kilometres.

## `mileage_to_km` (type: `integer`):

Highest odometer reading, in kilometres.

## `body_types` (type: `array`):

Body styles to include. Leave empty for all.

## `fuel_types` (type: `array`):

Fuel or powertrain types to include. Leave empty for all.

## `transmission` (type: `array`):

Automatic, manual or semi-automatic. Leave empty for all.

## `cylinders` (type: `array`):

Engine cylinder counts to include.

## `power_from` (type: `integer`):

Minimum engine power, in the unit selected below.

## `power_to` (type: `integer`):

Maximum engine power, in the unit selected below.

## `power_unit` (type: `string`):

Unit for the power range above. Only used when a power range is set.

## `doors_from` (type: `integer`):

Minimum number of doors.

## `doors_to` (type: `integer`):

Maximum number of doors.

## `seats_from` (type: `integer`):

Minimum number of seats.

## `seats_to` (type: `integer`):

Maximum number of seats.

## `exterior_colors` (type: `array`):

Exterior colours to include. Leave empty for all.

## `interior_colors` (type: `array`):

Interior colours to include. Leave empty for all.

## `upholstery` (type: `array`):

Seat material. Leave empty for all.

## `equipment` (type: `array`):

Only listings that have ALL of the selected features. Dealers tick these boxes by hand, so picking several at once narrows results sharply. Note 4WD lives here: AutoScout24 has no separate drivetrain filter.

## `emission_class` (type: `array`):

Minimum Euro emission class. This is a floor, not an exact match: picking Euro 6 returns Euro 6 and cleaner. If you select several, the lowest one is used.

## `postal_code` (type: `string`):

Search around this location, for example "10115" or "Berlin". Pair it with a radius below. Use a location from the country you selected above.

## `radius_km` (type: `string`):

How far from the location above to search. Needs a location to do anything.

## `listed_within_days` (type: `integer`):

Only listings posted within this many days.

## `sort_by` (type: `string`):

Order results are returned in. It matters: AutoScout24 caps any single search at about 4,000 listings, so this decides which 4,000 you get.

## `sort_descending` (type: `boolean`):

Reverse the sort: highest price, newest year, most kilometres first.

## `start_page` (type: `integer`):

Page number to start scraping from (1-indexed). Leave empty to start at page 1.

## `end_page` (type: `integer`):

Page number to stop scraping at (1-indexed, inclusive). Leave empty to scrape all available pages.

## `proxy_url` (type: `string`):

Provide your own proxy URL to reduce errors and avoid getting banned. Leave empty to use Apify Proxy residential on your own account.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.autoscout24.com/lst/bmw/1-series-(all)?atype=C&cy=B&desc=1&sort=age"
    }
  ],
  "search_domain": "com",
  "power_unit": "hp",
  "sort_by": "standard",
  "sort_descending": false
}
```

# Actor output Schema

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

Autoscout24 Scraper

# 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 = {
    "start_urls": [
        {
            "url": "https://www.autoscout24.com/lst/bmw/1-series-(all)?atype=C&cy=B&desc=1&sort=age"
        }
    ],
    "proxy_url": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/autoscout24").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 = {
    "start_urls": [{ "url": "https://www.autoscout24.com/lst/bmw/1-series-(all)?atype=C&cy=B&desc=1&sort=age" }],
    "proxy_url": "",
}

# Run the Actor and wait for it to finish
run = client.actor("fayoussef/autoscout24").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 '{
  "start_urls": [
    {
      "url": "https://www.autoscout24.com/lst/bmw/1-series-(all)?atype=C&cy=B&desc=1&sort=age"
    }
  ],
  "proxy_url": ""
}' |
apify call fayoussef/autoscout24 --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fayoussef/autoscout24"
        }
    }
}

```

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/kxvqbfZknFYLcVyfx/builds/e15WCXMHUAsJNPEvu/openapi.json
