# Autotrader UK Scraper (`calm_builder/autotrader-uk-scraper`) Actor

Extract structured UK car listings from Autotrader search URLs. Collect prices, mileage, specs, images, running costs, vehicle history, dealer profiles, reviews, other stock, delivery and finance data. Fast feed summaries or full vehicle profiles.

- **URL**: https://apify.com/calm\_builder/autotrader-uk-scraper.md
- **Developed by:** [Coder](https://apify.com/calm_builder) (community)
- **Categories:** Developer tools, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 1,000 vehicle listing saveds

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

Collect structured car listing data from [Autotrader UK](https://www.autotrader.co.uk) using your own search URLs. Paste the same links you use on the website — make, model, filters, and buyer postcode — and receive clean JSON records in your Apify dataset.

Use it for **market research**, **price monitoring**, **inventory tracking**, **lead generation**, and **automotive data pipelines** — without building and maintaining your own scraper.

---

### What you get

| Mode | Input setting | Best for |
|------|----------------|----------|
| **Search summary** (default) | `fetchDetails: false` | Fast scans: title, price, mileage, location, images, and key feed fields from search results |
| **Full vehicle profile** | `fetchDetails: true` | Complete listing data: specifications, features, images, description, running costs, history, and highlights |
| **Optional enrichments** | Toggles under enrichments (require full details) | Dealer profile, reviews, other stock, delivery options, and finance quotes |

Each saved vehicle is one dataset row with `recordType: "listing"`. When dealer enrichments are enabled without attach mode, dealer data can also appear as separate `recordType: "seller"` rows (see [Dealer output modes](#dealer-output-modes)).

---

### Quick start on Apify

1. Open the Actor in the Apify Console.
2. Under **Search URLs**, add one or more Autotrader UK **car-search** URLs. Each URL must include a **postcode** (for example `postcode=EC1A1BB`) — this is the buyer location used for distance, delivery, and search context.
3. Set **Maximum listings per search URL** (default `10`).
4. Turn on **Full vehicle details** when you need specifications, images, and description — not only search-card summaries.
5. Enable optional enrichments (dealer, delivery, finance) only if you need them.
6. Click **Start** and open the **Dataset** tab when the run finishes. Use the **Preview** view for key columns or **All fields** for the complete JSON.

**How to get a search URL:** Run a search on autotrader.co.uk (set make, model, filters, and your postcode), then copy the URL from your browser address bar.

**Example input (full profile with enrichments):**

```json
{
  "startUrls": [
    {
      "url": "https://www.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB"
    }
  ],
  "maxListings": 10,
  "fetchDetails": true,
  "fetchSellerProfile": true,
  "fetchSellerReviews": true,
  "maxReviewsPerSeller": 5,
  "fetchSellerOtherListings": true,
  "maxOtherListingsPerSeller": 5,
  "attachSellerToListings": true,
  "fetchDeliveryOptions": true,
  "fetchFinanceQuotes": true,
  "financeDeposit": 1000,
  "financeTermMonths": 48,
  "financeAnnualMileage": 10000
}
````

**Example input (fast search summary only):**

```json
{
  "startUrls": [
    {
      "url": "https://www.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB"
    }
  ],
  "maxListings": 50,
  "fetchDetails": false
}
```

***

### Input parameters

#### Search URLs (required)

| | |
|---|---|
| **Type** | List of URLs |
| **Format** | Autotrader UK car-search pages (`autotrader.co.uk/car-search?...`) |
| **Required query** | `postcode` — buyer location (e.g. `postcode=EC1A1BB` or `postcode=SW1A1AA`) |
| **Tip** | Copy the URL directly from your browser after configuring filters on the site |

Invalid URLs (wrong domain or missing postcode) are skipped with a warning; other URLs in the same run can still succeed.

#### Maximum listings per search URL

| | |
|---|---|
| **Type** | Integer |
| **Range** | `1` – `100,000` |
| **Default** | `10` |

Controls how many listings are collected **per search URL**. With multiple URLs, total results can be up to this value multiplied by the number of URLs.

Duplicates are removed within each URL. The same vehicle may appear more than once if it is returned by multiple search URLs.

#### Full vehicle details (`fetchDetails`)

| | |
|---|---|
| **Type** | Boolean |
| **Default** | `false` |

**Off** — Saves summary fields from search results (price, mileage, title, images, location, etc.). Fastest and lowest cost per vehicle.

**On** — Fetches the full vehicle page for each listing: specifications, grouped features, description, running costs, vehicle history, highlights, and full image gallery.

All enrichment options below require **Full vehicle details** to be enabled.

***

### Enrichments

Optional extras are grouped under **Enrichments ($)** in the input form. Enable only what you need — each adds data and may add billable events (see [Pricing](#pricing)).

#### Dealer profile (`fetchSellerProfile`)

Dealer name, distance from the search postcode, and review summary (total reviews, average rating, star breakdown). **Private sellers are skipped automatically** — only trade/dealer listings are enriched.

Requires **Dealer profile** to be on before reviews or other listings can be enabled.

#### Dealer reviews (`fetchSellerReviews`)

Individual review text, rating, reviewer name, source, and dates. Use **Maximum reviews per dealer** to cap how many reviews are collected per dealer (default `10`).

#### Dealer other listings (`fetchSellerOtherListings`)

Summary cards for other vehicles currently listed by the same dealer (title, price, mileage, images, etc.). Use **Maximum other listings per dealer** to set the cap (default `10`).

#### Attach dealer data to each listing (`attachSellerToListings`)

| Setting | Output shape |
|---------|----------------|
| **On** (default for small runs) | `sellerProfile`, `sellerReviews`, and `sellerOtherListings` are embedded on every listing from that dealer |
| **Off** (recommended for large runs) | Dealer data is written once per dealer as separate `recordType: "seller"` rows — join listings to sellers on `dealerId` + `postcode` |

When attach is **off**, the run log explains that two record types are present.

#### Delivery and collection (`fetchDeliveryOptions`)

Home delivery, click-and-collect, and collection details for the buyer postcode on each listing.

#### Finance quotes (`fetchFinanceQuotes`)

Finance calculator output where available. Configure the quote with:

| Field | Default | Description |
|-------|---------|-------------|
| `financeDeposit` | `1000` | Deposit in GBP |
| `financeTermMonths` | `48` | Loan term in months |
| `financeAnnualMileage` | `10000` | Annual mileage for the quote |

***

### What you will see during a run

The run log is written for end users — progress messages describe search and save activity. You do not need technical logs to use the Actor.

Typical messages:

- `Starting scrape of N search URL(s), up to M listing(s) per URL.`
- `Enrichments enabled: delivery, finance, dealer.` (when applicable)
- `Feed-only mode: summary fields from search results.` (when full details are off)
- `Finished. Saved N listing(s) and M dealer profile(s).`

If a search URL cannot be processed or a single listing fails, you will see a warning for that item; other URLs and listings in the same run can still succeed.

***

### Output overview

#### Dataset structure

- Results are saved to a **single Apify dataset**
- In the Console **Output** tab, use **Preview** for key columns or **All fields** for every JSON property
- Each row is a JSON object with a `recordType` field:
  - **`listing`** — vehicle data (always present for saved cars)
  - **`seller`** — dealer profile, reviews, and other stock (only when dealer enrichments are on and attach mode is off)

Field presence varies by listing: not every car has finance quotes, delivery to your postcode, or a full service history. Empty arrays (`[]`) or `null` mean no data was available — not necessarily an error.

If optional enrichment could not be retrieved for a listing, `enrichmentErrors` may list user-safe labels (for example `finance quotes unavailable`).

***

### Search summary output (`fetchDetails: false`)

When full details are off, each listing includes core fields from the search feed:

| Field | Description |
|-------|-------------|
| `advertId` | Autotrader advert identifier |
| `title`, `subtitle` | Vehicle title and trim line |
| `price`, `priceAmount` | Display price and numeric GBP amount |
| `mileage`, `registration` | Odometer and registration plate text |
| `make`, `model`, `year`, `condition` | Vehicle identity |
| `vehicleLocation` | Town and distance from search postcode |
| `sellerType`, `dealerId` | `TRADE` or private; dealer ID for trade sellers |
| `postcode`, `searchUrl`, `sourceUrl` | Buyer postcode, your input URL, and listing link |
| `primaryImage`, `images`, `imageCount` | Photo URLs |
| `dealerReviewRating`, `priceIndicator`, `stockLabel` | Feed-level signals when shown on the site |
| `hasDigitalRetailing` | Whether digital purchase flow is indicated |
| `recordType` | Always `"listing"` |

***

### Full vehicle profile (`fetchDetails: true`)

Adds detailed sections on top of the summary fields, including:

| Section | Contents |
|---------|----------|
| `description` | Seller-written vehicle description (array of paragraphs) |
| `specifications` | Key specs map (fuel, gearbox, doors, seats, etc.) |
| `specGroups` | Grouped performance and dimension specifications |
| `features` | Equipment list by category (Audio, Safety, Exterior, …) |
| `runningCosts` | CO₂, insurance group, tax, MPG |
| `vehicleHistory` | Owners, service history, basic history items |
| `vehicleHighlights` | Autotrader highlights (e.g. low mileage, strong acceleration) |
| `mileageComparison` | How mileage compares to similar vehicles |
| `deliveryAndCollection` | Location and delivery summary from the detail page |
| `sellerContact` | Seller name, email, phone, website, address, opening hours, and chat/text options (when shown on the listing page) |

#### Seller contact (`sellerContact`)

Included on every listing when **Full vehicle details** is enabled. Data comes from the vehicle detail page — trade dealers and private sellers use the same structure.

| Field | Description |
|-------|-------------|
| `name` | Dealer or seller name |
| `sellerType` | `TRADE` or `PRIVATE` |
| `dealerId` | Dealer ID for trade sellers |
| `email` | Public email when listed; omitted when Autotrader hides it |
| `emailProtected` | `true` when the seller’s email is not shown publicly |
| `primaryPhone` | Main contact phone number |
| `additionalPhones` | Extra phone lines when provided |
| `assignedTextNumber` | Autotrader text/chat routing number when enabled |
| `website` | Dealer website URL |
| `address` | `line1`, `town`, `county`, `postcode` |
| `coordinates` | `latitude`, `longitude` |
| `distance` | Distance from your search postcode |
| `openingHours` | Dealer opening times when available |
| `logo`, `description` | Dealer branding from the listing page |
| `reviewRating`, `reviewCount` | On-page review summary |
| `phoneProtectedText` | Privacy notice when the number is masked |
| `chatEnabled`, `textEnabled` | Whether chat/text contact is offered |

**Example — trade dealer:**

```json
{
  "sellerContact": {
    "name": "FS Performance Limited",
    "sellerType": "TRADE",
    "dealerId": "10003326",
    "email": "fsperformanceltd@gmail.com",
    "primaryPhone": "(01582) 955569",
    "additionalPhones": ["(07537) 164540"],
    "assignedTextNumber": "+447418363724",
    "website": "https://www.fsperformance.co.uk?utm_source=autotrader&utm_medium=referral",
    "address": {
      "line1": "110A TODDINGTON ROAD",
      "town": "LUTON",
      "county": "BEDFORDSHIRE",
      "postcode": "LU4 9DY"
    },
    "coordinates": { "latitude": 51.910917, "longitude": -0.4720183 },
    "distance": "31 miles",
    "reviewRating": 5.0,
    "reviewCount": 885
  }
}
```

**Example — private seller (email hidden):**

```json
{
  "sellerContact": {
    "sellerType": "PRIVATE",
    "emailProtected": true,
    "primaryPhone": "(020) 81286557",
    "address": { "town": "CARSHALTON" },
    "distance": "11 miles",
    "phoneProtectedText": "Seller's number has been protected."
  }
}
```

> **Note:** Phone numbers may be Autotrader-protected routing numbers, not direct lines. Private sellers often do not publish an email (`emailProtected: true`). Contact fields depend on what the seller chooses to display on Autotrader.

#### Example: Abarth 595 listing (excerpt)

**Input:**

```json
{
  "startUrls": [
    {
      "url": "https://www.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB"
    }
  ],
  "maxListings": 1,
  "fetchDetails": true
}
```

**Excerpt — core listing fields:**

```json
{
  "advertId": "202606063060313",
  "recordType": "listing",
  "title": "Abarth 595",
  "subtitle": "1.4 T-Jet Turismo Auto Euro 6 3dr",
  "price": "£8,200",
  "priceAmount": 8200,
  "priceIndicator": "Lower price",
  "mileage": "30,000 miles",
  "registration": "2014 (64 reg)",
  "make": "Abarth",
  "model": "595",
  "year": 2014,
  "condition": "used",
  "vehicleLocation": "Milton Keynes (42 miles)",
  "sellerType": "TRADE",
  "dealerId": "10024295",
  "postcode": "EC1A1BB",
  "stockLabel": "Available to reserve",
  "priceDeviation": "£773 below market average",
  "hasDigitalRetailing": true,
  "dealerReviewRating": 4.4,
  "sourceUrl": "https://www.autotrader.co.uk/car-details/202606063060313?channel=cars&postcode=EC1A1BB&sort=relevance",
  "searchUrl": "https://www.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB",
  "primaryImage": "https://m.atcdn.co.uk/a/media/{resize}/8cd330225cb34ed1a044a4d68b8746f0.jpg",
  "imageCount": 59
}
```

**Excerpt — specifications and description:**

```json
{
  "description": [
    "This 2014 Abarth 595 T Jet Turismo boasts exceptionally low mileage for its age, having covered just 30,000 miles..."
  ],
  "specifications": {
    "Mileage": "30,000 miles",
    "Registration": "2014 (64 reg)",
    "Fuel type": "Petrol",
    "Body type": "Hatchback",
    "Engine": "1.4L",
    "Gearbox": "Automatic",
    "Doors": "3",
    "Seats": "4",
    "Emission class": "Euro 6"
  },
  "specGroups": [
    {
      "category": "Performance",
      "items": [
        { "name": "0-62mph", "value": "7.6 seconds" },
        { "name": "Top speed", "value": "129mph" },
        { "name": "Engine power", "value": "160BHP" },
        { "name": "Miles per gallon", "value": "43.5mpg" }
      ]
    }
  ]
}
```

**Excerpt — running costs and highlights:**

```json
{
  "runningCosts": {
    "title": "Running Costs",
    "items": [
      { "label": "CO₂ emissions", "value": "151g/km" },
      { "label": "Insurance group", "value": "28U" },
      { "label": "Tax per year", "value": "£275" },
      { "label": "Average", "value": "43.5mpg" }
    ]
  },
  "vehicleHighlights": [
    {
      "title": "Lower mileage",
      "badge": "Lowest 25%",
      "description": "31,079 miles below average"
    },
    {
      "title": "Faster acceleration",
      "badge": "Top 25%",
      "description": "0-62mph in 7.6 seconds"
    }
  ]
}
```

***

### Dealer enrichments (attached to listings)

When dealer options are enabled and **Attach dealer data to each listing** is on, listing rows include nested dealer sections.

#### Dealer profile (`sellerProfile`)

```json
{
  "sellerProfile": {
    "dealerId": "10024295",
    "postcode": "EC1A1BB",
    "name": "Indus Motors Ltd",
    "distanceMiles": 42,
    "reviewSummary": {
      "totalReviews": 95,
      "averageRating": 4.4,
      "sourceSummaries": [
        {
          "source": "AUTOTRADER",
          "totalLiveReviews": 8
        },
        {
          "source": "FEEFO_PARTNERSHIP",
          "averageLiveReviewRating": 4.4,
          "totalLiveReviews": 87
        }
      ],
      "starSummaries": [
        { "starRating": 5, "totalReviews": 86 },
        { "starRating": 1, "totalReviews": 7 }
      ]
    }
  }
}
```

#### Dealer reviews (`sellerReviews`)

```json
{
  "sellerReviews": {
    "dealerId": "10024295",
    "name": "Indus Motors Ltd",
    "totalReviews": 95,
    "averageRating": 4.4,
    "reviews": [
      {
        "title": "⭐⭐⭐⭐⭐ Exceptional Experience from Start to Finish!",
        "text": "I recently bought my second car from this dealership...",
        "reviewerName": "Anonymous",
        "overallRating": 5,
        "source": "FEEFO_PARTNERSHIP",
        "created": "2026-05-23T12:08:06.101Z"
      }
    ]
  }
}
```

#### Dealer other listings (`sellerOtherListings`)

Summary cards for additional stock from the same dealer (not full detail pages):

```json
{
  "sellerOtherListings": [
    {
      "advertId": "202605282777875",
      "title": "Volvo C30",
      "subtitle": "2.0 R-Design Sports Coupe Euro 5 3dr",
      "price": "£4,000",
      "priceAmount": 4000,
      "mileage": "75,000 miles",
      "registration": "2012 (62 reg)",
      "make": "Volvo",
      "model": "C30",
      "year": 2012,
      "dealerId": "10024295",
      "sourceUrl": "https://www.autotrader.co.uk/car-details/202605282777875?..."
    }
  ]
}
```

***

### Delivery and finance enrichments

#### Delivery options (`deliveryOptions`)

```json
{
  "deliveryOptions": {
    "advertId": "202606063060313",
    "deliversToMyPostcode": true,
    "dealerServices": {
      "homeDelivery": {
        "bulletPoints": [
          "Delivery 7 days a week.",
          "Delivery outside of working hours at your convenience",
          "Same day delivery available on request."
        ],
        "deliveryCostPerMile": 1.5,
        "freeDeliveryRadiusInMiles": 35
      }
    }
  }
}
```

#### Finance quotes (`financeQuotes`)

Structure follows Autotrader’s finance API. Some listings return quote arrays; others return provider metadata only:

```json
{
  "financeQuotes": {
    "quotes": [],
    "financeProviderType": "PARTNER",
    "defaultPartnerAPR": "16.9%"
  }
}
```

Finance availability depends on the vehicle, seller, and buyer postcode. An empty `quotes` array with provider metadata is normal for some listings.

***

### Dealer output modes

#### Attached mode (`attachSellerToListings: true`)

- Every listing from a dealer includes `sellerProfile`, `sellerReviews`, and `sellerOtherListings` on the same row
- Simplest for spreadsheets and small exports
- Dealer data is duplicated across listings from the same dealer

#### Separate seller records (`attachSellerToListings: false`)

- Listings contain vehicle data plus a minimal `dealer` reference (`dealerId`, `postcode`, name when known)
- One `recordType: "seller"` row per unique dealer with full profile, reviews, and other stock
- Recommended for large runs — less duplication, smaller dataset
- Join listings to sellers on **`dealerId`** and **`postcode`**

**Example seller row (separate mode):**

```json
{
  "recordType": "seller",
  "dealerId": "10024295",
  "postcode": "EC1A1BB",
  "sellerProfile": {
    "name": "Indus Motors Ltd",
    "distanceMiles": 42,
    "reviewSummary": {
      "totalReviews": 95,
      "averageRating": 4.4
    }
  },
  "sellerReviews": { "reviews": [] },
  "sellerOtherListings": []
}
```

***

### Multiple search URLs

Add several entries under **Search URLs** to run multiple filters in one job.

```json
{
  "startUrls": [
    { "url": "https://www.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB" },
    { "url": "https://www.autotrader.co.uk/car-search?channel=cars&make=Fiat&model=500&postcode=EC1A1BB" }
  ],
  "maxListings": 25,
  "fetchDetails": true
}
```

- Each URL is processed independently up to **Maximum listings per search URL**
- The same vehicle may appear twice if it matches multiple searches
- If one URL is invalid, others can still complete

***

### Free plan limits

On the Apify **free plan**, the Actor may automatically apply:

| Limit | Value |
|-------|--------|
| Search URLs per run | **3** (only the first URLs in your list) |
| Maximum listings per search URL | **20** |

Paid Apify plans can use the full input without these caps. If limits apply, the run log will include a short notice and an upgrade suggestion.

***

### Pricing

Pricing is **pay-per-event** on Apify. See the **Pricing** tab on the Actor store for current rates. You are charged for **data successfully delivered** during the run.

| Event | When it applies |
|-------|------------------|
| **listing** | Each vehicle row (`recordType: listing`) saved to the dataset — including feed-only mode |
| **detail** | Each listing where the full vehicle detail page was successfully fetched |
| **delivery** | Each listing where delivery/collection data was successfully retrieved |
| **finance** | Each listing where finance quote data was successfully retrieved |
| **dealer\_profile** | Each unique dealer whose profile was successfully fetched |
| **dealer\_reviews** | Total count of individual review objects collected across all dealers |
| **dealer\_other\_listings** | Total count of other-listing items collected across all dealers |

**Cost tips:**

- Start with `fetchDetails: false` and a low `maxListings` to estimate cost per search
- Enable dealer, delivery, and finance only when you need those fields
- Use **separate seller records** on large dealer-heavy runs to avoid duplicating dealer JSON on every car row (dealer events are still per dealer, not per car)

***

### Data quality and limitations

**Public listing data**\
The Actor reads the same listing data shown to buyers on Autotrader UK. It does not access private seller accounts or off-market inventory.

**Accuracy**\
Prices, mileage, and availability change on the live site. Verify critical fields before purchase or compliance decisions.

**Coverage varies**\
Private sellers have no dealer profile. Finance quotes may be empty for some cars. Delivery options depend on dealer services and your search postcode.

**Postcode is required**\
Search URLs must include a postcode. This matches how Autotrader calculates distance and delivery eligibility.

**Compliance**\
You are responsible for using collected data in line with applicable laws and Autotrader’s terms of use.

***

### Tips for best results

1. **Copy URLs from the site** — Use real car-search URLs after setting filters and postcode in the browser.
2. **Start feed-only** — Use `fetchDetails: false` for quick market scans, then enable full details for production runs.
3. **Turn off unused enrichments** — Each optional enrichment adds fields and billable events.
4. **Large dealer runs** — Set `attachSellerToListings: false` and join on `dealerId` + `postcode`.
5. **Check the dataset** — The full JSON lives in dataset storage; export to JSON, CSV, or Excel from Apify.
6. **Re-run on a schedule** — Use Apify schedules to track price and stock changes over time.

***

### Frequently asked questions

**Why was my search URL skipped?**\
The URL may be missing a postcode, not be an Autotrader UK search page, or be malformed. Check the run log for warnings.

**Why is there no dealer profile on a listing?**\
The seller may be a private seller (`sellerType` not `TRADE`), dealer enrichments may be disabled, or the profile could not be retrieved (`enrichmentErrors` may explain).

**Why are finance quotes empty?**\
Not every listing offers finance through Autotrader’s calculator. Provider metadata without quote rows is normal for some vehicles.

**Where are seller phone and email?**\
Enable **Full vehicle details**. Contact fields appear in `sellerContact` on each listing row. They are not available in feed-only mode.

**Can I scrape a single car detail URL?**\
This Actor is built for **search URLs**. Use a car-search URL that returns the vehicles you need (for example filter by make/model or dealer).

**What is `recordType`?**\
`listing` = vehicle row. `seller` = dealer row (only when dealer enrichments are on and attach mode is off).

**Will the same car appear twice?**\
Yes, if you use multiple search URLs that both return the same advert. Deduplication is per URL, not across the whole run.

***

### Support

For Actor-specific issues, use the **Issues** tab on the Apify store listing or contact the publisher through Apify.

For platform questions (runs, billing, API, schedules), see [Apify documentation](https://docs.apify.com) and Apify support.

# Actor input Schema

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

One or more Autotrader UK car search URLs (car-search pages). Each URL must include a postcode (for example postcode=EC1A1BB) — this is the buyer location used for search results, pricing context, and distance. Copy a URL directly from your search on autotrader.co.uk after setting make, model, filters, and postcode.

## `maxListings` (type: `integer`):

How many listings to collect from each search URL. Total results can be up to this value multiplied by the number of URLs. Duplicate listings are removed within each URL only — the same vehicle may appear in the output more than once if it is returned by multiple search URLs.

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

Fetch complete data for each vehicle: specifications, features, images, history checks, running costs, and description. If disabled, only summary fields from the search results are saved.

## `fetchSellerProfile` (type: `boolean`):

Include dealer name, distance from the search postcode, and review summary. Private sellers are skipped automatically.

## `fetchSellerReviews` (type: `boolean`):

Include individual dealer reviews (text, rating, date). Requires Dealer profile to be enabled.

## `maxReviewsPerSeller` (type: `integer`):

How many dealer reviews to collect per dealer. Requires Dealer reviews to be enabled.

## `fetchSellerOtherListings` (type: `boolean`):

Include other vehicles currently listed by the same dealer. Requires Dealer profile to be enabled.

## `maxOtherListingsPerSeller` (type: `integer`):

How many additional dealer listings to collect per dealer. Requires Dealer other listings to be enabled.

## `attachSellerToListings` (type: `boolean`):

When enabled, dealer profile, reviews, and other listings are copied onto every car from that dealer. When disabled, dealer data is written as separate dataset records (recommended for large runs) — each record includes a record type so you can tell listings apart from seller profiles (for example listing or seller). Requires Dealer profile to be enabled.

## `fetchDeliveryOptions` (type: `boolean`):

Include home delivery, click-and-collect, and collection location options for the buyer postcode on each listing.

## `fetchFinanceQuotes` (type: `boolean`):

Include finance calculator quotes (monthly payments, terms) for each vehicle where available.

## `financeDeposit` (type: `integer`):

Deposit amount in GBP used for finance quote calculations. Requires Finance quotes to be enabled.

## `financeTermMonths` (type: `integer`):

Loan term in months used for finance quote calculations. Requires Finance quotes to be enabled.

## `financeAnnualMileage` (type: `integer`):

Annual mileage used for finance quote calculations. Requires Finance quotes to be enabled.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB"
    }
  ],
  "maxListings": 10,
  "fetchDetails": false,
  "fetchSellerProfile": false,
  "fetchSellerReviews": false,
  "maxReviewsPerSeller": 10,
  "fetchSellerOtherListings": false,
  "maxOtherListingsPerSeller": 10,
  "attachSellerToListings": false,
  "fetchDeliveryOptions": false,
  "fetchFinanceQuotes": false,
  "financeDeposit": 1000,
  "financeTermMonths": 48,
  "financeAnnualMileage": 10000
}
```

# 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.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("calm_builder/autotrader-uk-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.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB" }] }

# Run the Actor and wait for it to finish
run = client.actor("calm_builder/autotrader-uk-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 '{
  "startUrls": [
    {
      "url": "https://www.autotrader.co.uk/car-search?channel=cars&make=Abarth&model=595&postcode=EC1A1BB"
    }
  ]
}' |
apify call calm_builder/autotrader-uk-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Autotrader UK Scraper",
        "description": "Extract structured UK car listings from Autotrader search URLs. Collect prices, mileage, specs, images, running costs, vehicle history, dealer profiles, reviews, other stock, delivery and finance data. Fast feed summaries or full vehicle profiles.",
        "version": "0.0",
        "x-build-id": "0VMgBj9fhyqyZe9Yf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/calm_builder~autotrader-uk-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-calm_builder-autotrader-uk-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/calm_builder~autotrader-uk-scraper/runs": {
            "post": {
                "operationId": "runs-sync-calm_builder-autotrader-uk-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/calm_builder~autotrader-uk-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-calm_builder-autotrader-uk-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",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Search URLs",
                        "minItems": 1,
                        "type": "array",
                        "description": "One or more Autotrader UK car search URLs (car-search pages). Each URL must include a postcode (for example postcode=EC1A1BB) — this is the buyer location used for search results, pricing context, and distance. Copy a URL directly from your search on autotrader.co.uk after setting make, model, filters, and postcode.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxListings": {
                        "title": "Maximum listings per search URL",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "How many listings to collect from each search URL. Total results can be up to this value multiplied by the number of URLs. Duplicate listings are removed within each URL only — the same vehicle may appear in the output more than once if it is returned by multiple search URLs.",
                        "default": 10
                    },
                    "fetchDetails": {
                        "title": "Full vehicle details",
                        "type": "boolean",
                        "description": "Fetch complete data for each vehicle: specifications, features, images, history checks, running costs, and description. If disabled, only summary fields from the search results are saved.",
                        "default": false
                    },
                    "fetchSellerProfile": {
                        "title": "Dealer profile",
                        "type": "boolean",
                        "description": "Include dealer name, distance from the search postcode, and review summary. Private sellers are skipped automatically.",
                        "default": false
                    },
                    "fetchSellerReviews": {
                        "title": "Dealer reviews",
                        "type": "boolean",
                        "description": "Include individual dealer reviews (text, rating, date). Requires Dealer profile to be enabled.",
                        "default": false
                    },
                    "maxReviewsPerSeller": {
                        "title": "Maximum reviews per dealer",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "How many dealer reviews to collect per dealer. Requires Dealer reviews to be enabled.",
                        "default": 10
                    },
                    "fetchSellerOtherListings": {
                        "title": "Dealer other listings",
                        "type": "boolean",
                        "description": "Include other vehicles currently listed by the same dealer. Requires Dealer profile to be enabled.",
                        "default": false
                    },
                    "maxOtherListingsPerSeller": {
                        "title": "Maximum other listings per dealer",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "How many additional dealer listings to collect per dealer. Requires Dealer other listings to be enabled.",
                        "default": 10
                    },
                    "attachSellerToListings": {
                        "title": "Attach dealer data to each listing",
                        "type": "boolean",
                        "description": "When enabled, dealer profile, reviews, and other listings are copied onto every car from that dealer. When disabled, dealer data is written as separate dataset records (recommended for large runs) — each record includes a record type so you can tell listings apart from seller profiles (for example listing or seller). Requires Dealer profile to be enabled.",
                        "default": false
                    },
                    "fetchDeliveryOptions": {
                        "title": "Delivery and collection",
                        "type": "boolean",
                        "description": "Include home delivery, click-and-collect, and collection location options for the buyer postcode on each listing.",
                        "default": false
                    },
                    "fetchFinanceQuotes": {
                        "title": "Finance quotes",
                        "type": "boolean",
                        "description": "Include finance calculator quotes (monthly payments, terms) for each vehicle where available.",
                        "default": false
                    },
                    "financeDeposit": {
                        "title": "Finance deposit",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Deposit amount in GBP used for finance quote calculations. Requires Finance quotes to be enabled.",
                        "default": 1000
                    },
                    "financeTermMonths": {
                        "title": "Finance term",
                        "minimum": 12,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Loan term in months used for finance quote calculations. Requires Finance quotes to be enabled.",
                        "default": 48
                    },
                    "financeAnnualMileage": {
                        "title": "Finance annual mileage",
                        "minimum": 1000,
                        "maximum": 500000,
                        "type": "integer",
                        "description": "Annual mileage used for finance quote calculations. Requires Finance quotes to be enabled.",
                        "default": 10000
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
