251 lines
7.7 KiB
Markdown
251 lines
7.7 KiB
Markdown
---
|
|
title: "Eurostat API Reference"
|
|
task: ""
|
|
lineage_type: import
|
|
upstream_source: https://github.com/K-Dense-AI/scientific-agent-skills/blob/9c9bd2e9/skills/database-lookup/references/eurostat.md
|
|
upstream_sha: 9c9bd2e9
|
|
imported_at: 2026-06-26
|
|
prompt_class: prompt
|
|
upstream_changes: accepted
|
|
author: upstream
|
|
validated: false
|
|
---
|
|
|
|
# Eurostat API Reference
|
|
|
|
## Overview
|
|
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.
|
|
|
|
## Base URL
|
|
```
|
|
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
|
|
```
|
|
|
|
## Authentication
|
|
**No API key required.** The API is fully open and free.
|
|
|
|
## Rate Limits
|
|
- No formal rate limits documented.
|
|
- Eurostat may throttle aggressive scraping. Keep automated requests to 1-2 per second.
|
|
- Large datasets may time out; use filters to reduce response size.
|
|
|
|
---
|
|
|
|
## Key Endpoints (SDMX 2.1 API)
|
|
|
|
### 1. Get Dataset (Observations)
|
|
|
|
```
|
|
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
|
|
```
|
|
|
|
### 2. Get Dataset as CSV
|
|
|
|
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
|
|
```
|
|
|
|
### 3. Get Dataset Structure (Dimensions and Code Lists)
|
|
|
|
```
|
|
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.
|
|
|
|
### 4. Get Code List (Dimension Values)
|
|
|
|
```
|
|
GET /codelist/ESTAT/{codelistId}
|
|
```
|
|
|
|
**Example:**
|
|
```
|
|
https://ec.europa.eu/eurostat/api/dissemination/sdmx/2.1/codelist/ESTAT/GEO
|
|
```
|
|
|
|
### 5. Search/Browse Datasets (Dataflows)
|
|
|
|
```
|
|
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
|
|
```
|
|
|
|
---
|
|
|
|
## JSON-stat API (Simpler Alternative)
|
|
|
|
### Base URL
|
|
```
|
|
https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data
|
|
```
|
|
|
|
### Get 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):**
|
|
```json
|
|
{
|
|
"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.
|
|
|
|
---
|
|
|
|
## Common Dataset Codes
|
|
|
|
| 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 |
|
|
|
|
## Common Country Codes (ISO 2-letter, Eurostat uses uppercase)
|
|
|
|
`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.
|
|
|
|
## SDMX JSON Response Format
|
|
|
|
```json
|
|
{
|
|
"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.
|
|
|
|
## Notes
|
|
- Dimension order in the filter path depends on the dataset structure. Always check `/datastructure/ESTAT/{code}` first.
|
|
- Use `+` to select multiple values in one dimension (e.g., `DE+FR+IT`).
|
|
- Leave a dimension segment empty (consecutive dots `..`) to select all values.
|
|
- CSV format (`?format=sdmx+csv`) is recommended for easier parsing -- it returns flat rows with labeled columns.
|
|
- The JSON-stat API is simpler for quick queries but the SDMX API is more powerful and complete.
|
|
- Dataset codes can be found at https://ec.europa.eu/eurostat/databrowser/ by browsing themes.
|
|
- Large unrestricted queries may time out. Always filter by country and time period.
|