AutoScout24 Scraper - Vehicle Listings, Prices & 30+ Fields
Pricing
from $0.80 / 1,000 results
AutoScout24 Scraper - Vehicle Listings, Prices & 30+ Fields
From $0.8/1K. A lean, production-grade scraper for autoscout24.com. Point it at a search, get back clean JSON with 30+ fields per vehicle. Designed for dealers, market analysts, valuation pipelines, lead generation, and anyone who needs autoscout24 data on tap.
Pricing
from $0.80 / 1,000 results
Rating
5.0
(1)
Developer
Abot API
Maintained by CommunityActor stats
3
Bookmarked
40
Total users
6
Monthly active users
16 hours ago
Last modified
Categories
Share
AutoScout24 Scraper: Vehicle Listings, Prices and Dealer Contacts
AutoScout24 Scraper turns AutoScout24 into a clean vehicle data feed. Search cars by make, model, country, price, year, mileage, fuel type, transmission or body type, or paste your own AutoScout24 search links, and get back structured listings with price, mileage, specs, location and seller details. Turn on optional detail and dealer lookups for around 100 extra fields per car and a dealer's email, VAT ID, registered address and opening hours, then export to JSON, CSV or Excel, or pull results straight into your app through the API. Coverage spans all 8 countries AutoScout24 lists cars for: Germany, Austria, Belgium, Spain, France, Italy, Luxembourg and the Netherlands.
Why This Scraper?
- Two ways to find cars. Filter by make, model, country, price, year, mileage, fuel type, transmission and body type, or paste a search link straight from your browser. Each URL paginates on its own.
- 30+ core fields per listing. Make, model, year, price, mileage, transmission, fuel, location, seller type and contact, ratings and images, out of the box.
- Full detail enrichment on demand. Switch on Fetch full details for around 100 extra fields: equipment list, fuel consumption, body color, paint type, electric range, drivetrain, previous owners, service history and the dealer's own description.
- Dealer contact lookup. Switch on Fetch dealer email, VAT, address to add a dealer's email, VAT ID, registered address, homepage and opening hours, looked up once per dealer and reused across all their listings.
- Pan-European coverage. Filter by up to 8 countries, Germany, Austria, Belgium, Spain, France, Italy, Luxembourg and the Netherlands, in a single run.
- Multi-page pagination with dedup. Drop in several search URLs or filter combinations, each walks forward page by page with no duplicate listings.
- Built for schedules. Incremental mode returns only new, updated and reappeared listings on recurring runs, and Resume continues one interrupted crawl without paying twice for listings it already collected.
Use Cases
- Price intelligence: track asking prices for a specific make, model, year or trim across countries to spot trends.
- Dealer analysis: pull every listing from one dealer, with contact and VAT details, to monitor inventory and turnover.
- Lead generation: collect dealer name, phone, WhatsApp number and email from fresh listings.
- Market research: compare fuel mix, body style share or mileage distribution across the 8 covered countries.
- Valuation and pricing models: feed a pricing engine with current inventory and dealer metadata.
- Inventory mirroring: sync a dealer's own stock into a CRM or another marketplace.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
listingId | "a1b2c3d4-0000-0000-0000-000000000000" |
url | "https://www.autoscout24.com/offers/bmw-x5-example" |
title | "BMW X5" |
make / model | "BMW" / "X5" |
year / firstRegistration | 2020 / "03/2020" |
bodyType | "SUV/Off-Road/Pick-Up" (needs Fetch full details) |
transmission | "Automatic" |
fuel | "Diesel" |
powerKw / powerHp | 170 / 231 |
mileageKm | 120000 |
price / priceDisplay | 35000 / "β¬ 35,000" |
currency | "EUR" |
country / city | "DE" / "Munich" |
latitude / longitude | 48.1351 / 11.5820 |
sellerType | "Dealer" |
companyName | "Example Motors GmbH" |
phones | [{ "phoneType": "Office", "formattedNumber": "+00 000 0000000" }] |
ratingsStars / ratingsCount | 4.5 / 120 |
isOfferNew | true |
images / imageCount | ["https://images.example.com/example.jpg"] / 15 |
equipment | ["Air conditioning", "Navigation system"] (needs Fetch full details) |
dealerEmail / dealerVatId | "contact@example-dealer.invalid" / "DE000000000" (needs Fetch dealer email, VAT, address) |
scrapedAt | "2026-04-25T10:00:00.000Z" |
Fetch full details also adds variant, modelVersion, engineDisplacement, whatsappNumber, createdAt, leadsRange, offerReference, youtubeLink, twinnerUrl, hasThreeSixtyContent, priceNegotiable, taxDeductible, netPrice, vatRate, paintType, upholstery, upholsteryColor, seats, doors, cylinders, drivetrain, fuelConsumptionCombined, co2EmissionGramPerKm, electricRangeKm, previousOwners, hadAccident, hasFullServiceHistory, newInspection, warranty and description. Fetch dealer email, VAT, address (which automatically also fetches full details) also adds dealerAddress, dealerHomepage and dealerOpeningHours. Incremental mode adds changeType, changedFields, firstSeenAt and lastSeenAt to every record.
How to Use
- Pick a mode:
search(build a search from filters) orurl(paste your own AutoScout24 search links). - In search mode, set Make, Model, Countries and any other filters you need. In URL mode, paste one or more search URLs; filter fields are ignored.
- Set Maximum listings and Maximum pages per search to control run size and cost, and turn on Fetch full details or Fetch dealer email, VAT, address if you need the extra fields.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search by filters:
{"mode": "search","make": "bmw","model": "x5","countries": ["D"],"yearMin": 2020,"maxListings": 50}
Direct URLs (each auto-paginates):
{"mode": "url","urls": ["https://www.autoscout24.com/lst/audi/a4?fuel=D&gear=A"],"maxListings": 100}
Full detail and dealer contact enrichment:
{"mode": "search","make": "porsche","model": "911","fetchDetails": true,"fetchDealerInfo": true,"maxListings": 30}
Daily monitoring, only changes on later runs:
{"mode": "search","make": "volkswagen","model": "golf","countries": ["D", "NL"],"incrementalMode": true}
URL mode: supported URL shapes
Default in URL mode: if URLs is left empty, the actor scrapes the all-cars listing https://www.autoscout24.com/lst (every make, every country, up to Maximum listings), not a specific search. Paste your own links to scope the run. A pasted ?page=N start page is honoured (the walk begins there, so incremental EXPIRED detection is skipped for that run).
| URL shape | Example | Supported |
|---|---|---|
| All-cars listing | https://www.autoscout24.com/lst | Yes |
| Make only | https://www.autoscout24.com/lst/bmw | Yes |
| Make + model + filter | https://www.autoscout24.com/lst/bmw/x5?fregfrom=2020 | Yes |
| Paginated and sorted | https://www.autoscout24.com/lst/bmw/x5?page=2&sort=price&desc=0 | Yes, starts at page 2 |
| Multi-filter query | https://www.autoscout24.com/lst/bmw/x5?cy=D&fuel=D&atype=C | Yes |
| Multi-value country | https://www.autoscout24.com/lst/bmw/x5?fregfrom=2020&priceto=50000&cy=D%2CA | Yes |
| Path facet (fuel) | https://www.autoscout24.com/lst/bmw/x5/ft_diesel | Yes |
| Path facet (city) | https://www.autoscout24.com/lst/bmw/x5/ci_berlin | Yes |
| Other country host | https://www.autoscout24.de/lst/bmw/x5 | Yes |
Single listing (/offers/..., /angebote/...) | https://www.autoscout24.com/offers/<slug>-<uuid> or /offers/<uuid> | Yes, one full detail record per URL (the same fields as a search row with Fetch full details on) |
| Dealer page | https://www.autoscout24.com/dealerinfo/acio-bv | Yes, the dealer's current stock |
| Motorcycle listing | https://www.autoscout24.com/lst-moto | Yes |
Migrating from another AutoScout24 scraper: searchUrls is accepted as an alias of urls and maxPage as an alias of maxPages. When you fill only searchUrls (with URLs empty or left at its default), the run switches to URL mode automatically, unless you also set search filters. Each record also carries the raw listing blocks id, availableNow, coverImageAttractiveness, headerImage, ratings, location, seller, vehicle and vehicleDetails (with Fetch details on, vehicle also holds the detail-page specifications).
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/autoscout24-scraper").call(run_input={"mode": "search", "make": "bmw", "model": "x5", "countries": ["D"]})for car in client.dataset(run["defaultDatasetId"]).iterate_items():print(car["title"], car["price"], car["mileageKm"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/autoscout24-scraper').call({ mode: 'search', make: 'bmw', model: 'x5', countries: ['D'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted or previous large crawl: paste a run ID or dataset ID and this run loads everylistingIdalready saved there, skips it, and appends only new listings, so you don't pay twice. - Incremental mode (
incrementalMode) is for running the same search on a schedule (daily, weekly). The first run returns everything asNEW. Later runs return onlyNEW,UPDATED(withchangedFields) andREAPPEAREDlistings by default; unchanged listings are suppressed and not billed unlessemitUnchangedis on.EXPIREDlistings are only produced after a run that scanned the whole tracked search, and only withemitExpiredon. Each listing is compared field by field with its saved copy; onlyscrapedAtand the raw listing blocks (id,availableNow,coverImageAttractiveness,headerImage,ratings,location,seller,vehicle,vehicleDetails) are excluded by default (measured: nothing else changed between repeat scrapes of the same search without the car changing). Most of those blocks mirror flat fields that are compared, but with Fetch full details on, the detail-only specifications insidevehicle(weights, dimensions, load figures, WLTP values, HSN/TSN, service dates) have no flat twin and are NOT compared, so a change in only those values is not reported asUPDATED. AndignoreFieldsForChangesexcludes more, for exampleimagesorleadsRangeif you see churn there.changedFieldsnever lists an ignored field. Widening the ignore list never causes a wave ofUPDATEDrows, because the saved copy is re-compared with the current ignore set. A pasted URL that starts past page 1 never producesEXPIREDrows. State is tracked separately per search or URL setup automatically; setstateKeyto name or deliberately share a monitoring campaign.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify β Settings β Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build a URL from filters) or url (paste your own URLs). |
urls | array | https://www.autoscout24.com/lst | AutoScout24 search URLs (or single-listing URLs) to scrape. URL mode only; ignored in search mode. |
searchUrls | array | (none) | Alias of urls, for migrating from another AutoScout24 scraper. Used when urls is empty or still the default; switches to URL mode unless search filters are set. |
make | string | (none) | Manufacturer name or slug, e.g. BMW, Mercedes-Benz, mercedes benz. Checked against the site's own make list; an unknown make fails the run with the closest matches. Search mode only. |
model | string | (none) | Model name or slug, e.g. X5, C-Class. Checked against the site's model list for the make; an unknown model fails the run with the closest matches. Requires Make. Search mode only. |
countries | array | [] | Listing country, multi-select. Empty means all 8 supported countries. Search mode only. |
ustate | string | both | Vehicle state: New, Used, or Both. Search mode only. |
bodyType | string | "" (Any) | Body shape filter. Search mode only. |
fuelTypes | array | [] | Fuel type(s), multi-select. Empty means any fuel. Search mode only. |
transmission | string | "" (Any) | Gearbox type filter. Search mode only. |
sellerType | string | "" (Any) | D dealer or P private seller. Search mode only. |
colors | array | [] (Any) | Body colour codes (1 Beige, 2 Blue, 3 Brown, 4 Bronze, 5 Yellow, 6 Grey, 7 Green, 10 Red, 11 Black, 12 Silver, 13 Violet, 14 White, 15 Orange, 16 Gold). Search mode only. |
priceMin | integer | (none) | Lower bound for price, in EUR. Search mode only. |
priceMax | integer | (none) | Upper bound for price, in EUR. Search mode only. |
yearMin | integer | (none) | Oldest first registration year. Search mode only. |
yearMax | integer | (none) | Newest first registration year. Search mode only. |
kmMin | integer | (none) | Lower bound for mileage, in km. Search mode only. |
kmMax | integer | (none) | Upper bound for mileage, in km. Search mode only. |
powerMinKw | integer | (none) | Lower bound for engine power, in kW. Search mode only. |
powerMaxKw | integer | (none) | Upper bound for engine power, in kW. Search mode only. |
sortBy | string | standard | Sort order: relevance, price, age, mileage or first registration, ascending or descending. Search mode only. |
fetchDetails | boolean | false | Fetch each listing's detail page for around 100 extra fields. Adds one request per listing. |
fetchDealerInfo | boolean | false | Fetch each unique dealer's public imprint page for email, VAT ID, registered address, homepage and opening hours. Automatically also fetches full details, since the imprint link comes from the detail page. Cached per dealer. |
maxListings | integer | 20 | Stop after scraping this many listings across the whole run (maximum 1,000,000). |
maxPages | integer | 0 | Safety bound on result pages walked per search or URL, about 20 listings per page. 0 means unlimited: the walk stops naturally once a page is empty or starts repeating, or once Maximum listings is reached. |
maxPage | integer | (none) | Alias of maxPages. |
resumeFromRunId | string | (none) | Continue one interrupted or previous large crawl by pasting its run ID or dataset ID. |
incrementalMode | boolean | false | Turn on for recurring monitoring of the same search: later runs return only new and changed listings. |
stateKey | string | (none) | Name this monitoring campaign, or share state across differently configured runs. Incremental mode only. |
emitUnchanged | boolean | false | Also return, and bill, listings that have not changed since the last run. Incremental mode only. |
emitExpired | boolean | false | Also return, and bill, listings that were tracked before but are no longer found. Incremental mode only. |
ignoreFieldsForChanges | array | [] | Field names (dotted paths for nested ones) that must not count as a change in incremental mode; they stay in the output. scrapedAt and the raw listing blocks (id, availableNow, coverImageAttractiveness, headerImage, ratings, location, seller, vehicle, vehicleDetails) are always ignored; note that with Fetch full details on, the detail-only specifications inside vehicle (weights, dimensions, WLTP, HSN/TSN, service dates) are therefore not compared. Incremental mode only. |
proxyConfiguration | object | Apify Proxy | Connection settings. The default works without changes for typical runs. |
mcpConnectors | array | (none) | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which item pages are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"listingId": "a1b2c3d4-0000-0000-0000-000000000000","url": "https://www.autoscout24.com/offers/bmw-x5-example","title": "BMW X5","make": "BMW","model": "X5","year": 2020,"firstRegistration": "03/2020","bodyType": "SUV/Off-Road/Pick-Up","transmission": "Automatic","fuel": "Diesel","powerKw": 170,"powerHp": 231,"mileageKm": 120000,"price": 35000,"priceDisplay": "β¬ 35,000","currency": "EUR","country": "DE","city": "Munich","zip": "80331","latitude": 48.1351,"longitude": 11.5820,"sellerType": "Dealer","companyName": "Example Motors GmbH","phones": [{ "phoneType": "Office", "formattedNumber": "+00 000 0000000" }],"ratingsStars": 4.5,"ratingsCount": 120,"dealerEmail": "contact@example-dealer.invalid","dealerVatId": "DE000000000","color": "Grey","seats": 5,"doors": 5,"drivetrain": "4WD","previousOwners": 1,"hasFullServiceHistory": true,"images": ["https://images.example.com/example.jpg"],"imageCount": 15,"scrapedAt": "2026-04-25T10:00:00.000Z"}
Output views
The dataset has these table views in the Console: Overview (core listing fields), Seller info, Media (images), Changes (incremental mode) (changeType, changedFields, firstSeenAt, lastSeenAt with price and URL) and Vehicle details (fetchDetails) (colour, paint, seats, drivetrain, consumption, owners, service history, equipment, description). A run summary (totalListings, searches requested and run) is saved under the OUTPUT key of the run's key-value store.
Plan Requirement
The default Apify Proxy setting works for typical runs, including datacenter connections; no residential proxy is required. If a connection is rejected the actor rotates to another automatically. For very large or frequent runs a residential proxy group gives more headroom; pick it under Proxy configuration.
If your Apify plan has no proxy access (free plans), the run stops with: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required". If a residential group was selected on a free plan the actor continues on a backup connection and logs that residential proxies are unavailable; if that also cannot load pages the run fails with "No results: residential proxies are unavailable on this run". If pages simply fail to load you get "Could not load any results page ... This is a connection problem, not an empty search." You can also supply your own proxy URLs.
FAQ
How much does it cost?
Pricing is pay per event: a small one-time Actor Start charge per run (one event per GB of memory; $0.08333 per event on the Bronze plan, $0.10 on Free) plus $0.001 per result on the Bronze plan ($0.0015 on Free), as registered on the actor's Pricing tab. Optional detail and dealer enrichment add extra requests per listing or per dealer, so they take a little longer per run. The Pricing tab on the actor page shows current rates. Use Maximum listings to cap the size, and cost, of any run.
Is it legal to scrape AutoScout24?
This actor collects only publicly available listing and imprint data. You are responsible for how you use it: follow AutoScout24's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listed prices and specifications are generally facts, but photos and dealer branding may be subject to third-party rights.
What is the difference between Resume and Incremental mode?
They solve different problems. Resume (resumeFromRunId) continues one specific run that was interrupted or capped: it skips listings a named previous run or dataset already collected. Incremental mode is for scheduling the same search again and again, for example daily, and getting back only what changed since last time, without you ever pasting a run ID. Turning both on together fails the run with a clear message if that search already has saved incremental state.
Do I need to turn on Fetch full details separately to get dealer email, VAT and address?
No. Turning on Fetch dealer email, VAT, address automatically fetches each listing's detail page too, since that is where the link to the dealer's imprint page comes from. You do not need to also check Fetch full details, though doing so adds the roughly 100 extra vehicle fields on top.
Why did my run return fewer listings, or an empty dataset, instead of failing?
A run stops with an explicit error only when the connection settings cannot be set up, when Resume from a previous run points at a run or dataset this account cannot read, or when Incremental mode is combined with Resume on a search that already has tracked incremental state. In every other case, for example filters that match nothing, or a stretch where AutoScout24 pages could not be read, the run finishes normally and simply returns fewer records, or none. Check the run log for page-level warnings to tell "no matching cars" apart from "some pages could not be read".
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
π Want more car data?
Pair this actor with these related scrapers from the same team:
| π mobile.de Scraper Scrape mobile.de vehicle listings with 30+ fields including price, mileage, registration... | π AutoTrader UK Scraper Pull structured vehicle listings from autotrader.co.uk at scale. Search by filters or use... |
| π EasyAuto123 Scraper Scrape EasyAuto123 vehicle listings into clean structured data. Extract prices, VINs... | π Autotrader US Scrape US car listings from Autotrader by make, model, ZIP, price, year, body style... |
| π Cars.com Scraper Scrape cars.com listings by make, ZIP and radius. 90+ fields per car: price, MSRP... | π Craigslist Scraper Scrape Craigslist postings in any of 700+ cities worldwide: price, title, posting text... |
π Browse all abotapi scrapers
π¬ Support & custom scrapers
- π Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- π οΈ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- β Enjoying it? A quick review on the actor page helps other users find it.