Pricing
from $0.10 / 1,000 results
Used Car Listings & Dealer Inventory Export
Export used car listings, dealer inventory, and historical vehicle data from 100+ car marketplaces. Filter by brand, model, price, year, mileage, country, and history.
Pricing
from $0.10 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
3
Bookmarked
38
Total users
3
Monthly active users
a day ago
Last modified
Categories
Share
Used Car Listings Scraper and Dealer Inventory Export
At a glance: what it does is export structured used car listings and dealer inventory; input examples include countries, search keywords, limits, estimate-only mode, and history options; output examples are vehicle listing rows and historical observations; use cases include lead generation and price research; limitations, troubleshooting, and pricing/cost notes are covered below.
Export structured used car listings, dealer inventory, second-hand car data, and historical vehicle listing records from 100+ car marketplaces already collected by The Scrape Lab.
This Actor is built for lead generation, pricing research, market monitoring, dealer inventory exports, CRM imports, BI analysis, and automotive datasets. It returns cleaned vehicle records from a maintained database rather than opening every marketplace during your run, so exports are faster, cheaper, and more predictable than live crawling.
What You Can Do
- Export current used car inventory by country or source website
- Search by brand, model, price, year, mileage, fuel, transmission, and condition
- Pull dealer stock lists with canonical listing URLs
- Build car market research datasets across multiple countries
- Export historical listing observations for price tracking and change analysis
- Preview result counts before running a larger paid export
Simple Setup
Most users only need these fields:
countries- choose one or more markets, such asZA,US,GB,CA, orAUsearch- optional vehicle keyword, such asToyota Corollalimit- maximum number of rows to exportestimateOnly- preview how many rows match without exporting dataset items
The default limit is intentionally small for a low-cost first run. Increase it after testing your filters or use estimateOnly: true before a large export.
Example Input
{"countries":["ZA"],"search":"Toyota Corolla","limit":100}
For a low-cost estimate first:
{"countries":["ZA"],"search":"Toyota","estimateOnly":true,"limit":1000}
For historical observations:
{"countries":["ZA"],"includeHistory":true,"seenSince":"2026-05-01T00:00:00Z","limit":500}
Advanced Options
brandQueryandmodelQuery- use these when you want separate brand and model filters instead of onesearchtermwebsites- choose exact source websites such ascarscozaorwebuycars; leave empty for country-wide exportsincludeHistory- returns historical observations instead of only the latest listing rowincludeTotalCount- adds an exact total match count to the run summary; leave off for large exports unless you need the countoffset- page through large result setsorderBy- sort by last seen date, price, or yearminPrice,maxPrice,yearMin,yearMax,mileageMin,mileageMax- numeric filterscurrencyCodes,listingStatus,bodyTypes,fuelTypes,transmissions,conditions- exact-match filters for stored listing valuesseenSince- only return listings seen after an ISO timestamp
Invalid ranges, unknown sources, unknown countries, and unsupported sort values fail early with a clear error instead of running a wasted export.
Output Data
Each dataset item can include:
| Field | Description |
|---|---|
dedupe_key | Stable key for de-duplicating the listing |
source, source_site | Source website identifiers |
country_code, country_name, currency_code | Market and currency |
listing_id, url, title | Listing identity and canonical URL |
brand, model, trim, car_name | Vehicle identity |
price, year, mileage_km | Core listing facts |
fuel, transmission, body_type, condition | Vehicle attributes |
dealer, dealer_key, location | Seller and location details |
listing_status, first_seen_at, last_seen_at, updated_at | Freshness and status |
Example output:
{"dedupe_key":"webuycars:id:643D12068","source":"webuycars","source_site":"webuycars.co.za","country_code":"ZA","currency_code":"ZAR","listing_id":"643D12068","url":"https://www.webuycars.co.za/buy-a-car/Renault/Sandero/643D12068","title":"Renault Sandero 900t Stepway Expression","price":103000,"year":2019,"brand":"Renault","model":"Sandero","mileage_km":94452,"transmission":"Manual","fuel":"Petrol","dealer":"WeBuyCars","location":"Midstream (GP)","listing_status":"active","last_seen_at":"2026-06-14T17:52:13+00:00"}
History mode can also include observed_at, seen_count, is_change, changed_fields_json, and snapshot_json.
How To Run On Apify
- Open the Actor on Apify.
- Choose countries or websites.
- Add optional filters such as brand, model, year, price, or mileage.
- Start with
estimateOnly: truefor large exports. - Run the Actor and open the Dataset tab when it finishes.
Results are written to the default Apify dataset while the export is running, so partial results remain available if a long run is interrupted after rows have been pushed.
Export Results
After a run, download the dataset as:
- JSON
- CSV
- Excel
- XML
- RSS
You can also connect the dataset to webhooks, integrations, or your own API workflow.
Python API Example
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input ={"countries":["ZA"],"search":"Toyota Corolla","limit":100,}run = client.actor("thescrapelab/ultimate-car-listings-scraper-100-sites").call(run_input=run_input)dataset_id = run["defaultDatasetId"]for item in client.dataset(dataset_id).iterate_items():print(item["title"], item.get("price"), item.get("url"))
Pricing
This Actor is priced per exported dataset item. Use estimateOnly: true to preview the number of matching rows before exporting a large dataset. Platform usage is low because the Actor reads cleaned stored listings instead of live-rendering marketplace pages during your run.
Limits And Caveats
- The Actor exports data already collected and cleaned by The Scrape Lab; it does not live-scrape every website during the run.
- Freshness varies by source website and collection schedule.
- Some listings may have missing optional fields if the original website did not provide them.
- Historical mode can return multiple rows for the same listing across time.
- Very broad exports should use
estimateOnly, a clearlimit, and pagination withoffset.
Troubleshooting
If you get no results, remove the strictest filters first, try a country-only export, or test one website at a time.
If you get too many results, add a brand, model, year, price, mileage, listing status, or seenSince filter.
If a run fails immediately, check for impossible ranges such as minPrice greater than maxPrice, invalid country codes, unknown websites, or unsupported orderBy values.
If you need the exact total number of matches, set includeTotalCount: true or run with estimateOnly: true.
FAQ
Does this Actor scrape car websites live?
No. It exports cleaned used car listing data already collected by The Scrape Lab. This keeps customer runs predictable and cost-efficient.
Can I export used car listings from multiple websites at once?
Yes. Use countries for market-wide exports or websites for exact source selection.
Can I get historical vehicle prices?
Yes. Set includeHistory: true to export historical observations and change-tracking fields where available.
How do I avoid paying for too many rows?
Use estimateOnly: true, then rerun with a practical limit after confirming the filters.
What is the best first input?
Start with one country, an optional search term, and a small limit, for example {"countries":["ZA"],"search":"Toyota Corolla","limit":100}.
