AutoTrader UK Scraper - Cars, Prices, Specs & Dealers
Pricing
from $1.00 / 1,000 results
AutoTrader UK Scraper - Cars, Prices, Specs & Dealers
Pull structured vehicle listings from autotrader.co.uk at scale. Search by filters or use AutoTrader URLs. Returns price, make, model, year, mileage, full specs, finance, vehicle history check, photo gallery, and dealer contact details.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
0
Monthly active users
14 days ago
Last modified
Categories
Share
AutoTrader UK Scraper: Prices, Specs, History Checks & Dealer Contacts
AutoTrader UK Scraper turns autotrader.co.uk into structured vehicle data. Get price, make, model, year, mileage, full specification, a 10-point vehicle history check, finance details and complete dealer contact information for cars, vans, bikes, motorhomes, caravans, trucks, farm and plant listings. Search by filters or paste AutoTrader search and advert links, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- More data than typical scrapers. 100+ fields per vehicle, including full dealer contact (name, phone, email, postal address, GPS coordinates, opening hours), FCA finance registration, a 10-point vehicle history check, structured specification, running costs and the complete photo gallery with per-image classification tags.
- Two ways in. Search by filters (make, model, price, year, mileage, fuel, body, transmission, colour, drivetrain, seller type, distance and more) or paste any AutoTrader search or advert URL.
- Eight marketplaces, one actor. Cars, vans, bikes, motorhomes, caravans, trucks, farm and plant, all through the same input.
- Full result depth on request. Walks up to 100 result pages per search, up to the site's own ceiling of about 2,000 listings; set Max pages to go past the default of 1.
- Pay only for the detail you use. The per-advert enrichment surcharge is billed only for adverts whose detail page is actually fetched and kept in the output; a listing-grid-only search run adds no surcharge.
- Resume and recurring monitoring. Continue an interrupted crawl with
resumeFromRunId, or turn on Incremental mode to schedule the same search and get only the listings that are new, changed, back on sale, or gone. - Keeps working without you managing connections. The run rotates and escalates its connection automatically when one gets rejected, and steps back down to the cheaper tier once it is no longer needed.
Use Cases
- Dealer stock monitoring: track a dealer's or a competitor's live inventory, price changes and how long stock sits before it sells.
- Market pricing research: build price-per-mile and price-per-year datasets across makes and models to spot under- and over-priced listings.
- Lead generation: collect dealer contact details and current stock for outreach lists or an aggregator site.
- Vehicle history and condition screening: pull the 10-point history check and full specification before shortlisting a vehicle.
- Price-drop and new-listing alerts: schedule Incremental mode so you only hear about listings that appear, change price, or disappear.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
advertId | "302099001122334" |
url | "https://www.autotrader.co.uk/car-details/302099001122334" |
channel | "cars" |
title / subTitle | "Ford Focus" / "1.0 EcoBoost Titanium 5dr" |
make / model | "Ford" / "Focus" |
year | 2021 |
condition | "used" |
mileage | 18500 |
price / priceFormatted | 14500 / "£14,500" |
priceIndicator | "FAIR" |
monthlyPrice | "£210" |
fuelType / bodyType / transmission | "Petrol" / "Hatchback" / "Manual" |
engineSizeLitres / doors / seats | "1.0L" / "5" / "5" |
bodyColour | "Blue" |
sellerType | "TRADE" |
dealerName | "Northgate Motor Group" |
dealer.phone / dealer.email | "(0113) 496 0000" / "sales@example-dealer.co.uk" |
dealer.postcode | "LS1 4AP" |
latitude / longitude | 53.8000 / -1.5000 |
vehicleCheck.status | "PASSED" |
numberOfImages | 24 |
keyFeatures | ["Apple CarPlay", "Cruise Control"] |
changeType / changedFields / firstSeenAt / lastSeenAt | present only when incrementalMode is on, see "Resume and recurring updates" below |
Each record also carries the full page description and structured specification list, running costs (CO2 emissions, road tax, fuel economy, insurance group), a finance breakdown (FCA name and number, lender type), full service history and owner count, the complete photo gallery with per-image classification tags plus any videos or 360 spins, an expert review rating and link where AutoTrader publishes one, and the dealer's full postal address, website, opening hours and review count. Search-mode records also carry badges, the seller's distance and location text, manufacturer/franchise-approval flags and the finance summary shown on the results grid.
A pasted single advert URL is fetched directly, without going through the search grid, so it never carries the search-grid-only fields above (title, subTitle, make, model, year, price, priceFormatted, badges, photo list, sellerType, finance summary, condition, priceIndicator, monthlyPrice, numberOfImages, vehicleLocation, distanceMiles, and other card-only bookkeeping fields): those are only ever attached from a search (search mode or a pasted search-results URL), or when the same advert also appears in one of those in the same run. A pasted advert URL still returns the detail-page fields (specification, history check, finance, gallery, dealer contact, mileage) in full.
How to Use
- Pick a mode:
search(fill in vehicle type, postcode and filters) orurl(paste AutoTrader search or advert links). - For search mode, set the vehicle type, postcode and any filters; for url mode, paste one or more links, mixing search-result and single-advert URLs freely.
- Turn Fetch full advert details on or off, and set Max pages / Max listings to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search a make and model, listing grid only (cheapest):
{"mode": "search","channel": "cars","make": "Ford","model": "Focus","postcode": "LS1 4AP","maxPages": 3,"fetchDetails": false}
Search with filters and full detail enrichment:
{"mode": "search","channel": "cars","make": "Audi","minPrice": 10000,"maxPrice": 25000,"minYear": 2019,"fuelType": "Diesel","transmission": "Automatic","radius": 30,"postcode": "M1 1AE","maxListings": 150,"fetchDetails": true}
Paste URLs (a search and a single advert in one run):
{"mode": "url","urls": ["https://www.autotrader.co.uk/car-search?make=Tesla&postcode=SW1A1AA","https://www.autotrader.co.uk/car-details/302099001122334"],"maxPages": 2,"fetchDetails": true}
Recurring monitoring with full expiry detection (an uncapped run so a complete scan is possible):
{"mode": "search","channel": "cars","make": "Ford","model": "Focus","postcode": "LS1 4AP","maxPages": 100,"maxListings": 0,"fetchDetails": true,"incrementalMode": true,"emitExpired": true,"stateKey": "ford-focus-leeds-watch"}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/autotrader").call(run_input={"mode": "search", "channel": "cars", "make": "Ford", "postcode": "LS1 4AP", "fetchDetails": False,})for vehicle in client.dataset(run["defaultDatasetId"]).iterate_items():print(vehicle["title"], vehicle["priceFormatted"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/autotrader').call({mode: 'search', channel: 'cars', make: 'Ford', postcode: 'LS1 4AP', fetchDetails: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Pasting a single advert URL
A pasted advert URL (for example .../car-details/302099001122334) always fetches and bills that advert's full detail page, whatever the Fetch full advert details toggle is set to; the toggle only governs whether listings found through a search (search mode or a pasted search-results URL) get the detail surcharge. See "Data You Get" above for exactly which fields a lone advert URL does and does not carry.
How Max pages and Max listings shape a run
AutoTrader caps a single search at 100 result pages of about 20 listings each (about 2,000 listings total). Max pages defaults to 1 page per search; raise it to walk deeper. Max listings caps the overall run across every search or URL and defaults to 0 (unlimited, so the run is then bounded only by Max pages). To pull more than about 2,000 matching vehicles, subdivide the search by price band, year, make or area and run again.
Resume and recurring updates
| Need | Use |
|---|---|
| A crawl stopped and should continue | resumeFromRunId |
| Run the same search on a schedule and get only the changes | incrementalMode |
| Keep separate recurring campaigns for similar searches | distinct stateKey values |
| A normal one-off snapshot | leave both off |
Resume (resumeFromRunId) continues one specific interrupted or previous crawl: paste a run or dataset ID and this run skips listings already collected there, appending only the remainder.
Incremental mode (incrementalMode) is for a schedule against the same search: the actor remembers the previous run by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED (with changedFields) and, for a listing that had previously been tombstoned as gone and is now found again, REAPPEARED. UNCHANGED rows are suppressed and not billed unless emitUnchanged is on. REAPPEARED is never assigned "by default": a listing can only be tombstoned as gone inside emitExpired processing, and that processing only runs after a run that reached the natural end of every tracked search, was not capped by Max listings or Max pages, was not a resumeFromRunId run, and scanned at least one listing. Only a listing tombstoned by such a run can later come back as REAPPEARED. stateKey names or shares the stored state; leave it empty and the actor derives one automatically from the mode and filters.
EXPIRED rows follow the same gate: they are produced only once a run proves it scanned the tracked search end to end, never when Max listings or Max pages capped the run early, a page was blocked, or resumeFromRunId was used, since none of those prove a missing listing is actually gone.
A recurring run that finds nothing new returns an empty dataset, and that is a success, not an error: every tracked listing was found and compared, then suppressed because none of them changed. The run status message says so, and nothing is charged for those suppressed rows.
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 vehicle, 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.
Use maxNotifyListings to cap how many vehicles each connector receives per run. 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 (filters) or url (paste links); fields for the other mode are ignored. |
channel | string | cars | Vehicle marketplace: cars, vans, bikes, motorhomes, caravans, trucks, farm or plant. |
postcode | string | SW1A 1AA | UK postcode used as the search centre and distance reference. |
make | string | no default (prefill: BMW) | Exact AutoTrader make. Leave empty for all makes. |
model | string | no default | Exact AutoTrader model; only applies when a make is set. |
minPrice | integer | no default | Minimum price (basis set by priceSearchType). |
maxPrice | integer | no default | Maximum price (basis set by priceSearchType). |
minYear | integer | no default | Earliest registration/manufacture year. |
maxYear | integer | no default | Latest registration/manufacture year. |
minMileage | integer | no default | Minimum mileage. |
maxMileage | integer | no default | Maximum mileage. |
fuelType | string | "" (any) | Petrol, Diesel, Electric, Hybrid and plug-in variants. |
bodyType | string | "" (any) | Hatchback, Saloon, Estate, SUV, Coupe, Convertible, MPV, Pickup (car values shown; other vehicle types accept their own). |
transmission | string | "" (any) | Automatic or Manual. |
colour | string | no default | Exterior colour, e.g. Black. Leave empty for any. |
drivetrain | string | "" (any) | Front Wheel Drive, Rear Wheel Drive, or Four Wheel Drive. |
sellerType | string | any | trade (dealer) or private. |
minEngineSize | string | no default | Minimum engine size in litres, e.g. 1.6. |
maxEngineSize | string | no default | Maximum engine size in litres, e.g. 3.0. |
doors | integer | no default | Exact number of doors. |
seats | integer | no default | Exact number of seats. |
radius | integer | no default | Limit results to this many miles from the postcode. Leave empty for national. |
writeoffStatus | string | include | Include all, exclude write-offs, or only write-offs. |
priceSearchType | string | total | Apply price filters to total price or monthly finance payment. |
sortBy | string | relevance | relevance, price_asc, price_desc, distance, mileage, year_dsc, year_asc, most_recent. |
urls | array | no default (prefill: a sample search URL) | AutoTrader search or advert URLs (url mode). |
fetchDetails | boolean | true | Add full per-advert detail to listings found through a search (search mode or a pasted search-results URL), one extra request per listing. A pasted advert URL always fetches and bills its detail page regardless of this toggle. |
includeFinanceGuides | boolean | false | Keep AutoTrader's static PCP/HP/CS finance explainer text (identical on every advert, so off by default). Only applies when detail is fetched. |
maxPages | integer | 1 | Result pages per search (about 20 listings each). AutoTrader caps a single search at 100 pages. |
maxListings | integer | 0 | Overall cap across all searches/URLs. 0 means no cap (bounded by Max pages instead). |
proxy | object | Apify Proxy (datacenter) | Connection settings. |
maxResidentialRequests | integer | 400 | Cap on residential connections used before falling back to a backup connection pool. 0 disables residential entirely. |
mcpConnectors | array | no default | Optional MCP connectors to pipe results into (see above). |
notionParentPageUrl | string | no default | Notion page under which vehicle pages are created (Notion connector only). |
maxNotifyListings | integer | 50 | Cap on vehicles written to each connector per run; does not affect the dataset. |
resumeFromRunId | string | no default | Continue one specific previous run/dataset, skipping listings already collected there. |
incrementalMode | boolean | false | Recurring monitoring of the same search: later runs return only new/changed listings. See "Resume and recurring updates" above. |
stateKey | string | no default | Names or deliberately shares an incremental-mode monitoring campaign. Auto-derived from the mode/filters when left empty. |
emitUnchanged | boolean | false | Incremental mode only. Also return (and bill) listings unchanged since the last run, marked UNCHANGED. |
emitExpired | boolean | false | Incremental mode only. Also return (and bill) listings no longer found, marked EXPIRED, once a run has fully scanned the search. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"advertId": "302099001122334","url": "https://www.autotrader.co.uk/car-details/302099001122334","channel": "cars","title": "Ford Focus","subTitle": "1.0 EcoBoost Titanium 5dr","make": "Ford","model": "Focus","vehicleCategory": "Car","year": 2021,"condition": "used","mileage": 18500,"price": 14500,"priceFormatted": "£14,500","priceIndicator": "FAIR","priceIndicatorLabel": "Fair price","hasFinance": true,"monthlyPrice": "£210","financeProvider": "Sample Finance","sellerType": "TRADE","dealerName": "Northgate Motor Group","dealerReviewRating": 4.3,"dealerReviewCount": 182,"vehicleLocation": "Leeds","distanceMiles": 12,"latitude": 53.8,"longitude": -1.5,"images": ["https://m.atcdn.co.uk/a/media/w800h600/sample0001.jpg"],"numberOfImages": 24,"badges": [{ "type": "MILEAGE", "text": "18,500 miles" }],"fuelType": "Petrol","bodyType": "Hatchback","engineSizeLitres": "1.0L","engineSizeCC": 999,"transmission": "Manual","drivetrain": "Front Wheel Drive","doors": "5","seats": "5","bodyColour": "Blue","emissionClass": "Euro 6","trim": "Titanium","description": ["A well maintained example with a full service history."],"keySpecification": [{ "label": "Mileage", "value": "18,500 miles" }],"specifications": [{ "category": "Performance", "items": [{ "label": "0-62mph", "value": "10.5 seconds" }] }],"keyFeatures": ["Apple CarPlay", "Cruise Control"],"standardEquipment": ["Bluetooth", "Air Conditioning"],"runningCosts": [{ "label": "Insurance group", "value": "12E" }],"co2Emissions": "108g/km","annualTax": "£180","fuelConsumption": "54.3mpg","insuranceGroup": "12E","vehicleCheck": {"status": "PASSED","statusText": "10 checks passed","checks": [{ "id": "STOLEN", "label": "Not recorded as stolen", "status": "PASSED" }]},"serviceHistory": { "type": "FULL", "label": "Service history", "description": "Full service history" },"owners": "2","finance": { "monthlyPrice": "£210", "fcaName": "Sample Finance Limited", "fcaNumber": "000111", "lenderType": "appointed representative" },"dealer": {"name": "Northgate Motor Group","email": "sales@example-dealer.co.uk","phone": "(0113) 496 0000","website": "https://www.example-dealer.co.uk","address": "1 Sample Business Park","town": "Leeds","county": "West Yorkshire","postcode": "LS1 4AP","openingHours": [{ "day": "Monday", "hours": "09:00 - 18:00" }]},"galleryImages": [{ "url": "https://m.atcdn.co.uk/a/media/w800h600/sample0001.jpg", "tags": ["Front Right"] }],"scrapedAt": "2026-01-01T00:00:00.000Z"}
Plan Requirement
The default connection setting (datacenter) works out of the box for this site, and the run rotates the exit automatically on a rejection, escalating to a residential connection (subject to the residential usage cap) and then a backup connection only if datacenter keeps getting rejected; it steps back down once the connection is healthy again. For the largest or most frequent runs, pinning a residential country under Connection can help.
A single AutoTrader search returns at most about 2,000 listings, since the site caps a query at 100 pages; subdivide by price band, year, make or area and run again to pull more. Featured and sponsored adverts can appear first regardless of the chosen sort order, and optional fields vary by vehicle: electric vehicles expose different specification than petrol or diesel, and finance details depend on the dealer.
FAQ
How much does it cost?
Listing-grid results are billed at the dataset's normal per-item rate. The per-advert detail enrichment is a separate surcharge, billed only for adverts whose detail page is actually fetched and kept in the output: for search-mode listings that means only when Fetch full advert details is on, but a pasted single advert URL always fetches and bills it regardless of that toggle. The Pricing tab shows the current rates. Use Max listings and Max pages to cap the cost of any run.
Is it legal to scrape AutoTrader?
This actor collects only publicly available vehicle listing data. You are responsible for how you use it: follow AutoTrader's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing facts such as price, specification and mileage are generally data, but photos and dealer branding may be subject to third-party rights, and dealer contact details are personal or business data, so handle them accordingly.
Can I get only new, changed or expired listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Later runs then return only NEW and UPDATED listings by default, and unchanged ones are not billed. Turn on Emit expired to also learn when a tracked listing disappears, once a run has scanned the whole search end to end; REAPPEARED only appears once that has happened, for a listing an earlier such run had marked gone.
Why does a pasted advert URL return so many empty fields?
A pasted advert URL is fetched directly, without going through the search grid, so it never picks up the search-grid-only fields (title, make, model, year, price, badges, photo list, condition, price indicator, monthly price, number of images, vehicle location). It still returns the full detail-page fields (specification, history check, finance, gallery, dealer contact, mileage). To get both for the same vehicle, also pass a search URL that would surface it, or use search mode with matching filters.
Why did my run return an error row instead of an empty dataset?
When nothing could be scanned at all (a filter combination with no matches, no working connection, or no resolvable input), the actor writes one row with error: true and a short code and message instead of quietly finishing with nothing, so a blocked run is never mistaken for a genuine zero-result search; the run itself still completes normally in that case. The run fails outright only when your input is contradictory: for example, pointing Resume from a previous run at a search that already has saved Incremental mode state, or when the ID in Resume from a previous run cannot be read by your Apify account.
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 AutoTrader data?
Pair this actor with these related scrapers from the same team:
| 🚗 Autotrader US Scrape US car listings from Autotrader by make, model, ZIP, price, year, body style... | 🚗 EasyAuto123 Scraper Scrape EasyAuto123 vehicle listings into clean structured data. Extract prices, VINs... |
| 🚗 Cars.com Scraper Scrape cars.com listings by make, ZIP and radius. 90+ fields per car: price, MSRP... | 🚗 mobile.de From $0.8/1K. Scrape mobile.de vehicle listings with 30+ structured fields including... |
| 🚗 Marktplaats.nl Scraper From $1/1K. Scrape Marktplaats.nl listings by keyword or URL. Extract title, price... | 🚗 Carsales.com.au Scraper Scrape structured vehicle listings from Carsales.com.au from $1 per 1K results. Built to... |
💬 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 abotapi@proton.me or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.