Eurostat

App · Research & Academia · 15 actions

Official European statistics from Eurostat, the statistical office of the European Union: two dozen headline figures - GDP, inflation, unemployment, population, government debt, energy prices, emissions and more - for the EU, the euro area, every member state and the EFTA and candidate countries. Pick a statistic and a country by name and the step returns the numbers, the change since last time and a table ready for a spreadsheet - no dataset codes to look up. For anything else, search the full catalogue of roughly 10,000 datasets, see what a dataset can be filtered by, pull figures from it down to individual NUTS regions, and watch it for new releases. No account or API key required.

Actions

ActionWhat it does
Browse a themeSee everything Eurostat publishes under one of its eleven themes, with the folders it is filed in.
Check for new dataAsk whether one dataset has changed since a date - usually the last time the workflow ran - and get a true or false to branch on before doing the work of fetching anything.
Check service statusCheck whether Eurostat is answering, and how quickly.
Cite a datasetGet a dataset's permanent identifier and a citation ready to paste into a report, with today's date as the access date.
Compare countriesRank countries on one statistic - who has the highest debt, the lowest unemployment, the fastest growth - with the average across them and which countries have no figure yet.
Get a country profileGet the headline picture of one country in a single step: population, GDP, GDP per person, growth, inflation, unemployment, government debt and life expectancy, each with the period it refers to.
Get a statisticGet one of two dozen official European statistics - GDP, inflation, unemployment, population, government debt, energy prices and the rest - for the countries and period you choose.
Get a time seriesFollow one series through time.
Get data from a datasetGet figures from any of Eurostat's ~10,000 datasets.
Get dataset detailsFind out what a dataset holds before you pull from it: what it is called, when Eurostat last published into it and when it will next, which periods it covers, how many figures are in it, and every dimension you can filter it by with a few example values for each.
Get the latest figureGet the newest published number for one statistic in one country, with how it moved since the period before and a sentence ready to post.
List a dimension's valuesSee every value one of a dataset's dimensions accepts, with what each code means - so you can find that GDP is B1GQ and 'seasonally adjusted' is SA rather than guessing.
List countries and regionsLook up the area codes Eurostat uses: countries, EU and euro-area aggregates, and the roughly 1,800 NUTS regions from whole federal states down to individual districts.
List recent updatesSee what Eurostat has published lately, newest first, across every dataset.
Search datasetsFind a Eurostat dataset by what it is about - 'unemployment', 'house prices', 'greenhouse gas' - across the whole catalogue of roughly 10,000.

Browse a theme

See everything Eurostat publishes under one of its eleven themes, with the folders it is filed in. The step for when you know the subject but not the words - 'what is there on transport?' No API key required.

Inputs

Themethemetext
Which of Eurostat's eleven themes to look through.One of: general (General and regional statistics), economy (Economy and finance), popul (Population and social conditions), icts (Industry, trade and services), agric (Agriculture, forestry and fisheries), external (International trade), transp (Transport), envir (Environment and energy), science (Science, technology and digital society), tb_eu (Tables on EU policy), cc (Cross-cutting topics). Default: economy.
Search withinsearchtext
Optional. Keep only the datasets in this theme whose title or code contains this text.
Number of recordslimitnumber
Optional. How many datasets to return. Between 1 and 500; 25 by default.From 1 to 500. Default: 25.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

categorieslist
The folders inside it, which is the quickest way to see how the subject is organised.
countnumber
How many records are in this page.
datasetslist
The theme's datasets, in catalogue order.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
themetext
The theme's code.
theme_labeltext
Its name.
total_countnumber
How many records matched in total, across every page.
Example output
{
  "categories": [
    "National accounts (ESA 2010) \u203a Annual national accounts"
  ],
  "count": 1,
  "datasets": [
    {
      "category": "National accounts (ESA 2010) \u203a Annual national accounts",
      "code": "nama_10_gdp",
      "covers_from": "1975",
      "covers_to": "2025",
      "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/nama_10_gdp",
      "kind": "dataset",
      "last_updated": "2026-09-03",
      "observation_count": 1085272,
      "structure_changed": "2026-06-19",
      "theme": "economy",
      "title": "Gross domestic product (GDP) and main components (output, expenditure and income) - annual data"
    }
  ],
  "has_more": true,
  "next_offset": 25,
  "theme": "economy",
  "theme_label": "Economy and finance",
  "total_count": 2864
}

Check for new data

Ask whether one dataset has changed since a date - usually the last time the workflow ran - and get a true or false to branch on before doing the work of fetching anything. Reports a change to the dataset's structure separately, since that is what breaks filters. No API key required.

Inputs

Dataset codedatasettextRequired
The Eurostat dataset code, like nama_10_gdp. Use Search datasets to find one, or paste a link from Eurostat's data browser and the code will be read out of it.
Last checkedsincedateRequired
The date to compare against. Usually the last time this workflow ran.

Outputs

checked_sincetext
The date that was compared against.
covers_fromtext
The earliest period it holds, e.g. 1983-01.
covers_totext
The latest period it holds.
covers_to_labeltext
The newest period it now holds, written for people.
createdtext
When the dataset was first published.
datasettext
The dataset code.
dataset_urltext
The dataset in Eurostat's data browser.
doitext
Its permanent digital object identifier.
explanatory_linkslist
Eurostat's own notes on how the figures were made.
has_new_datatrue/false
True when Eurostat published new figures after the date given. This is the field to branch on.
has_structure_changetrue/false
True when the dataset's dimensions changed after that date, which can break a workflow's filters.
last_updatedtext
When Eurostat last published new figures into it.
messagetext
What changed, in a sentence worth posting.
next_updatetext
When Eurostat plans to publish into it next, when it says.
observation_countnumber
How many figures are in it.
sourcetext
Who compiled it. Eurostat, for almost everything.
structure_changedtext
When its dimensions last changed. A change here can break a workflow's filters, which a change to the figures cannot.
titletext
What Eurostat calls it.
Example output
{
  "checked_since": "2026-08-25",
  "covers_from": "1983-01",
  "covers_to": "2026-07",
  "covers_to_label": "July 2026",
  "created": "2016-06-13T14:18:07+0200",
  "dataset": "une_rt_m",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
  "doi": "10.2908/UNE_RT_M",
  "explanatory_links": [
    {
      "label": "Explanatory texts (metadata)",
      "url": "https://ec.europa.eu/eurostat/cache/metadata/en/une_rt_m_esms.htm"
    }
  ],
  "has_new_data": true,
  "has_structure_change": false,
  "last_updated": "2026-09-01T11:00:00+0200",
  "message": "'une_rt_m' has new figures: Eurostat updated it on 2026-09-01, after 2026-08-25.",
  "next_update": "2026-09-01T11:00:00+0200",
  "observation_count": 755770,
  "source": "Eurostat",
  "structure_changed": "2026-08-12T23:00:00+0200",
  "title": "Unemployment by sex and age - monthly data"
}

Check service status

Check whether Eurostat is answering, and how quickly. This is the one action that reports a problem as a value instead of failing the step, so a workflow can branch on it. Being throttled is reported separately from being down. No API key required.

Inputs

None.

Outputs

messagetext
What happened, in a sentence worth posting.
onlinetrue/false
True when Eurostat answered with figures. This is the field to branch on.
rate_limitedtrue/false
True when the answer was a throttle (HTTP 429). Being throttled is not the same as being down.
reachabletrue/false
True when something answered at all, even with an error. False means the request never landed.
response_time_msnumber
How long the request took, in milliseconds.
status_codenumber
The HTTP status that came back, or null when nothing did.
Example output
{
  "message": "Eurostat is up and serving figures.",
  "online": true,
  "rate_limited": false,
  "reachable": true,
  "response_time_ms": 318.4,
  "status_code": 200
}

Cite a dataset

Get a dataset's permanent identifier and a citation ready to paste into a report, with today's date as the access date. The step that finishes a piece of research properly. No API key required.

Inputs

Dataset codedatasettextRequired
The Eurostat dataset code, like nama_10_gdp. Use Search datasets to find one, or paste a link from Eurostat's data browser and the code will be read out of it.

Outputs

accessed_ontext
Today's date, which the citation quotes.
citationtext
The full citation, ready to paste.
covers_fromtext
The earliest period it holds, e.g. 1983-01.
covers_totext
The latest period it holds.
createdtext
When the dataset was first published.
datasettext
The dataset code.
dataset_urltext
The dataset in Eurostat's data browser.
doitext
Its permanent digital object identifier.
doi_urltext
The permanent link. It keeps working when a data browser URL would not.
explanatory_linkslist
Eurostat's own notes on how the figures were made.
last_updatedtext
When Eurostat last published new figures into it.
next_updatetext
When Eurostat plans to publish into it next, when it says.
observation_countnumber
How many figures are in it.
sourcetext
Who compiled it. Eurostat, for almost everything.
structure_changedtext
When its dimensions last changed. A change here can break a workflow's filters, which a change to the figures cannot.
titletext
What Eurostat calls it.
Example output
{
  "accessed_on": "2026-09-03",
  "citation": "Eurostat (2026). Unemployment by sex and age - monthly data [Data set]. European Commission. https://doi.org/10.2908/UNE_RT_M (accessed 2026-09-03)",
  "covers_from": "1983-01",
  "covers_to": "2026-07",
  "created": "2016-06-13T14:18:07+0200",
  "dataset": "une_rt_m",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
  "doi": "10.2908/UNE_RT_M",
  "doi_url": "https://doi.org/10.2908/UNE_RT_M",
  "explanatory_links": [
    {
      "label": "Explanatory texts (metadata)",
      "url": "https://ec.europa.eu/eurostat/cache/metadata/en/une_rt_m_esms.htm"
    }
  ],
  "last_updated": "2026-09-01T11:00:00+0200",
  "next_update": "2026-09-01T11:00:00+0200",
  "observation_count": 755770,
  "source": "Eurostat",
  "structure_changed": "2026-08-12T23:00:00+0200",
  "title": "Unemployment by sex and age - monthly data"
}

Compare countries

Rank countries on one statistic - who has the highest debt, the lowest unemployment, the fastest growth - with the average across them and which countries have no figure yet. Compares all 27 EU member states unless you pick your own list. No API key required.

Inputs

Statisticindicatortext
Which statistic to fetch. Each one is a Eurostat dataset with its codes already filled in, so there is nothing to look up.One of: gdp (Gross domestic product (€ million)), gdp_per_capita (GDP per person (€ per person)), gdp_growth (GDP growth (% change on the previous year)), inflation (Inflation rate (% change on the same month a year earlier)), unemployment (Unemployment rate (% of the labour force)), youth_unemployment (Youth unemployment rate (% of the labour force under 25)), employment_rate (Employment rate (% of 20 to 64 year-olds)), population (Population (people)), life_expectancy (Life expectancy at birth (years)), fertility_rate (Fertility rate (births per woman)), and 14 more. Default: gdp.
Countriescountrieslist
Which countries or aggregates to include. Choose as many as you like. Leave blank for all 27 EU member states.One or more of: EU27_2020 (European Union (27 countries)), EA (Euro area), AT (Austria), BE (Belgium), BG (Bulgaria), HR (Croatia), CY (Cyprus), CZ (Czechia), DK (Denmark), EE (Estonia), and 34 more.
As ofas_ofdate
Optional. Compare the period containing this date. Leave blank to compare the newest figures Eurostat has, which is usually what you want.
Orderordertext
How to rank them.One of: highest_first (Highest first), lowest_first (Lowest first), by_country (By country name). Default: highest_first.
Number of recordslimitnumber
Optional. How many countries to return. Between 1 and 500; 500 by default.From 1 to 500. Default: 500.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

averagenumber
The plain average across the countries that have a figure. Not a weighted EU total - for that, include the European Union in the list.
countnumber
How many records are in this page.
datasettext
The dataset code these figures came from.
dataset_titletext
What Eurostat calls that dataset.
dataset_urltext
The dataset in Eurostat's data browser.
has_moretrue/false
True when more records matched than this page holds.
highestobject
The country at the top.
indicatortext
The statistic that was compared.
indicator_labeltext
Its name.
last_updatedtext
When Eurostat last published into this dataset.
lowestobject
The country at the bottom.
missing_countrieslist
The codes that were asked for but have no figure for this period.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
ordertext
How they were ranked.
periodtext
The period compared.
period_labeltext
The same period written for people.
rankingslist
One country per entry, in the chosen order, each with its rank.
tableobject
The same figures as a rectangle ready to write into a spreadsheet: one row per series, one column per period, labels rather than codes.
total_countnumber
How many records matched in total, across every page.
unittext
What the figures are measured in.
Example output
{
  "average": 10.0,
  "count": 1,
  "dataset": "une_rt_m",
  "dataset_title": "Unemployment by sex and age - monthly data",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
  "has_more": false,
  "highest": {
    "age": "TOTAL",
    "age_label": "Total",
    "flag": null,
    "flag_label": null,
    "frequency": "M",
    "frequency_label": "Monthly",
    "geo": "ES",
    "geo_label": "Spain",
    "period": "2026-07",
    "period_end": "2026-07-31",
    "period_label": "July 2026",
    "period_start": "2026-07-01",
    "rank": 1,
    "s_adj": "SA",
    "s_adj_label": "Seasonally adjusted data",
    "sex": "T",
    "sex_label": "Total",
    "unit": "PC_ACT",
    "unit_label": "Percentage of population in the labour force",
    "value": 10.0
  },
  "indicator": "unemployment",
  "indicator_label": "Unemployment rate",
  "last_updated": "2026-09-01T11:00:00+0200",
  "lowest": {
    "age": "TOTAL",
    "age_label": "Total",
    "flag": null,
    "flag_label": null,
    "frequency": "M",
    "frequency_label": "Monthly",
    "geo": "ES",
    "geo_label": "Spain",
    "period": "2026-07",
    "period_end": "2026-07-31",
    "period_label": "July 2026",
    "period_start": "2026-07-01",
    "rank": 1,
    "s_adj": "SA",
    "s_adj_label": "Seasonally adjusted data",
    "sex": "T",
    "sex_label": "Total",
    "unit": "PC_ACT",
    "unit_label": "Percentage of population in the labour force",
    "value": 10.0
  },
  "missing_countries": [],
  "next_offset": null,
  "order": "highest_first",
  "period": "2026-07",
  "period_label": "July 2026",
  "rankings": [
    {
      "age": "TOTAL",
      "age_label": "Total",
      "flag": null,
      "flag_label": null,
      "frequency": "M",
      "frequency_label": "Monthly",
      "geo": "ES",
      "geo_label": "Spain",
      "period": "2026-07",
      "period_end": "2026-07-31",
      "period_label": "July 2026",
      "period_start": "2026-07-01",
      "rank": 1,
      "s_adj": "SA",
      "s_adj_label": "Seasonally adjusted data",
      "sex": "T",
      "sex_label": "Total",
      "unit": "PC_ACT",
      "unit_label": "Percentage of population in the labour force",
      "value": 10.0
    }
  ],
  "table": {
    "headers": [
      "Seasonal adjustment",
      "Age class",
      "Unit of measure",
      "Sex",
      "Geopolitical entity (reporting)",
      "July 2026"
    ],
    "rows": [
      [
        "Seasonally adjusted data",
        "Total",
        "Percentage of population in the labour force",
        "Total",
        "Spain",
        10.0
      ]
    ]
  },
  "total_count": 1,
  "unit": "% of the labour force"
}

Get a country profile

Get the headline picture of one country in a single step: population, GDP, GDP per person, growth, inflation, unemployment, government debt and life expectancy, each with the period it refers to. The step for a weekly country briefing. No API key required.

Inputs

Countrycountrytext
Which country or aggregate to report on.One of: EU27_2020 (European Union (27 countries)), EA (Euro area), AT (Austria), BE (Belgium), BG (Bulgaria), HR (Croatia), CY (Cyprus), CZ (Czechia), DK (Denmark), EE (Estonia), and 34 more. Default: EU27_2020.

Outputs

countnumber
How many statistics came back.
countrytext
The area code.
country_labeltext
The area's name.
indicatorslist
One entry per headline statistic.
summarytext
The whole profile in one line.
tableobject
The same figures as a rectangle ready to write into a spreadsheet: one row per series, one column per period, labels rather than codes.
unavailablelist
Statistics Eurostat has nothing recent for in this country. Non-member countries report less.
Example output
{
  "count": 1,
  "country": "DE",
  "country_label": "Germany",
  "indicators": [
    {
      "dataset": "demo_pjan",
      "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/demo_pjan",
      "flag": null,
      "flag_label": null,
      "formatted": "83,577,140 people",
      "indicator": "population",
      "indicator_label": "Population",
      "period": "2025",
      "period_label": "2025",
      "unit": "people",
      "value": 83577140
    }
  ],
  "summary": "Germany: population 83,577,140 people (2025)",
  "table": {
    "headers": [
      "Indicator",
      "Value",
      "Unit",
      "Period"
    ],
    "rows": [
      [
        "Population",
        83577140,
        "people",
        "2025"
      ]
    ]
  },
  "unavailable": []
}

Get a statistic

Get one of two dozen official European statistics - GDP, inflation, unemployment, population, government debt, energy prices and the rest - for the countries and period you choose. Pick the statistic and the countries by name; the Eurostat dataset and its codes are already filled in. Comes back as figures to loop over and as a table ready for a spreadsheet. No API key required.

Inputs

Statisticindicatortext
Which statistic to fetch. Each one is a Eurostat dataset with its codes already filled in, so there is nothing to look up.One of: gdp (Gross domestic product (€ million)), gdp_per_capita (GDP per person (€ per person)), gdp_growth (GDP growth (% change on the previous year)), inflation (Inflation rate (% change on the same month a year earlier)), unemployment (Unemployment rate (% of the labour force)), youth_unemployment (Youth unemployment rate (% of the labour force under 25)), employment_rate (Employment rate (% of 20 to 64 year-olds)), population (Population (people)), life_expectancy (Life expectancy at birth (years)), fertility_rate (Fertility rate (births per woman)), and 14 more. Default: gdp.
Countriescountrieslist
Which countries or aggregates to include. Choose as many as you like. Leave blank for the European Union as a whole.One or more of: EU27_2020 (European Union (27 countries)), EA (Euro area), AT (Austria), BE (Belgium), BG (Bulgaria), HR (Croatia), CY (Cyprus), CZ (Czechia), DK (Denmark), EE (Estonia), and 34 more.
Fromfrom_datedate
Optional. The earliest date to include. The period containing this date is kept, so 15 June 2024 includes June 2024 for monthly statistics and all of 2024 for annual ones. Leave both dates blank for the most recent period only.
Toto_datedate
Optional. The latest date to include, treated the same way as From. Leave blank to run to the newest figure Eurostat has.
Number of recordslimitnumber
Optional. How many figures to return. Between 1 and 500; 500 by default.From 1 to 500. Default: 500.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
countrieslist
The area codes that were asked for.
datasettext
The dataset code these figures came from.
dataset_titletext
What Eurostat calls that dataset.
dataset_urltext
The dataset in Eurostat's data browser.
figureslist
The figures in this page, by country then period.
first_periodtext
The earliest period in the result.
frequencytext
How often it is published.
has_moretrue/false
True when more records matched than this page holds.
indicatortext
The statistic that was asked for.
indicator_labeltext
Its name.
last_periodtext
The latest period in the result.
last_updatedtext
When Eurostat last published into this dataset.
latestlist
The newest figure each country has, one per country. This is what to read when you want a number rather than a series.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
tableobject
The same figures as a rectangle ready to write into a spreadsheet: one row per series, one column per period, labels rather than codes.
total_countnumber
How many records matched in total, across every page.
unittext
What the figures are measured in.
Example output
{
  "count": 1,
  "countries": [
    "ES"
  ],
  "dataset": "une_rt_m",
  "dataset_title": "Unemployment by sex and age - monthly data",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
  "figures": [
    {
      "age": "TOTAL",
      "age_label": "Total",
      "flag": null,
      "flag_label": null,
      "frequency": "M",
      "frequency_label": "Monthly",
      "geo": "ES",
      "geo_label": "Spain",
      "period": "2026-07",
      "period_end": "2026-07-31",
      "period_label": "July 2026",
      "period_start": "2026-07-01",
      "s_adj": "SA",
      "s_adj_label": "Seasonally adjusted data",
      "sex": "T",
      "sex_label": "Total",
      "unit": "PC_ACT",
      "unit_label": "Percentage of population in the labour force",
      "value": 10.0
    }
  ],
  "first_period": "2026-07",
  "frequency": "monthly",
  "has_more": false,
  "indicator": "unemployment",
  "indicator_label": "Unemployment rate",
  "last_period": "2026-07",
  "last_updated": "2026-09-01T11:00:00+0200",
  "latest": [
    {
      "age": "TOTAL",
      "age_label": "Total",
      "flag": null,
      "flag_label": null,
      "frequency": "M",
      "frequency_label": "Monthly",
      "geo": "ES",
      "geo_label": "Spain",
      "period": "2026-07",
      "period_end": "2026-07-31",
      "period_label": "July 2026",
      "period_start": "2026-07-01",
      "s_adj": "SA",
      "s_adj_label": "Seasonally adjusted data",
      "sex": "T",
      "sex_label": "Total",
      "unit": "PC_ACT",
      "unit_label": "Percentage of population in the labour force",
      "value": 10.0
    }
  ],
  "next_offset": null,
  "table": {
    "headers": [
      "Seasonal adjustment",
      "Age class",
      "Unit of measure",
      "Sex",
      "Geopolitical entity (reporting)",
      "July 2026"
    ],
    "rows": [
      [
        "Seasonally adjusted data",
        "Total",
        "Percentage of population in the labour force",
        "Total",
        "Spain",
        10.0
      ]
    ]
  },
  "total_count": 1,
  "unit": "% of the labour force"
}

Get a time series

Follow one series through time. Every point carries the change and the percentage change on the one before, and the result carries the highest, the lowest, the average and the change across the whole period - so a chart or a trend alert needs no arithmetic of its own. The filters have to pin the dataset down to a single series; if they don't, the step says which dimension is still open. Covers the last 24 periods unless you set dates. No API key required.

Inputs

Dataset codedatasettextRequired
The Eurostat dataset code, like nama_10_gdp. Use Search datasets to find one, or paste a link from Eurostat's data browser and the code will be read out of it.
Filtersfiltersobject
One box per dimension of the chosen dataset, filled in with Eurostat's own codes - geo=DE for Germany, na_item=B1GQ for GDP. Use List a dimension's values to see what a box accepts, and separate several codes with commas. A box left blank returns every value that dimension has, which can be a great many, so filling in the ones you care about is what keeps a step quick.
Fromfrom_datedate
Optional. The earliest date to include. The period containing this date is kept, so 15 June 2024 includes June 2024 for monthly series and all of 2024 for annual ones. Leave both dates blank for the most recent period only.
Toto_datedate
Optional. The latest date to include, treated the same way as From. Leave blank to run to the newest period Eurostat has.

Outputs

averagenumber
The mean of the figures in the series.
changenumber
How much it moved across the whole period.
countnumber
How many periods came back.
datasettext
The dataset code these figures came from.
dataset_titletext
What Eurostat calls that dataset.
dataset_urltext
The dataset in Eurostat's data browser.
first_periodtext
The earliest period in the series.
first_valuenumber
The first figure in the series.
last_periodtext
The latest period in the series.
last_updatedtext
When Eurostat last published into this dataset.
latest_valuenumber
The last figure in the series.
maximumnumber
The highest figure in the series.
minimumnumber
The lowest figure in the series.
percent_changenumber
The same movement as a percentage.
pointslist
The series, oldest first.
seriesobject
What this series is, in words: the label of every dimension that identifies it.
Example output
{
  "average": 10.05,
  "change": -0.1,
  "count": 2,
  "dataset": "une_rt_m",
  "dataset_title": "Unemployment by sex and age - monthly data",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
  "first_period": "2026-06",
  "first_value": 10.1,
  "last_period": "2026-07",
  "last_updated": "2026-09-01T11:00:00+0200",
  "latest_value": 10.0,
  "maximum": 10.1,
  "minimum": 10.0,
  "percent_change": -0.99,
  "points": [
    {
      "change": null,
      "flag": null,
      "flag_label": null,
      "percent_change": null,
      "period": "2026-06",
      "period_end": "2026-06-30",
      "period_label": "June 2026",
      "period_start": "2026-06-01",
      "value": 10.1
    },
    {
      "change": -0.1,
      "flag": null,
      "flag_label": null,
      "percent_change": -0.99,
      "period": "2026-07",
      "period_end": "2026-07-31",
      "period_label": "July 2026",
      "period_start": "2026-07-01",
      "value": 10.0
    }
  ],
  "series": {
    "geo_label": "Spain",
    "unit_label": "Percentage of population in the labour force"
  }
}

Get data from a dataset

Get figures from any of Eurostat's ~10,000 datasets. Name the dataset and its dimensions appear as filter boxes, labelled the way Eurostat labels them. Comes back as figures to loop over and as a table ready for a spreadsheet, and says which dimensions you left open. No API key required.

Inputs

Dataset codedatasettextRequired
The Eurostat dataset code, like nama_10_gdp. Use Search datasets to find one, or paste a link from Eurostat's data browser and the code will be read out of it.
Filtersfiltersobject
One box per dimension of the chosen dataset, filled in with Eurostat's own codes - geo=DE for Germany, na_item=B1GQ for GDP. Use List a dimension's values to see what a box accepts, and separate several codes with commas. A box left blank returns every value that dimension has, which can be a great many, so filling in the ones you care about is what keeps a step quick.
Fromfrom_datedate
Optional. The earliest date to include. The period containing this date is kept, so 15 June 2024 includes June 2024 for monthly datasets and all of 2024 for annual ones. Leave both dates blank for the most recent period only.
Toto_datedate
Optional. The latest date to include, treated the same way as From. Leave blank to run to the newest period Eurostat has.
Number of recordslimitnumber
Optional. How many figures to return. Between 1 and 500; 25 by default.From 1 to 500. Default: 25.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
datasettext
The dataset code these figures came from.
dataset_titletext
What Eurostat calls that dataset.
dataset_urltext
The dataset in Eurostat's data browser.
dimensionslist
Every field each figure carries.
figureslist
The figures in this page, by country then period.
filters_appliedobject
The filters that were sent to Eurostat.
first_periodtext
The earliest period in the result.
has_moretrue/false
True when more records matched than this page holds.
last_periodtext
The latest period in the result.
last_updatedtext
When Eurostat last published into this dataset.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
tableobject
The same figures as a rectangle ready to write into a spreadsheet: one row per series, one column per period, labels rather than codes.
total_countnumber
How many records matched in total, across every page.
unfiltered_dimensionslist
The dimensions left open, which is why a result is larger than expected. Fill these in to narrow it.
Example output
{
  "count": 1,
  "dataset": "une_rt_m",
  "dataset_title": "Unemployment by sex and age - monthly data",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
  "dimensions": [
    "frequency",
    "s_adj",
    "age",
    "unit",
    "sex",
    "geo",
    "period",
    "value"
  ],
  "figures": [
    {
      "age": "TOTAL",
      "age_label": "Total",
      "flag": null,
      "flag_label": null,
      "frequency": "M",
      "frequency_label": "Monthly",
      "geo": "ES",
      "geo_label": "Spain",
      "period": "2026-07",
      "period_end": "2026-07-31",
      "period_label": "July 2026",
      "period_start": "2026-07-01",
      "s_adj": "SA",
      "s_adj_label": "Seasonally adjusted data",
      "sex": "T",
      "sex_label": "Total",
      "unit": "PC_ACT",
      "unit_label": "Percentage of population in the labour force",
      "value": 10.0
    }
  ],
  "filters_applied": {
    "geo": "ES",
    "unit": "PC_ACT"
  },
  "first_period": "2026-07",
  "has_more": false,
  "last_period": "2026-07",
  "last_updated": "2026-09-01T11:00:00+0200",
  "next_offset": null,
  "table": {
    "headers": [
      "Seasonal adjustment",
      "Age class",
      "Unit of measure",
      "Sex",
      "Geopolitical entity (reporting)",
      "July 2026"
    ],
    "rows": [
      [
        "Seasonally adjusted data",
        "Total",
        "Percentage of population in the labour force",
        "Total",
        "Spain",
        10.0
      ]
    ]
  },
  "total_count": 1,
  "unfiltered_dimensions": [
    "s_adj",
    "age",
    "sex"
  ]
}

Get dataset details

Find out what a dataset holds before you pull from it: what it is called, when Eurostat last published into it and when it will next, which periods it covers, how many figures are in it, and every dimension you can filter it by with a few example values for each. No API key required.

Inputs

Dataset codedatasettextRequired
The Eurostat dataset code, like nama_10_gdp. Use Search datasets to find one, or paste a link from Eurostat's data browser and the code will be read out of it.

Outputs

covers_fromtext
The earliest period it holds, e.g. 1983-01.
covers_totext
The latest period it holds.
createdtext
When the dataset was first published.
datasettext
The dataset code.
dataset_urltext
The dataset in Eurostat's data browser.
dimension_countnumber
How many dimensions it has.
dimensionslist
Everything the dataset can be filtered by.
doitext
Its permanent digital object identifier.
explanatory_linkslist
Eurostat's own notes on how the figures were made.
filterable_bylist
Their codes, which is what the filter boxes take.
frequencytext
How often it reports, as Eurostat's code: A, S, Q, M, W or D.
frequency_labeltext
The same in words - annual, monthly - which is what says whether a date range of a month means anything here.
last_updatedtext
When Eurostat last published new figures into it.
next_updatetext
When Eurostat plans to publish into it next, when it says.
observation_countnumber
How many figures are in it.
sourcetext
Who compiled it. Eurostat, for almost everything.
structure_changedtext
When its dimensions last changed. A change here can break a workflow's filters, which a change to the figures cannot.
titletext
What Eurostat calls it.
Example output
{
  "covers_from": "1983-01",
  "covers_to": "2026-07",
  "created": "2016-06-13T14:18:07+0200",
  "dataset": "une_rt_m",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
  "dimension_count": 1,
  "dimensions": [
    {
      "examples": [
        {
          "code": "EU27_2020",
          "label": "European Union - 27 countries (from 2020)"
        },
        {
          "code": "ES",
          "label": "Spain"
        }
      ],
      "label": "Geopolitical entity (reporting)",
      "name": "geo",
      "value_count": 38
    }
  ],
  "doi": "10.2908/UNE_RT_M",
  "explanatory_links": [
    {
      "label": "Explanatory texts (metadata)",
      "url": "https://ec.europa.eu/eurostat/cache/metadata/en/une_rt_m_esms.htm"
    }
  ],
  "filterable_by": [
    "geo"
  ],
  "frequency": "M",
  "frequency_label": "monthly",
  "last_updated": "2026-09-01T11:00:00+0200",
  "next_update": "2026-09-01T11:00:00+0200",
  "observation_count": 755770,
  "source": "Eurostat",
  "structure_changed": "2026-08-12T23:00:00+0200",
  "title": "Unemployment by sex and age - monthly data"
}

Get the latest figure

Get the newest published number for one statistic in one country, with how it moved since the period before and a sentence ready to post. This is the step for an alert or a briefing: 'Spain: unemployment rate was 10.0% in July 2026, down from 10.1% in June 2026.' No API key required.

Inputs

Statisticindicatortext
Which statistic to fetch. Each one is a Eurostat dataset with its codes already filled in, so there is nothing to look up.One of: gdp (Gross domestic product (€ million)), gdp_per_capita (GDP per person (€ per person)), gdp_growth (GDP growth (% change on the previous year)), inflation (Inflation rate (% change on the same month a year earlier)), unemployment (Unemployment rate (% of the labour force)), youth_unemployment (Youth unemployment rate (% of the labour force under 25)), employment_rate (Employment rate (% of 20 to 64 year-olds)), population (Population (people)), life_expectancy (Life expectancy at birth (years)), fertility_rate (Fertility rate (births per woman)), and 14 more. Default: gdp.
Countrycountrytext
Which country or aggregate to report on.One of: EU27_2020 (European Union (27 countries)), EA (Euro area), AT (Austria), BE (Belgium), BG (Bulgaria), HR (Croatia), CY (Cyprus), CZ (Czechia), DK (Denmark), EE (Estonia), and 34 more. Default: EU27_2020.

Outputs

changenumber
The difference between the two, in the unit above.
countrytext
The area code.
country_labeltext
The area's name.
datasettext
The dataset code these figures came from.
dataset_titletext
What Eurostat calls that dataset.
dataset_urltext
The dataset in Eurostat's data browser.
flagtext
Eurostat's observation flag, when it set one.
flag_labeltext
What the flag means.
indicatortext
The statistic that was asked for.
indicator_labeltext
Its name.
is_provisionaltrue/false
True when Eurostat marked the figure provisional, which means it is expected to be revised. Worth saying out loud in anything that quotes it.
last_updatedtext
When Eurostat last published into this dataset.
percent_changenumber
The same difference as a percentage of the earlier figure.
periodtext
The period it refers to, in Eurostat's notation.
period_labeltext
The same period written for people.
previous_periodtext
Which period that was.
previous_valuenumber
The figure for the period before.
summarytext
The whole thing in a sentence worth posting.
unittext
What it is measured in.
valuenumber
The newest figure.
Example output
{
  "change": -0.1,
  "country": "ES",
  "country_label": "Spain",
  "dataset": "une_rt_m",
  "dataset_title": "Unemployment by sex and age - monthly data",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
  "flag": null,
  "flag_label": null,
  "indicator": "unemployment",
  "indicator_label": "Unemployment rate",
  "is_provisional": false,
  "last_updated": "2026-09-01T11:00:00+0200",
  "percent_change": -0.99,
  "period": "2026-07",
  "period_label": "July 2026",
  "previous_period": "2026-06",
  "previous_value": 10.1,
  "summary": "Spain: unemployment rate was 10.0% of the labour force in July 2026, down from 10.1% of the labour force in June 2026.",
  "unit": "% of the labour force",
  "value": 10.0
}

List a dimension's values

See every value one of a dataset's dimensions accepts, with what each code means - so you can find that GDP is B1GQ and 'seasonally adjusted' is SA rather than guessing. Search within them by word. This is the step that fills in a filter box. No API key required.

Inputs

Dataset codedatasettextRequired
The Eurostat dataset code, like nama_10_gdp. Use Search datasets to find one, or paste a link from Eurostat's data browser and the code will be read out of it.
DimensiondimensiontextRequired
Which dimension to list. The choices come from the dataset above, so they are always the right ones.
Searchsearchtext
Optional. Keep only the values whose code or meaning contains this text. Ignores capitals.
Number of recordslimitnumber
Optional. How many values to return. Between 1 and 500; 500 by default.From 1 to 500. Default: 500.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
datasettext
The dataset asked about.
dataset_urltext
It in Eurostat's data browser.
dimensiontext
The dimension's code.
dimension_labeltext
What the dimension means.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
total_countnumber
How many records matched in total, across every page.
valueslist
The values in this page, in Eurostat's own order.
Example output
{
  "count": 2,
  "dataset": "nama_10_gdp",
  "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/nama_10_gdp",
  "dimension": "na_item",
  "dimension_label": "National accounts indicator (ESA 2010)",
  "has_more": true,
  "next_offset": 2,
  "total_count": 39,
  "values": [
    {
      "code": "B1GQ",
      "label": "Gross domestic product at market prices"
    },
    {
      "code": "P3",
      "label": "Final consumption expenditure"
    }
  ]
}

List countries and regions

Look up the area codes Eurostat uses: countries, EU and euro-area aggregates, and the roughly 1,800 NUTS regions from whole federal states down to individual districts. Narrow to one country's regions to get, say, every Italian province. This is where a geo code for a regional dataset comes from. No API key required.

Inputs

Showscopetext
Which kind of area to list.One of: reporting (Countries Eurostat reports on), member_states (EU member states), aggregates (EU and euro-area aggregates), nuts1 (Regions - NUTS level 1 (largest)), nuts2 (Regions - NUTS level 2), nuts3 (Regions - NUTS level 3 (smallest)), all_countries (Every country code, including trade partners). Default: reporting.
Inside countrycountrytext
Optional. When listing regions, keep only the ones inside this country.One of: AT (Austria), BE (Belgium), BG (Bulgaria), HR (Croatia), CY (Cyprus), CZ (Czechia), DK (Denmark), EE (Estonia), FI (Finland), FR (France), and 32 more.
Searchsearchtext
Optional. Keep only the areas whose code or name contains this text. Ignores capitals.
Number of recordslimitnumber
Optional. How many areas to return. Between 1 and 500; 500 by default.From 1 to 500. Default: 500.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

areaslist
The areas in this page, by name.
countnumber
How many records are in this page.
has_moretrue/false
True when more records matched than this page holds.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
scopetext
What was listed.
scope_labeltext
That in words.
total_countnumber
How many records matched in total, across every page.
withinlist
The country the results were limited to, if any.
Example output
{
  "areas": [
    {
      "code": "DE",
      "kind": "country",
      "label": "Germany"
    },
    {
      "code": "ES",
      "kind": "country",
      "label": "Spain"
    }
  ],
  "count": 2,
  "has_more": true,
  "next_offset": 2,
  "scope": "countries",
  "scope_label": "Every country Eurostat reports for",
  "total_count": 42,
  "within": []
}

List recent updates

See what Eurostat has published lately, newest first, across every dataset. New figures and changes to a dataset's structure are reported separately, because the first is news and the second can break a workflow's filters. The step for a 'what's new this morning' digest. No API key required.

Inputs

Showshowtext
Which kind of update to report.One of: any (Anything), data (New figures only), structure (Structure changes only). Default: any.
Sincesincedate
Optional. Keep only updates published on or after this date. Eurostat's feed reaches back a few weeks.
Aboutsearchtext
Optional. Keep only updates whose dataset name or code contains this text - 'unemployment', say, to watch one subject.
Number of recordslimitnumber
Optional. How many updates to return. Between 1 and 500; 25 by default.From 1 to 500. Default: 25.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
has_moretrue/false
True when more records matched than this page holds.
newest_updatetext
The most recent date in the result.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
oldest_updatetext
The earliest date in the result, which is how far back the feed reaches.
showtext
What was reported.
sincetext
The date results were limited to, if any.
total_countnumber
How many records matched in total, across every page.
updateslist
The updates in this page, newest first.
Example output
{
  "count": 1,
  "has_more": true,
  "newest_update": "2026-09-03",
  "next_offset": 25,
  "oldest_update": "2026-08-05",
  "show": "any",
  "since": null,
  "total_count": 1458,
  "updates": [
    {
      "dataset": "une_rt_m",
      "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/une_rt_m",
      "kind": "data",
      "published_at": "2026-09-01 11:00:00.0",
      "published_on": "2026-09-01",
      "title": "Unemployment by sex and age - monthly data"
    }
  ]
}

Search datasets

Find a Eurostat dataset by what it is about - 'unemployment', 'house prices', 'greenhouse gas' - across the whole catalogue of roughly 10,000. Every result carries the code the other steps take, when it was last updated and which years it covers, so you can tell straight away whether it is the one you want. No API key required.

Inputs

Searchquerytext
What the dataset is about. Matched against titles and codes, ignoring capitals. Leave blank to list everything in a theme.
Themethemetext
Optional. Search only inside one theme.One of: general (General and regional statistics), economy (Economy and finance), popul (Population and social conditions), icts (Industry, trade and services), agric (Agriculture, forestry and fisheries), external (International trade), transp (Transport), envir (Environment and energy), science (Science, technology and digital society), tb_eu (Tables on EU policy), cc (Cross-cutting topics).
Includeincludetext
Eurostat publishes full datasets and smaller ready-made tables cut from them. Both work everywhere in this integration.One of: any (Datasets and tables), dataset (Datasets only), table (Tables only). Default: any.
Updated sinceupdated_sincedate
Optional. Keep only datasets Eurostat has published into on or after this date.
Number of recordslimitnumber
Optional. How many datasets to return. Between 1 and 500; 25 by default.From 1 to 500. Default: 25.
Skipoffsetnumber
Optional. How many matching records to skip before this page. Use the next offset from the previous result to page through. 0 by default.At least 0. Default: 0.

Outputs

countnumber
How many records are in this page.
datasetslist
The best matches first.
has_moretrue/false
True when more records matched than this page holds.
includetext
What was included.
next_offsetnumber
The offset that fetches the next page. Null when this is the last one.
querytext
What was searched for.
themetext
The theme it was limited to.
theme_labeltext
That theme's name.
total_countnumber
How many records matched in total, across every page.
Example output
{
  "count": 1,
  "datasets": [
    {
      "category": "National accounts (ESA 2010) \u203a Annual national accounts",
      "code": "nama_10_gdp",
      "covers_from": "1975",
      "covers_to": "2025",
      "dataset_url": "https://ec.europa.eu/eurostat/databrowser/view/nama_10_gdp",
      "kind": "dataset",
      "last_updated": "2026-09-03",
      "observation_count": 1085272,
      "structure_changed": "2026-06-19",
      "theme": "economy",
      "title": "Gross domestic product (GDP) and main components (output, expenditure and income) - annual data"
    }
  ],
  "has_more": true,
  "include": "any",
  "next_offset": 25,
  "query": "gross domestic product",
  "theme": null,
  "theme_label": null,
  "total_count": 42
}

On this page