Next free-source hunt
We check for new free financial data every Wednesday.
Datasets / Macro
ec.europa.eu/

Eurostat API (EU statistics)

Freeauth: noneCustom#macro#economic-data#historical-data#time-series✓ verified Oct 30, 2026

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.

Use in your agent

Decode Eurostat JSON-stat 2.0 into pandas and Parquet. Checked against the provider's documentation on Oct 30, 2026.

Raw skill file (/skills/eurostat.md)Also in our MCP server: call get_ingestion_skill with {"slug": "eurostat"}.

Access

  • No account or key parameter is documented for the dissemination endpoint.
  • Observed 2026-10-30: the filtered request completed without credentials.

Request

bash
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.

python
"""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

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