AutoScout24 Scraper – European Car Listings
Pricing
from $1.50 / 1,000 results
AutoScout24 Scraper – European Car Listings
Extract AutoScout24 car listings, prices, mileage and dealer data. Optional details, per-search limits, budget checks and explicit coverage reports. Export JSON/CSV for vehicle market research.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
ninhothedev
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
What does AutoScout24 Scraper do?
Extract AutoScout24 car listings, asking prices and dealer information into JSON, CSV or Excel. Use a German AutoScout24 search or structured filters for make, model, price, mileage, year, fuel and seller type. Optional detail requests add descriptions, photos and location fields where published.
For dealers and researchers, this provides repeatable input for stock comparisons and price analysis through the Apify API. Each run is a current snapshot; compare listing IDs downstream to detect changes. It does not calculate valuations or retain a price history for you.
Start with a small search
- Paste a results URL in Search URLs, or clear that field to use the filters. A starting
pageis honored; pagination never adds a secondpageparameter. - Start with three cars. Enable Fetch full details if you need descriptions and inspect
detail_statusafterward. - Check the Coverage and stop reasons output, then download the dataset or connect your workflow. Increase the sample only after checking its fields and coverage.
{"searchUrls": ["https://www.autoscout24.de/lst/bmw?sort=standard&page=2"],"maxItemsPerSearch": 3,"fetchDetails": true,"detailConcurrency": 2}
The Input tab lists all filters. maxItemsPerSearch is a cap per distinct search URL, not a guarantee that this many matching cars exist. Identical URLs are processed once. Overlapping, different searches can each contain the same car; deduplicate by id downstream for a combined inventory.
What data is available?
| Fields | Meaning |
|---|---|
id, url, title | Listing identity and source link |
price, currency, price_eur | Asking price and EUR conversion; conversion uses a static fallback if the FX service is unavailable |
price_label, is_super_deal, old_price | Source price label and advertised reduction, where available |
make, model, model_group, variant | Vehicle identity |
mileage_km, first_registration, year | Mileage and registration |
fuel_type, transmission, power_kw, power_ps, engine_ccm | Vehicle characteristics in the source language |
seller_type, seller_name, city, zip_code, country | Public seller and location fields |
images, thumbnail_url | Source image URLs |
description, street, latitude, longitude, suggested_retail | Detail enrichment where published; description limited to 4,000 characters |
detail_status | not_requested, succeeded or failed; success does not imply every optional field exists |
search_url, scraped_at | Search provenance and UTC collection time |
Coverage, limits and restarting
The Actor visits at most source page 20 per search. A URL starting at page 19 therefore has at most two pages left. Page size, inventory and source access can vary. Requesting 5,000 cars does not unlock 5,000 results. Split broad searches by model, price or region if the report shows page_limit; splitting is not automatic.
RUN_SUMMARY reports complete, partial or incomplete, stored row counts, attempted searches, per-search stop reasons and unprocessed URLs. complete means the requested bounded work finished, not that you have every car in a market.
item_limit: requested per-search cap reached.source_exhausted: a valid source response explicitly contained no further listings.page_limitorrepeated_page: coverage is partial; inspect and narrow the search.fetch_failed,parse_failedorsearch_error: the source could not be read reliably.budget_limit: the available result budget stopped further work.
Failed detail requests retain the useful search row with detail_status=failed and make the report partial. If all searches fail without any output, the run fails instead of reporting an empty success. A genuine zero-result response is allowed.
A restart of the same run uses stored listing IDs and search checkpoints to avoid delivering the same search/listing pair again. Completed searches are skipped. A partially processed search may be fetched again to find its remaining rows. Keep searches, limits and detail mode unchanged on resurrection. A new scheduled run creates a new, separately billed snapshot; it does not return only new listings.
Pricing and spending limits
Current base prices are $1.50 per 1,000 saved rows, plus $0.00005 per GB of start memory, with at least one start event. The live Pricing tab is authoritative for your plan and any discounts. A three-row run at 512 MB is $0.00455 at these base event prices; actual source output may be lower.
Set Maximum total charge to bound result spending. The Actor checks the SDK allowance before each search and only enriches rows within the current allowance. It counts rows accepted by the SDK. Detail failures still produce a useful, billable search row with an explicit failure status. Prices are unchanged by this release.
Output example
Historical search-row example from a 15 October 2026 test, with images shortened. Current output additionally includes detail_status; live cars and prices will differ.
[{"id": "550dd6a5-ac4b-46be-8350-b8f431a54223","url": "https://www.autoscout24.de/angebote/bmw-3er-i-xdrive-limousine-m-sportpaket-hifi-dab-led-benzin-grau-cat_ma13gr100038ge28va105mt122tr479990-550dd6a5-ac4b-46be-8350-b8f431a54223","title": "BMW 3er i xDrive Limousine M Sportpaket HiFi DAB LED","country": "DE","price": 47890,"currency": "EUR","price_eur": 47890,"price_label": "top-price","is_super_deal": false,"old_price": "","make": "BMW","model": "330","model_group": "3er","variant": "Limousine","mileage_km": 26641,"first_registration": "02-2026","year": 2026,"fuel_type": "Benzin","transmission": "Automatik","power_kw": 180,"power_ps": 245,"engine_ccm": 1998,"condition": "used","seller_type": "dealer","seller_name": "Autohaus Unterberger GmbH","city": "Rosenheim","zip_code": "83026","street": "","latitude": null,"longitude": null,"description": "","suggested_retail": null,"images": ["https://prod.pictures.autoscout24.net/listing-images/550dd6a5-ac4b-46be-8350-b8f431a54223_7047deeb-4785-4c21-9bc8-d9e201b15d53.jpg/250x188.webp"],"thumbnail_url": "https://prod.pictures.autoscout24.net/listing-images/550dd6a5-ac4b-46be-8350-b8f431a54223_7047deeb-4785-4c21-9bc8-d9e201b15d53.jpg/250x188.webp","search_url": "https://www.autoscout24.de/lst/bmw","scraped_at": "2026-10-15T18:01:20.656531+00:00"}]
You can download the dataset as JSON, HTML, CSV or Excel. Check the output schema for the coverage-report link as well as the rows.
API and recurring workflows
import osfrom datetime import timedeltafrom decimal import Decimalfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("ninhothedev/autoscout24-scraper").call(run_input={"searchUrls": ["https://www.autoscout24.de/lst/bmw?sort=standard&page=2"],"maxItemsPerSearch": 3, "fetchDetails": True, "detailConcurrency": 2,},memory_mbytes=512,run_timeout=timedelta(seconds=180),max_total_charge_usd=Decimal("0.01"),)if run is None or run.status != "SUCCEEDED":raise RuntimeError("Run did not succeed; inspect its log.")record = client.key_value_store(run.default_key_value_store_id).get_record("RUN_SUMMARY")if record is None or record["value"]["status"] != "complete":raise RuntimeError("Coverage is partial or unavailable; inspect RUN_SUMMARY.")for car in client.dataset(run.default_dataset_id).iterate_items():print(car["id"], car["price_eur"], car["detail_status"], car["url"])
Save a task and use Apify Schedules, n8n, Make or webhooks for recurring snapshots. Compare stable IDs and prices in your own database or sheet. A webhook signals run completion; interpreting changes and sending alerts belongs to your downstream workflow.
FAQ and support
Which country sites can I use?
Inputs accept .de, .at, .ch, .it, .es, .nl, .be, .fr, .lu and .com AutoScout24 search domains. Source layouts and access differ; this is not a guarantee that all domains work at every moment. Begin with a small test of your actual country URL. Country filters are ignored when explicit URLs are supplied.
Do I need a proxy?
The default uses Apify Proxy; it can be explicitly disabled. Availability depends on the source and IP. A configured proxy is not a guarantee of access. Inspect the run log and summary if searches are blocked rather than treating a missing dataset as proof of no matching cars.
How do I report a problem?
Open the Actor’s Issues tab with the run ID, minimal input and expected result. Keep credentials and private customer data out. Public listings can contain personal information; use the data only for an appropriate purpose and follow applicable source terms.
Related data
mobile.de vehicle listings · Immowelt property listings · ImmoScout24 listings