US Autotrader Scraper
Pricing
from $2.50 / 1,000 results
US Autotrader Scraper
Scrape Autotrader.com vehicle listings nationwide or for a specific US state.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Fahim Mahmud Chisti
Maintained by CommunityActor stats
0
Bookmarked
50
Total users
25
Monthly active users
2 days ago
Last modified
Categories
Share
What does US Autotrader Scraper do?
US Autotrader Scraper extracts public vehicle listings from Autotrader.com into a structured Apify dataset. It supports nationwide searches, verified state-specific results, keyword searches, filtered Autotrader URLs, and direct vehicle-detail URLs. Camoufox, browser sessions, retries, and US residential proxy support help handle Autotrader's JavaScript application and anti-bot controls.
Why use US Autotrader Scraper?
- Monitor vehicle inventory across the entire United States.
- Restrict saved vehicles to any US state or Washington, DC.
- Compare prices, mileage, model years, trims, and sellers.
- Track newly listed vehicles using newest-first search and optional age filtering.
- Export results through the Apify API or as JSON, CSV, Excel, XML, RSS, or HTML.
How to scrape Autotrader vehicles
- Open the Actor's Input tab.
- Add search keywords, Autotrader search URLs, or direct vehicle URLs.
- Select Entire United States or Specific state.
- When using a specific state, select its two-letter state code.
- Set item/page limits and start the Actor.
The Actor adds location parameters to search URLs but also verifies each listing's location before saving state-specific output. This prevents nearby out-of-state inventory from leaking into state results.
Input
searchKeywords— phrases such asToyota Camry,Ford F-150, orelectric SUV.startUrls— Autotrader search or vehicle-detail URLs. Existing filters (including zip, radius, and sort) are preserved.locationScope—nationwideorstate.state— required for state scope; supports all 50 states and DC.maxItems— maximum listings saved across all searches;0means unlimited.maxPagesPerSearch— maximum result pages per search.maxListingAgeDays— optional publication-age limit. Listings without a known date are excluded.scrapeItemDetails— opens detail pages for VIN, mileage, seller, specifications, description, and images.duplicateCheck— skip detail scraping for listing URLs already known (defaultfalse).duplicateCheckApiUrl— optional POST exists API; leave empty for Apify storage only.duplicateCheckStoreName— named KV store (defaultvehicle-listing-urls).proxyConfiguration— US residential proxies are strongly recommended: the Apify residential pool (default) or your own proxy URLs. See "Using your own proxies" below.
Nationwide example:
{"searchKeywords": ["Toyota Camry"],"locationScope": "nationwide","maxItems": 100,"maxPagesPerSearch": 3,"scrapeItemDetails": true}
Texas example:
{"startUrls": [{"url": "https://www.autotrader.com/cars-for-sale/all-cars?startYear=2020&endYear=2026"}],"locationScope": "state","state": "TX","maxItems": 50,"scrapeItemDetails": true}
Skip existing listings (duplicate check)
Autotrader detail scraping opens each vehicle in a real browser with residential proxies. On scheduled re-runs, most results are often listings you already stored. Duplicate check skips those URLs so you do not pay again for detail pages you already have.
Enable it with duplicateCheck: true (default false).
If N consecutive listing URLs in a search are known duplicates (N = duplicateCheckLeadingStop, default 20), that search stops (no further pages) to avoid paying for known inventory.
Modes
- When
duplicateCheckApiUrlis set, the Actor POSTs batches of up to 500 listing URLs to your endpoint, then skips URLs returned inexisting. It also reads and updates the named Apify Key-Value store. A URL is skipped if either your API or the store marks it as known. - When
duplicateCheckApiUrlis empty, the Actor uses the Apify Key-Value store only (no external API).
API contract
// Request{ "listingUrls": ["https://example.com/listing/1", "https://example.com/listing/2"] }// Response{"existing": ["https://example.com/listing/1"],"missing": ["https://example.com/listing/2"]}
listingUrls may also be a single string. URLs are normalized (query string and trailing slash ignored). No auth header is required for public endpoints. If the API call fails or exceeds a 20s timeout, the Actor fail-opens and scrapes the batch.
After a listing is saved successfully, its URL is written to the named store under the KNOWN_LISTING_URLS record so future runs skip it even without an API. Cached URLs expire after 30 days, and the store is capped at 50,000 entries (oldest first). Legacy boolean true entries are migrated to timestamps on load.
Example:
{"searchKeywords": ["Toyota Camry"],"locationScope": "nationwide","maxItems": 100,"duplicateCheck": true,"duplicateCheckApiUrl": "https://your-api.example.com/listings/exists","duplicateCheckStoreName": "vehicle-listing-urls"}
Output
The output uses the same vehicle contract as the eBay and Craigslist Actors:
{"itemId": "765432109","title": "2022 Toyota Camry XSE","listedAt": "2026-07-18T14:30:00.000Z","price": "29995","currency": "USD","year": "2022","make": "Toyota","model": "Camry","trim": "XSE","mileage": "31220","vin": "4T1TESTVIN1234567","location": "Austin, TX","seller": "Example Toyota","imageUrl": "https://images.autotrader.com/example.jpg","images": ["https://images.autotrader.com/example.jpg"],"url": "https://www.autotrader.com/cars-for-sale/vehicle/765432109"}
When the Actor is started from an Apify Task, each dataset item also includes taskId and taskName so you can track which Task produced it. Direct Actor runs set both to null.
Additional fields include description, condition, body type, engine, transmission, drivetrain, fuel type, colors, seller type, title status, source URL, page number, scrape timestamp, and a specifics object. Fields unavailable on a listing remain null.
Autotrader usually does not publish an exact listing timestamp. When a "days on site" / "days on market" counter is available, the Actor prefers that over embedded inventory dates and derives listedAt from the US Eastern calendar day (noon UTC, so the civil date stays stable across US timezones). It marks this with "listedAtDerivedFrom": "daysOnSite" in specifics. Private-seller listings sometimes expose no counter at all; if Autotrader flags them as newly listed, the Actor sets listedAt to today and marks it with "listedAtDerivedFrom": "isNewlyListed". The maxListingAgeDays filter uses the same value. Mileage strings like 32K mi are expanded to full mile counts.
Cost and performance
Autotrader requires a real browser, so this Actor uses more memory and compute than HTTP-only scrapers. Autotrader's edge protection (Akamai) also turns away most fresh residential IPs on the very first request, so the Actor runs a headed Camoufox browser per proxy session, matches the browser fingerprint (timezone, locale, WebRTC address) to that session's IP, and retries a blocked search page on up to thirty different IPs before giving up. If every page stays blocked and nothing is scraped, the run ends as FAILED instead of succeeding with an empty dataset. Expect the first search page of a run to take one to five minutes; once a browser is through, the Actor keeps that browser and proxy session for the rest of the run, and its vehicle-detail pages load without further blocks. Detail mode also opens one page per vehicle. Use maxItems, maxPagesPerSearch, and maxListingAgeDays to control cost. Enable duplicateCheck on scheduled re-runs to skip known vehicles. Set scrapeItemDetails: false when search-card fields are enough. Prefer skipping known listings over raising memory. Keep browser concurrency low. State searches may inspect extra listings because location is verified before output.
Tips
- Use US residential proxies, either the default Apify pool or your own provider; datacenter IPs are blocked on sight, and the retry budget assumes a fresh residential IP per attempt.
- Use filtered Autotrader search URLs for make, model, price, year, mileage, body style, and condition filters.
- Enable detail scraping for the most reliable state filtering and richest output.
- Enable
duplicateCheckon scheduled re-runs to skip vehicles you already stored. - Set
scrapeItemDetails: falsewhen search-card fields are enough.
Using your own proxies
Autotrader's edge protection scores each exit IP, so if the shared Apify residential pool is being turned away, your own residential provider may still get through. No code change is needed:
- In the Input tab, open Proxy configuration, switch to Your own proxies, and paste one URL per line in the form
http://user:pass@host:port. In JSON this is"proxyConfiguration": { "useApifyProxy": false, "proxyUrls": ["http://user:pass@host:port"] }. - The Actor gives each browser session one URL from the list and moves to the next URL on every retry. Prefer sticky-session URLs (most providers encode a session id in the username, for example
user-session-abc123), and list ten to thirty of them with different session ids. One stable exit IP per browser is what lets a browser that got through stay through for the rest of the run; a plain rotating gateway changes the IP mid-session and gets re-blocked. - The proxy must allow HTTPS
CONNECT. At browser launch the Actor looks up the exit IP through the proxy to match timezone and locale, so a proxy that is down fails fast with a proxy connection error in the log rather than an Akamai block page.
- Prefer skipping known listings over raising memory.
- Keep browser concurrency low.
- The run Container URL exposes
/and/statusfor live progress while the Actor is active.
Legal notice and support
Scrape only public information and comply with applicable law, Autotrader's terms, and reasonable request rates. The Actor does not intentionally collect private contact information. Autotrader can change its application or blocking behavior; if a run fails, provide its run ID and affected URL through the Actor's Issues tab.