# AA Cars UK Used Car Scraper (`vivid-softwares/aa-cars-scraper`) Actor

UK used car scraper for AA Cars (theaa.com/used-cars). Paste any search, make, model, town or dealer URL to get every car for sale with prices, mileage, specs, photos, vehicle history checks, finance prices and dealer contacts.

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

## Pricing

$6.50 / 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.

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

## AA Cars UK Used Car Scraper

Scrape **used cars for sale in the UK** from [AA Cars](https://www.theaa.com/used-cars) (theaa.com/used-cars), the AA's used car marketplace with around 155,000 cars and vans from about 3,000 UK dealers. Paste any AA Cars search, make, model, town or dealer URL, or build a search from the input form, and get every matching car. For each car you get:

- the price and AA finance monthly prices
- mileage, year and specs
- every photo
- the vehicle history check and the registration number
- the dealer's address, phone number and opening hours

The Actor is built for car dealers, car buyers, price researchers and anyone who needs **UK used car prices and dealer stock data** in a spreadsheet, a database or an API.

### What does the AA Cars scraper do?

- **Scrapes any AA Cars page you can open in a browser:**
  - search results
  - make and model pages (`/used-cars/ford/fiesta`)
  - body type, fuel and gearbox pages
  - town pages (`/used-cars/local/west-yorkshire/leeds`)
  - dealer pages and dealer lists by county or brand
  - single car pages
- **Gets every matching car, not just the first 1,000.** AA Cars shows at most 50 pages (1,000 cars) per search. The Actor splits bigger searches into price ranges using the site's own result counts, so a search for all 2,937 Ford Fiestas returns all 2,937.
- **Reads each car's page** for:
  - all photos, colour, doors, engine size and CO2
  - the features list and the dealer's description
  - PCP and HP monthly prices
  - the AA vehicle history check: stolen, previous keepers, plate changes, colour changes and write-off status
  - the registration and the Cat S or Cat N category
  - the link to the AA vehicle inspection report (PDF) for AA-inspected cars
- **Adds the dealer's details:** name, address, postcode, phone, website, opening hours, services and stock count.
- **Returns only new stock on scheduled runs.** Cars you already received are skipped and not charged.
- **Reports sold and removed cars.** It lists cars that left a search since your last run, with first and last seen dates and prices, so you can measure days on sale and price drops.

### What data can I get from AA Cars?

| Car | History and finance | Dealer |
|---|---|---|
| Make, model, variant, title | Registration (as shown on the listing) | Dealer name and ID |
| Price and price text | Previous keepers | Address and postcode |
| Year, mileage | Stolen, plate change, colour change, write-off checks | Phone number |
| Fuel type, gearbox, body type | Write-off category (Cat S / Cat N) | Website and logo |
| Colour, doors, engine size, CO2 | History check date | Opening hours |
| Features list, description | PCP and HP monthly prices | Services (MOT, servicing, finance...) |
| All photos (full size), video flag | AA inspected, inspection report PDF | Franchised or independent, AA approved |
| Featured listing, delivery available | Manufacturer approved | Cars in stock |

Every row also has `listing_id`, `url`, `scraped_at` (UTC), `source_url` (the page it was found on), `search_url` and `seen_in_previous_run`. Prices are numbers, dates are ISO 8601 and image links are absolute URLs.

### How to scrape AA Cars

1. Search on [theaa.com/used-cars](https://www.theaa.com/used-cars) with the filters you want, then copy the address from your browser.
2. Paste it into **AA Cars URLs**. You can add as many URLs as you like.
3. Set **Maximum cars** and click **Start**.
4. Download the results as JSON, CSV, Excel or HTML, or read them through the Apify API.

You can also leave the URLs empty and use the **search builder**. It has these filters:

- make and model
- price, year and mileage
- fuel, gearbox, body type, colour, doors, seats and engine size
- written-off cars, AA inspected only, manufacturer approved only, nearly new only and AA finance available
- keywords
- postcode and distance
- a single dealer
- sort order

### Input

| Field | What it does |
|---|---|
| `startUrls` | AA Cars URLs: searches, make/model/body/fuel/town pages, dealer pages, dealer lists, car pages. |
| `makes`, `models` | Search builder: one search per make or model. |
| `minPrice`, `maxPrice`, `minYear`, `maxYear`, `minMileage`, `maxMileage` | Price, age and mileage ranges. |
| `fuelType`, `gearbox`, `bodyType`, `colour`, `doors`, `seats`, `minEngineSize`, `maxEngineSize` | Car filters, as on the site. |
| `writeOffs`, `aaInspectedOnly`, `manufacturerApprovedOnly`, `nearlyNewOnly`, `financeAvailableOnly` | AA Cars' own filters. |
| `keyword`, `postcode`, `distance`, `dealer`, `sortBy` | Keywords, location, one dealer's stock, order. |
| `maxItems` | Stop after this many cars (default 100). |
| `includeListingDetails` | On by default. Off = search-result fields only, much faster and cheaper to run. |
| `includeDuplicates` | Off by default: cars from your earlier runs are skipped and not charged. |
| `reportDelisted` | On by default: the sold/removed report described below. |
| `maxConcurrency`, `proxyConfiguration` | Speed and proxy settings; the defaults were the fastest in tests. |

Example input:

```json
{
  "startUrls": [{ "url": "https://www.theaa.com/used-cars/ford/fiesta" }],
  "maxItems": 500
}
```

### Output example

```json
{
  "listing_id": "37-3422026",
  "url": "https://www.theaa.com/used-cars/cardetails/37-3422026",
  "title": "Ford Fiesta 1.0 EcoBoost Hbd mHEV 125 Active X 5dr Auto",
  "make": "Ford",
  "model": "Fiesta",
  "variant": "1.0 EcoBoost Hbd mHEV 125 Active X 5dr Auto",
  "price": 15500,
  "price_text": "£15,500",
  "currency": "GBP",
  "monthly_price": 276,
  "monthly_price_text": "PCP from £276 pm / HP from £339 pm",
  "year": 2023,
  "mileage": 14186,
  "fuel_type": "Petrol",
  "transmission": "Automatic",
  "body_type": "Hatchback",
  "colour": "Black",
  "co2_emissions_g_km": 126,
  "registration": "AB23CDE",
  "previous_keepers": 0,
  "history_stolen": false,
  "history_write_off": false,
  "history_checked_at": "2026-09-11T01:22:00",
  "main_image_url": "https://image.vcars.co.uk/summit/3422026_1.jpg",
  "image_count": 20,
  "manufacturer_approved": true,
  "delivery_available": true,
  "dealer_name": "Invicta Croydon",
  "dealer_address": "2 Imperial Way, Purley Way, Croydon, CR04RR",
  "dealer_postcode": "CR0 4RR",
  "dealer_phone": "020 3018 4487",
  "dealer_opening_hours": [{ "day": "Monday", "hours": "08:30 - 19:00" }],
  "dealer_franchised": true,
  "dealer_stock_count": 41,
  "detail_page_complete": true,
  "seen_in_previous_run": false,
  "scraped_at": "2026-09-30T23:54:04+00:00",
  "search_url": "https://www.theaa.com/used-cars/displaycars?mymakeid=113&mymodelid=109"
}
```

(Registration changed for this example; the Actor returns it exactly as the listing shows it.)

### Sold and removed cars report

With **Report sold and removed cars** on, the Actor remembers every car each search returned. On the next run of the same search, cars that have gone are saved to the `DELISTED_LISTINGS` record in the run's key-value store. Each has:

- `reason`: `sold_or_removed` (the car's page is gone) or `no_longer_matches_search` (still for sale, for example after a price change)
- `first_seen_at`, `last_seen_at` and `days_listed`
- `first_price`, `last_price` and `price_change`
- `current_price`, for cars still listed

It is free. It works when the whole search is read, so set **Maximum cars** above the search size.

### Use cases

- **Dealers and car buyers:** track competitors' stock and prices, find cars below market value, and see how long cars take to sell.
- **Price research:** build used car price indexes by make, model, age and mileage across the UK.
- **Finance and insurance:** collect PCP/HP monthly prices, write-off categories and history check results.
- **Lead generation:** build lists of UK car dealers with address, phone, website, opening hours and stock size.
- **Alerts:** schedule the Actor daily and get only the new cars matching your search.

### How much does it cost to scrape AA Cars?

**$6.50 per 1,000 cars saved** (pay per result). Cars skipped because you already received them, the sold/removed report and the run summary are not charged. You can cap spending with the run's maximum cost.

With the default settings, 1,000 cars with full details took about 45 seconds on the Apify platform.

### How this AA Cars scraper compares

Checked in Apify Store on 30 September 2026.

| | This Actor | Other AA Cars Actors in Apify Store |
|---|---|---|
| Scrapes AA Cars (theaa.com/used-cars) | Yes | None found |
| Every car in searches over 1,000 results | Yes | None |
| Full car pages: photos, specs, features, history check | Yes | None |
| Dealer address, phone and opening hours | Yes | None |
| Only new cars on scheduled runs | Yes | None |
| Sold/removed report with days on sale and price change | Yes | None |

### FAQ

#### What is the best AA Cars scraper on Apify?

As of 30 September 2026, this is the only Actor in Apify Store built for AA Cars (theaa.com/used-cars). It reads every car in a search, including searches over AA Cars' 1,000-result limit. It adds each car's full page, the vehicle history check and the dealer's contact details. It also reports sold and removed cars between runs.

#### What is the best UK used car scraper?

It depends on the site you need. AA Cars lists dealer stock only, about 155,000 cars and vans from about 3,000 UK dealers, and every car has the AA's vehicle history check. This Actor covers AA Cars. For other UK marketplaces such as AutoTrader or PistonHeads, use an Actor built for that site.

#### Can I scrape a whole make or all UK cars?

Yes. Paste a make page, or use the builder without a model, and set **Maximum cars** high enough. Searches over 1,000 cars are split into price ranges automatically.

#### Does it include vans?

AA Cars shows vans (panel vans, pickups, campervans and so on) in car searches when you choose a van body type. The Actor returns them with `vehicle_type: "Van"`.

#### Why is the dealer name empty in some rows?

With **Get full listing details** off, the Actor returns only what the search results show, and AA Cars' search results don't show the dealer for every car. Turn details on to get the dealer's name, address and phone for every car.

#### Is scraping AA Cars legal?

The Actor only collects data that AA Cars shows publicly to every visitor. Listings are from businesses (dealers), and the Actor does not collect reviewer names or any other personal data beyond what dealers publish in their listings. Check that your use of the data complies with AA Cars' terms, UK GDPR and the laws that apply to you.

#### Does the Actor get around bot protection?

No. If AA Cars refuses requests or shows a bot check, the Actor stops cleanly. It keeps everything already saved and stores the refused page as `DEBUG-PAGE-1` in the run's key-value store.

### Support

Found a problem or need another field? Open an issue on the Actor's **Issues** tab. If the Actor works well for you, a quick review in Apify Store helps others find it.

# Actor input Schema

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

The easiest way to use this Actor: search on <a href="https://www.theaa.com/used-cars" target="_blank">theaa.com/used-cars</a>, then paste the address here. Works with search results, make and model pages (theaa.com/used-cars/ford/fiesta), body type, fuel, gearbox and town pages, dealer pages, dealer lists by county or brand, and single car pages. Every matching car is scraped, not only the cars shown on the first page. Leave empty to use the search builder below.

## `makes` (type: `array`):

Optional search builder, used instead of or as well as URLs. Each make is searched separately. Leave empty for all makes (when you set other filters).

## `models` (type: `array`):

Each model is searched separately (you do not need to pick its make as well).

## `minPrice` (type: `string`):

Lowest asking price.

## `maxPrice` (type: `string`):

Highest asking price.

## `minYear` (type: `integer`):

Registered in or after this year.

## `maxYear` (type: `integer`):

Registered in or before this year.

## `minMileage` (type: `integer`):

Lowest mileage in miles.

## `maxMileage` (type: `integer`):

Highest mileage in miles.

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

Only cars with this fuel type.

## `gearbox` (type: `string`):

Automatic or manual.

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

Only cars with this body type, as AA Cars classifies them.

## `colour` (type: `string`):

Only cars in this colour.

## `doors` (type: `string`):

Number of doors.

## `seats` (type: `string`):

Number of seats.

## `minEngineSize` (type: `string`):

Smallest engine.

## `maxEngineSize` (type: `string`):

Largest engine.

## `writeOffs` (type: `string`):

Recorded insurance write-offs (Cat S and Cat N) are included unless you choose otherwise.

## `aaInspectedOnly` (type: `boolean`):

Only cars that passed an AA vehicle inspection.

## `manufacturerApprovedOnly` (type: `boolean`):

Only manufacturer approved used cars.

## `nearlyNewOnly` (type: `boolean`):

Only nearly new cars.

## `financeAvailableOnly` (type: `boolean`):

Only cars you can buy on AA car finance (monthly prices included).

## `keyword` (type: `string`):

Words to look for, as in the site's "Add keywords" box, for example "ST-Line" or "panoramic roof".

## `postcode` (type: `string`):

Search around this UK postcode, for example SW1A 1AA or M1.

## `distance` (type: `string`):

Distance from the postcode.

## `dealer` (type: `string`):

Only this dealer's cars: paste the dealer page URL, for example https://www.theaa.com/used-cars/dealers/vertu-ford-bromley

## `sortBy` (type: `string`):

Order of results.

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

Stop after saving this many cars. Each saved car is one billable result.

## `includeListingDetails` (type: `boolean`):

Opens each car's page for all photos, colour, engine size, doors, CO2, features, description, the vehicle history check, registration, finance prices and the dealer's address, phone and opening hours. Turn off for much faster runs with search-result fields only.

## `includeDuplicates` (type: `boolean`):

Off by default: cars you already received in an earlier run are skipped and not charged, so scheduled runs return only new stock. Turn on to get every matching car again (each is marked seen\_in\_previous\_run).

## `reportDelisted` (type: `boolean`):

Remembers every car each search returns. On the next run of the same search, cars that have gone are saved to the DELISTED\_LISTINGS record with the reason (sold\_or\_removed or no\_longer\_matches\_search), first and last seen dates and prices, so you get days on sale and price drops. Free. Works when the whole search is read, so set Maximum cars above the search size.

## `maxConcurrency` (type: `integer`):

Car pages loaded at once. The default is tuned for speed without straining AA Cars.

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

Apify Proxy spreads requests over several IP addresses. The default was the fastest in tests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.theaa.com/used-cars/ford/fiesta"
    }
  ],
  "minPrice": "",
  "maxPrice": "",
  "fuelType": "",
  "gearbox": "",
  "bodyType": "",
  "colour": "",
  "doors": "",
  "seats": "",
  "minEngineSize": "",
  "maxEngineSize": "",
  "writeOffs": "",
  "aaInspectedOnly": false,
  "manufacturerApprovedOnly": false,
  "nearlyNewOnly": false,
  "financeAvailableOnly": false,
  "distance": "",
  "sortBy": "",
  "maxItems": 100,
  "includeListingDetails": true,
  "includeDuplicates": false,
  "reportDelisted": true,
  "maxConcurrency": 32,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

## `delisted` (type: `string`):

No description

## `runSummary` (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.theaa.com/used-cars/ford/fiesta"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vivid-softwares/aa-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.theaa.com/used-cars/ford/fiesta" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("vivid-softwares/aa-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.theaa.com/used-cars/ford/fiesta"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call vivid-softwares/aa-cars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vivid-softwares/aa-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/ifOW2fLIOtiikteVt/builds/fPTwDHVCTqm1eb0Pq/openapi.json
