scientific-skills/database-lookup/references/eurostat.md
Eurostat is the statistical office of the European Union, providing statistics on economy, population, trade, labor, environment, and more for EU/EEA member states and partner countries. The API follows the SDMX (Statistical Data and Metadata Exchange) standard.
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1
An older JSON-stat endpoint also exists:
https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0
No API key required. The API is fully open and free.
GET /data/{datasetCode}/{filter}
| Parameter | Required | Description |
|---|---|---|
datasetCode | Yes | Eurostat dataset code (e.g., nama_10_gdp, demo_pjan) |
filter | No | Dot-separated dimension filter. Use + for multiple values in a dimension, . to separate dimensions, empty segment for "all". |
Query parameters:
| Parameter | Required | Description |
|---|---|---|
format | No | sdmx+json (default), sdmx+csv, sdmx+xml, TSV |
startPeriod | No | Start year/quarter/month: 2015, 2020-Q1, 2020-01 |
endPeriod | No | End year/quarter/month |
detail | No | full (default), dataonly, serieskeysonly, nodata |
lang | No | en (default), fr, de |
Example (GDP at market prices for Germany and France, annual, 2018-2023):
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/nama_10_gdp/A.CP_MEUR.B1GQ.DE+FR?startPeriod=2018&endPeriod=2023
Example (total population by country, annual):
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/demo_pjan/A.NR.T.TOTAL.DE+FR+IT+ES?startPeriod=2015&endPeriod=2023
Example (unemployment rate, seasonally adjusted, monthly):
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/une_rt_m/M.SA.TOTAL.PC_ACT.T.EA20?startPeriod=2023-01&endPeriod=2024-12
Example (HICP inflation, all items, monthly):
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/prc_hicp_mmor/M.RCH_A.CP00.DE+FR+IT?startPeriod=2023-01&endPeriod=2024-06&format=sdmx+json
Append ?format=sdmx+csv to any data request for a flat CSV response that is easier to parse.
Example:
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/data/nama_10_gdp/A.CP_MEUR.B1GQ.DE+FR?startPeriod=2018&endPeriod=2023&format=sdmx+csv
GET /datastructure/ESTAT/{datasetCode}
Example:
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/datastructure/ESTAT/nama_10_gdp
Returns dimension names, positions, and code list references.
GET /codelist/ESTAT/{codelistId}
Example:
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/codelist/ESTAT/GEO
GET /dataflow/ESTAT/all
Returns all available Eurostat datasets. Add ?detail=allstubs for a lighter listing.
Example:
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/dataflow/ESTAT/all?detail=allstubs
https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data
GET /data/{datasetCode}?{dimension_filters}
Dimensions are passed as query parameters using their dimension name.
Example (GDP for DE and FR):
https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/nama_10_gdp?geo=DE&geo=FR&unit=CP_MEUR&na_item=B1GQ&freq=A&time=2020&time=2021&time=2022&lang=en
Response (JSON-stat format):
{
"version": "2.0",
"label": "GDP and main components (output, expenditure and income)",
"id": ["freq", "unit", "na_item", "geo", "time"],
"size": [1, 1, 1, 2, 3],
"dimension": {
"geo": {
"label": "Geopolitical entity",
"category": {
"index": {"DE": 0, "FR": 1},
"label": {"DE": "Germany", "FR": "France"}
}
},
"time": {
"label": "Time",
"category": {
"index": {"2020": 0, "2021": 1, "2022": 2}
}
}
},
"value": {3336010.0, 3601750.0, 3876810.0, 2310420.0, 2500870.0, 2639090.0},
"status": {}
}
Values are in a flat array; use dimension sizes to reshape.
| Code | Description |
|---|---|
nama_10_gdp | GDP and main components |
nama_10_pc | GDP per capita |
namq_10_gdp | GDP quarterly |
demo_pjan | Population on 1 January |
demo_gind | Population change (births, deaths, migration) |
une_rt_m | Unemployment rate (monthly) |
une_rt_a | Unemployment rate (annual) |
lfsi_emp_a | Employment rate (annual) |
prc_hicp_manr | HICP inflation (annual rate of change, monthly) |
prc_hicp_mmor | HICP inflation (monthly rate of change) |
ext_lt_maineu | EU trade by partner (main partners) |
ext_st_27_2020sitc | International trade by SITC |
bop_c6_q | Balance of payments (quarterly) |
gov_10dd_edpt1 | Government deficit/surplus |
gov_10a_main | Government revenue, expenditure and main aggregates |
sts_inpr_m | Industrial production (monthly) |
tour_occ_nim | Tourism (nights spent at accommodation) |
env_air_gge | Greenhouse gas emissions |
tec00114 | GDP growth rate (percentage change) |
tec00118 | Government debt as % of GDP |
AT Austria, BE Belgium, BG Bulgaria, CY Cyprus, CZ Czechia, DE Germany, DK Denmark, EE Estonia, EL Greece, ES Spain, FI Finland, FR France, HR Croatia, HU Hungary, IE Ireland, IT Italy, LT Lithuania, LU Luxembourg, LV Latvia, MT Malta, NL Netherlands, PL Poland, PT Portugal, RO Romania, SE Sweden, SI Slovenia, SK Slovakia
Aggregates: EU27_2020 (EU-27), EA20 (Euro area 20), EA19 (Euro area 19), EEA30_2007 (EEA)
Note: Greece uses EL (not GR) in Eurostat.
{
"header": {
"id": "...",
"prepared": "2024-01-15T10:00:00"
},
"dataSets": [
{
"series": {
"0:0:0:0": {
"observations": {
"0": [3336010.0],
"1": [3601750.0]
}
}
}
}
],
"structure": {
"dimensions": {
"series": [...],
"observation": [...]
}
}
}
In SDMX+JSON, dimension values are encoded as integer indices. The structure.dimensions section maps indices to codes and labels. This is compact but requires index lookup.
/datastructure/ESTAT/{code} first.+ to select multiple values in one dimension (e.g., DE+FR+IT)...) to select all values.?format=sdmx+csv) is recommended for easier parsing -- it returns flat rows with labeled columns.