AutoTrader UK Scraper - Cars, Prices, Specs & Dealers avatar

AutoTrader UK Scraper - Cars, Prices, Specs & Dealers

Pricing

from $1.00 / 1,000 results

Go to Apify Store
AutoTrader UK Scraper - Cars, Prices, Specs & Dealers

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

Abot API

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

5 days ago

Last modified

Share

AutoTrader UK Scraper

Pull structured vehicle listings from AutoTrader UK at scale: price, make, model, year, mileage, full specification, finance, a 10-point vehicle history check, the complete photo gallery and every dealer contact detail. Search by filters or paste AutoTrader URLs. The scraper is fast, robust against page redesigns, and works on every Apify plan.

Covers all eight AutoTrader marketplaces: cars, vans, bikes, motorhomes, caravans, trucks, farm and plant.

Why this scraper

  • More data than the alternatives. 120+ fields per vehicle, including full dealer contact (name, phone, email, postal address, GPS coordinates, opening hours), FCA finance registration, a 10-point history check, structured spec, running costs and the full gallery with per-image classification tags.
  • Lower cost. An efficient data path means a default run uses the datacenter connection tier. No premium connection is needed for typical runs.
  • Reliable. Built to keep working through the site's frequent visual redesigns.
  • Two ways in. Search by filters (make, model, price, year, mileage, fuel, body, transmission, colour, drivetrain, seller, distance and more) or paste any AutoTrader search or advert URL.
  • Full result depth. Covers up to the site's ceiling of about 2,000 listings per search, with no manual page handling.
  • Smart connections. Rotates the exit on a rejection, escalates to a stronger connection tier only when needed (with a configurable usage cap), and steps back down to the cheap tier when healthy.
  • Pay only for what you use. Listing-grid runs are cheap; the per-advert detail enrichment is billed only when you turn it on.
  • Resume and recurring updates. Continue one interrupted crawl with resumeFromRunId, or turn on incrementalMode to schedule the same search daily/weekly and get only NEW/UPDATED/REAPPEARED listings each time.

Data you get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
advertId"000000000000000"
url"https://www.autotrader.co.uk/car-details/000000000000000"
title"BMW 3 Series"
subTitle"2.0 320d M Sport Auto"
make / model"BMW" / "3 Series"
year2020
condition"used"
mileage30000
price20000
priceFormatted"£20,000"
priceIndicator"GREAT"
monthlyPrice"£300"
fuelType"Diesel"
bodyType"Saloon"
transmission"Automatic"
engineSizeLitres"2.0L"
doors / seats"4" / "5"
bodyColour"Black"
sellerType"TRADE"
dealerName"Sample Motors"
dealer.phone"+440000000000"
dealer.email"sales@example.com"
dealer.postcode"AB12 3CD"
latitude / longitude51.0000 / -0.1000
vehicleCheck.status"PASSED"
numberOfImages20
changeType / changedFields / firstSeenAt / lastSeenAtpresent only when incrementalMode is on, see "Resume & recurring updates" below

Detail fields (description, full specification, history check, service history, finance, gallery, dealer contact) are populated when Fetch full advert details is on, and null otherwise, so the output shape is stable either way.

How to use

Search a make and model, listing grid only (cheapest):

{
"mode": "search",
"channel": "cars",
"make": "BMW",
"model": "3 Series",
"postcode": "SW1A 1AA",
"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": 50,
"postcode": "M1 1AE",
"maxListings": 200,
"fetchDetails": true
}

Scrape vans within 25 miles, sorted by most recent:

{
"mode": "search",
"channel": "vans",
"radius": 25,
"sortBy": "most_recent",
"postcode": "B1 1AA",
"maxPages": 5
}

Paste URLs (search results 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/000000000000000"
],
"maxPages": 2,
"fetchDetails": true
}

Input parameters

ParameterTypeDefaultDescription
modestring"search""search" (filters) or "url" (paste links).
channelstring"cars"cars, vans, bikes, motorhomes, caravans, trucks, farm, plant.
postcodestring"SW1A 1AA"Search centre and distance reference.
makestring-Exact AutoTrader make, e.g. BMW.
modelstring-Exact AutoTrader model; applies when make is set.
minPrice / maxPriceinteger-Price band (basis set by priceSearchType).
minYear / maxYearinteger-Year band.
minMileage / maxMileageinteger-Mileage band.
fuelTypestringanyPetrol, Diesel, Electric, Hybrid and plug-in variants.
bodyTypestringanyHatchback, Saloon, Estate, SUV, Coupe, Convertible, MPV, Pickup.
transmissionstringanyAutomatic or Manual.
colourstring-Exterior colour, e.g. Black.
drivetrainstringanyFront, Rear or Four Wheel Drive.
sellerTypestringanytrade (dealer) or private.
minEngineSize / maxEngineSizestring-Engine size band in litres, e.g. 2.0.
doors / seatsinteger-Exact door / seat count.
radiusinteger-Miles from postcode; empty for national.
writeoffStatusstring"include"include, exclude, or only written-off vehicles.
priceSearchTypestring"total"Apply price filters to total price or monthly payment.
sortBystring"relevance"relevance, price_asc, price_desc, distance, mileage, year_dsc, year_asc, most_recent.
urlsarray-AutoTrader search or advert URLs (url mode).
fetchDetailsbooleantrueAdd full per-advert detail (one extra request per listing).
includeFinanceGuidesbooleanfalseKeep the static finance explainer text (large, identical per advert).
maxPagesinteger2Pages per search (site cap is 100).
maxListingsinteger0Overall cap; 0 means unlimited.
maxResidentialRequestsinteger400Cap on residential exits before falling back to the backup pool; 0 disables residential.
proxyobjectdatacenterApify Proxy configuration.
mcpConnectorsarray-Optional MCP connectors to pipe results into (see below).
notionParentPageUrlstring-Notion page under which vehicle pages are created (Notion connector only).
maxNotifyListingsinteger50Cap on vehicles written to each connector per run; does not affect the dataset.
resumeFromRunIdstring(empty)Continue one specific previous run/dataset: listings already saved there are loaded before scraping starts and skipped, so this run only appends new listings. For recurring daily/weekly monitoring of the same search, use incrementalMode instead; see the "Resume & recurring updates" section below.
incrementalModebooleanfalseDaily/recurring monitoring of this same search. First run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default. See the "Resume & recurring updates" section below.
stateKeystring(auto)Incremental mode only. Names a monitoring campaign, or deliberately shares state across differently-configured runs. Leave empty to derive a key automatically from mode/filters.
emitUnchangedbooleanfalseIncremental mode only. Also return listings unchanged since the last run, marked UNCHANGED. Adds and bills extra rows you already have.
emitExpiredbooleanfalseIncremental mode only. Also return listings from a previous run no longer found, marked EXPIRED, once a run has fully scanned the search (not capped, not a resume). Adds and bills extra synthetic rows.

Resume & recurring updates

There are two different things here. Pick the one that matches what you're doing:

NeedUse
A crawl stopped and should continueresumeFromRunId
Run the same search every day/week and receive only changesincrementalMode
Keep separate recurring campaigns for similar searchesdistinct stateKey values
Run a normal full snapshotleave both off

Resume (resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run ID or dataset ID and this run skips listings already collected there, returning only the remaining new listings.

Incremental mode (incrementalMode) is for a schedule (for example, daily): the actor remembers the previous run of the same search by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED listings by default; duplicates and unchanged listings are suppressed (and not charged, even when their detail page was fetched to compute the comparison). Turn on emitUnchanged or emitExpired only when you also want those rows returned (and billed). State is isolated per mode/filter/channel/detail-mode setup automatically; set stateKey to name or deliberately share a monitoring campaign.

EXPIRED rows are only produced once a run proves it scanned the entire tracked search end-to-end. They are never produced when maxListings/maxPages 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: the listings were found and compared, then suppressed because none of them changed. The run status message says so, and no rows are written or charged. An error row is only written when the run scanned nothing at all (for example a filter combination with no matches).

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.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to 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.

Output example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"advertId": "000000000000000",
"url": "https://www.autotrader.co.uk/car-details/000000000000000",
"channel": "cars",
"title": "BMW 3 Series",
"subTitle": "2.0 320d M Sport Auto",
"make": "BMW",
"model": "3 Series",
"year": 2020,
"condition": "used",
"mileage": 30000,
"price": 20000,
"priceFormatted": "£20,000",
"priceIndicator": "GREAT",
"monthlyPrice": "£300",
"hasFinance": true,
"fuelType": "Diesel",
"bodyType": "Saloon",
"engineSizeLitres": "2.0L",
"engineSizeCC": 1995,
"transmission": "Automatic",
"drivetrain": "Rear Wheel Drive",
"doors": "4",
"seats": "5",
"bodyColour": "Black",
"emissionClass": "Euro 6",
"trim": "M Sport",
"sellerType": "TRADE",
"dealerName": "Sample Motors",
"dealerReviewRating": 4.6,
"dealerReviewCount": 100,
"latitude": 51.0000,
"longitude": -0.1000,
"numberOfImages": 20,
"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" },
"finance": { "monthlyPrice": "£300", "fcaName": "Sample Motors Limited", "fcaNumber": "000000", "lenderType": "appointed representative" },
"dealer": {
"name": "Sample Motors",
"email": "sales@example.com",
"phone": "+440000000000",
"website": "https://www.example.com",
"address": "1 Sample Road",
"town": "Sampletown",
"county": "Sampleshire",
"postcode": "AB12 3CD",
"openingHours": [{ "day": "Monday", "hours": "09:00 - 18:00" }]
},
"keyFeatures": ["Sat Nav", "Heated Seats"],
"images": ["https://m.atcdn.co.uk/a/media/w800h600/00000000000000000000000000000000.jpg"],
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Notes on results

  • A single AutoTrader search returns at most about 2,000 listings (the site caps a query at 100 pages). To pull more, subdivide the search by price band, year, make or area and run again.
  • Featured and sponsored adverts can appear first regardless of the chosen sort order.
  • Optional fields vary by vehicle: electric vehicles expose different spec than petrol or diesel, and finance details depend on the dealer.

Plan and connection notes

  • The default datacenter connection tier works for this scraper, so it runs on any Apify plan, including the free plan.
  • If datacenter exits start getting rejected, the run automatically escalates to UK residential (subject to the residential usage cap) and then to a backup pool. Residential proxy access requires a paid Apify plan.
  • For the largest runs, leave the proxy on the default and let the scraper manage the tiers, or pin a residential country if you prefer.