Fifty-five fields per listing, all of them sourced from the search results rather than from individual advert pages. Every percentage below was counted on 550 listings across 35 makes and 38 provinces, dealer and private sellers, on 17 August 2026.
How to read this reference
A percentage is a measured fill rate, not a promise. Fields at 100% were populated on every row of the sample, which is strong evidence and still not a guarantee — the site can change what it publishes. Anything absent from these tables is not documented and should not be in your pipeline.
Enumerations are translated with the source preserved: fuel_type and fuel_type_raw, offer_type and offer_type_raw. Proper nouns are not translated at all.
Identity and source
| Field | Filled | Notes |
|---|---|---|
ad_id | 100% | The join key. Stable per advert, and what you track across snapshots. |
url | 100% | Canonical listing URL. Also the route to the seller's contact form. |
title | 100% | As published, in Spanish. |
published_at | 100% | When the advert went live. Age of listing is a strong pricing signal. |
Vehicle specification
| Field | Filled | Notes |
|---|---|---|
make, model, year, km | 100% | The four columns every analysis starts from. |
fuel_type | 100% | Diesel, Petrol, Hybrid, Plug-in hybrid, Electric, LPG. |
fuel_type_raw | 100% | The exact Spanish string, for verification against the source. |
hp | 97.5% | Power in horsepower. The main proxy for trim level. |
body_type_id | 97.5% | Numeric body type as the site classifies it. |
offer_type | 100% | Used or Km0, with offer_type_raw alongside. |
environmental_label | 79.6% | Official DGT badge: 0, ECO, C or B. Null means unbadged or unstated. |
warranty_months | 80.9% | Dealer warranties mostly. A useful dealer-quality signal. |
photos | 100% | Array of photo URLs. Count correlates with listing effort. |
Price and valuation
| Field | Filled | Notes |
|---|---|---|
price_eur | 100% | Asking price. An offer, never a transaction price. |
includes_taxes | 100% | Whether the asking price is tax-inclusive. |
price_average_indicator_eur | 77.6% | Coches.net's own market estimate. 86.6% dealer, 38.2% private. |
price_rank_indicator | 77.6% | Where this listing sits against that estimate. |
financed_price_eur | 68.5% | Price under the advertised financing offer. |
financing_lender, financing_tae_pct, financing_instalment_eur | 54.2% | Lender, APR and monthly instalment where published. |
is_urgent, is_certified, has_warranty | 100% | Booleans, always present. |
The two valuation fields are the ones that make this dataset unusual — what they are and where their limits sit. Note that financed_price_eur is frequently lower than price_eur: financing offers in Spain are commonly conditional discounts, so never treat it as a total cost of credit.
Location
province and region at 100%, city and city_id at 98.2%. All three stay in Spanish, deliberately: they are proper nouns and translating them would break any join against a Spanish dataset, a census table or a postcode file. “A Coruña” is the name of the place.
Province is the geography that matters analytically — 52 of them, and the unit the site's own facets use, so it is also the natural partition key for a national sweep.
Seller and financing
| Field | Filled | Notes |
|---|---|---|
seller_type | 100% | dealer or private. Determines almost everything else about the row. |
seller_phone | 100% of dealers | Business contact detail. Always null for private sellers. |
seller_rating_avg, seller_rating_count | 74.5% | Dealers only. Absent for private sellers by construction. |
The private-seller phone exclusion is permanent and not configurable — Article 14 is the reason.
Freshness metadata
Four fields describe the row rather than the car: from_cache, fetched_at (when the data came off coches.net), scraped_at (when your run produced the row) and data_age_hours. Two timestamps because they answer different questions, and only the first tells you whether the price is current.
What is deliberately not here
- Video links (20.9%) and the featured flag (17.5%). Measured, found too sparse to promise, and left out of the documented schema rather than listed as available.
- Everything that lives only on the advert page: free-text description, colour, transmission, equipment list. Those pages sit behind stricter bot protection and the Actor does not request them, so the fields are absent rather than empty.
- Private sellers' phone numbers. Never returned.
The pattern in all three cases is the same, and it is the policy this site runs on: a field is either measured and documented, or it is not offered. Why that matters.



