# coches.net Car Scraper | Price Rating, Price Drops & Dealers (`corvuslab/coches-net-scraper`) Actor

Scrape every car on coches.net, Spain's largest car marketplace: price, market price rating, % vs market average, price drops, VIN, equipment, EV range, DGT label, dealer phone, address & GPS. Filters for ZBE label, body, gearbox, postcode radius. No page limit, price-drop alerts.

- **URL**: https://apify.com/corvuslab/coches-net-scraper.md
- **Developed by:** [Corvuslab](https://apify.com/corvuslab) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.

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

### What does coches.net Car Scraper do?

**coches.net Car Scraper** turns coches.net, Spain's largest car marketplace, into a clean,
schedulable data feed. Give it a make and model (`SEAT` + `León`), a keyword, a set of filters or a
pasted coches.net search link, and it returns every matching car as a structured record with
**129 fields**: price and **coches.net's own market price rating**, the market average and how far
the car sits from it, **price drops**, the full spec sheet and equipment list, **EV battery and
range**, renting fees, the dealer's phone, address and GPS, and the listing's **views, favourites
and contacts**.

Turn on incremental mode and a schedule, and from then on you get only the **new cars, price drops
and re-listings**, with an alert on Telegram, Slack, Discord or any webhook. No login, no cookies,
no code. Export to JSON, CSV or Excel, or pull it from the API.

> New to Apify? Sign up free and use the included monthly platform credit to try this Actor. No credit card needed.

***

### What data can you extract from coches.net?

| Group | What you get |
|---|---|
| **Price & market verdict** | Price, **coches.net price rating** (`GREAT`, `GOOD`, `FAIR`, `ABOVE_AVERAGE`, `HIGH`) and its rank, **market average price**, **% above/below market**, **original price** plus price-drop amount, % and date, financed price, monthly instalment, financing term, APR and deposit, the car's new price, reservable flag, and for renting offers the **monthly fee, term and km per year** |
| **Vehicle & specs** | Make, model, version, trim, registration year, mileage, fuel, gearbox, body type, drive, power (hp), engine size, **DGT environmental label**, doors, seats, colour, offer type (used / km 0 / new / demo / renting…), **VIN**, top speed, 0–100 km/h, dimensions, weight, boot and tank size, technical sheet and **standard-equipment list** |
| **Consumption & EV** | CO₂, mixed / urban / extra-urban consumption, **battery capacity (kWh)**, **electric range**, fast-charge minutes and max kW, charging connectors |
| **Seller & dealer** | Seller name, type, ID, rating and review count, **phone numbers**, WhatsApp flag, **dealer address, postcode, province and GPS**, website, logo, description, **opening hours by day**, services, showroom size and stock-page link |
| **Demand & condition** | **Views, favourites, contacts, calls, messages and shares**, warranty months, text and official flag, certified flag, trade-in flag, published and created dates |
| **Media & monitoring** | Cover photo, every photo URL, **listing videos**, the seller's description, and in incremental mode the change type, previous price, price-change direction and amount, first/last seen dates and **re-post detection** |

**Include full details** (on by default) is what fills the description, VIN, equipment, technical
sheet, consumption, dimensions, EV data, warranty text, dealer address, hours and GPS, every photo
and the listing statistics. Switch it off for a faster, leaner pull that still carries price,
market verdict, core specs, location and the seller's phone.

***

### Key features

- 🏷️ **The market verdict with the numbers behind it.** Each rated car carries coches.net's rating, the market average it was rated against, and `priceVsMarketPercent` (`-12.5` = 12.5 % below market), so you see *how far* a car sits from the market, not just a label.
- 🚩 **Overpriced cars flagged.** coches.net rates cars priced above the market too, but never shows it on the site. This Actor returns that rating as `ABOVE_AVERAGE` or `HIGH`, and can search for overpriced cars only, which the site itself can't.
- 📉 **Price drops on every record.** `originalPrice`, `priceDropAmount`, `priceDropPercent` and `priceDroppedAt` show what the car was listed at before the seller cut it, and when.
- 🎚️ **The richest filter set for coches.net.** **DGT label** (ZBE access), body type, gearbox, drive, 13 colours, **great price only**, warranty only, certified only, km 0 / new / demo / ex-fleet / pre-owned / renting, price, year, mileage and power ranges, and **listed in the last N days**. Filters run on coches.net itself, so you never pay for cars you filtered out.
- 📍 **Radius search around a postcode *or* a town.** `28001` or `Getafe` plus a radius, any mix of Spain's 52 provinces, or **one dealer's entire stock** by dealer ID.
- 🚫 **No page limit.** A search is read to its last car, up to 50,000 listings in one run.
- ♻️ **Cheap monitoring with alerts.** Incremental mode emits only new, changed and re-listed cars, with the price history on the record, and pings Telegram, Slack, Discord or a webhook.
- 🛡️ **Privacy switch.** One toggle blanks private sellers' name, phone and postcode while keeping dealers intact.
- 🤖 **AI-ready output.** Compact and drop-empty modes keep payloads small for LLMs and MCP clients.

***

### 🚀 How to scrape coches.net

1. Enter a **make** (e.g. `SEAT`) and optionally a **model** (`León`), or paste a coches.net search link.
2. Pick your **filters**: price, year, mileage, fuel, DGT label, body type, location and radius.
3. Set **Max results** (`0` = every match).
4. (Optional) Turn on **Incremental mode** and a **notification** channel, then **Schedule** it.
5. Click **Start** and download the results as **JSON, CSV or Excel**, or pull them from the **API**.

Even an empty input works: `{}` returns the 100 newest cars on coches.net with full details.

```json
{
  "make": "SEAT",
  "model": "León",
  "province": ["Madrid"],
  "priceRating": "great",
  "maxResults": 100
}
```

This returns up to 100 SEAT Leóns in Madrid that coches.net rates a **great price**, each with its
market average, % below market, any price drop, full specs and the seller's phone.

***

### Input

Configure it in the visual editor or pass JSON via the API.

#### 🔎 Search

| Field | Type | What it does |
|---|---|---|
| `make` | string | Brand as on coches.net, e.g. `SEAT`, `Volkswagen`, `Mercedes-Benz`. Comma-separate several. Empty = every brand. |
| `model` | string | Model of that make, e.g. `León`, `Serie 3`, `Clase C`. Comma-separate several. |
| `keyword` | string | Free-text search in listing titles, e.g. `GTI`, `4x4`, `7 plazas`. |
| `startUrls` | array | coches.net search links (with any filters set on the site) and/or individual listing links. |
| `maxResults` | integer | Maximum cars across all searches (default `100`). `0` = every match. |
| `sort` | enum | `newest`, `relevance`, `price_asc`, `price_desc`, `mileage_asc`, `year_desc`. |
| `listedWithinDays` | integer | Only cars put online in the last N days, e.g. `1` for today's new stock. |

#### 🎚️ Filters

| Field | Type | What it does |
|---|---|---|
| `vehicleType` | enum | `cars` or `motorhomes` (motorhomes & caravans). |
| `offerType` | array | `used`, `km0`, `new`, `demo`, `ex_fleet`, `pre_owned`, `renting`. |
| `priceMin` / `priceMax` | integer | Price range in euros. |
| `yearMin` / `yearMax` | integer | Registration year range. |
| `mileageMin` / `mileageMax` | integer | Mileage range in km. |
| `powerMinHp` / `powerMaxHp` | integer | Power range in horsepower (CV). |
| `fuelType` | array | `diesel`, `petrol`, `electric`, `hybrid`, `plug_in_hybrid`, `lpg`, `cng`, `other`. |
| `transmission` | enum | `any`, `automatic`, `manual`. |
| `bodyType` | array | `sedan`, `estate`, `suv`, `mpv`, `coupe`, `convertible`, `pickup`, `van`. |
| `driveType` | array | `fwd`, `rwd`, `awd`. |
| `environmentalLabel` | array | DGT sticker `zero`, `eco`, `c`, `b`. Decides access to the low-emission zones (ZBE) of Madrid, Barcelona and other cities. |
| `color` | array | white, black, grey/silver, blue, red, green, brown, beige, yellow, orange, maroon, purple, pink. |
| `priceRating` | enum | `any`, `great`, `good_or_better`, `fair_or_better`, or `overpriced` (only cars coches.net rates above the market). |
| `sellerType` | enum | `any`, `dealer`, `private`. |
| `withWarrantyOnly` / `certifiedOnly` | boolean | Only cars with a warranty / with certified condition and mileage. |
| `province` | array | Any of Spain's 52 provinces, including Ceuta and Melilla. Empty = all of Spain. |
| `location` + `radiusKm` | string / integer | Search around a postcode (`28001`) or a town (`Getafe`); radius defaults to 50 km. |
| `dealerId` | string | One dealer's full stock: the `sellerId` from any of their listings. |

#### 📄 Output, ♻️ monitoring, 🔔 notifications and ⚙️ advanced

| Field | Type | What it does |
|---|---|---|
| `includeDetails` | boolean | On by default. Loads each listing's full details (see the data section above). |
| `descriptionMaxLength` | integer | Cut descriptions to N characters. `0` = full text. |
| `hidePrivateSellerContact` | boolean | Blank private sellers' name, phone and postcode. Dealers are kept. |
| `compact` / `excludeEmptyFields` | boolean | 23 core fields only / drop null and empty fields. |
| `incrementalMode` | boolean | Emit only new, changed and re-listed cars since the last run. |
| `stateKey` | string | Name for the tracked search. Auto-derived from your settings if blank. |
| `emitUnchanged` / `emitExpired` | boolean | Also emit unchanged cars / a record for each car sold or removed since the last run. |
| `skipReposts` | boolean | Suppress the same car from the same seller re-posted under a new ID. |
| `telegramToken` + `telegramChatId` | string | Telegram bot token (from @BotFather) and chat or channel ID. |
| `slackWebhookUrl` / `discordWebhookUrl` | string | Incoming webhook URL. |
| `webhookUrl` + `webhookHeaders` | string / object | POST the matched cars as JSON anywhere: n8n, Make, Zapier. |
| `notificationLimit` | integer | Cars listed per message, 1–20 (default 5). |
| `proxyConfiguration` | object | Optional and not needed. The Actor connects on its own. |
| `detailConcurrency` / `maxRequestRetries` | integer | Details loaded in parallel, 1–20 (default 8) / retries per failed request, 0–10 (default 3). |
| `ignoreUrlFailures` | boolean | Skip links that can't be read instead of failing the run (default on). |

Tokens and webhook URLs are secret inputs: encrypted at rest, masked in the UI and never written to
the run log.

#### More example inputs

Automatic SUVs with a zero or ECO label within 30 km of Getafe, registered 2020 or later. These can
drive into Madrid's low-emission zone:

```json
{
  "environmentalLabel": ["zero", "eco"],
  "bodyType": ["suv"],
  "transmission": "automatic",
  "location": "Getafe",
  "radiusKm": 30,
  "yearMin": 2020,
  "maxResults": 200
}
```

A search link copied from coches.net plus one listing link:

```json
{
  "startUrls": [
    { "url": "https://www.coches.net/segunda-mano/madrid/hibrido/" },
    { "url": "https://www.coches.net/kia-ev6-gtline-84kwh-168kw-rwd-long-range-5p-electrico-hibrido-2026-en-madrid-71506244-covo.aspx" }
  ],
  "maxResults": 50
}
```

***

### Output

Each dataset item is one car. Every field is present on every record, with missing values as
`null`; the monitoring fields are added in incremental mode. A real record, with the equipment and
photo lists shortened:

```json
{
  "id": "71506244",
  "url": "https://www.coches.net/kia-ev6-gtline-84kwh-168kw-rwd-long-range-5p-electrico-hibrido-2026-en-madrid-71506244-covo.aspx",
  "title": "KIA EV6 GTLine 84kWh RWD Long Range",
  "make": "KIA",
  "model": "EV6",
  "version": "GTLine 84kWh 168kW RWD Long Range",
  "year": 2026,
  "mileageKm": 10000,
  "price": 46320.0,
  "currency": "EUR",
  "marketPriceAverage": 43300.0,
  "priceRating": "FAIR",
  "priceRatingRank": 3,
  "priceVsMarketPercent": 7.0,
  "originalPrice": 46900.0,
  "priceDropAmount": 580.0,
  "priceDropPercent": 1.0,
  "priceDroppedAt": "2026-10-05T14:39:27.279134+00:00",
  "monthlyInstalment": 633.9,
  "financingMonths": 120,
  "fuelType": "electric",
  "transmission": "automatic",
  "bodyType": "suv",
  "driveType": "rwd",
  "powerHp": 229,
  "environmentalLabel": "ZERO",
  "color": "black",
  "offerType": "used",
  "warrantyMonths": 84,
  "city": "Madrid Capital",
  "province": "Madrid",
  "sellerType": "dealer",
  "sellerName": "Grupo AKI Seminuevos Certificados",
  "sellerId": "125409",
  "sellerRating": 4.1,
  "sellerReviewCount": 50,
  "phone": "913789165",
  "vin": "KNAC481A3T5633202",
  "topSpeedKmh": 186,
  "acceleration0to100s": 7.7,
  "trunkLiters": 490,
  "newPrice": 57286.0,
  "batteryCapacityKwh": 84.0,
  "electricRangeKm": 560,
  "fastChargeMinutes": 18,
  "fastChargeMaxKw": 258.0,
  "chargingConnectors": ["CCS(Combo)", "Tipo 2 Mennekes"],
  "standardEquipment": ["Seis altavoces", "Control remoto de audio en el volante", "Pintura metalizada"],
  "views": 417,
  "favorites": 17,
  "dealerAddress": "C. del Dr. Esquerdo, Nº 118",
  "dealerZipCode": "28007",
  "dealerLatitude": 40.407905,
  "dealerLongitude": -3.671459,
  "dealerOpeningHours": {
    "monday": [{ "from": "10:00", "to": "14:00" }, { "from": "16:00", "to": "20:00" }],
    "sunday": []
  },
  "dealerStockUrl": "https://www.coches.net/concesionario/akimadrid/",
  "imageCount": 25,
  "publishedAt": "2026-10-14T10:11:23+00:00",
  "detailFetched": true,
  "scrapedAt": "2026-10-14T22:25:26.825389+00:00"
}
```

This Kia is rated `FAIR`, sits **7 % above** the market average, has already been cut once, and 417
people have viewed it. The Output tab has three ready-made views: **Overview**, **Price & change
monitoring** and **Dealers & contacts**.

***

### ♻️ How to monitor coches.net and get price-drop alerts

Schedule the Actor with **incremental mode** on. Each run compares against the previous one and
emits only **NEW**, **UPDATED** (including every price change) and **REAPPEARED** cars. Unchanged
cars are recognised from the search results *before* their details are loaded, so they cost nothing.
Each tracked search remembers about 18,000 cars.

| | First run | Next run, nothing changed | Next run, one car cut its price |
|---|---|---|---|
| Records emitted & billed | all | **none** | **1**, with `previousPrice`, `priceChange: DECREASED` and `priceChangeAmount` |

After that first baseline, your cost follows how much the market moves, not how much you watch.

**Setting it up**

1. Configure your search, keep **Sort by** on *Newest first* and set **Max results** to `0`. Sold/removed cars are only reported by runs that read the whole search.
2. Turn on **Incremental mode**, plus **Include sold/removed listings** and **Skip re-listed cars** if you want them.
3. Add a notification channel. Every channel fires independently, and a broken one never stops the scrape.
4. Run it once to seed the baseline, then add a recurring run in the **Schedules** tab.

A daily price-drop watch on electric Teslas with a Telegram alert:

```json
{
  "make": "Tesla",
  "fuelType": ["electric"],
  "maxResults": 0,
  "incrementalMode": true,
  "emitExpired": true,
  "skipReposts": true,
  "telegramToken": "<bot token>",
  "telegramChatId": "@your_channel"
}
```

***

### 💡 What can you do with coches.net data?

- **Catch underpriced cars first.** Run a *great price only* search hourly with a Telegram alert and get the car, its % below market and the dealer's phone while the listing is fresh.
- **Used-car valuation and residual-value models.** Mileage, year, version, equipment, price and coches.net's market average on every car make a ready-made training set.
- **Price-drop and days-on-market tracking.** `originalPrice`, `priceDroppedAt`, the created date and incremental price changes show which cars are cut, by how much and after how long.
- **Dealer lead generation.** Spanish dealers with phone, address, GPS, website, opening hours, rating and stock, for finance, insurance, logistics and dealer-software teams.
- **Competitor stock monitoring.** Watch a rival dealer's full stock by dealer ID: arrivals, price cuts and sold cars arrive as change records. Add `priceRating: overpriced` to list just the cars they've priced above the market.
- **EV and low-emission-zone analysis.** Size the zero and ECO market by province, with battery, range and charging data on every electric car.

***

### 💰 How much does it cost to scrape coches.net?

This Actor uses Apify's **pay-per-event** model: a small fee when a run starts, plus a fee for each
car returned. You are only charged for cars that land in your dataset. The **Pricing** tab shows the
current numbers.

- **Filters run on coches.net.** Cars you filtered out are never loaded and never billed.
- **Incremental mode.** After the baseline you pay only for what changed.
- **Typos cost nothing.** A mistyped make, model or location stops the run with a suggestion (`did you mean …?`) before anything is searched or charged.

***

### 🔌 Integrations, export and API

Export to **JSON, CSV, Excel** or an HTML table, connect it to **Google Sheets, Slack, Make, Zapier
and n8n**, call it as an **MCP tool** from an AI agent, or run it from your own code:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("corvuslab/coches-net-scraper").call(run_input={
    "make": "Volkswagen",
    "model": "Golf",
    "priceRating": "good_or_better",
    "maxResults": 50,
})

for car in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(car["title"], car["price"], car["priceRating"], car["priceVsMarketPercent"])
```

It works the same from the JavaScript client, the Apify CLI and the REST API.

Also covering European car marketplaces: [mobile.de Car Scraper](https://apify.com/corvuslab/mobile-de-scraper) and [AutoScout24 Scraper](https://apify.com/corvuslab/autoscout24-scraper).

***

### ❓ FAQ

**Do I need a coches.net account?** No. The Actor reads public listings only.

**How many cars can I get from one search?** All of them. Set `maxResults` to `0` and the search is
read to its last car, up to 50,000 listings per run. For more, split by province, make or price.

**What do `ABOVE_AVERAGE` and `HIGH` mean, and why can't I see them on coches.net?** coches.net
rates every car that has enough comparable listings, but its site only displays the three good
ratings (`GREAT`, `GOOD`, `FAIR`). Cars it rates above the market get no badge. This Actor reads
coches.net's own rating for those cars too, so `ABOVE_AVERAGE` and `HIGH` are coches.net's verdicts,
not an estimate. coches.net doesn't publish a market average for them, so `marketPriceAverage` and
`priceVsMarketPercent` stay empty on those cars.

**Why is `priceRating` empty on some cars?** coches.net hasn't rated them, usually because there
aren't enough comparable listings. That's around a fifth to a third of listings, depending on the
search. Renting offers and motorhomes are never rated.

**Why is `vin` empty on some cars?** The VIN is returned when the seller publishes it, which about a
quarter of listings do. It needs **Include full details** on.

**Why are consumption and CO₂ empty on an electric car?** Electric cars have no fuel consumption.
They carry `batteryCapacityKwh`, `electricRangeKm` and the fast-charging fields instead.

**How are renting offers returned?** Renting cars have no sale price, so `price` and the market
rating stay empty. `rentingMonthlyFee`, `rentingTermMonths` and `rentingKmPerYear` carry the
cheapest plan instead.

**Does it cover vans, motorhomes and motorbikes?** Cars and motorhomes (`vehicleType`) are covered.
Vans are reachable through `bodyType: van`. Motorbikes live on a separate site. Motorhome listings
carry less structure: no make field, and private sellers often give no year or mileage, only a
title, price, location, photos and description.

**Can I avoid collecting private sellers' personal data?** Yes. Turn on `hidePrivateSellerContact`
and private individuals' name, phone and postcode are blanked, while dealers stay complete.

***

### ⚖️ Is it legal to scrape coches.net?

This Actor collects only **publicly available** listing data. You're responsible for how you use
it, in particular any personal information such as a private seller's name or phone number, and
for complying with coches.net's terms and applicable law, including the GDPR. The
`hidePrivateSellerContact` switch helps you keep personal data out of your dataset. Not affiliated
with, endorsed by or sponsored by coches.net or its owners.

***

**Keywords:** coches.net scraper · coches.net api · scrape coches.net · coches net scraper · coches.net car listings · used cars Spain · coches de segunda mano · car price scraper · market price rating · car price drop alerts · DGT environmental label · car dealer leads Spain · Spain car marketplace data · car market research · export to CSV · export to Excel · no-code scraper · MCP tool for AI agents

# Changelog

This Actor's version history is a separate document: https://apify.com/corvuslab/coches-net-scraper/changelog.md

# Actor input Schema

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

Car brand as it appears on coches.net, e.g. <code>SEAT</code>, <code>Volkswagen</code>, <code>Mercedes-Benz</code>. Several brands: separate with commas. Leave empty for every brand.

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

Model of the make above, e.g. <code>León</code>, <code>Serie 3</code>, <code>Clase C</code>. Several models: separate with commas. A name coches.net does not list as a model searches that make's listings mentioning it.

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

Free-text search across listing titles, e.g. <code>GTI</code>, <code>4x4</code>, <code>7 plazas</code>.

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

Paste coches.net search-result links (with any filters you set on the site) and/or individual listing links. A search link runs exactly as it does on coches.net; a listing link returns that one car in full.

## `maxResults` (type: `integer`):

Maximum number of listings to return across all searches. <code>0</code> = every matching listing. You are only charged for listings returned.

## `sort` (type: `string`):

Order in which listings are read. Matters when Max results is lower than the number of matches.

## `listedWithinDays` (type: `integer`):

Only listings put online in the last N days, e.g. <code>1</code> for the newest cars. Reads newest first and stops at the first older listing.

## `vehicleType` (type: `string`):

Which coches.net section to search.

## `offerType` (type: `array`):

Leave empty for all. Used = second-hand; Km 0 = pre-registered with near-zero mileage.

## `priceMin` (type: `integer`):

Lowest price in euros.

## `priceMax` (type: `integer`):

Highest price in euros.

## `yearMin` (type: `integer`):

Oldest registration year, e.g. 2018.

## `yearMax` (type: `integer`):

Newest registration year.

## `mileageMin` (type: `integer`):

Lowest mileage in km.

## `mileageMax` (type: `integer`):

Highest mileage in km.

## `powerMinHp` (type: `integer`):

Lowest engine power in horsepower (CV).

## `powerMaxHp` (type: `integer`):

Highest engine power in horsepower (CV).

## `fuelType` (type: `array`):

Leave empty for all.

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

Gearbox type.

## `bodyType` (type: `array`):

Leave empty for all.

## `driveType` (type: `array`):

Leave empty for all.

## `environmentalLabel` (type: `array`):

Spain's DGT emissions sticker. It decides access to the low-emission zones (ZBE) of Madrid, Barcelona and other cities.

## `color` (type: `array`):

Leave empty for all.

## `priceRating` (type: `string`):

Filter by coches.net's market price rating. 'Overpriced only' returns the cars coches.net rates above the market (Above average or High) — a rating the site itself doesn't display.

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

Dealers, private sellers or both.

## `withWarrantyOnly` (type: `boolean`):

Only cars sold with a warranty.

## `certifiedOnly` (type: `boolean`):

Only cars with a certified condition and mileage.

## `province` (type: `array`):

One or more Spanish provinces. Leave empty for all of Spain.

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

Search around a Spanish postcode (e.g. <code>28001</code>) or town (e.g. <code>Getafe</code>). Combine with Radius.

## `radiusKm` (type: `integer`):

Distance around the postcode or town above. Default 50 km.

## `dealerId` (type: `string`):

Only one dealer's stock: the <code>sellerId</code> from any of their listings in a previous result.

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

Adds the seller's description, the VIN when published, the full equipment list, consumption, dimensions, warranty terms, the dealer's address, opening hours and GPS, every photo, and the listing's views, favourites and contacts. Turn off for a faster listing-only scrape.

## `descriptionMaxLength` (type: `integer`):

Cut descriptions to this many characters. <code>0</code> = full text.

## `hidePrivateSellerContact` (type: `boolean`):

Blank the name, phone and postcode of private individuals (dealers are kept). Useful when you only need market data.

## `compact` (type: `boolean`):

Return only the core fields: smaller records for spreadsheets and AI agents.

## `excludeEmptyFields` (type: `boolean`):

Drop null and empty fields from each record.

## `incrementalMode` (type: `boolean`):

Remember listings between runs and emit only new, changed (including price drops) and re-listed ones. Each record gets a changeType and its previous price.

## `stateKey` (type: `string`):

Name for the tracked search. Leave empty to derive one from your search settings. Use different keys to track different searches.

## `emitUnchanged` (type: `boolean`):

Also emit listings that have not changed since the previous run.

## `emitExpired` (type: `boolean`):

Emit a record for each listing that was in the previous run but is gone now. Only reported by runs that read the whole search.

## `skipReposts` (type: `boolean`):

Suppress listings that are the same car from the same seller re-posted under a new ID.

## `telegramToken` (type: `string`):

Bot token from @BotFather.

## `telegramChatId` (type: `string`):

Chat or channel ID, e.g. "-100123456789" or "@yourchannel".

## `slackWebhookUrl` (type: `string`):

Slack incoming-webhook URL.

## `discordWebhookUrl` (type: `string`):

Discord incoming-webhook URL.

## `webhookUrl` (type: `string`):

Any HTTPS endpoint. Receives a JSON POST with the matched listings — works with n8n, Make and Zapier.

## `webhookHeaders` (type: `object`):

Extra headers for the webhook request, e.g. {"Authorization": "Bearer xyz"}.

## `notificationLimit` (type: `integer`):

How many listings to include in each notification message.

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

Optional. Not needed — the actor connects on its own. Only set this if you must route requests through your own proxies.

## `detailConcurrency` (type: `integer`):

How many listing details to load in parallel.

## `maxRequestRetries` (type: `integer`):

How many times to retry a failed request before giving up on it.

## `ignoreUrlFailures` (type: `boolean`):

Skip links that cannot be interpreted instead of failing the whole run.

## Actor input object example

```json
{
  "make": "SEAT",
  "maxResults": 100,
  "sort": "newest",
  "vehicleType": "cars",
  "transmission": "any",
  "priceRating": "any",
  "sellerType": "any",
  "withWarrantyOnly": false,
  "certifiedOnly": false,
  "includeDetails": true,
  "descriptionMaxLength": 0,
  "hidePrivateSellerContact": false,
  "compact": false,
  "excludeEmptyFields": false,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "skipReposts": false,
  "notificationLimit": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "detailConcurrency": 8,
  "maxRequestRetries": 3,
  "ignoreUrlFailures": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `allItems` (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 = {
    "make": "SEAT"
};

// Run the Actor and wait for it to finish
const run = await client.actor("corvuslab/coches-net-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 = { "make": "SEAT" }

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

```

## MCP server setup

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