# Cazoo Used Cars Scraper (`parseforge/cazoo-used-cars-scraper`) Actor

Scrape used car listings from Cazoo (cazoo.co.uk, formerly Motors.co.uk) by search URL. Get title, price, year, mileage, fuel type, transmission, engine size, dealer and listing URL for each car. Export to CSV, JSON, Excel or XML.

- **URL**: https://apify.com/parseforge/cazoo-used-cars-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 80.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.01 / 1,000 results

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### Cazoo Used Cars Scraper

**Scrape used car listings from Cazoo by search URL.** Every listing returns price, mileage, year, fuel type, transmission, engine size, dealer name, and the full listing URL. Export to CSV, JSON, Excel, or XML.

Cazoo (cazoo.co.uk) is a UK used-car marketplace with listings from partner dealers. Browsing it page by page to collect prices and specs is slow. This Actor reads any Cazoo search or category page you give it and extracts every matching car into a structured dataset, one flat row per vehicle, ready for analysis or import.

| Who uses it | What they scrape Cazoo for |
|---|---|
| Car dealers | Monitor competitor pricing and stock levels across the UK. |
| Market analysts | Track used car prices, mileage and inventory by make and model. |
| Data journalists | Gather vehicle data for reports on the UK car market. |
| App builders | Feed a car search or price comparison tool with fresh listings. |

### Formerly Motors.co.uk

This Actor used to scrape Motors.co.uk. That site now redirects every page to Cazoo, so the Actor now reads Cazoo. Saved inputs keep working: a motors.co.uk start URL is read as the Cazoo search at https://www.cazoo.co.uk/cars/, and a log line says so. To narrow a search, paste a cazoo.co.uk URL, for example https://www.cazoo.co.uk/cars/audi/a1/. Deeper motors.co.uk paths have no Cazoo equivalent and are read as the general search. Cazoo cards do not show the body type, so `bodyType` is always empty.

### What it does

- 🔗 **Paste a search URL:** Start from any cazoo.co.uk search page, with your filters already applied in the browser.
- 📊 **Structured output:** Each listing comes out as a flat row with the same fields every time.
- ⏱️ **Set a listing limit:** Cap the number of cars so you only collect what you need.
- 📑 **Several URLs per run:** Add as many search URLs as you need to the start URLs list.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Cazoo data

**📈 Monitor competitor stock.**

A car dealer runs the Actor weekly on a filtered search URL to track which models are listed and at what price.

**💰 Analyse market pricing.**

A market analyst scrapes all Ford Fiesta listings under £10,000 to compare asking prices against mileage and year.

**🚗 Build a car search app.**

A developer feeds daily listings into an app that alerts users when a make and model appears within budget.

### Output fields

Each row has: `imageUrl`, `title`, `url`, `price`, `currency`, `year`, `mileage`, `fuelType`, `transmission`, `bodyType` (always empty), `engineSize` (empty for electric cars), `dealer`, `scrapedAt` and `error`.

### Configure the run

Give the Actor one or more Cazoo search or category URLs and a maximum number of listings. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "startUrls": [
    {
      "url": "https://www.cazoo.co.uk/cars/"
    }
  ]
}
```

A larger pull:

```json
{
  "startUrls": [
    {
      "url": "https://www.cazoo.co.uk/cars/"
    }
  ],
  "maxItems": 200
}
```

Cazoo protects its pages with a browser check. The Actor reads the site directly first. If it is blocked, it retries through Apify datacenter proxies, and then through residential proxies. The log shows which route each run used. You can also set your own proxy in the input.

### Pricing

Pay-per-result: **$0.00554 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $0.55 |
| 1,000 results | $5.54 |
| 10,000 results | $55.40 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Cazoo Used Cars Scraper](https://apify.com/parseforge/cazoo-used-cars-scraper?fpr=vmoqkp).
3. Paste your Cazoo search URL, set the maximum number of listings, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Cazoo listings through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/cazoo-used-cars-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**The run ends as failed and says Cazoo blocked every route.**

Cazoo's browser check can block some connections. Run it again in a few minutes, or set a residential proxy in the Proxy configuration input. A failed run returns no results and is not charged for results.

**Why am I getting no results?**

Check that your URL is a cazoo.co.uk search or category page that shows cars. A page with no matches ends as succeeded with zero rows and says so in the status message.

**The Actor returns fewer listings than my maximum.**

Either the search has fewer cars than your limit, or Cazoo's browser check blocked every route partway through. In the second case the status message says "Stopped early" and names the page. You are charged only for the rows delivered, and a new run collects the rest.

**Some fields are empty.**

Cazoo cards do not always show every detail. `bodyType` is always empty, and `engineSize` is empty for electric cars.

**I get an error about an unsupported URL.**

Use a URL that starts with https://www.cazoo.co.uk/cars/ (or an old motors.co.uk search URL). Links to single car pages and other sites are not supported.

### FAQ

| Question | Answer |
|---|---|
| Can I scrape a specific make and model? | Yes. Search on cazoo.co.uk with your make, model and filters, then paste that URL into the start URLs. |
| What happened to Motors.co.uk? | It now redirects to Cazoo, so this Actor reads Cazoo instead. Old inputs keep working. |
| How many listings can I scrape in one run? | Set it with the Maximum car listings input. The Actor follows the result pages until it reaches that number or runs out of pages. |
| Can I filter by price or mileage in the Actor? | No. Apply the filters on cazoo.co.uk, copy the resulting URL and use it as the start URL. |
| What output formats are supported? | CSV, JSON, Excel, and XML, from the Dataset tab or the API. |
| Can I run this on a schedule? | Yes. Use Apify's scheduler to run the Actor daily, weekly, or at any interval. |
| Is it legal to scrape Cazoo? | Review Cazoo's terms of service and make sure your use complies with them and with applicable laws. This Actor only reads publicly visible pages. |

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Cazoo or Motors.co.uk. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

One or more Cazoo used-car search pages to read, for example https://www.cazoo.co.uk/cars/audi/a1/. Old motors.co.uk URLs still work: Motors.co.uk now redirects to Cazoo, so they are read as the general Cazoo search.

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

Maximum number of car listings to scrape.

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

Optional. By default the Actor reads the site directly and only falls back to Apify datacenter, then residential proxies if it is blocked.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.cazoo.co.uk/cars/"
    }
  ],
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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.cazoo.co.uk/cars/"
        }
    ],
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.cazoo.co.uk/cars/" }],
    "maxItems": 25,
    "proxyConfiguration": { "useApifyProxy": False },
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.cazoo.co.uk/cars/"
    }
  ],
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call parseforge/cazoo-used-cars-scraper --silent --output-dataset

```

## MCP server setup

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

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

## OpenAPI specification

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