Eurostat API (EU statistics)
Eurostat API (EU statistics)
Official EU statistics through Eurostat's dissemination API, including inflation, labor, population, trade, industry, government finance and regional series. Dataset queries return JSON-stat 2.0 and can be filtered by dimension and time without a key.
Required Attribution:
Required: "Reuse of statistical data, metadata, publications, and other dissemination tools published on this website for commercial or non-commercial purposes is authorised provided the source is acknowledged." State translations or modifications and add Eurostat's non-responsibility disclaimer.
Coverage
EU, euro-area, EFTA, candidate-country and selected external-country statistics across thousands of multidimensional datasets. Frequency, geography, start date and revision policy vary by dataset. The checked une_rt_m query returned monthly seasonally adjusted EA21 unemployment values since January 2025.
Verdict
A broad macro feature source for inflation, labor, trade and regional activity. Series are revised and dimension codes can change; preserve the dataset code, filters, update metadata and observation status. A valid-looking wrong filter can return an empty value object. Commercial reuse is generally allowed with source acknowledgment, but Eurostat lists exclusions for third-party and specified non-EU and trade data.
Get the free weekly email
Free weekly email of newly verified free data. Unsubscribe by emailing us.
By entering your email and clicking Subscribe, you agree to receive the Signal Lab weekly email from Quantum Data Technologies Ltd., 3200-650 West Georgia Street, Vancouver, BC V6B 4P7, Canada (signal-lab@qdt.ai). You can unsubscribe at any time: reply "unsubscribe" to any email or write to signal-lab@qdt.ai. See our Privacy Policy.
Use in your agent
Decode Eurostat JSON-stat 2.0 into pandas and Parquet. Checked against the provider's documentation on Oct 30, 2026.
Access
- No account or key parameter is documented for the dissemination endpoint.
- Observed 2026-10-30: the filtered request completed without credentials.
Request
curl 'https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/une_rt_m?lang=en&format=JSON&s_adj=SA&age=TOTAL&sex=T&unit=PC_ACT&geo=EA21&sinceTimePeriod=2025-01'Format
JSON-stat 2.0 dataset. id and size define dimension order; dimension categories map codes to positions; value is a sparse object keyed by flattened integer position.
Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
"""Eurostat monthly euro-area unemployment rate (JSON-stat 2.0) -> pandas -> Parquet."""
import itertools
import requests
import pandas as pd
URL = "https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/une_rt_m"
params = {"lang": "en", "format": "JSON", "s_adj": "SA", "age": "TOTAL", "sex": "T",
"unit": "PC_ACT", "geo": "EA21", "sinceTimePeriod": "2025-01"}
r = requests.get(URL, params=params, timeout=60)
r.raise_for_status()
body = r.json()
dims = body["id"]
labels = body["dimension"]
codes = []
for dim in dims:
index = labels[dim]["category"]["index"]
ordered = [None] * len(index)
for code, position in index.items():
ordered[position] = code
codes.append(ordered)
rows = []
for flat_index, combination in enumerate(itertools.product(*codes)):
value = body.get("value", {}).get(str(flat_index))
if value is not None:
rows.append(dict(zip(dims, combination), value=value))
df = pd.DataFrame(rows)
df["time"] = pd.to_datetime(df["time"])
df.to_parquet("eurostat_ea21_unemployment.parquet", index=False)
print(len(df), "monthly rows", df["time"].min().date(), "to", df["time"].max().date(),
"latest value", df.sort_values("time").iloc[-1]["value"])Run by us on 2026-10-30 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 21 monthly rows 2025-01-01 to 2026-09-01 latest value 6.5
Limits
- Rate limit: Not stated.
- Response-size limits are not stated on the pages read; filter dimensions and time.
Quirks
- JSON-stat value is sparse and flattened in the order given by id and size; do not assume tabular records.
- Observed 2026-10-30: the same query with geo=EA20 returned HTTP 200 with an empty value object; EA21 returned values.
- Keep unit, adjustment, age, sex, geography and observation-status dimensions with values. Series can be revised.
Terms and attribution
- Commercial and non-commercial reuse is generally authorised with source acknowledgment.
- Commercial reuse excludes listed third-party material, external-country data, specified Liechtenstein and Switzerland trade data, and Austrian declaring-country trade data at 8-digit CN detail.
- State translations or modifications and include Eurostat's non-responsibility disclaimer.
Sources
- https://ec.europa.eu/eurostat/web/user-guides/data-browser/api-data-access/api-getting-started/api: “The first elements of the JSON-stat response are the metadata indicating the type of JSON-stat response, the title of the dataset its source and its last update data.”
- https://ec.europa.eu/eurostat/web/user-guides/data-browser/api-data-access/api-getting-started/api: “Any dimension present in the data product can be used as filter parameter”
- https://ec.europa.eu/eurostat/en/help/copyright-notice: “Reuse of statistical data, metadata, publications, and other dissemination tools published on this website for commercial or non-commercial purposes is authorised provided the source is acknowledged.”
- https://ec.europa.eu/eurostat/en/help/copyright-notice: “There is no special procedure or requirement for a written licence. Just download the material and use it, unless the material is listed in the exceptions above.”
Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer