How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
BMWin Make. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
AutoScout24 Car Listings Scraper finds used and new car listings on AutoScout24 in 8 EU countries by make, model, year, price and mileage, and returns one clean row per car with price, mileage, first registration, fuel, gearbox, power, location, dealer and photos. No login, cookies or API key are needed: type a make and a model, start, and 20 listings arrive in about 10 seconds for $0.0073.
Good for
- Track asking prices and mileage for one model in one or more countries.
- Watch for new listings of a car you want to buy (schedule + Only new listings).
- Build a list of dealers that sell a model, with their rating and location.
- Collect a price sample for valuation or market research.
Not a good fit
- No full listing page: no description text, equipment list, colour, CO2 or seller phone numbers.
- No private seller contacts. For private sellers you get only city, zip and country.
- At most 2,000 listings per run. AutoScout24 shows up to 4,000 results per search; split big searches by country, year or price.
- Other AutoScout24 markets (for example Switzerland) and other car sites are not covered.
Who uses it
Car buyers
Watch for new listings of the car you want.
Dealers and traders
Track asking prices for one model across countries.
Valuation and research teams
Collect price samples for a model and year.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.0025 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Saved listing | $0.00024 (from $0.0002 on paid Apify plans) | One car listing saved in the Dataset. Already-seen listings in onlyNew mode are not charged. |
Examples
- One result: about $0.0027.
- 1,000 results: about $0.24.
- Every day 100 results, for 30 days: about $0.79 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 20,000 results.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Which countries are covered?
Germany, Austria, Belgium, Spain, France, Italy, Luxembourg and the Netherlands.
Do I get seller phone numbers?
No. For private sellers you get only city, zip and country.
Do I get the full car description?
No. The tool reads search results, not the full listing page.
Do I need an AutoScout24 account?
No. The tool reads public search results only.
Do I need an AutoScout24 account, cookies or an API key?
No. The Actor reads public search results only.
Why is firstRegistration null for some cars?
New cars often have no registration date yet. null means AutoScout24 shows no value.
How fresh is the data?
Every run reads AutoScout24 live. fetchedAt shows when each row was read. Prices and listings can change after that.
Can I get more than 4,000 listings for one search?
AutoScout24 shows at most 4,000 results per search, and the Actor saves at most 2,000 per run. Split a big search by country, year or price range.
Details
Step by step on Apify
- Open the Input tab.
- Type a Make (
make), for exampleBMW, and a Model (model), for example3 Series. - Keep the prefilled Country
de(Germany) and Maximum listings20, or change them. - Click Start.
- Open the Output tab and check
title,priceandmileageKm.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Price check for one model | make, model, country | Car listing | price, mileageKm, year, priceRating | Export to CSV or Excel |
| Alert on new cars | onlyNew: true + schedule | New car listings only | url, price, firstRegistration | Webhook or integration on run finish |
| Dealer list for a model | make, model, country | Car listing from a dealer | dealerName, dealerId, dealerRating, location | Spreadsheet or CRM import |
| Narrow buying search | yearFrom, priceTo, mileageMax, condition | Car listing | price, mileageKm, fuel, transmission | API call from your app |
Tips for better results
- Use the model line, like 3 Series, to cover 316, 318 and 320.
- Split big searches by country, year or price. One run saves up to 2,000.
- A wrong model name fails fast with suggestions. It costs only the start.
Limits and good to know
- Listings already seen in Only new listings mode are skipped and not charged
- A run with a wrong make or model fails fast and costs only the run start
- If the run stops at your spending cap or time limit, you pay only for the rows that were saved
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"id": "ffb3f43b-6b16-4b35-84f1-e1ac2706c187",
"url": "https://www.autoscout24.com/offers/bmw-320-d-touring-advantage-hifi-dab-spur-diesel-black-cat_ma13mo1641-ffb3f43b-6b16-4b35-84f1-e1ac2706c187",
"title": "BMW 320 d Touring Advantage / HIFI / DAB / Spur",
"make": "BMW",
"model": "320",
"modelGroup": "3 Series",
"version": "d Touring Advantage / HIFI / DAB / Spur",
"price": 19299,
"currency": "EUR",
"priceRating": "top-price",
"mileageKm": 112257,
"firstRegistration": "2021-02",
"year": 2021,
"fuel": "Diesel",
"transmission": "Automatic",
"powerKw": 140,
"powerHp": 190,
"engineCc": 1995,
"offerType": "used",
"location": { "countryCode": "DE", "zip": "21614", "city": "Buxtehude", "street": "Example Street 3" },
"sellerType": "dealer",
"dealerName": "Example Autohaus",
"dealerId": "44450405",
"dealerRating": 5,
"dealerReviewCount": 9,
"images": ["https://prod.pictures.autoscout24.net/listing-images/ffb3f43b-…/720x540.webp"],
"imageCount": 15,
"source": "autoscout24",
"fetchedAt": "2026-10-15T00:54:34.255Z"
}Use it from code
Actor ID: cliqtomedia/car-listings-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/car-listings-scraper").call(run_input={
"make": "BMW",
"model": "3 Series"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~car-listings-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"make": "BMW", "model": "3 Series"}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/car-listings-scraper")
result = tool.invoke({"run_input": {"make": "BMW", "model": "3 Series"}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (29)
| Field | Type | Meaning |
|---|---|---|
id | string | AutoScout24 listing id (UUID in the listing URL). |
url | string | Public listing page on www.autoscout24.com. |
title | string | Make, model and version joined, e.g. "BMW 320 d Touring M Sport". |
make | string | Make, e.g. "BMW". |
model | string | Model, e.g. "320"; null when AutoScout24 lists the car under the make only (some vans and "Others"). |
modelGroup | string | Model family when AutoScout24 provides it, e.g. "3 Series". |
version | string | Version text written by the seller, e.g. "d xDrive Touring M Sport". |
price | integer | Asking price; null when the listing shows no price (never 0 for a missing price). |
currency | string | Price currency (EUR in all 8 markets); null without a price. |
priceRating | string | AutoScout24 price rating label when shown, e.g. "good-price"; null otherwise. |
mileageKm | integer | Odometer reading in kilometres. |
firstRegistration | string | First registration as "YYYY-MM" (or "YYYY"). |
year | integer | Year of first registration. |
fuel | string | Fuel type, e.g. "Diesel", "Gasoline", "Electric". |
transmission | string | Gearbox, e.g. "Automatic", "Manual". |
powerKw | integer | Engine power in kW. |
powerHp | integer | Engine power in hp. |
engineCc | integer | Engine displacement in cm3; null when not stated (often for electric cars). |
offerType | string | used, new, demonstration, pre_registered, employee_car or classic; other AutoScout24 codes are passed through as-is (e.g. "A"). |
location | object | Where the car is offered: countryCode, zip, city; street only for dealers. |
sellerType | string | dealer or private. |
dealerName | string | Dealer company name; always null for private sellers. |
dealerId | string | AutoScout24 dealer id; null for private sellers. |
dealerRating | number | Dealer star rating on AutoScout24 when shown. |
dealerReviewCount | integer | Number of dealer reviews when shown. |
images | array | Photo URLs (720x540) from the search result, in listing order. |
imageCount | integer | Number of photo URLs in images. |
source | string | Always "autoscout24". |
fetchedAt | string | When the row was fetched (ISO 8601, UTC). |
Input settings (13)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Make | make | string | "BMW" |
| Model | model | string | "3 Series" |
| Country | country | string | "de" |
| First registration from (year) | yearFrom | integer | |
| First registration to (year) | yearTo | integer | |
| Price from (EUR) | priceFrom | integer | |
| Price to (EUR) | priceTo | integer | |
| Maximum mileage (km) | mileageMax | integer | |
| Condition | condition | string | "any" |
| Sort order | sort | string | "newest" |
| Maximum listings | maxItems | integer | 20 |
| Only new listings | onlyNew | boolean | false |
| Monitoring name (optional) | stateKey | string |
