In Spain, the environmental badge on a windscreen decides which cities a car can enter. It therefore also affects what the car is worth, which makes environmental_label one of the more consequential fields in a listing row and one of the easiest to misread.
What the badge is
The distintivo ambiental is issued by the Dirección General de Tráfico, Spain's traffic authority, and classifies a vehicle by emissions. Cities use it to control access to low-emission zones — Madrid and Barcelona being the two that matter most for national market prices.
It is a regulatory classification, not a marketing label. That is why the codes are passed through exactly as published.
The four codes
| Code | Covers |
|---|---|
0 | Zero-emission vehicles: battery electric, extended-range and certain plug-in hybrids. |
ECO | Hybrids, plug-in hybrids below the zero threshold, and gas-powered vehicles (CNG, LPG). |
C | Newer combustion engines meeting the more recent emissions standards. |
B | Older combustion engines still permitted, but the most restricted of the badged categories. |
There is a fifth state and it is the important one: no badge at all. Older vehicles below the B threshold get nothing, and in the data that arrives as a null rather than a code. It is not a gap in the scrape.
How it appears in listing data
environmental_label, filled on 79.6% of 550 measured listings. So roughly one car in five carries no badge value — a mix of genuinely unbadged older vehicles and listings where the seller did not state it.
The data cannot distinguish those two cases, and this site will not pretend otherwise. Treat a null as “unknown or unbadged” and, if the distinction matters to your analysis, note that it is not available.
Why the code is never translated
Because 0, ECO, C and B are official identifiers. Expanding 0 into “zero emissions” would make the field impossible to join against the DGT's own data or any Spanish registry, and it would introduce a translation decision where the source has none.
The same rule governs province, city and region, which stay in Spanish because they are proper nouns. Fuel type and offer type are translated, because they are descriptions rather than identifiers — and even then the original is preserved in fuel_type_raw and offer_type_raw so you can verify against the source.
The effect on price
A car that cannot enter central Madrid has a smaller buyer pool, and the ask reflects it. This is the mechanism behind a large share of apparent bargains: a listing 25% below its model average with no badge is usually priced correctly for what it is.
Which makes the field a required column in any below-market screen rather than an optional one — the reason it appears in the screen.
In the other direction, the 0 and ECO segments are where policy-driven demand shows up. Tracking their share of listings over time is one of the more interesting analyses available from this data, because it measures supply response to regulation rather than opinion about it.
Filtering by badge
environmentalLabels accepts the codes directly, so a run can be restricted to the zero-emission or ECO segments:
{
"maxResults": 5000,
"environmentalLabels": ["0", "ECO"],
"maxCacheAgeDays": 7
}One constraint to plan around: the site's URL scheme allows only one of make, badge or colour per query, so a badge filter cannot be combined with a make filter. If you need “electric BMWs”, filter by badge in the run and by make in your own query afterwards — it costs you rows you discard, so scope the province list instead to keep the volume down.


