US Autotrader Scraper avatar

US Autotrader Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
US Autotrader Scraper

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

Fahim Mahmud Chisti

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

10 days ago

Last modified

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

  1. Open the Actor's Input tab.
  2. Add search keywords, Autotrader search URLs, or direct vehicle URLs.
  3. Select Entire United States or Specific state.
  4. When using a specific state, select its two-letter state code.
  5. 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 as Toyota Camry, Ford F-150, or electric SUV.
  • startUrls — Autotrader search or vehicle-detail URLs. Existing filters (including zip, radius, and sort) are preserved.
  • locationScopenationwide or state.
  • state — required for state scope; supports all 50 states and DC.
  • maxItems — maximum listings saved across all searches; 0 means 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 (default false).
  • duplicateCheckApiUrl — optional POST exists API; leave empty for Apify storage only.
  • duplicateCheckStoreName — named KV store (default vehicle-listing-urls).
  • proxyConfiguration — US residential proxy settings are strongly recommended.

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 duplicateCheckApiUrl is set, the Actor POSTs batches of up to 500 listing URLs to your endpoint, then skips URLs returned in existing. 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 duplicateCheckApiUrl is 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. 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

  • Keep the default US residential proxy configuration.
  • 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 duplicateCheck on scheduled re-runs to skip vehicles you already stored.
  • Set scrapeItemDetails: false when search-card fields are enough.
  • Prefer skipping known listings over raising memory.
  • Keep browser concurrency low.
  • The run Container URL exposes / and /status for live progress while the Actor is active.

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.