Classic.com Vehicles Scraper avatar

Classic.com Vehicles Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Classic.com Vehicles Scraper

Classic.com Vehicles Scraper

Scrape Classic.com vehicle search results and listing pages from start URLs.

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

7

Total users

4

Monthly active users

7 days ago

Last modified

Security

Limited permissions

Share

What does Classic.com Vehicles Scraper do?

Classic.com Vehicles Scraper extracts classic and collector vehicle listings from Classic.com search and detail pages. Paste a filtered search URL (odometer, query, sort, page) or a direct /veh/... listing URL, and the Actor returns structured fields that match the other vehicle scrapers in this monorepo—title, price, mileage, VIN, seller, location, images, and more.

Run it on the Apify platform for scheduling, API access, proxy rotation, monitoring, and dataset exports (JSON, CSV, Excel, HTML).

Why use Classic.com Vehicles Scraper?

  • Track private-seller, dealer and auction inventory with your own Classic.com filters preserved in the start URL
  • Monitor lot dates and prices for comps research
  • Feed marketplaces, CRM tools, or valuation pipelines with consistent vehicle fields
  • Paginate search results and optionally open each listing for full specs

How to use Classic.com Vehicles Scraper

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Paste one or more Classic.com Start URLs (search or vehicle detail).
  3. Set Max items and Max pages per search (defaults are low for quick QA runs).
  4. Optionally enable Scrape item details for VIN, engine, colors, and description.
  5. Keep US residential proxies enabled; Classic.com fronts every page with a Cloudflare challenge.
  6. Click Start and download results from the Output / dataset tab.

Input

FieldDescription
startUrlsRequired. Classic.com /search/ or /veh/ URLs. Filters in the URL are kept.
maxItemsCap on saved listings (0 = unlimited). Default 5.
maxPagesPerSearchPages to crawl per search URL. Default 1.
maxListingAgeDaysOptional age filter using the listing lot/listed date.
scrapeItemDetailsOpen each vehicle page for richer fields. Default true.
duplicateCheckSkip detail scraping for listing URLs already known (default false).
duplicateCheckApiUrlOptional POST exists API; leave empty for Apify storage only.
duplicateCheckStoreNameNamed KV store (default vehicle-listing-urls).
proxyConfigurationPrefer Apify residential US proxies.

Example input:

{
"startUrls": [
{
"url": "https://www.classic.com/search/?filters%5Bodometer%5D%5Bend%5D=75000&filters%5Bodometer%5D%5Bstart%5D=0&page=1&q=Private+seller&sort=lotdate"
}
],
"maxItems": 5,
"maxPagesPerSearch": 1,
"scrapeItemDetails": false
}

Skip existing listings (duplicate check)

Classic.com detail scraping opens each vehicle in a 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:

{
"startUrls": [{ "url": "https://www.classic.com/search/?q=Private+seller&sort=lotdate" }],
"maxItems": 100,
"duplicateCheck": true,
"duplicateCheckApiUrl": "https://your-api.example.com/listings/exists",
"duplicateCheckStoreName": "vehicle-listing-urls"
}

Output

Each dataset item uses the shared vehicle listing shape. You can download the dataset as JSON, HTML, CSV, or Excel.

{
"itemId": "1996-jaguar-xj12-executive-long-sajmx6346tc764003-pg2ozLW",
"title": "1996 Jaguar XJ12 Executive Long",
"listedAt": "2026-10-31T12:00:00.000Z",
"price": "24900",
"currency": "USD",
"location": "Lake Havasu City, Arizona, USA",
"seller": "Private Seller",
"forSaleBy": "owner",
"year": "1996",
"make": "Jaguar",
"model": "XJ",
"trim": "Executive Long",
"mileage": "72000",
"transmission": "Automatic",
"engine": "6.0L V12",
"bodyType": "Sedan",
"exteriorColor": "Black",
"interiorColor": "Beige/Tan",
"vin": "SAJMX6346TC764003",
"specifics": {
"vehicle id": "1748655",
"listing status": "For Sale",
"price type": "Fixed-price",
"seller type": "Private Seller",
"seller url": "https://www.classic.com/s/private-seller-e45z7zn",
"country": "US",
"views (30 days)": "26",
"saves": "1",
"photo count": "15",
"model generation": "XJ300",
"doors": "4 Doors"
},
"url": "https://www.classic.com/veh/1996-jaguar-xj12-executive-long-sajmx6346tc764003-pg2ozLW/",
"imageUrl": "https://images.classic.com/vehicles/95b8a01e-4200-4dca-884e-c63c0979d99e.jpg",
"images": ["https://images.classic.com/vehicles/95b8a01e-4200-4dca-884e-c63c0979d99e.jpg"],
"page": 1,
"scrapedAt": "2026-10-31T17:00:00.000Z"
}

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.

With scrapeItemDetails: true, expect additional fields such as vin, engine, bodyType, driveType, exterior/interior colors, description, the full photo set, and the complete spec sheet in specifics.

Data fields

FieldNotes
itemIdClassic.com vehicle slug from /veh/{slug}/
titleListing title
listedAtLot/posted date (Date this listing was posted / card lot date), noon UTC
price / currencyAsking or sold price in USD when Classic.com shows it. Gated figures ("Upgrade to view price") stay null and set specifics["price visibility"].
mileageNormalized miles (e.g. 53k → 53000)
year / make / modelParsed from title and detail specs; trim and the model variant/generation come from the spec sheet
seller / forSaleByPrivate Seller / owner, the dealer's name / dealer, or the auction house's name / auction
locationCity, region, country as printed next to the flag icon; specifics.country holds the flag's ISO code
vinFrom the spec sheet when detail scraping is on, otherwise from the URL slug
images / imageUrlThis vehicle's own Classic.com CDN photos (hero rail and Media section); comps and history thumbnails are excluded
specificsSpec sheet plus vehicle id, listing status (For Sale / Sold / Off Market …), price type, driver side, seller type, seller url, source url (external auction listing), views (30 days) and saves (best effort: these counters render a beat after the page), photo count
url / sourceUrl / pageProvenance and pagination

Tips

  • Build the search on Classic.com first (filters, q, sort=lotdate), then copy the URL into startUrls.
  • Keep maxItems and maxPagesPerSearch small while testing; raise them for production runs.
  • Enable scrapeItemDetails when you need VIN or full specs—each listing costs an extra request.
  • Enable duplicateCheck on scheduled re-runs to skip listings you already stored.
  • Set scrapeItemDetails: false when search-card fields are enough.
  • Prefer skipping known listings over raising memory.
  • Keep browser concurrency low.
  • Classic.com fronts its pages with a Cloudflare challenge. The Actor runs a headed Camoufox browser per proxy session with the fingerprint matched to that session's IP, waits up to 60 seconds for the challenge to clear (usually 10-20 seconds), and retries on a fresh IP otherwise. A session that cleared the challenge is kept for the rest of the run, so only the first page of a run takes a little longer than the rest.
  • If a detail page keeps failing, the vehicle is still saved from its search-card data (fewer fields, same identity). If every page stays blocked and nothing is scraped, the run ends as FAILED with the last error in its status message instead of succeeding with an empty dataset.
  • If results are empty, check the run key-value store for DEBUG_PAGE_* HTML snapshots.

FAQ and support

This Actor is intended for legitimate research and inventory monitoring. Respect Classic.com terms of service and applicable laws. Prices Classic.com hides behind a paid plan are not extracted. For bugs or feature requests, use the Actor Issues tab on Apify, or ask for a custom solution if you need marketplace-specific enrichments.