AutoTrader Vehicle Listings Scraper (US & UK)
Pricing
from $0.50 / 1,000 results
AutoTrader Vehicle Listings Scraper (US & UK)
Scrape AutoTrader car listings from a ZIP code, a UK postcode or a search URL you built on the site. Rows carry year, make, model and trim, numeric price and mileage, VIN, body style, fuel and transmission, plus the selling dealer's name, city and state. Covers autotrader.com and autotrader.co.uk.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
String
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
What does the AutoTrader Vehicle Listings Scraper do?
Hand it a ZIP code, a UK postcode, or a search URL you built on AutoTrader itself, and it returns the vehicles from that search as structured rows. Year, make, model and trim arrive in separate columns. Price and mileage arrive as numbers. US rows also carry the VIN, the body style, the fuel type, the gearbox, and the dealer's name with city and state.
The Actor covers two sites: autotrader.com in the United States and autotrader.co.uk in the
United Kingdom. Pick one with the market field. Both are read as a logged-out visitor, with no
account, no login and no cookies.
- Up to 100 US listings from a single search, which is the most one autotrader.com results page serves
priceis43413andmileageis126431, so filtering and averaging need no string work- Paid spotlight and boost placements are dropped from US results, so a row answers your search rather than someone's ad budget
- Every row records the search URL it came from and when the run started
- A search that fails is written into the run's
SUMMARYwith its error, and a run where every search failed exits as a failure rather than reporting success on an empty dataset
What data does it extract?
| Field | Type | Description |
|---|---|---|
listingId | string | AutoTrader's own listing ID. Stable across runs, use it as your key |
title | string | e.g. "New 2026 Hyundai Santa Fe SEL" |
year | number | Model year, e.g. 2026 |
make | string | e.g. Hyundai |
model | string | e.g. Santa Fe |
trim | string | e.g. SEL. On UK rows this is the listing's subtitle |
price | number | Numeric price, e.g. 43413. UK prices include fees |
priceText | string | The formatted price, or the dealer's own label when no price is published |
mileage | number | Numeric odometer reading, e.g. 126431 |
bodyStyle | string | e.g. Sport Utility. US only |
fuelType | string | e.g. Gasoline. US only |
transmission | string | e.g. Automatic. US only |
vin | string | 17-character VIN. US only |
dealerName | string | The selling dealer |
city | string | Dealer city in the US, vehicle location in the UK |
state | string | US only |
detailUrl | string | Link to the listing page on AutoTrader |
sourceUrl | string | The search this row came from |
collectedAt | string | ISO timestamp, set once per run |
Fields a market does not publish come back as null, never as an empty string or a guess.
Why scrape AutoTrader?
Used-car pricing is local and it moves weekly, which is exactly the kind of thing a spreadsheet pulled by hand cannot keep up with.
- Price a vehicle against its real market. Pull every 2019-2022 listing of one model within 50 miles and you have the actual asking-price curve by mileage band, not a national average from a valuation site.
- Watch a dealer's lot. Re-run the same search on a schedule, key on
listingId, and you can see what a dealership added, what it cut the price on, and what finally sold. - Build a VIN-keyed dataset. US rows carry the VIN, which is the join key for history, recall and valuation data you already hold.
- Find dealers to sell to.
dealerName,cityandstateacross a market give you a list of active dealerships with a rough sense of inventory size, which is a better lead list than a directory scrape. - Compare two markets honestly. Run the same make and model against
usandukand you can see how the two markets price the same metal, with the caveat that UK prices include fees.
How to use it
- Open the Actor and click Try for free.
- Choose the Market:
usfor autotrader.com orukfor autotrader.co.uk. This is the one input that changes everything else, so set it first. - Fill Searches. A bare US ZIP or UK postcode works. So does a full search URL copied out of your browser after you have set the filters on the site by hand, which is the easier way to get a narrow search.
- Set Maximum results if you want fewer rows than the searches would naturally return.
- Click Start.
- Export the dataset from the Storage tab as CSV, JSON or Excel, or read it over the API.
- For price tracking, put the run on a Schedule and diff successive runs on
listingId.
Do not mix markets in one run. A UK postcode against market: "us" is a search for a ZIP code that
does not exist, and it will come back as a failure.
Input
| Field | Type | Default | Description |
|---|---|---|---|
searches | string[] | required | US ZIPs, UK postcodes, or full AutoTrader search URLs. 1 to 100 per run |
market | string | us | us for autotrader.com, uk for autotrader.co.uk |
maxItems | integer | 1000 | Cap on dataset rows, 1 to 50000 |
concurrency | integer | 5 | Searches fetched in parallel, 1 to 10 |
{"searches": ["78701", "https://www.autotrader.com/cars-for-sale/all-cars?zip=10001&makeCode=TOYOTA"],"market": "us","maxItems": 200}
A bare US ZIP searches all cars within 50 miles and asks for 100 records. A bare UK postcode searches from that postcode with the site's default sort.
A full search URL is the better input whenever you want filters. For the US market the URL is fetched
as you wrote it, with numRecords set to 100 unless you set it yourself. The UK gateway takes its
criteria as a checked filter list rather than as query parameters, so a UK search URL is translated,
and these are the parameters that carry across:
postcode, make, model, radius, price-from, price-to, year-from, year-to,
minimum-mileage, maximum-mileage, fuel-type, body-type, transmission, colour, doors,
seller-type, sort, page.
Anything else on a UK URL is ignored rather than passed through, because an unrecognised filter name fails the whole gateway query.
Output
One row per vehicle. This is the shape, with plausible values rather than a captured run:
{"listingId": "769104338","title": "Used 2021 Toyota RAV4 XLE Premium","year": 2021,"make": "Toyota","model": "RAV4","trim": "XLE Premium","price": 27995,"priceText": "$27,995","mileage": 41208,"bodyStyle": "Sport Utility","fuelType": "Gasoline","transmission": "Automatic","vin": "2T3P1RFV8MW164027","dealerName": "Charles Maund Toyota","city": "Austin","state": "TX","detailUrl": "https://www.autotrader.com/cars-for-sale/vehicle/769104338","sourceUrl": "https://www.autotrader.com/cars-for-sale/all-cars?zip=78701&searchRadius=50&numRecords=100","collectedAt": "2026-08-19T09:14:02.771Z"}
A UK row has the same columns, with vin, bodyStyle, fuelType, transmission and state set to
null and price quoted as a fees-inclusive total.
The run also writes a SUMMARY record to the key-value store carrying the item count, the failure
count, and every search that failed with its error.
The two markets are not the same product
They share a brand and nothing else, and it shows in the data. Reading this before you plan a UK run will save you a surprise.
autotrader.com renders its search results into the page's own hydrated state, which holds the same
listing objects the site's private listing API returns. That means exact prices, exact mileages and
VINs rather than text scraped off a card. The Actor takes the active search results only, so the
spotlight and boost placements sitting in the same blob are left out.
autotrader.co.uk ships an essentially empty document and calls a GraphQL gateway from the browser,
so the Actor calls that gateway directly and asks only for natural listings, which keeps adverts out
of the result set. The response is card-shaped: mileage and registration year arrive as badge text,
and fuel, gearbox, body style and VIN are simply absent, because the site does not request them for a
results card. No other field carries them, so they are null rather than filled in from somewhere
else. The UK response also has no dealer name, only a link to the dealer's page, so dealerName is
reconstructed from that link's slug and may not match the dealer's trading name exactly.
Reliability and limitations
One results page per search, in both markets. In the US that is 100 listings, the maximum
autotrader.com serves. In the UK it is one page of gateway results; add page=2 to a UK search URL to
read the next one. To cover a market more deeply, run several narrower searches, split by make, model
or price band, rather than expecting one search to page forever.
Search results only. Vehicle history reports, full photo sets, complete option and feature lists,
seller phone numbers and financing terms are all out of scope. Only autotrader.com and
autotrader.co.uk URLs are accepted; a URL on any other host is rejected before it costs a fetch.
There are no retries, deliberately. The String Unblocker owns proxy rotation and anti-bot solver selection, so a retry loop here would only re-roll the same block.
How much does it cost?
The Actor uses Apify's pay-per-event pricing and charges once per result row written to the dataset. You pay for rows, not for run time, memory or the number of searches it took to produce them, and a run that returns nothing charges nothing. The current per-result price is on the pricing tab above.
Charging happens on the push, so an account spend limit trims the write rather than overrunning it: a row that could not be charged for is never written.
Runs started from an Apify free plan stop at 250 requests and 250 results and report that they
hit the limit. Any paid plan runs the full input and whatever maxItems you set. The limit exists
because this Actor fetches through our own infrastructure, which Apify does not cover for free-plan
runs, and it binds on requests as well as rows so a hundred-search input cannot spend those fetches
on rows the run will never return.
Using it with the Apify API
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_APIFY_TOKEN" });const run = await client.actor("usestring/autotrader-listings").call({searches: ["78701", "10001"],market: "us",maxItems: 200});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, items[0]);
Swap market to "uk" and pass postcodes such as "SW1A 1AA" for the UK site. The same call works
from the Python client, or straight against the Apify REST API. The
failure list lives in the SUMMARY record in the run's key-value store.
Is it legal to scrape AutoTrader?
The Actor reads search results that AutoTrader serves to any visitor, with no login and no paywall in the way. It does not sign in, does not touch buyer accounts or saved searches, and collects no personal data. A dealership's name and city are business contact details that AutoTrader publishes on the listing itself.
Scraping public data is broadly lawful in the US and the EU. What you do with it afterwards is a different question, governed by copyright, database rights and, in the UK, the site's own terms. Vehicle listings and photos are the dealers' content. If you intend to republish the data or resell it, get legal advice first. Nothing here is legal advice.
Related actors
- Zillow Property Listings Scraper for the same search-to-rows shape on US homes
- Zillow Property Detail Scraper when you have specific properties rather than a search
- Realtor.com Listings Scraper as a second source of US residential inventory
- LoopNet Commercial Listings Scraper for commercial real estate, another dealer-style marketplace
FAQ
How many listings does one search return?
Up to 100 in the US, which is the ceiling autotrader.com's own results endpoint serves regardless of
what you ask for. The UK returns one page of gateway results per search; append page=2, page=3
and so on to a UK search URL to walk further.
Which countries are supported?
The United States and the United Kingdom, chosen with market. Those are the only two AutoTrader
sites the Actor reads. Canadian and Australian AutoTrader sites are separate businesses and are not
covered.
Does every listing have a VIN?
US listings carry vin whenever AutoTrader publishes it. UK listings never do. The UK results API
returns no VIN, and no fuel type, gearbox or body style either.
Why does a row have priceText but no price?
Because the dealer published no price. priceText then carries the dealer's own label, something
like "Contact Dealer For Price", and price is null rather than zero.
Are sponsored listings included? No. The US market takes only the active search results, so spotlight and boost placements are left out even though they sit in the same page state. The UK query asks for natural listings only.
How fresh is the data, and what happens if a search is blocked?
Every search is fetched live when the run starts; nothing is cached. A search that fails is recorded
under failures in the run's SUMMARY with its URL and error, and the run carries on with the rest.
If all of them failed, the run exits with an error instead of quietly succeeding with no data.
Feedback
If a field comes back wrong, a UK filter you need is not carried across, or a search consistently fails, open an issue from this Actor's Issues tab and include the exact input you ran. Field requests are welcome there too.