# AutoTrader UK Scraper — Cars, Prices, Specs & Dealer Contacts (`haketa/autotrader-scraper`) Actor

Scrape used & new car listings from AutoTrader UK: price, make, model, year, mileage, specs, dealer and location.

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

## Pricing

from $1.39 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## AutoTrader UK Scraper — Cars, Prices, Specs & Dealer Contacts

Extract **car listings from AutoTrader UK** — the UK's largest used & new car marketplace — as clean, structured JSON. Search by make, model, postcode and filters, and get the price, **deal rating**, mileage, year, **full vehicle specs**, photos, seller type and **dealer contact details (name, phone, email, website)** for every car.

Unlike thin scrapers that only return a title and a price, this Actor pulls the **complete picture for each car**, including the **structured specs** (fuel, transmission, body, colour) and the **dealer's phone and email** — the data that actually powers pricing tools and lead generation.

Built for **car dealers, traders, automotive market researchers, price-comparison tools and sales teams** who need fresh, reliable AutoTrader data at scale — without writing or maintaining a scraper.

---

### Why this scraper

- ☎️ **Dealer contact details** — name, **phone**, email and website on every applicable listing. Turn the UK's biggest car marketplace into a live lead list.
- 🟢 **Deal rating** — AutoTrader's price indicator (Great / Good / Fair / High) on each car, so you can instantly spot under- and over-priced stock.
- 🔧 **Full specs** — fuel type, transmission, drivetrain, engine size, body type, colour, doors and more.
- 🖼️ **Everything else** — make, model, derivative, year, mileage, numeric price, photos, seller type, dealer rating, location and distance.
- 📄 **Full pagination & dedup** — walks every results page and deduplicates by advert ID.
- 🛟 **Reliable at scale** — streams results as it runs and stops cleanly before any run-timeout, so you always keep what you collected.

---

### What you can do with it

#### 🚗 Car dealers & traders
Monitor the whole market for the models you buy and sell. Track asking prices, deal ratings and how long stock sits, spot mispriced cars to buy, and benchmark your own pricing against every competitor in your area.

#### 📞 Lead generation
With dealer name, phone, email and website on each listing, build targeted prospecting lists — ideal for suppliers, finance and warranty providers, marketing agencies and anyone selling to car dealers.

#### 💷 Pricing & market intelligence
Numeric prices plus AutoTrader's deal rating let you build live pricing models, track depreciation by make/model/year/mileage, and monitor supply and demand across the UK.

#### 📊 Automotive research & analytics
Analyse the used-car market at scale: fuel-type and transmission mix, EV adoption, average mileage and price by segment, regional differences and seasonal trends.

#### 🔁 Inventory aggregation & feeds
Feed AutoTrader listings into your own car site, valuation tool, CRM, dashboard or data warehouse with a stable, deduplicated schema.

---

### Features

- 🔎 **Search by make, model, postcode** with price, year and mileage filters.
- 🔗 **Start-URL mode** — paste any AutoTrader car-search URL with your own filters.
- 🧾 **Detail enrichment** — full specs and dealer contact for every car.
- 🟢 **Deal rating** captured on each listing.
- 📄 **Full pagination** (~20 cars per page) up to your limit.
- ⚡ **Fast list mode** — turn detail scraping off for a quick overview.
- 🧹 **Deduplication** by advert ID, safe across scheduled runs.
- ⚙️ **Configurable** limits, delay, concurrency and proxy.
- 🌍 **Proxy-ready** — works best with UK residential proxies.
- 📤 **Export anywhere** — JSON, CSV, Excel, HTML or API, with one-click integrations.

---

### Input

| Field | Type | Description |
|-------|------|-------------|
| `postcode` | string | UK postcode to search around, e.g. `M1 5HF`, `SW1A 1AA`. Results are distance-sorted from here. |
| `make` | string | Car make, e.g. `BMW`, `Ford`. Empty = all makes. |
| `model` | string | Car model, e.g. `3 Series`. Empty = all models of the make. |
| `minPrice` / `maxPrice` | integer | Price range in GBP. |
| `minYear` / `maxYear` | integer | Registration-year range. |
| `maxMileage` | integer | Maximum mileage. |
| `sortBy` | select | Relevance, price, mileage, year or newest listed. |
| `startUrls` | array | AutoTrader car-search URLs with your own filters. |
| `scrapeDetails` | boolean | Add full specs + dealer contact per car. Default **on**. |
| `maxItems` | integer | Maximum cars. `0` = no limit. |
| `maxPages` | integer | Maximum result pages per search. `0` = no limit. |
| `proxyConfiguration` | object | Proxy settings. UK **residential** proxy strongly recommended. |
| `requestDelay` | integer | Delay between requests in milliseconds. |
| `maxConcurrency` | integer | Parallel detail-page requests. |

#### Example 1 — make + postcode

```json
{
  "postcode": "SW1A 1AA",
  "make": "BMW",
  "scrapeDetails": true,
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "GB"
  }
}
````

#### Example 2 — filtered search

```json
{
  "postcode": "M1 5HF",
  "make": "Ford",
  "model": "Focus",
  "minPrice": 5000,
  "maxPrice": 12000,
  "maxMileage": 60000,
  "minYear": 2018,
  "sortBy": "price-asc",
  "maxItems": 500
}
```

#### Example 3 — your own AutoTrader URL

```json
{
  "startUrls": [
    "https://www.autotrader.co.uk/car-search?postcode=LS1%201UR&make=Audi&model=A3&fuel-type=Petrol"
  ],
  "scrapeDetails": true
}
```

#### Example 4 — fast list-only

```json
{
  "postcode": "B1 1AA",
  "make": "Volkswagen",
  "scrapeDetails": false,
  "maxItems": 1000
}
```

***

### Output

Each car is one dataset record. With `scrapeDetails` enabled you get the full field set:

```json
{
  "advertId": "202601239366839",
  "url": "https://www.autotrader.co.uk/car-details/202601239366839",
  "title": "BMW 4 Series Gran Coupe",
  "subtitle": "3.0 435d M Sport Auto xDrive Euro 6 (s/s) 5dr",
  "make": "BMW",
  "model": "4 Series Gran Coupe",
  "year": 2015,
  "registration": "2015 (65 reg)",
  "condition": "USED",
  "price": 12950,
  "priceText": "£12,950",
  "priceIndicator": "GOOD",
  "mileage": 94584,
  "fuelType": "Diesel",
  "transmission": "Automatic",
  "drivetrain": "Four Wheel Drive",
  "engineSize": "3.0L",
  "bodyType": "Saloon",
  "colour": "White",
  "doors": 5,
  "sellerType": "Dealer",
  "dealerName": "Infinity Motors Ltd",
  "dealerPhone": "(07537) 124436",
  "dealerEmail": "sales@infinitymotorsltd.co.uk",
  "dealerWebsite": "https://www.infinitymotorsltd.co.uk",
  "dealerRating": 4.8,
  "dealerLink": "https://www.autotrader.co.uk/dealers/wiltshire/swindon/infinity-motors-ltd-10030986",
  "location": "Swindon",
  "distanceMiles": 70,
  "attentionGrabber": "*REAR CAMERA|HEATED SEATS|NAV*",
  "hasFinance": true,
  "isApproved": false,
  "images": ["https://m.atcdn.co.uk/a/media/w800h600/..."],
  "numberOfImages": 114,
  "description": "Full description …",
  "searchMake": "BMW",
  "searchPostcode": "SW1A 1AA",
  "rank": 1,
  "scrapedAt": "2026-06-20T11:43:00.000Z"
}
```

#### Field reference

| Field | Description |
|-------|-------------|
| `advertId` | AutoTrader advert ID (stable — safe for deduplication). |
| `url` | Listing URL. |
| `title` / `subtitle` | Make + model, and the derivative/trim line. |
| `make` / `model` / `year` / `registration` | Core vehicle identity. |
| `condition` | Used or new. |
| `price` / `priceText` | Numeric price and the displayed price. |
| `priceIndicator` | AutoTrader deal rating (Great / Good / Fair / High). |
| `mileage` | Mileage. |
| `fuelType` / `transmission` / `drivetrain` | Powertrain details. |
| `engineSize` / `bodyType` / `colour` / `doors` | Key specs. |
| `owners` / `power` / `co2Emissions` | Additional specs (where available). |
| `sellerType` | Dealer or Private. |
| `dealerName` / `dealerPhone` / `dealerEmail` / `dealerWebsite` | Dealer contact details. |
| `dealerRating` | Dealer review rating. |
| `dealerLink` | Dealer page URL. |
| `location` / `distanceMiles` | Vehicle location and distance from your postcode. |
| `attentionGrabber` | Seller highlight line. |
| `hasFinance` | Finance available. |
| `isApproved` | Manufacturer/franchise approved. |
| `images` / `numberOfImages` | Photo URLs and count. |
| `description` | Full advert description. |
| `searchMake` / `searchPostcode` | The query that produced the record. |
| `rank` | Position in results. |
| `scrapedAt` | ISO scrape timestamp. |

> **Tip:** turn **`scrapeDetails` off** for a fast list (price, deal rating, mileage, year, make/model). Turn it **on** for full specs and dealer contact.

***

### How to use

1. Open the Actor and set `postcode` + `make` (and optional filters), or paste `startUrls`.
2. Keep the **UK residential proxy** suggested in the input.
3. Set `maxItems` / `maxPages` to control volume.
4. Click **Start** and watch results stream in.
5. Export as **JSON, CSV, Excel, HTML or via API**, or connect to Google Sheets, Make, Zapier, Slack and more.

#### Run on a schedule

Use the platform **Scheduler** to run the same search daily. Because every car has a stable `advertId`, you can deduplicate and build a historical dataset — perfect for price-tracking, stock monitoring and "new today" alerts.

#### Run it via API & integrations

Start runs and fetch results programmatically through the standard platform API and client libraries, and push data to Google Sheets, Slack, Make, Zapier, webhooks and more with one-click integrations.

***

### Tips for best results

- **Use UK residential proxies** — datacenter IPs are blocked.
- **Use a real postcode** in the correct format (e.g. `M1 5HF`); results are distance-sorted from it.
- **Be specific** — a make + model + filters search is faster and more relevant than scraping everything.
- **List first, then enrich** — gauge volume in list-only mode, then enable details for the slice you need.
- **Deduplicate on `advertId`** when merging runs over time.
- **Watch `priceIndicator`** to surface good deals automatically.

***

### Performance & cost

- **List mode** is fastest and cheapest — one request per results page (~20 cars).
- **Detail mode** opens one page per car for specs and dealer contact, so cost scales with the number of cars.
- Use `maxItems`, `maxPages` and `maxConcurrency` to balance speed, completeness and cost.
- Results **stream into the dataset** as they're scraped, and a run stops gracefully before any timeout.

***

### Frequently asked questions

**Which AutoTrader site is this for?**
The UK marketplace, **autotrader.co.uk**.

**Do I get the dealer's phone number?**
Yes — for applicable listings the dealer's name, phone, email and website are included. Private-seller adverts may not expose an email.

**What is the deal rating?**
`priceIndicator` is AutoTrader's own assessment of the price (e.g. Great / Good / Fair / High price), letting you spot good and bad deals instantly.

**Do I get full specifications?**
Yes — fuel type, transmission, drivetrain, engine size, body type, colour, doors and more, with details enabled.

**Can I use my own search filters?**
Yes — filter on AutoTrader in your browser, copy the URL, and paste it into `startUrls`. The Actor follows your filters and paginates through all results.

**How many cars can it return?**
As many as the search exposes. Use `maxItems` and `maxPages` to cap it, or set them to `0` for no limit.

**How fresh is the data?**
It is scraped live at run time. Schedule the Actor for a continuously updated dataset.

**Do I need a postcode?**
Yes — AutoTrader searches are postcode-based and results are distance-sorted. Use a valid UK postcode.

**Will big runs fail or time out?**
No — results stream as they go and the Actor stops cleanly before any timeout, so you always keep what was collected.

**Do I need to write code?**
No. Set the inputs, click Start and export. Developers can also drive everything via the API.

**What export formats are available?**
JSON, CSV, Excel, HTML and API, plus one-click integrations.

**Is a proxy required?**
A UK residential proxy is strongly recommended (and pre-filled). Without it, requests are likely blocked.

***

### Troubleshooting

- **No cars found?** Check your postcode format (e.g. `M1 5HF`), confirm the make/model spelling, and make sure a UK residential proxy is enabled.
- **Fewer cars than expected?** Raise `maxItems` and `maxPages`, or widen your filters.
- **Run is slow?** Lower `maxItems`, turn `scrapeDetails` off for an overview, or narrow the search.
- **Missing email on some cars?** Private sellers and some dealers don't publish an email; the phone is still included.

***

### Changelog

#### 0.1 — Initial release (June 2026)

- Search AutoTrader UK by **make, model, postcode** with price, year and mileage filters.
- **Start-URL mode** for any AutoTrader car-search URL.
- Rich listing data: make, model, derivative, year, mileage, numeric price, **deal rating**, photos, seller type, dealer rating, location and distance.
- **Detail enrichment**: full specs (fuel, transmission, drivetrain, engine size, body, colour, doors) and **dealer contact** (name, phone, email, website) plus full description.
- Full pagination, **deduplication by advert ID**, and a fast list-only mode.
- Streaming output with graceful run-timeout handling.

# Actor input Schema

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

UK postcode to search around, e.g. 'M1 5HF', 'SW1A 1AA'. Results are distance-sorted from here.

## `make` (type: `string`):

Car make, e.g. 'BMW', 'Ford', 'Audi'. Leave empty for all makes.

## `model` (type: `string`):

Car model, e.g. '3 Series', 'Focus'. Leave empty for all models of the make.

## `minPrice` (type: `integer`):

Minimum price in GBP. 0 = no limit.

## `maxPrice` (type: `integer`):

Maximum price in GBP. 0 = no limit.

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

Earliest registration year. 0 = no limit.

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

Latest registration year. 0 = no limit.

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

Maximum mileage. 0 = no limit.

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

Result ordering.

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

Paste AutoTrader UK car-search URLs with your own filters. Used instead of the make/model/price inputs.

## `scrapeDetails` (type: `boolean`):

Open each car for full specs (fuel, transmission, colour, etc.) and dealer contact (name, phone, email, website). Slower but far richer. Turn off for a fast list.

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

Maximum cars to scrape. 0 = no limit.

## `maxPages` (type: `integer`):

Maximum result pages per search (~20 cars each). 0 = no limit.

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

AutoTrader blocks datacenter IPs — UK residential proxy is strongly recommended.

## `requestDelay` (type: `integer`):

Delay between requests in milliseconds.

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

Parallel detail-page requests.

## Actor input object example

```json
{
  "postcode": "SW1A 1AA",
  "make": "BMW",
  "minPrice": 0,
  "maxPrice": 0,
  "minYear": 0,
  "maxYear": 0,
  "maxMileage": 0,
  "sortBy": "relevance",
  "startUrls": [],
  "scrapeDetails": true,
  "maxItems": 100,
  "maxPages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  },
  "requestDelay": 600,
  "maxConcurrency": 6
}
```

# Actor output Schema

## `advertId` (type: `string`):

AutoTrader advert ID

## `url` (type: `string`):

Listing URL

## `title` (type: `string`):

Make + model

## `subtitle` (type: `string`):

Trim / derivative

## `make` (type: `string`):

Car make

## `model` (type: `string`):

Car model

## `year` (type: `string`):

Registration year

## `registration` (type: `string`):

Year + reg plate

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

Used / new

## `price` (type: `string`):

Numeric price (GBP)

## `priceText` (type: `string`):

Displayed price

## `priceIndicator` (type: `string`):

Price/deal rating

## `mileage` (type: `string`):

Mileage

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

Fuel type

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

Gearbox

## `drivetrain` (type: `string`):

Drivetrain

## `engineSize` (type: `string`):

Engine size

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

Body type

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

Colour

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

Number of doors

## `owners` (type: `string`):

Previous owners

## `power` (type: `string`):

Engine power

## `co2Emissions` (type: `string`):

CO2 emissions

## `sellerType` (type: `string`):

Dealer / Private

## `dealerName` (type: `string`):

Dealer name

## `dealerPhone` (type: `string`):

Dealer phone

## `dealerEmail` (type: `string`):

Dealer email

## `dealerWebsite` (type: `string`):

Dealer website

## `dealerRating` (type: `string`):

Dealer review rating

## `dealerLink` (type: `string`):

Dealer page URL

## `location` (type: `string`):

Vehicle location

## `distanceMiles` (type: `string`):

Distance from postcode (miles)

## `attentionGrabber` (type: `string`):

Seller highlight text

## `hasFinance` (type: `string`):

Finance available

## `isApproved` (type: `string`):

Manufacturer/franchise approved

## `images` (type: `string`):

Image URLs

## `numberOfImages` (type: `string`):

Number of images

## `description` (type: `string`):

Description

## `searchMake` (type: `string`):

Make searched

## `searchPostcode` (type: `string`):

Postcode searched

## `rank` (type: `string`):

Position in results

## `scrapedAt` (type: `string`):

ISO timestamp

# 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 = {
    "postcode": "SW1A 1AA",
    "make": "BMW",
    "startUrls": [],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GB"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/autotrader-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 = {
    "postcode": "SW1A 1AA",
    "make": "BMW",
    "startUrls": [],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "GB",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/autotrader-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "postcode": "SW1A 1AA",
  "make": "BMW",
  "startUrls": [],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}' |
apify call haketa/autotrader-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=haketa/autotrader-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "AutoTrader UK Scraper — Cars, Prices, Specs & Dealer Contacts",
        "description": "Scrape used & new car listings from AutoTrader UK: price, make, model, year, mileage, specs, dealer and location.",
        "version": "0.1",
        "x-build-id": "mDeKPMvRpzsN8mg9U"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/haketa~autotrader-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-haketa-autotrader-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/haketa~autotrader-scraper/runs": {
            "post": {
                "operationId": "runs-sync-haketa-autotrader-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/haketa~autotrader-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-haketa-autotrader-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "postcode": {
                        "title": "Postcode",
                        "type": "string",
                        "description": "UK postcode to search around, e.g. 'M1 5HF', 'SW1A 1AA'. Results are distance-sorted from here."
                    },
                    "make": {
                        "title": "Make",
                        "type": "string",
                        "description": "Car make, e.g. 'BMW', 'Ford', 'Audi'. Leave empty for all makes."
                    },
                    "model": {
                        "title": "Model",
                        "type": "string",
                        "description": "Car model, e.g. '3 Series', 'Focus'. Leave empty for all models of the make."
                    },
                    "minPrice": {
                        "title": "Min price (£)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price in GBP. 0 = no limit.",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Max price (£)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price in GBP. 0 = no limit.",
                        "default": 0
                    },
                    "minYear": {
                        "title": "Min year",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Earliest registration year. 0 = no limit.",
                        "default": 0
                    },
                    "maxYear": {
                        "title": "Max year",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Latest registration year. 0 = no limit.",
                        "default": 0
                    },
                    "maxMileage": {
                        "title": "Max mileage",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum mileage. 0 = no limit.",
                        "default": 0
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "price-asc",
                            "price-desc",
                            "datedesc",
                            "mileage",
                            "year-desc"
                        ],
                        "type": "string",
                        "description": "Result ordering.",
                        "default": "relevance"
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Paste AutoTrader UK car-search URLs with your own filters. Used instead of the make/model/price inputs.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "scrapeDetails": {
                        "title": "Scrape detail pages",
                        "type": "boolean",
                        "description": "Open each car for full specs (fuel, transmission, colour, etc.) and dealer contact (name, phone, email, website). Slower but far richer. Turn off for a fast list.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max cars",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum cars to scrape. 0 = no limit.",
                        "default": 0
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum result pages per search (~20 cars each). 0 = no limit.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "AutoTrader blocks datacenter IPs — UK residential proxy is strongly recommended.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "GB"
                        }
                    },
                    "requestDelay": {
                        "title": "Request delay (ms)",
                        "minimum": 0,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Delay between requests in milliseconds.",
                        "default": 600
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Parallel detail-page requests.",
                        "default": 6
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
