Coches.net Scraper — Spain Used Cars, Prices & Dealers avatar

Coches.net Scraper — Spain Used Cars, Prices & Dealers

Pricing

from $2.00 / 1,000 car listings

Go to Apify Store
Coches.net Scraper — Spain Used Cars, Prices & Dealers

Coches.net Scraper — Spain Used Cars, Prices & Dealers

Scrape public used-car listings and dealer profiles from coches.net (Spain). Includes the site's own market-average price and price rank. robots.txt compliant. No login, no session cookies.

Pricing

from $2.00 / 1,000 car listings

Rating

0.0

(0)

Developer

Oswaldo Carabano

Oswaldo Carabano

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

1.2 hours

Issues response

12 days ago

Last modified

Share

Coches.net Car Listings & Dealer Scraper

Extract used-car listings and dealer profiles from coches.net, Spain's largest vehicle marketplace — including the site's own market-average price and price rank, which is what tells you whether a car is priced below the market before you build any valuation model of your own.

This actor stays inside what coches.net's robots.txt allows. It never requests a page the site asks crawlers not to request, it never signs in, and it never uses session cookies. That is a deliberate design choice, and it is the reason the actor keeps working: the site publishes a machine-readable set of rules and this crawler downloads and obeys the live file on every single run.


What you get

One row per car listing, 55 fields. Everything comes from the search results themselves, so a single request returns 35 fully populated cars.

The data is delivered in English. Fuel type and offer type are translated (Diesel, Petrol, Hybrid, Plug-in hybrid, Electric, LPG, Used, Km0), and the exact Spanish string coches.net published is kept alongside in fuel_type_raw and offer_type_raw so you can always verify it against the source.

Province, city and region stay in Spanish on purpose: they are proper nouns. "A Coruña" is not "The Corunna", and translating them would break any join against another Spanish dataset. environmental_label also stays as 0, ECO, C or B — those are the official Spanish DGT badge codes, not words.

The fill rates are measured, not promised

Measured on 550 listings across 35 makes and 38 provinces, both dealer and private sellers, on 17 August 2026. Nothing is listed here that was not counted.

FieldFilled
ad_id, url, title, make, model, year, km, price_eur100 %
fuel_type, province, region, seller_type, photos, published_at100 %
offer_type, is_urgent, includes_taxes, is_certified, has_warranty100 %
city, city_id98.2 %
hp, body_type_id97.5 %
warranty_months80.9 %
environmental_label (Spanish DGT badge)79.6 %
price_average_indicator_eur ⭐77.6 %
price_rank_indicator ⭐77.6 %
seller_rating_avg, seller_rating_count74.5 % (dealers only)
financed_price_eur68.5 %
financing_lender, financing_tae_pct, financing_instalment_eur54.2 %
seller_phone — dealer listings only100 % of dealers

Two fields you will not find here because they were measured and found too sparse to promise: video links (20.9 %) and the "featured" flag (17.5 %).

price_average_indicator_eur — what it actually is

Coches.net computes its own estimate of what a given model is worth on the Spanish market, and publishes it alongside the asking price. price_rank_indicator places this particular listing against that estimate.

Together they let you do in one query what would otherwise need a pricing model: find every car asking meaningfully less than its own marketplace's valuation.

Be aware of the honest limits: it is filled on 77.6 % of listings, and it is coches.net's estimate, not an independent one. We pass it through unchanged rather than dressing it up as our own valuation. Of the eleven coches.net scrapers currently on Apify, one other exposes it; the rest do not.


Personal data: private sellers' phone numbers are never returned

Roughly 40 % of listings on coches.net are posted by private individuals, and the site exposes their mobile numbers in the page source.

This actor never returns them. When seller_type is private, seller_phone is null. Always. There is no configuration option to turn this off, and there will not be one.

The reason is Article 14 of the GDPR: when you collect someone's personal data indirectly, you must inform them within one month. For the ~107,000 private sellers on coches.net that is not achievable by anyone, us or you. A setting that moves the problem to your account would not make it go away — it would just make it yours.

What you do get: every vehicle field for private listings — price, mileage, year, power, environmental badge, province, city, photos and the price rank — plus dealer phone numbers in full, on 100 % of dealer listings. Dealer numbers are published business contact details, and dealers are the segment that buys and sells at volume.

If you need to reach a private seller, the listing URL is in every row and the contact form is on the page.

Data removal requests: privacy@actorstack.dev.


Cache: you always know how old your data is

Rows can be served from a shared cache, which is why runs are cheap and fast. That is never hidden from you — every row carries:

FieldMeaning
from_cachewhether this row was fetched fresh or served from cache
fetched_atwhen the data actually came off coches.net
scraped_atwhen your run produced the row
data_age_hourshow old the data is

Set maxCacheAgeDays to 0 to force a fresh fetch of everything.


Input

Every field has a default, so a run started with an empty input {} works.

{
"maxResults": 1000,
"makes": ["bmw", "audi"],
"provinces": ["madrid"],
"scrapeDealers": true,
"maxDealers": 200,
"maxCacheAgeDays": 7
}
FieldDefaultWhat it does
maxResults100How many listings to return. Hard cap 50,000 per run
makesall 134Limit to specific makes, e.g. bmw, mercedes-benz
provincesall 52Limit to specific provinces, e.g. madrid, a_coruna. Applies to dealers too — see below
scrapeDealersfalseAlso collect dealer profiles into a dealers dataset
maxDealers0How many dealer profiles to return
maxCacheAgeDays70 forces a fresh fetch
maxPagesPerUrl6How deep to paginate per facet. 6 is what robots.txt allows

Filtering by province

provinces is a dropdown in the console, so you do not have to type the slug. If you drive the actor through the API, these are the 52 values it accepts — lowercase, with underscores, exactly as coches.net publishes them:

a_coruna cantabria la_rioja salamanca
alava castellon las_palmas segovia
albacete ceuta leon sevilla
alicante ciudad_real lleida soria
almeria cordoba lugo sta_c_tenerife
asturias cuenca madrid tarragona
avila girona malaga teruel
badajoz granada melilla toledo
baleares guadalajara murcia valencia
barcelona guipuzcoa navarra valladolid
burgos huelva orense vizcaya
caceres huesca palencia zamora
cadiz jaen pontevedra zaragoza

The separator is an underscore, not a hyphen: a_coruna, not a-coruna. A slug the site does not publish is rejected before the run spends a request, and the run ends green with the valid list in the log — you are not charged for it.

Province is a URL suffix, so unlike makes, environmentalLabels and colors — which compete for the single prefix slot and cannot be combined with each other — it combines with all of them. Measured on A Coruña:

InputListings the site returns
no filter265,739
provinces: ["a_coruna"]5,611
+ environmentalLabels: ["ECO"]523
+ automaticOnly and maxPriceEur: 10000238
+ km0Only52

Filtering happens in the URL, not by discarding rows afterwards, so you are never charged for the provinces you did not ask for.

Ask for several provinces and the budget is split between them. With provinces: ["barcelona", "zaragoza"] and maxResults: 60 you get ~30 of each, not 60 of whichever comes first. If one province runs out, the remainder is filled from the others, so you still get the number you asked for.

One honest caveat, measured: about 1.7 % of rows can carry a different province than the one you asked for. That is coches.net's own classification, not a filter failure — a dealer with branches in several provinces has its listings shown under each of them, and the row keeps the province the site publishes for it. We pass that through rather than second-guessing the source.

makes — 134 of them

A make slug is the brand name in lowercase with spaces and accents turned into hyphens: bmw, seat, mercedes-benz, alfa-romeo, citroen (no diaeresis), land-rover. The list is coches.net's own make table, which this actor reads at the start of every run, so it never goes stale — and the actor normalises what you write before matching.

Leave it empty to sweep all 134, smallest first. That order is deliberate: small makes fit in a single URL, so a run capped at 1,000 listings costs ~30 requests instead of starting with Volkswagen and spending six on 0.08 % of it.

⚠️ A model is not a make. /bmw-serie-3/ is accepted by the site and returns the entire national catalogue, so the actor validates every facet and skips the ones that do not narrow. Filter by make and use the model field in the output rather than trying to put a model in here.

Colours, badges and the single prefix slot

colours takes these 11, which are the colour facets coches.net publishes. The value is the Spanish name, because that is what goes in the URL:

ValueColourValueColour
blancoWhiteazulBlue
negroBlackverdeGreen
grisGreyamarilloYellow
rojoRednaranjaOrange
marronBrownvioletaPurple
beigeBeige

environmentalLabels takes 0 (zero emissions) or ECO (hybrid and gas) — the official Spanish DGT badge codes, not words, which is why they are not translated.

⚠️ makes, environmentalLabels and colours cannot be combined with each other. The site's URL scheme has a single prefix slot and those three compete for it. The actor warns in the log and uses the first rather than failing or quietly returning something you did not ask for. Province, price and the on/off filters are suffixes, so they combine with everything.


Dealers

Turn on scrapeDealers for a second dataset of dealer profiles. Dealer pages are fetched province by province, so the provinces filter narrows them too: ask for a_coruna and you get A Coruña dealers, not a national list.

Measured on 60 dealers, these fields were present on 100 %: dealer_id, name, external_contract_id, phone, province, province_id, postal_code, pack, is_active. Street address and stock page URL: 96.7 %.


Billing

You are charged per row delivered, immediately as each row is produced — never in a lump at the end, and never for an error row. If a URL fails, it goes to the errors dataset with the reason, and you pay nothing for it.

Starting a run costs $0.00001, which is the platform minimum. A run that finds nothing costs you nothing.


How it works, and what it will not do

Coches.net renders its data server-side, so every listing page already contains the full JSON payload. No browser is launched and no JavaScript is executed, which is why runs are fast and cheap.

Discovery works by expanding facets — make, then province, then price band — rather than paginating deep into search results. That is not a workaround: the site's own search stops returning results past roughly page 300, so deep pagination would miss about 96 % of the inventory regardless of what any crawler attempted.

This actor does not: solve CAPTCHAs, spoof TLS or browser fingerprints, use accounts or session cookies, or return private individuals' phone numbers. If coches.net ever makes the public data unreachable without doing one of those, the actor will report the failure rather than work around it.


Limits worth knowing before you buy

  • Listing detail pages are not included. The individual advert pages are behind stricter bot protection than the search results, and reaching them would require the fingerprint spoofing this actor refuses to do. Free-text descriptions, colour, transmission and equipment lists therefore are not available. Everything listed in the fill-rate table above comes from the search results and is unaffected.
  • price_average_indicator_eur is filled on 77.6 % of listings, not all.
  • Results per run are capped at 50,000.

Not affiliated with, endorsed by, or connected to coches.net or Adevinta Spain. This actor collects only publicly accessible information. You are responsible for how you use the data, including compliance with the GDPR where it applies to you.