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
| Action | What it does |
|---|---|
| Browse a theme | See everything Eurostat publishes under one of its eleven themes, with the folders it is filed in. |
| 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. |
| Check service status | Check whether Eurostat is answering, and how quickly. |
| 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. |
| 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. |
| 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. |
| 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. |
| Get a time series | Follow one series through time. |
| Get data from a dataset | Get figures from any of Eurostat's ~10,000 datasets. |
| 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. |
| 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. |
| 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. |
| 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. |
| List recent updates | See what Eurostat has published lately, newest first, across every dataset. |
| Search datasets | Find 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
- Theme
themetext - 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 within
searchtext - Optional. Keep only the datasets in this theme whose title or code contains this text.
- Number of records
limitnumber - Optional. How many datasets to return. Between 1 and 500; 25 by default.From 1 to 500. Default:
25. - Skip
offsetnumber - 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 code
datasettextRequired - 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 checked
sincedateRequired - 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 code
datasettextRequired - 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
- Statistic
indicatortext - 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. - Countries
countrieslist - 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 of
as_ofdate - Optional. Compare the period containing this date. Leave blank to compare the newest figures Eurostat has, which is usually what you want.
- Order
ordertext - How to rank them.One of:
highest_first(Highest first),lowest_first(Lowest first),by_country(By country name). Default:highest_first. - Number of records
limitnumber - Optional. How many countries to return. Between 1 and 500; 500 by default.From 1 to 500. Default:
500. - Skip
offsetnumber - 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
- Country
countrytext - 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
- Statistic
indicatortext - 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. - Countries
countrieslist - 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. - From
from_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.
- To
to_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 records
limitnumber - Optional. How many figures to return. Between 1 and 500; 500 by default.From 1 to 500. Default:
500. - Skip
offsetnumber - 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 code
datasettextRequired - 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.
- Filters
filtersobject - 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.
- From
from_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.
- To
to_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 code
datasettextRequired - 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.
- Filters
filtersobject - 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.
- From
from_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.
- To
to_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 records
limitnumber - Optional. How many figures to return. Between 1 and 500; 25 by default.From 1 to 500. Default:
25. - Skip
offsetnumber - 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 code
datasettextRequired - 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
- Statistic
indicatortext - 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. - Country
countrytext - 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 code
datasettextRequired - 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.
- Dimension
dimensiontextRequired - Which dimension to list. The choices come from the dataset above, so they are always the right ones.
- Search
searchtext - Optional. Keep only the values whose code or meaning contains this text. Ignores capitals.
- Number of records
limitnumber - Optional. How many values to return. Between 1 and 500; 500 by default.From 1 to 500. Default:
500. - Skip
offsetnumber - 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
- Show
scopetext - 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 country
countrytext - 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. - Search
searchtext - Optional. Keep only the areas whose code or name contains this text. Ignores capitals.
- Number of records
limitnumber - Optional. How many areas to return. Between 1 and 500; 500 by default.From 1 to 500. Default:
500. - Skip
offsetnumber - 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
- Show
showtext - Which kind of update to report.One of:
any(Anything),data(New figures only),structure(Structure changes only). Default:any. - Since
sincedate - Optional. Keep only updates published on or after this date. Eurostat's feed reaches back a few weeks.
- About
searchtext - Optional. Keep only updates whose dataset name or code contains this text - 'unemployment', say, to watch one subject.
- Number of records
limitnumber - Optional. How many updates to return. Between 1 and 500; 25 by default.From 1 to 500. Default:
25. - Skip
offsetnumber - 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
- Search
querytext - What the dataset is about. Matched against titles and codes, ignoring capitals. Leave blank to list everything in a theme.
- Theme
themetext - 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). - Include
includetext - 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 since
updated_sincedate - Optional. Keep only datasets Eurostat has published into on or after this date.
- Number of records
limitnumber - Optional. How many datasets to return. Between 1 and 500; 25 by default.From 1 to 500. Default:
25. - Skip
offsetnumber - 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
}