# Carsales.com.au Cars Scraper: Used car listings (`getascraper/carsales-au-cars-scraper`) Actor

Extract used and new car listings from Carsales.com.au, Australia's largest car marketplace, with make, model, price, odometer reading, fuel type, transmission, and seller details. JSON or CSV rows ready for Sheets, Make, and Zapier.

- **URL**: https://apify.com/getascraper/carsales-au-cars-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.68 / 1,000 car listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🚗 Carsales.com.au Cars Scraper: Used car listings

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EAF1FB;border:1px solid #B9CFEF;border-top:4px solid #0B4F9E;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Australia's biggest car marketplace, turned into clean rows.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Scrape public Carsales.com.au listings with make, model, price, odometer reading, fuel type, transmission, and seller details, and export to Sheets, Excel, or n8n.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9CFEF;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B4F9E">🎚️ Real filters</span><br>
<span style="font-size:12px;color:#57534E">Price, year, odometer, transmission, fuel, body type, state, and new/used, same as the live site.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9CFEF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B4F9E">🪪 Seller context</span><br>
<span style="font-size:12px;color:#57534E">Dealer or private, state, suburb, dealer licence, and phone where published.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9CFEF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B4F9E">🖼️ Full galleries</span><br>
<span style="font-size:12px;color:#57534E">Every public listing photo, not just the cover image.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9CFEF;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B4F9E">🛡️ Built for the tough one</span><br>
<span style="font-size:12px;color:#57534E">Carsales runs one of the toughest bot defenses in this whole category. This Actor is built specifically to get through it.</span>
</td>
</tr>
</table>

Carsales.com.au actively blocks scraping tools, which is why so few reliable scrapers exist for it. This Actor is purpose-built to read the real listing data Carsales itself renders for buyers, structured and ready to use.

### 🔍 What does Carsales.com.au Cars Scraper do?

Carsales Cars Scraper turns public listings from [Carsales.com.au](https://www.carsales.com.au/cars/), Australia's largest car marketplace, into structured data: make, model, variant, year, price, odometer reading, fuel type, transmission, body type, drivetrain, and seller details, with the full photo gallery for each listing.

Point it at the general search, a make page, or a make-and-model page, and it returns every listing it can read from that page, plus the deeper vehicle and seller details from each car's own listing page. Or skip picking a page altogether and set a price range, model-year range, maximum odometer reading, transmission, fuel type, body type, state, and new/used condition instead, every returned record genuinely respects the bounds you set.

### 💡 Why use it?

- **Dealers and sourcing teams** can pull comparable inventory without opening listings one by one.
- **Market researchers and analysts** can track price, odometer reading, and model year across a slice of the market for pricing work.
- **Buyers and resellers** can run this on a schedule and catch new listings on a make or model they're watching.

### 🧭 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #B9CFEF;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0B4F9E;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a start page</span><br>
<span style="font-size:12px;color:#57534E">The general search, or a make/model page from Carsales.com.au.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #B9CFEF;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0B4F9E;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the Actor</span><br>
<span style="font-size:12px;color:#57534E">Set how many listings to collect and whether to fetch full detail pages.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #B9CFEF;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0B4F9E;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export results</span><br>
<span style="font-size:12px;color:#57534E">Download your dataset in JSON, CSV, Excel, or HTML.</span>
</td>
</tr>
</table>

### 🧾 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `startUrls` | array of URLs | No | Plain Carsales.com.au listing links: the general search at `/cars/`, a make page like `/cars/toyota/`, or a make-and-model page like `/cars/toyota/corolla/`. Defaults to the general search. Works alongside the filters below rather than instead of them. |
| `priceMin` | integer | No | Only return listings priced at or above this amount (AUD). |
| `priceMax` | integer | No | Only return listings priced at or below this amount (AUD). |
| `yearMin` | integer | No | Only return listings from this model year or newer. |
| `yearMax` | integer | No | Only return listings from this model year or older. |
| `odometerMax` | integer | No | Only return listings with an odometer reading at or below this many kilometres. |
| `transmission` | string | No | `Automatic` or `Manual`. Leave blank for either. |
| `fuelType` | string | No | `Petrol`, `Diesel`, `Hybrid`, `Electric`, `Plug in Hybrid`, `Dual Fuel`, or `Gas Only`. Leave blank for any. |
| `bodyType` | string | No | `SUV`, `Sedan`, `Hatch`, `Wagon`, `Ute`, `Coupe`, `Convertible`, `People Mover`, `Cab Chassis`, `Van`, `Light Truck`, or `Bus`. Leave blank for any. |
| `state` | string | No | Australian state or territory the listing is advertised in (`NSW`, `VIC`, `QLD`, `WA`, `SA`, `TAS`, `ACT`, `NT`). Leave blank for any. |
| `condition` | string | No | `New`, or `Used` (used, demo, and near-new). Leave blank for either. |
| `fetchDetails` | boolean | No | Fetch each car's own listing page for odometer, fuel, transmission, body type, drivetrain, doors, seats, engine size, and seller details. Default `true`. |
| `proxyConfiguration` | object | No | Proxy settings. A residential proxy is on by default and needed for this site to load. |
| `maxItems` | integer | No | Maximum listings saved to the dataset. Default `20`. |
| `maxSearchPages` | integer | No | Reserved for future multi-page support. Default `1`. |

### 📦 Output

Every record includes the listing link, make, model, year, price, odometer reading, fuel type, transmission, seller details, and the primary photo.

```json
{
  "listing_url": "https://www.carsales.com.au/cars/details/2023-mazda-cx-8-g25-touring-kg-series-auto-fwd/OAG-AD-26118710/",
  "listing_id": "OAG-AD-26118710",
  "title": "2023 Mazda CX-8 G25 Touring KG Series Auto FWD",
  "make": "Mazda",
  "model": "CX-8",
  "variant": "KG2WLA G25 Touring Wagon 7st 5dr SKYACTIV-Drive 6sp FWD 561kg 2.5i",
  "year": 2023,
  "price": 30990,
  "currency": "AUD",
  "mileage_km": 68050,
  "fuel_type": "Petrol",
  "transmission": "Automatic",
  "body_type": "SUV",
  "drive_type": "FWD",
  "doors": 5,
  "seats": 7,
  "engine_cc": 2488,
  "seller_type": "Dealer",
  "seller_state": "VIC",
  "seller_suburb": "highett",
  "dealer_licence": "10202",
  "image_url": "https://carsales.pxcrush.net/carsales/cars/dealer/2mswikylznx2sgqh1sn39jtu8.jpg",
  "scraped_at": "2026-08-21T05:24:00.000Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `listing_url`, `listing_id` | string | Public listing link and its source ID. |
| `title`, `make`, `model`, `variant` | string | Listing headline, make, model, and trim string. |
| `year` | number | Model year. |
| `price`, `currency` | number, string | Asking price and currency (AUD). |
| `mileage_km` | number | Odometer reading in kilometers. |
| `fuel_type`, `transmission`, `body_type`, `drive_type` | string | Vehicle specification fields, when published on the listing. |
| `doors`, `seats`, `engine_cc` | number | Door count, seat count, and engine displacement in cc, when published. |
| `seller_type`, `seller_state`, `seller_suburb` | string | Dealer or private seller, and location, when published. |
| `dealer_licence`, `dealer_phone` | string | Dealer motor trade licence number and phone, on dealer listings that publish one. |
| `image_url`, `image_urls` | string, array | Primary photo and the full public gallery. |
| `scraped_at` | string | Timestamp of when this record was built. |

Any field the source listing does not publish is left out of that record entirely, so you never see placeholder or made-up values.

### 💰 Pricing

This Actor runs on Apify's pay-per-event pricing. You only pay for listings actually returned, and an empty or failed run costs nothing beyond a few seconds of compute. There is no subscription. Because Carsales runs a tougher bot defense than most sites in this category, this Actor uses more compute per listing than a typical car-listing scraper, particularly when `fetchDetails` is on.

### ⭐ Enjoying Carsales.com.au Cars Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#EAF1FB;border:1px solid #B9CFEF;border-left:5px solid #0B4F9E;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">This Actor just saved you from checking Carsales listings one at a time.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other dealers, researchers, and buyers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0B4F9E;border:1px solid #B9CFEF;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/carsales-au-cars-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🛠️ Tips and advanced options

- Turn `fetchDetails` off for a faster, cheaper run when you only need the fields visible on the search page (title, make, model, year, price, and photos).
- For a specific make or model, use a Carsales make or make-and-model page directly, such as `/cars/toyota/` or `/cars/toyota/corolla/`, rather than the general search.
- Carsales' own site rules block automated tools from using its filter, sort, and paginated search links (any link with a `?` in it). This Actor sticks to plain listing links for that reason, so a single start URL currently returns one page of results (up to about 30 listings) rather than the site's full inventory for very broad searches.
- Keep the residential proxy setting on. Carsales blocks most non-residential traffic outright, and turning this off will make almost every run fail.

### ❓ FAQ

**Why does this cost more compute than other car scrapers in this catalog?**
Carsales runs a tougher, JavaScript-based bot defense than most sites in this category, so every page needs a real browser session and a residential IP rather than a plain HTTP request. That's reflected in the compute cost, not in the price you're charged per listing.

**Why is a field missing from an item?**
Carsales listings don't publish every detail on every page, and private-seller listings don't have a dealer licence or phone. Missing values are omitted rather than replaced with guesses.

**Can I search by price, mileage, or other filters?**
Not through this Actor's input today. Carsales' own site rules block automated tools from using its filter and sort query links, so this Actor reads the plain listing pages you can reach without one.

**Is this affiliated with Carsales.com.au?**
No. This is an independent tool that collects publicly available listing information. Use it in line with applicable rules and the source website's terms.

Found a bug or want a feature added? Open an issue on the Actor's Issues tab, or reach out for a custom version of this Actor.

### 🔗 Other actors

- [Bilbasen Cars Scraper: Brugte biler](https://apify.com/getascraper/bilbasen-cars-scraper) ↗ - Used-car listings from Denmark's largest car marketplace.
- [Blocket Cars Scraper: Bilar till salu](https://apify.com/getascraper/blocket-cars-scraper) ↗ - Used-car listings from Sweden's largest classifieds site.
- [Marktplaats Cars Scraper: Tweedehands auto's](https://apify.com/getascraper/marktplaats-cars-scraper) ↗ - Used-car listings from the Netherlands.
- [Standvirtual Cars Scraper: Carros usados](https://apify.com/getascraper/standvirtual-cars-scraper) ↗ - Used-car listings from Portugal's largest car marketplace.
- [CarWale Used Cars Scraper](https://apify.com/getascraper/carwale-used-cars-scraper) ↗ - Used-car listings from India's largest car marketplace.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/carsales-au-cars-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Paste one or more Carsales.com.au listing links, such as the general new-and-used search at /cars/, a make page like /cars/toyota/, or a make-and-model page like /cars/toyota/corolla/. Leave empty to use the general /cars/ search. Links with a ? in them (Carsales' own filter/sort URLs) are skipped, since Carsales' own site rules block those for automated tools; use the plain link without the ? part instead.

## `priceMin` (type: `integer`):

Only return listings priced at or above this amount. Leave blank for no minimum.

## `priceMax` (type: `integer`):

Only return listings priced at or below this amount. Leave blank for no maximum.

## `yearMin` (type: `integer`):

Only return listings from this model year or newer. Leave blank for no minimum.

## `yearMax` (type: `integer`):

Only return listings from this model year or older. Leave blank for no maximum.

## `odometerMax` (type: `integer`):

Only return listings with an odometer reading at or below this many kilometres. Leave blank for no limit.

## `transmission` (type: `string`):

Only return listings with this transmission type.

## `fuelType` (type: `string`):

Only return listings with this fuel type.

## `bodyType` (type: `string`):

Only return listings of this body style.

## `state` (type: `string`):

Only return listings advertised in this Australian state or territory.

## `condition` (type: `string`):

Only return new listings, or only used, demo, and near-new listings.

## `fetchDetails` (type: `boolean`):

When on, the Actor opens each car's own listing page to add fields the search results page does not show: odometer reading, fuel type, transmission, body type, drive type, doors, seats, engine size, and seller details. Turn off for a faster, cheaper run that keeps only the fields visible on the search page (title, make, model, year, price, and photos). Only the first 10 new listings per run get a detail fetch (each one needs its own browser session); listings already fetched in a previous run are reused for free. Run again to cover more listings.

## `proxyConfiguration` (type: `object`):

Carsales.com.au actively blocks automated traffic, so a residential proxy is on by default. Turning this off will make almost every run fail.

## `maxItems` (type: `integer`):

Maximum number of unique car listings to return.

## `maxSearchPages` (type: `integer`):

Reserved for future pagination support. Carsales' own site rules currently block the query-string page links automated tools would otherwise use for page 2 and beyond, so each start URL contributes one page of results today.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.carsales.com.au/cars/"
    }
  ],
  "transmission": "",
  "fuelType": "",
  "bodyType": "",
  "state": "",
  "condition": "",
  "fetchDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  },
  "maxItems": 25,
  "maxSearchPages": 1
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.carsales.com.au/cars/"
        }
    ],
    "transmission": "",
    "fuelType": "",
    "bodyType": "",
    "state": "",
    "condition": "",
    "fetchDetails": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AU"
    },
    "maxItems": 25,
    "maxSearchPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/carsales-au-cars-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.carsales.com.au/cars/" }],
    "transmission": "",
    "fuelType": "",
    "bodyType": "",
    "state": "",
    "condition": "",
    "fetchDetails": False,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AU",
    },
    "maxItems": 25,
    "maxSearchPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/carsales-au-cars-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.carsales.com.au/cars/"
    }
  ],
  "transmission": "",
  "fuelType": "",
  "bodyType": "",
  "state": "",
  "condition": "",
  "fetchDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  },
  "maxItems": 25,
  "maxSearchPages": 1
}' |
apify call getascraper/carsales-au-cars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/carsales-au-cars-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/nJBsWZfSGj9tnjYnZ/builds/XM3kDZ3bnob35g9MB/openapi.json
