# Coches.com Scraper (`normdata/coches-com-scraper`) Actor

Scrape coches.com, a top Spanish car site: 87,000+ used, Km 0 and new cars. Price, financing, 40+ specs, DGT label, plate, dealer and phone. Add-on: coches.com market price estimate and deal rating, showroom address and GPS, equipment. 20+ filters.

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

## Pricing

from $15.00 / 1,000 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/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

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🚗 Coches.com Scraper

Extract car listings from **coches.com**, one of Spain's biggest car marketplaces: **87,000+ used, Km 0 and new cars** from dealers and private sellers. Price, monthly payment, full financing terms, 40+ specs (engine, consumption, CO2, EV battery and charging, dimensions), DGT environmental label, **number plate**, dealer and **phone**, with an optional add-on for **coches.com's own market price estimate and deal rating**, the showroom address and GPS, and the standard equipment list. Every value comes in **English**. No browser, **no proxy**, CSV/JSON/Excel ready.

This Actor reads the same public JSON API the coches.com pages use, so it is fast (about 5,000 listings per minute without the add-on) and never needs a browser or a CAPTCHA solve.

### 🎯 Who uses it?

#### 🚘 Dealers and car buyers

Track competitor stock and prices by make, model, province or dealer, and find cars priced below coches.com's own market estimate.

#### 📊 Pricing analysts, leasing and finance companies

Build price by year by mileage datasets for any model, and compare dealers' financing offers (months, down payment, TIN, APR, opening fee, total owed, lender).

#### 📇 Lead generation and B2B sales

Get dealers with phone, showroom address, GPS and stock, filtered by what they sell and where.

#### ⚡ EV and mobility research

Snapshot Spain's electric and plug-in hybrid market: range, battery size and type, DC and AC charging power, charge time and DGT label.

### ✨ What it does

- **Used, Km 0 and new cars** in one run.
- **20+ filters**, everything the site offers: makes and models (as many as you like), version words (for example "xDrive" or "118d"), price, monthly payment, year, mileage, power, seats, doors, fuel, gearbox, body type, drive, colour, DGT environmental label, province, seller type, with a financing offer, buy online, plus 10 sort orders.
- **No 10,000 cap.** The site stops paging at 10,000 listings per search; this Actor splits bigger searches by price automatically, so you can export all 87,000+ cars.
- **Paste links instead:** a listing (or just its 12-character id) or a search page copied from your browser, with its filters.
- **English output:** fuel, gearbox, body, drive, colour, condition, cylinder layout and battery type are translated (the site is in Spanish).
- **Details add-on:** coches.com's market price estimate, how far below it the car is priced, the 1 to 5 deal rating, showroom name, address, postal code and GPS, and the version's standard equipment.
- **Monitoring:** turn on "Only new listings" and schedule it, each run saves only listings it has not seen before.

### 🏆 Why this scraper

- **The only coches.com actor on Apify.** The others cover coches.net, a different site with different stock.
- **The whole site, not a page or two.** Automatic price splitting beats the site's 10,000 listings limit.
- **Full financing terms on every financed car:** months, down payment, interest rate (TIN), APR (TAE), opening fee, total owed and the lending bank.
- **Number plate and EV charging specs** in every row, with no add-on.
- **Clean, consistent rows.** Numbers are numbers, dates are ISO dates, typing errors in the listing (a year in the future, a 1,000,000,000 km odometer) are left empty instead of passed on, and add-on fields are left out entirely when the add-on is off.

### ⚖️ How it compares

| Capability | This actor | [blackfalcondata/coches-scraper](https://apify.com/blackfalcondata/coches-scraper) | [rastriq/cochesnet-spain](https://apify.com/rastriq/cochesnet-spain) | [ivanvs/coches-net-scraper](https://apify.com/ivanvs/coches-net-scraper) |
|---|:--:|:--:|:--:|:--:|
| Site covered | **coches.com** | coches.net | coches.net | coches.net |
| Used, Km 0 and new cars | **yes** | yes | not documented | not documented |
| Market price estimate and deal rating | **yes (add-on)** | yes | yes | yes |
| Full financing terms (TIN, APR, opening fee, total owed, lender) | **yes** | monthly payment and financed amount | financed price | financing flag |
| Number plate | **yes** | not documented | not documented | not documented |
| EV battery, charging power and charge time | **yes** | not documented | not documented | not documented |
| Standard equipment | **yes (add-on)** | opt-in | not documented | yes |
| Showroom address and GPS | **yes (add-on)** | not documented | URL mode only | yes |
| Paste search links | **yes** | yes | yes | yes |
| Monitoring: only new listings | **yes** | yes | yes | not documented |
| Values translated to English | **yes** | not documented | not documented | not documented |
| Failed runs, last 30 days (public stats) | **new** | 15 of 2,459 | 105 of 1,767 | 0 of 391 |

Competitor facts come from their public Apify Store pages and input schemas (October 2026).

### 📦 What data you get

| Field | Description |
| --- | --- |
| `id`, `url`, `title` | coches.com listing id, link and title. |
| `make`, `model`, `version`, `modelVariant`, `modelVariantYears`, `condition` | Make, model, version, model generation and its years, and Used, Km 0 or New. |
| `price`, `priceWithFinancing`, `monthlyPayment` | Cash price in €, the lower price when bought with the dealer's financing, and the monthly payment. |
| `year`, `registrationMonth`, `mileageKm`, `licensePlate` | First registration, odometer and number plate. |
| `fuel`, `gearbox`, `gears`, `drive`, `bodyType`, `color`, `colorAsListed`, `doors`, `seats` | Specs in English, plus the colour as the seller wrote it. |
| `powerCv`, `engineCc`, `cylinders`, `cylinderLayout`, `torqueNm`, `topSpeedKmh`, `acceleration0to100s` | Engine and performance. |
| `consumptionCombinedL100km`, `consumptionUrbanL100km`, `consumptionExtraUrbanL100km`, `electricConsumptionKwh100km`, `co2GKm`, `environmentalLabel` | Consumption (WLTP when available), CO2 and DGT label. |
| `electricRangeKm`, `batteryKwh`, `batteryType`, `chargeDcKwMax`, `chargeAcKwMax`, `chargeTime10to80h`, `chargeConnector` | EV and plug-in hybrid figures. |
| `lengthMm`, `widthMm`, `heightMm`, `wheelbaseMm`, `trunkLiters`, `trunkMaxLiters`, `fuelTankLiters`, `maxWeightKg` | Dimensions and capacities. |
| `description`, `province`, `city` | The seller's text and where the car is. |
| `sellerType`, `dealerName`, `dealerId`, `dealerReference`, `dealerShowrooms`, `phone` | Dealer or private seller, dealer name, id, the dealer's own stock reference, number of showrooms and the phone. |
| `buyOnline` | Whether the car can be bought online. |
| `financeMonths`, `financeDownPayment`, `financeInterestRate`, `financeApr`, `financeOpeningFee`, `financeTotalOwed`, `financeProvider` | The financing offer: months, down payment, TIN %, TAE %, opening fee, total owed and the lending bank. |
| `imageUrl`, `images` | Main photo and every photo link. |
| `searchedFor` | The search that found the row. |
| `listedAt`, `updatedAt`, `promotedAt`, `scrapedAt` | When listed, last edited, last promoted, and scrape time. |

**With the details add-on:**

| Field | Description |
| --- | --- |
| `estimatedMarketPrice`, `belowMarketBy`, `priceRating` | coches.com's market price estimate for the car, how many € below it the car is priced (negative = above), and the deal rating from 1 to 5 (5 = best deal). |
| `showroomName`, `showroomAddress`, `showroomPostalCode`, `latitude`, `longitude` | The showroom that has the car, with address and GPS. |
| `standardEquipment` | The version's standard equipment list. |

Private sellers are shown on coches.com by first name only, so no seller name is kept for them; their phone is kept.

### 💡 Use cases

#### 🚘 Used BMW 1 Series and Audi A3 under €20,000, cheapest first

```json
{ "maxItems": 500, "makesModels": ["BMW 1 Series", "Audi A3"], "conditions": ["3"], "priceTo": 20000, "sortBy": "priceLow" }
```

#### 💸 Cars priced below coches.com's market estimate, in Madrid

```json
{ "maxItems": 200, "provinces": ["28"], "includeDetails": true }
```

Then sort the dataset by `belowMarketBy` or filter `priceRating` = 5.

#### ⚡ Electric cars with a zero emissions label, newest first

```json
{ "fuels": ["Eléctrico"], "environmentalLabels": ["0"], "sortBy": "newest" }
```

#### 🏦 Financed cars under €250 a month

```json
{ "financingOnly": true, "monthlyPaymentTo": 250, "sortBy": "priceLow" }
```

#### 🆕 Km 0 and new SUVs with all-wheel drive

```json
{ "conditions": ["2", "1"], "bodyTypes": ["Todoterreno"], "drives": ["Tracción total permanente", "Tracción total conectable"] }
```

#### 🔎 Daily monitor: new Toyota listings only

```json
{ "makesModels": ["Toyota"], "onlyNew": true, "monitorName": "toyota" }
```

#### 🔗 A search copied from the site

```json
{ "urls": [{ "url": "https://www.coches.com/coches-segunda-mano/bmw-serie-1.htm" }] }
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum results** | Always first, caps the whole run. Empty = no limit. |
| **Search filters** | Condition, makes and models, version words, price, monthly payment, year, mileage, power, specs, colour, label, provinces, seller, financing, buy online and sorting. |
| **Details add-on** | Market price estimate and deal rating, showroom address and GPS, standard equipment. |
| **Monitoring** | Only new listings, with an optional monitor name. |
| **Or scrape links** | Listing links, listing ids or search links. Filters ignored with links. |

### 💰 Pricing

Pay-per-event: **$0.003** when the run starts, plus a price per result saved to your dataset. The details add-on is charged only when it is on, per listing it opens.

| Your Apify plan | Per result | Details add-on |
| --- | --- | --- |
| Free | $0.021 | $0.007 |
| Bronze | $0.019 | $0.006 |
| Silver | $0.017 | $0.0055 |
| Gold / Platinum / Diamond | $0.015 | $0.005 |

New Apify accounts start with $5 in free credit.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the Coches.com Scraper.
3. Pick makes, models, provinces or any filter, set Maximum results, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (`run-sync-get-dataset-items`) or the ApifyClient for JavaScript and Python.

### 🤖 Use with AI agents (MCP)

Give an AI agent live access to coches.com through the Model Context Protocol:

```
claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/coches-com-scraper"
```

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

### 🔧 Troubleshooting

**A make or model was skipped.**
Write it make first: "BMW 1 Series" (or "BMW Serie 1"), "Mercedes-Benz A Class", "Seat Leon". Accents and case don't matter, and a make alone ("Toyota") takes every model. The run log lists anything it could not match, and the rest of the search still runs.

**Version words match more than one version.**
They match versions that contain the words: "118d" also finds "118dA M Sport". Add more words to narrow it.

**My filters were ignored.**
With links, the filters are ignored (the log says so). Remove the links to use the filters.

**The order is not strictly by price or date over 10,000 listings.**
Above 10,000 listings the search is split into price bands, and the sort order applies inside each band. Narrow the filters if you need one strict order.

**Why are some fields empty?**
Sellers fill in different things; missing values are `null`, never guessed. Typing errors (a year in the future, an impossible odometer) are left empty too. Financing fields are only filled for cars with a financing offer, EV fields only for electric and plug-in cars.

### ❓ FAQ

| Question | Answer |
| --- | --- |
| Is this coches.net? | No, this is coches.com, a different Spanish car site with its own stock. |
| Do I need a coches.com account or API key? | No. Only public listing data is read. |
| Does it need a proxy? | No. |
| Can I paste a search from the site? | Yes, copy the address of a coches.com search page; its filters are used. |
| Can I get one car by its id? | Yes, paste the listing link or its 12-character id. A sold car comes back with an `error` saying so. |
| What is the deal rating? | coches.com's own 1 to 5 stars comparing the price with its market estimate for that car (5 = well below market). Turn on the details add-on. |
| Are private sellers' phones included? | Yes, when the seller shows it on the site. |
| Is the output in English? | Yes, codebook values are translated. Free text (description, equipment) stays in Spanish as the site has it. |
| Can I schedule it? | Yes, use Apify's Scheduler with "Only new listings" on. |
| What formats? | CSV, JSON, Excel, XML, from the platform or the API. |

### 🛡️ Limits and responsible use

This Actor reads only public listing data from coches.com, through the public API its own pages use. It never signs in. Seller phones and names are personal or business data; use them in line with GDPR and coches.com's terms.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

### 🧪 Local development

```
bun install
test/run.sh '{"maxItems":10,"includeDetails":true}'
bun test/qa.mjs
```

# Actor input Schema

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

Stop after this many listings. Leave empty for no limit (about 87,000 cars). The Apify Free plan is always capped at 10.

## `conditions` (type: `array`):

Used, Km 0 (nearly new, registered by the dealer) or new. All when not set.

## `makesModels` (type: `array`):

One per line, as the site writes them: "Seat Ibiza", "BMW Serie 1", "Mercedes Clase A", "Toyota" (a make alone = all its models). Accents and capitals are optional. Each make with models is searched on its own and the Maximum is shared evenly.

## `versionWords` (type: `string`):

Words in the version name, e.g. "118d", "xDrive", "TSI Style" or "M Sport" (matches versions that contain them, so "118d" also finds "118dA M Sport").

## `priceFrom` (type: `integer`):

Lowest cash price in euros.

## `priceTo` (type: `integer`):

Highest cash price in euros.

## `monthlyPaymentFrom` (type: `integer`):

Lowest monthly payment of the dealer's financing offer. Only listings with a financing offer.

## `monthlyPaymentTo` (type: `integer`):

Highest monthly payment of the dealer's financing offer.

## `yearFrom` (type: `integer`):

Oldest registration year, e.g. 2018.

## `yearTo` (type: `integer`):

Newest registration year.

## `mileageFrom` (type: `integer`):

Lowest odometer reading.

## `mileageTo` (type: `integer`):

Highest odometer reading.

## `powerFrom` (type: `integer`):

Lowest engine power in CV (metric horsepower).

## `powerTo` (type: `integer`):

Highest engine power in CV.

## `fuels` (type: `array`):

Any when not set.

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

Any when not set.

## `bodyTypes` (type: `array`):

The site's body groups. Any when not set.

## `drives` (type: `array`):

Any when not set.

## `colors` (type: `array`):

Any when not set.

## `environmentalLabels` (type: `array`):

Spanish DGT sticker: 0, ECO, C, B or none. Any when not set.

## `seatsFrom` (type: `integer`):

Fewest seats.

## `seatsTo` (type: `integer`):

Most seats.

## `doors` (type: `array`):

Any when not set.

## `provinces` (type: `array`):

Where the car is. Any when not set.

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

Dealers or private sellers. Both when not set.

## `financingOnly` (type: `boolean`):

Only cars with the dealer's monthly payment offer.

## `buyOnlineOnly` (type: `boolean`):

Only cars you can reserve and buy on coches.com.

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

Relevance (as the site shows them) when not set.

## `includeDetails` (type: `boolean`):

Off: every search field (price, specs, financing, dealer, phone, photos). On: plus the fields above.

## `onlyNew` (type: `boolean`):

Save only listings not saved by earlier runs of the same search.

## `monitorName` (type: `string`):

Optional. Runs with the same name share the list of seen listings, even if the filters change. Leave empty to track each search on its own.

## `urls` (type: `array`):

coches.com/coches-segunda-mano/...htm?id=..., coches.com/km0/...htm?id=..., coches.com/coches-segunda-mano/bmw-serie-1.htm, or listing ids.

## Actor input object example

```json
{
  "maxItems": 10
}
```

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/coches-com-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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("normdata/coches-com-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 '{
  "maxItems": 10
}' |
apify call normdata/coches-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/coches-com-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/vuOcyxTKAmrnmZ8yA/builds/fYBvzmGE0Be9Mx71l/openapi.json
