Carsales.com.au Scraper - Bypass 440-Car Limit, 30+ Fields
Pricing
from $1.00 / 1,000 results
Carsales.com.au Scraper - Bypass 440-Car Limit, 30+ Fields
Scrape structured vehicle listings from Carsales.com.au from $1 per 1K results. Built to bypass the 20-page / 440-car search cap with deep filtering. Returns clean JSON with 30+ fields per listing, ideal for dealers, analysts, pricing tools, and real-time vehicle data pipelines.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(1)
Developer
Abot API
Maintained by CommunityActor stats
2
Bookmarked
32
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Carsales AU Scraper
The fastest, cheapest way to pull structured vehicle listings from Australia's #1 car marketplace. Point it at a search, get back clean JSON with 30+ fields per listing. Built for dealers, analysts, price-tracking tools, market research, and data pipelines that need carsales data now, not tomorrow.
Why this scraper
- β‘ Sub-second per listing. 30 listings in ~3 seconds, 1,000 in ~3 minutes.
- πΈ Pennies per thousand. A typical run costs about $0.001 in proxy credit, and 256 MB is plenty.
- π― 30+ fields per car. Price, odometer, VIN, features, seller phone, images, body type, transmission, fuel, coordinates: already structured, ready to load into your DB.
- π Complete results, not just the first screen. You get every listing a search will release, filtered and de-duplicated, up to the ~440 any single carsales search hands out. Past that, deep collection covers the same search across a series of price ranges and states, pulling far more than one search will ever show.
- π Two flexible input modes. Filter-based (pick make/model/state) or paste your own carsales URL, including URLs copied straight out of a browser.
What you can do with it
- Price intelligence: track asking prices for specific make/model/year combos across states, detect trends.
- Dealer analysis: pull every listing from a dealer and monitor inventory turnover.
- Market research: compare fuel-type mix, body-style share, or km distribution across regions.
- Lead generation: extract seller contacts from fresh listings.
- Data pipelines: feed your valuation, insurance, or forecasting models with always-fresh inventory.
Two ways to search
1. Search by filters (easiest)
Click a few dropdowns (Condition, Make, Model, Body Type, State, Price range, Year range, Odometer range, Transmission, Fuel Type) and press run. The scraper builds the URL, pages through the results, and collects the matching listings for you (covering searches larger than one search can release across price ranges automatically; see below).
Want "used Toyota Corollas under $30,000 in NSW, cheapest first"? Four inputs, done.
2. Direct URLs (power users)
Found a specific search on carsales.com.au that nails exactly what you want? Paste the URL directly. The scraper collects each URL's results and returns them combined (with deep collection applied per URL when your listing target is large).
Drop in multiple URLs at once; each runs independently:
https://www.carsales.com.au/cars/used/toyota/corolla/new-south-wales-state/?sort=~Pricehttps://www.carsales.com.au/cars/used/bmw/x5/between-30000-80000/https://www.carsales.com.au/cars/used/tesla/
Filter coverage
| Filter | Search mode | URL mode |
|---|---|---|
| Condition (New / Used / Demo) | β | β via URL |
| Make + Model | β | β via URL |
| State (NSW / VIC / QLD / SA / WA / TAS / ACT / NT) | β | β via URL |
| Body type, Transmission, Fuel type | β | β via URL |
| Colour, Cylinders, Doors | β | β via URL |
| Price range, Year range, Odometer range | β | β via URL |
| Postcode + radius | β | β via URL |
| Sort order (Featured / Price / KM / Year) | β | β via URL |
| Seller type (Dealer / Private) | β | β via URL |
What you get (30+ fields per car)
Core: listingId, url, title, make, model, year, variant
Specs: bodyType, transmission, engine, fuelType, cylinders, engineCapacity, odometer, odometerDisplay, drivetrain, seats, doors, color
Price: price, priceDisplay, currency, priceInfo, comparisonRate
Listing metadata: condition, adType, sellerType, sellerId, sellerName, sellerPhone, sellerAbn, badges, rankingType, stockNumber, vin
Location: state, suburb, postcode
Media: images (array), imageCount, videoCount, threeSixtyCount
Optional enrichment (enable Fetch Full Details): adds description, features (full equipment list), VIN, seller phone, and more detail-page-only fields.
One honest caveat on enrichment. On some runs carsales will only release a reduced view of a listing. That view carries every enrichment field except three:
vin,descriptionandseatscome back empty rather than guessed. The run log says so once when it happens, andsuburb,postcode,color,doors,specs,features,dealerCommentsandsellerPhoneare unaffected.
Example output
{"listingId": "OAG-AD-1234456","url": "https://www.carsales.com.au/cars/details/2022-porsche-718-cayman-gt4-982-auto-my22/OAG-AD-123456/","title": "2022 Porsche 718 Cayman GT4 982 Auto MY22","make": "Porsche","model": "718","year": 2022,"variant": "Cayman GT4","bodyType": "Coupe","transmission": "Automatic","engine": "6cyl 4.0L Petrol","fuelType": "Petrol","cylinders": 6,"odometer": 14497,"odometerDisplay": "14,497 km","price": 229990,"priceDisplay": "$229,990","currency": "AUD","condition": "Used","adType": "Dealer used","sellerType": "Dealer","state": "VIC","images": ["https://carsales.pxcrush.net/carsales/cars/dealer/..."],"imageCount": 38,"videoCount": 1,"scrapedAt": "2026-04-19T00:00:00.000Z"}
How many listings one search can give you
A search is collected to its end, not sampled: results come back filtered, de-duplicated and in the order you asked for, and a search with 50 matches returns all 50.
What the scraper will not do is invent listings the site refuses to release. carsales stops serving any single search after about 440 listings, however many matches it reports: ask for "used Ford Ranger" and it will tell you there are 7,000 and then hand out 443 of them. When that happens the log says so plainly, naming how many of the reported matches were released.
Collecting more than that (deep collection)
Deep collection (the Deep collection toggle, on by default) gets you past the per-search cap. When you ask for more listings than one search can release, the scraper covers the same search across a series of narrow price ranges (aligned to carsales' own price steps, so each range is honoured) and, in Search mode with no state picked, crosses them with each state. Every range is an independent search with its own ~440 allowance, and the results are merged with automatic de-duplication, so one capped search becomes combined output that runs into the thousands.
How to use it:
- Set Maximum listings to the number you actually want (e.g.
2000). Deep collection only kicks in once this is above what one search can release (~440), so anything smaller is collected by the cheaper single-search walk. - Leave Deep collection on.
- Run. The log reports the per-range plan and each range's contribution as it goes.
Honest limits: even with deep collection, a single enormous query (tens of thousands of matches) cannot be captured 100%; each price range still tops out at the site's per-search ceiling. For the fullest coverage of a big segment, combine deep collection with more filters (make/model, state, or year range); each narrowed search then gets its own deep collection. Larger targets also run longer, since more ranges mean more requests.
Resume & recurring updates
Two distinct things, both under the "Resume & recurring updates" input section:
- Resume from a previous run (
resumeFromRunId): paste a previous run ID or dataset ID to continue ONE interrupted crawl. This run then skips every listing already collected there and only appends new ones. - Incremental changes for scheduled runs (
incrementalMode, off by default): turn this on when you schedule this actor to run the SAME search repeatedly (e.g. daily) and only want what changed. The first run returns everything asNEW; later runs returnNEW,UPDATED, andREAPPEAREDlistings only. Turn on Emit unchanged or Emit expired if you also wantUNCHANGED/EXPIREDrows back (these bill extra rows).EXPIREDis only produced once a run has proven it scanned the whole tracked search β not when Max listings/Max pages capped it, a page was blocked, or Resume was used.
State is tracked per search (mode + every filter you set), so two differently-configured searches never share a baseline. Use State key to name a monitoring campaign explicitly, or to deliberately share state across runs.
Run limits & cost control
- Maximum Listings: hard cap across all searches (default 30). Raise it above ~440 to turn on deep collection.
- Deep collection: on by default; covers big searches across price ranges and states (see above). Turn off to keep the run inside one search.
- Maximum Pages: per-search page cap (default 20). Roughly 30 listings for the first page and 22 for each one after it, so the default already covers everything one search will release; raising it further collects nothing extra. Applies per price range when deep collection is on.
- Fetch Full Details: opt-in per-listing enrichment (off by default). When enabled, adds VIN, dealer comments, features list, seller phone/ABN, suburb, postcode, and a full spec dictionary: fields not present on the search card. Charged per successfully-enriched item pushed (
fetch-detailsevent). Each search result already carries 30+ core fields, so this is rarely needed; enable only when you need detail-page-only data. See the caveat under Optional enrichment above for the three fields a reduced-view run cannot return.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape; the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify β Settings β Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Proxy setup
Apify RESIDENTIAL proxy with country AU is strongly recommended and is the default. It's what makes the scraper reliable at scale. If your Apify plan includes residential credit, you're good to go out of the box.
Support
Questions, feature requests, or issues? Open a ticket on the actor page. Built with speed, cost-awareness, and production stability in mind.
Verification note (2026-09-12)
Collection depth was rebuilt and re-verified against the live site on 2026-09-12 from a residential AU exit. A 50-match search returned all 50 of its listings and stopped exactly when the site said there was nothing left; a 7,073-match search returned 73 distinct listings on a 3-page budget, 100% of them on-filter and every one of them new. Collected to its end, that same search released 443 of its 7,073 matches before the site stopped serving it: the per-search cap described above, measured rather than assumed.
The earlier note from 2026-08-30 still holds for the input surface: a used-car baseline returned 168,578 results, narrowing to 22,831 for Toyota and 3,383 for Toyota Landcruiser, and pasted carsales search URLs resolved with full page state.