Eurostat API
Free Eurostat dissemination API with no key: HICP inflation, GDP, unemployment and thousands of EU datasets as JSON-stat, filtered by dimension. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Eurostat API?
Eurostat serves its entire statistical database through a free JSON API with no key. A request names a dataset code and filters it by dimension values, returning JSON-stat 2.0 with the observations and their dimension metadata.
This one API covers the whole of Eurostat: HICP inflation, GDP, unemployment, trade, energy, demography — several thousand datasets addressed by short codes like `prc_hicp_manr`. Filtering happens through dimension parameters rather than a query language, so `geo=EA&coicop=CP00&unit=RCH_A` narrows a multi-million-cell dataset to the euro area headline annual rate in one request.
JSON-stat 2.0 is the part that needs a moment. `value` is not an array of observations — it is a **sparse object keyed by a flattened index** into the cross-product of the dimensions listed in `id`, with `size` giving the extent of each. Decoding it means computing that index yourself, and a missing key means a genuinely missing observation rather than a zero. Add `lastTimePeriod` while developing, because an unfiltered dataset request can return an enormous payload.
Quick facts
- Base URL
https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data- Authentication
- No key or registration. Published under the European Commission's open data policy.
- Rate limit
- No published per-key limit, but unfiltered requests on large datasets are rejected for size. Filter by dimension.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Eurostat API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Euro area annual HICP inflation, last three months
GET https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/prc_hicp_manr?format=JSON&lang=EN&coicop=CP00&unit=RCH_A&geo=EA&lastTimePeriod=3
curl 'https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/prc_hicp_manr?format=JSON&lang=EN&coicop=CP00&unit=RCH_A&geo=EA&lastTimePeriod=3'const res = await fetch("https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/prc_hicp_manr?format=JSON&lang=EN&coicop=CP00&unit=RCH_A&geo=EA&lastTimePeriod=3");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/prc_hicp_manr?format=JSON&lang=EN&coicop=CP00&unit=RCH_A&geo=EA&lastTimePeriod=3", timeout=20)
res.raise_for_status()
print(res.json()){
"version": "2.0",
"class": "dataset",
"label": "HICP - monthly data (annual rate of change)",
"source": "ESTAT",
"updated": "2026-02-06T23:00:00+0100",
"value": {
"0": 2.1,
"1": 2.1,
"2": 2.0
},
"id": [
"freq",
"unit",
"coicop",
"geo",
"time"
],
"size": [
1,
1,
1,
1,
3
],
"dimension": {
"freq": {
"label": "Time frequency",
"category": {
"index": {
"M": 0
},
"label": {
"M": "Monthly"
}
}
},
"unit": {
"label": "Unit of measure",
"category": {
"index": {
"RCH_A": 0
},
"label": {
"RCH_A": "Annual rate of change"
}
}
},
"coicop": {
"label": "Classification of individual consumption by purpose (COICOP)",
"category": {
"index": {
"CP00": 0
},
"label": {
"CP00": "All-items HICP"
}
}
},
"geo": {
"label": "Geopolitical entity (reporting)",
"category": {
"index": {
"EA": 0
},
"label": {
"EA": "Euro area (EA11-1999, EA12-2001, EA13-2007, EA15-2008, EA16-2009, EA17-2011, EA18-2014, EA19-2015, EA20-2023, EA21-2026)"
}
}
},
"time": {
"label": "Time",
"category": {
"index": {
"2025-10": 0,
"2025-11": 1,
"2025-12": 2
},
"label": {
"2025-10": "2025-10",
"2025-11": "2025-11",
"2025-12": "2025-12"
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
dataset code | path segment | Required | Eurostat dataset identifier, for example `prc_hicp_manr` for HICP annual rates of change. prc_hicp_manr |
format | query | Optional | `JSON` for JSON-stat, `SDMX-CSV` for a flat CSV that is much easier to parse. JSON |
geo | query | Optional | Geographic filter — a country code, or `EA` for the euro area and `EU27_2020` for the EU. EA |
lastTimePeriod | query | Optional | Return only the most recent N periods. Essential for keeping responses small. 3 |
time | query | Optional | Specific periods instead of the most recent N. 2026-06 |
unit / coicop / other dimensions | query | Optional | Dataset-specific dimension filters. Each dataset defines its own set. RCH_A |
Response fields
labelstring- Human-readable dataset title.
updatedstring- When Eurostat last refreshed this dataset.
idarray- Ordered list of dimension names. The order defines how the flattened index into `value` is computed.
sizearray- Extent of each dimension, in the same order as `id`.
valueobject- Sparse map from flattened index to observation. A missing key means no observation, not zero.
dimension.{name}.category.indexobject- Maps each dimension code to its position, which you need to compute the flattened index.
dimension.{name}.category.labelobject- Human-readable label for each dimension code.
statusobject- Observation flags such as provisional or estimated, keyed the same way as `value`.
What you can build with the Eurostat API
- Show euro area or national HICP inflation on a dashboard
- Compare unemployment rates across EU member states
- Pull GDP or trade series for economic analysis
- Request SDMX-CSV instead of JSON-stat when you just want a flat table
Common errors and how to fix them
400 with a size complaint
The request would return too many cells.
Fix: Add dimension filters and `lastTimePeriod`. Eurostat refuses very large extractions rather than truncating them.
Empty `value` object
The dimension filter combination matches no data.
Fix: Check codes against `dimension.*.category.index` from a less filtered request; codes are dataset-specific and case-sensitive.
Observations misaligned
The flattened index was computed in the wrong dimension order.
Fix: Use the order given by `id`, not the order you sent parameters in. They are unrelated.
Eurostat API — frequently asked questions
Is the Eurostat API free and key-free?
Yes. The dissemination API requires no key or registration and covers the whole Eurostat database under the Commission's open data policy.
What is JSON-stat and why is value an object?
JSON-stat is a compact statistical format. Observations live in a sparse object keyed by a flattened index into the cross-product of the dimensions listed in `id`, sized by `size`. Missing keys mean missing observations.
Is there an easier format than JSON-stat?
Yes — `format=SDMX-CSV` returns a flat table with one row per observation and named dimension columns. It is larger on the wire but far quicker to work with.
How do I find a dataset code?
Browse the Eurostat data browser and take the code from the dataset URL. `prc_hicp_manr` is HICP annual rates of change; codes follow a themed prefix convention.
Tools that pair with this API
Inflation Calculator
See how inflation erodes purchasing power over time, or what a past amount is worth today. Enter an amount, rate and years. Free, private inflation tool.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
Eurostat is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.