# AutoTrader Australia Car Scraper: Prices, VIN & Dealers (`fayoussef/autotrader-au-scraper`) Actor

Scrape Autotrader Australia. Paste any autotrader.com.au search URL to export every vehicle: price, make, model, variant, year, odometer, transmission, fuel type, engine, ANCAP rating, dealer name/phone, GPS coordinates and photos. Pagination and AU proxies handled. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/fayoussef/autotrader-au-scraper.md
- **Developed by:** [Youssef Farhan](https://apify.com/fayoussef) (community)
- **Categories:** Travel, Automation, Lead generation
- **Stats:** 24 total users, 0 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

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

## Autotrader Australia Scraper: Export Car Listings, Prices and Dealer Contacts

Scrape car listings from **autotrader.com.au** and export them as JSON, CSV, or Excel. Paste any Autotrader Australia search URL and this Actor returns **54 structured fields per vehicle**, including advertised price, driveaway price, odometer, ANCAP safety rating, dealer name and phone number, GPS coordinates, and the full photo gallery.

Built for Australian car dealerships, automotive market researchers, fleet analysts, and data teams who need current vehicle listing data at scale.

### What this Actor does

It reads any Autotrader.com.au search results page, calls the same listings API the website itself uses, and paginates through the results automatically. You filter on the website (make, model, state, price, body type, year), copy the URL, and the Actor exports every matching listing.

- **Input:** one or more autotrader.com.au search URLs
- **Output:** one dataset row per vehicle listing, 54 fields each
- **Pagination:** automatic, using the site's own `last_page` value, with an optional `max_pages` cap
- **Proxy:** handled for you (Australian residential IPs, which the site requires)

### Quick answers

**Can I scrape Autotrader Australia listings?**
Yes. Paste an autotrader.com.au search URL into `start_urls` and run the Actor. Each result page returns about 26 listings.

**What data does it extract from each listing?**
Price (advertised and driveaway), make, model, variant, series, year, odometer, transmission, fuel type, engine size and power, drive type, body type, seats, doors, ANCAP safety rating, colours, dealer name, phone, city and state, GPS coordinates, feature tags, listing URL, and every photo URL.

**Do I need a proxy or an API key?**
No. Autotrader.com.au blocks non-Australian IP addresses, so the Actor requests Apify Proxy residential with an Australian exit automatically. You do not configure anything.

**How much data can I get per run?**
Every page of every search URL you provide. A single search commonly returns hundreds to thousands of listings. Free-plan runs are capped at 1 start URL and 1 page.

**How do I filter by make, model, state, or price?**
Apply the filters on autotrader.com.au first, then copy the resulting URL. All of the site's filters (state, region, make, model, price band, year, body type, fuel type) carry through to the Actor.

### Output fields

Every row contains these 54 fields.

**Listing**

| Field | Description |
|---|---|
| `id` | Autotrader listing ID |
| `listing_url` | Direct link to the listing |
| `stock_no` | Dealer stock number |
| `description` | Full seller description text |
| `condition` | New, Used, or Demo |
| `status_api` | Listing status, for example `Live` |
| `created_at_api`, `updated_at_api` | When the listing was posted and last updated |
| `is_dealer_listing`, `is_private_listing` | Seller type flags |
| `rego_expiry` | Registration expiry date, where the seller publishes one |

**Pricing**

| Field | Description |
|---|---|
| `advertised_price` | Asking price in AUD |
| `driveaway_price` | On-road price where the dealer publishes one |
| `is_driveaway_pricing_model` | Whether the listing is priced driveaway |

**Vehicle**

| Field | Description |
|---|---|
| `make`, `model`, `variant`, `series` | Vehicle identity |
| `manu_year` | Manufacture year |
| `odometer` | Kilometres travelled |
| `vehicle_body_type`, `vehicle_body_type_group`, `vehicle_body_type_style` | Body classification |
| `vehicle_transmission_type`, `vehicle_fuel_type`, `vehicle_drive_type` | Drivetrain |
| `vehicle_engine_size`, `vehicle_cylinders`, `vehicle_cylinder_description`, `vehicle_engine_power_kw` | Engine |
| `vehicle_seats`, `vehicle_doors` | Capacity |
| `vehicle_safety_rating_ancap` | ANCAP star rating |
| `vehicle_segment` | Market segment |
| `colour_base`, `colour_body`, `colour_interior` | Colours |
| `feature_search_terms_string` | Comma-separated feature tags (Apple CarPlay, tow bar, blind spot monitoring, and so on) |

**Seller and location**

| Field | Description |
|---|---|
| `dealer_name`, `dealer_phone` | Dealer contact |
| `dealer_city`, `dealer_state`, `dealer_id_api` | Dealer location |
| `dealer_contactless_sales`, `dealer_home_delivery` | Service flags |
| `listing_location_city`, `listing_location_state` | Where the car is |
| `listing_latitude`, `listing_longitude` | GPS coordinates |

**Media and ranking**

| Field | Description |
|---|---|
| `images` | Array of full-resolution photo URLs |
| `popularity_score_api`, `views_score_api`, `has_good_data_api` | Autotrader's own listing scores |

**Note on registration:** `rego_expiry` carries the registration expiry date where the seller has published one, which is roughly three listings in four.

### Sample output

Real output from a run, trimmed for length:

```json
{
  "id": 15253790,
  "listing_url": "https://www.autotrader.com.au/car/15253790/kia/carnival/wa/esperance/people-mover",
  "stock_no": "12028",
  "condition": "Used",
  "advertised_price": 53988,
  "driveaway_price": 0,
  "manu_year": 2024,
  "odometer": 53006,
  "make": "Kia",
  "model": "Carnival",
  "variant": "Gt-Line Lite",
  "series": "Ka4 Pe My25",
  "colour_base": "Blue",
  "vehicle_transmission_type": "Automatic",
  "vehicle_fuel_type": "Diesel",
  "vehicle_engine_size": "2.20",
  "vehicle_drive_type": "Front Wheel Drive",
  "vehicle_seats": 8,
  "vehicle_doors": 4,
  "vehicle_safety_rating_ancap": 5,
  "vehicle_body_type": "Wagon",
  "vehicle_body_type_group": "People Mover",
  "vehicle_engine_power_kw": 148,
  "dealer_name": "Esperance Toyota",
  "dealer_phone": "0890345402",
  "dealer_city": "Esperance",
  "dealer_state": "WA",
  "listing_latitude": "-33.84",
  "listing_longitude": "121.9",
  "images": [
    "https://www.autotrader.com.au/inventory/2026-08-07/01839748606871/15253790/2024_kia_carnival_Used_1.jpg"
  ]
}
```

### Input example

```json
{
  "start_urls": [
    { "url": "https://www.autotrader.com.au/for-sale/wa/country-east/" },
    { "url": "https://www.autotrader.com.au/for-sale/nsw/sydney/over-$3000/over-2015" }
  ],
  "max_pages": 10
}
```

| Input | Description |
|---|---|
| `start_urls` | Autotrader.com.au search URLs. Non-autotrader.com.au URLs are rejected with a clear error instead of failing silently. |
| `max_pages` | Result pages per start URL, about 26 listings each. Leave empty for every page. |
| `max_concurrent_start_urls` | How many searches to run at once. Default 3. |
| `max_concurrent_api_pages_per_start_url` | Pages fetched in parallel per search. Default 5. |
| `max_retries` | Retries per request, each on a fresh proxy IP. Default 5. |
| `proxyConfiguration` | Optional override. Must exit in Australia if you set it. |

### Use cases

- **Dealership competitor monitoring:** track rival stock, asking prices, and days on market across WA, NSW, VIC, QLD, SA, and TAS.
- **Used car pricing indices:** build make, model, and variant price curves against odometer and year.
- **Fleet residual value tracking:** follow resale prices for specific models over time.
- **Lead generation:** export dealer names, phone numbers, cities, and states from any search.
- **Market supply analysis:** measure how many EVs, 4WDs, or utes are listed in a region, and at what price.
- **Geographic analysis:** map listings by latitude and longitude to compare pricing by distance from metro centres.
- **Vehicle search platforms:** keep an aggregator's Australian inventory current.

### How it works

1. You supply one or more Autotrader.com.au search URLs.
2. The Actor loads each search page through an Australian residential proxy and finds the listings API endpoint the page itself uses.
3. It reads page 1 to learn the true total page count from the API's `last_page` value, so nothing is guessed or hardcoded.
4. Remaining pages are fetched in parallel, up to your `max_pages` cap.
5. Each listing is flattened into 54 fields and pushed to the dataset, ready to download as JSON, CSV, Excel, or to pull via the API.

### Why this scraper

- **It works from anywhere.** Autotrader.com.au returns HTTP 403 to every non-Australian IP address. The Actor pins its proxy to Australia, so the run succeeds no matter where you or your schedule run from.
- **Real pagination.** The site's own `last_page` value sets the scope, so you get the whole result set rather than a fixed first few pages.
- **Both prices.** Advertised price and driveaway price are separate fields, which is the difference between a headline number and the real cost.
- **Bad URLs fail fast.** A URL that is not on autotrader.com.au is rejected in seconds with a named error, instead of sitting in a silent retry loop.
- **Every retry rotates IP.** A blocked exit node never gets retried on the same address.
- **Dealer contacts included.** Name, phone, city, and state on every dealer listing.

### Pricing

Pay per result, with no monthly base fee. You are charged once per listing pushed to the dataset, at a rate that improves on higher Apify plan tiers. The current rates are shown on this Actor's Store page.

Free-plan runs are limited to 1 start URL and 1 result page; any paid Apify plan removes both caps. Apify platform compute and proxy usage are billed separately by Apify at their normal rates.

### Scheduling and automation

Use Apify's scheduler for daily or weekly exports, and Apify integrations to push results straight into Google Sheets, Slack, Zapier, Make, a webhook, or your own database.

### Use via API or MCP

Run this Actor from the Apify REST API, or connect it as an MCP server so AI agents (Claude, ChatGPT, Cursor) can call it directly:

```
https://mcp.apify.com/actors/fayoussef/autotrader-au-scraper
```

Full API docs: <https://docs.apify.com/api/v2>

### FAQ

**Does it scrape every page automatically?**
Yes. The Actor reads the total page count from Autotrader's API and fetches all of them. Set `max_pages` to cap the depth.

**Does it include dealer phone numbers?**
Yes, `dealer_phone` is populated on dealer listings. Private-seller listings do not carry a dealer record.

**Can I get the registration expiry?**
Yes, in `rego_expiry`, where the seller has published it. That is about three quarters of listings.

**Which output formats can I download?**
JSON, CSV, Excel, XML, and HTML table, from the dataset tab or the REST API.

**Can I scrape new cars as well as used?**
Yes. The `condition` field distinguishes New, Used, and Demo. Filter on the website first if you want only one.

**Can I scrape a single dealer's inventory?**
Yes, if you can reach that dealer's stock through an autotrader.com.au search URL. Paste that URL as a start URL.

**Why do I need an Australian proxy?**
Autotrader.com.au responds with HTTP 403 to IP addresses outside Australia. The Actor requests an Australian residential IP for you, so there is nothing to set up.

**Is scraping Autotrader legal?**
This Actor collects publicly visible listing data only. You are responsible for how you use the output, including compliance with Australian privacy law and Autotrader's terms. Do not use dealer phone numbers for unsolicited marketing where that is restricted.

**What if the site changes and the Actor breaks?**
Report it on the Issues tab, or contact [automationbyexperts.com](https://automationbyexperts.com) and it will be fixed.

### Need a custom scraper?

Need other Australian automotive sources, CRM integration, or scheduled data delivery into your warehouse? Visit [automationbyexperts.com](https://automationbyexperts.com) for custom builds, retainers, and data-as-a-service.

# Actor input Schema

## `start_urls` (type: `array`):

Autotrader.com.au search or results pages to scrape. Build the search on the site (make, model, state, price, body type), then paste the resulting URL here. Only autotrader.com.au URLs are accepted; anything else is skipped with an error.

## `max_pages` (type: `integer`):

How many result pages to go through for each start URL. Each page holds about 26 listings. Leave empty to scrape every page the search returns. Free runs are capped at 1 page.

## `max_concurrent_start_urls` (type: `integer`):

How many start URLs to work on at the same time. Lower this if you see blocks.

## `max_concurrent_api_pages_per_start_url` (type: `integer`):

How many result pages to fetch in parallel within a single start URL. Lower this if you see blocks.

## `max_retries` (type: `integer`):

How many times to retry a failed request before giving up on it. Each retry rotates to a fresh proxy IP.

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

Optional override. Autotrader.com.au blocks non-Australian IPs, so the Actor defaults to Apify Proxy residential pinned to Australia. Set this only to force a specific proxy, and make sure it exits in Australia.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.autotrader.com.au/for-sale/wa/country-east/"
    }
  ],
  "max_pages": 5,
  "max_concurrent_start_urls": 3,
  "max_concurrent_api_pages_per_start_url": 5,
  "max_retries": 5,
  "proxyConfiguration": {}
}
```

# Actor output Schema

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

Complete vehicle listing data including pricing, specifications, images, dealer information, and vehicle details

# 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 = {
    "start_urls": [
        {
            "url": "https://www.autotrader.com.au/for-sale/wa/country-east/"
        }
    ],
    "max_pages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/autotrader-au-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 = {
    "start_urls": [{ "url": "https://www.autotrader.com.au/for-sale/wa/country-east/" }],
    "max_pages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("fayoussef/autotrader-au-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 '{
  "start_urls": [
    {
      "url": "https://www.autotrader.com.au/for-sale/wa/country-east/"
    }
  ],
  "max_pages": 5
}' |
apify call fayoussef/autotrader-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fayoussef/autotrader-au-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/IlUIgJj0umxCJMMfd/builds/WOOzeJ5Q7f0jgdOOk/openapi.json
