Eurostat Scraper: EU Statistics by Dataset | $1/1K avatar

Eurostat Scraper: EU Statistics by Dataset | $1/1K

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Eurostat Scraper: EU Statistics by Dataset | $1/1K

Eurostat Scraper: EU Statistics by Dataset | $1/1K

$1 per 1,000 results, platform usage included. Eurostat tables from the official API as flat rows, one per observation: period, value, flag and every dimension with its code and label (country, unit, sex, age and more). Filter by country and time. No key.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

One Dollar Store

One Dollar Store

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Eurostat Scraper: EU statistics by table, country and period

$1 per 1,000 observations. Platform usage included. No rental, no minimum.

Pull any table from Eurostat, the statistics office of the European Union, as flat rows: one row per number. Give it the table code (for example une_rt_m for monthly unemployment), narrow it by country or any other dimension, pick a period, and get period, value, flag and every dimension with both its label and its code. It reads the official Eurostat dissemination API. No key and no account with Eurostat.

Open it in Apify Console

New to Apify? [Create a free account](https://www.apify.com?fpr=ymnoit) (referral link). Runs from a free plan account return the first 10 results; any paid plan returns everything you ask for, up to your limit.

What it costs

ObservationsThis actor
1,000$1.00
10,000$10.00
100,000$100.00

Plus $0.001 per run. One flat price, platform usage included, so there is no separate compute or proxy bill. Only observation rows are charged. A run returns at most 10,000 rows, so 100,000 observations is ten runs, for example one per group of countries. A weekly refresh of 2,000 observations costs about $2.00 a run, or about $8.00 a month.

Why use it

  • Official data, no key. The rows come straight from the Eurostat API. Nothing to sign up for on the Eurostat side.
  • Labels and codes side by side. Each dimension is on the row as readable text (Germany) and as its code (geoCode: DE), so the rows are ready for a spreadsheet and for a join on codes.
  • Narrow by country, unit, sex, age or anything else the table has. Write filters like geo=DE,FR and the actor asks Eurostat for just those cells, so you do not download a whole table to throw most of it away.
  • Periods the way Eurostat writes them. A first and last period (2020-01, 2024-Q4, 2023) or just the latest N periods.
  • Flags with their meaning. Provisional or estimated values carry flag and flagMeaning. Missing values are not rows.
  • Labels in English, French or German.
  • Safe for scheduled jobs. A table code that does not exist, or a selection with no data, ends cleanly with zero rows and a message. It does not crash.

Quick start

  1. Open the actor, keep the example values, press Start.
  2. Or paste this input, which returns Germany's monthly unemployment for the latest three months:
{ "datasets": ["une_rt_m"], "filters": ["geo=DE"], "lastTimePeriod": 3, "maxItems": 100 }
  1. Download the results as JSON, CSV or Excel, or read them through the API.

To find a table code, open the table in the Eurostat Data Browser: the code is in the address, and the page lists it as the online data code. To find a table's dimensions, run it once with a small maxItems and look at the rows: every field that sits next to a ...Code field is a dimension you can filter on. A dimension whose label is the same as its code appears once, without ...Code.

Use it from code

curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~eurostat-statistics-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"datasets": ["une_rt_m"], "filters": ["geo=DE"], "lastTimePeriod": 3, "maxItems": 100}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/eurostat-statistics-scraper").call(
run_input={"datasets": ["nama_10_gdp"], "filters": ["geo=DE,FR", "unit=CP_MEUR", "na_item=B1GQ"],
"sinceTimePeriod": "2020", "untilTimePeriod": "2024", "maxItems": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["geo"], item["period"], item["value"])

Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

https://mcp.apify.com?tools=one_dollar_store/eurostat-statistics-scraper

Then ask, for example: "Get the GDP at market prices of Germany and France for 2020 to 2024 from Eurostat table nama_10_gdp, in current prices."

Switching from another Eurostat scraper

Tables are datasets, a list of codes. Filters are filters, one dimension=code1,code2 per line. The time range is sinceTimePeriod and untilTimePeriod, or lastTimePeriod for the latest N periods. The core output fields are dataset, period, value, flag, then each dimension (such as geo, unit, sex) with its ...Code. One row is one observation.

Input

FieldTypeDefaultWhat it does
datasetslist of textrequiredEurostat table codes, one per line, for example une_rt_m, nama_10_gdp or prc_hicp_manr. Up to 20. Not case sensitive.
filterslist of textnoneOne filter per line as dimension=code or dimension=code1,code2, for example geo=DE,FR. The same filters apply to every table in the run.
lastTimePeriodnumbernoneOnly the latest N periods of each series. Ignored when you set a first or last period.
sinceTimePeriodtextnoneFirst period, in the table's own format: 2020, 2020-03, 2020-Q1 or 2020-S1.
untilTimePeriodtextnoneLast period, in the same format. Empty means up to the latest data.
languagechoiceENLanguage of table titles and dimension labels: English, French or German. Codes do not change.
maxItemsnumber1000Most observations in the run, over all tables. Minimum 10, maximum 10,000.

When there are more observations than maxItems, the run stops at that number, reading tables in the order you listed them and each table in Eurostat's own order. If you list several tables and the first one fills the limit, the later ones are not read, so give each table its own run when you need a fixed amount from each.

Output fields

FieldMeaning
dataset, datasetTitleThe table code (lower case) and its title in the chosen language.
periodThe time period of the observation as Eurostat writes it: 2024, 2024-03, 2024-Q1, 2024-S1.
One field per dimension, for example geo, unit, sex, age, freqThe label of the category, such as Germany. A table's dimensions differ from table to table.
The same name plus Code, for example geoCode, unitCodeThe code of the category, such as DE. It is left out when the label and the code are the same.
valueThe observation, as a number. Missing values are not returned.
flag, flagMeaningEurostat's status flag, such as p for provisional or e for estimated, and what it stands for. Left out for ordinary values.
lastUpdatedWhen Eurostat last updated the table.
datasetUrlLink to the table in the Eurostat Data Browser.
source, scrapedAtWhere the row came from and when this run read it.

Sample results

Real rows from a test run on 20 October 2026: GDP at market prices in current prices for Germany and France, 2020 to 2024 (table nama_10_gdp).

[
{"dataset": "nama_10_gdp", "datasetTitle": "Gross domestic product (GDP) and main components (output, expenditure and income) - annual data", "freq": "Annual", "freqCode": "A", "unit": "Current prices, million euro", "unitCode": "CP_MEUR", "na_item": "Gross domestic product at market prices", "na_itemCode": "B1GQ", "geo": "Germany", "geoCode": "DE", "period": "2020", "value": 3477670, "lastUpdated": "2026-10-19T23:00:00+0200", "datasetUrl": "https://ec.europa.eu/eurostat/databrowser/view/nama_10_gdp/default/table", "source": "Eurostat", "scrapedAt": "2026-10-20T08:36:18.778Z"},
{"dataset": "nama_10_gdp", "datasetTitle": "Gross domestic product (GDP) and main components (output, expenditure and income) - annual data", "freq": "Annual", "freqCode": "A", "unit": "Current prices, million euro", "unitCode": "CP_MEUR", "na_item": "Gross domestic product at market prices", "na_itemCode": "B1GQ", "geo": "Germany", "geoCode": "DE", "period": "2023", "value": 4254930, "flag": "p", "flagMeaning": "provisional", "lastUpdated": "2026-10-19T23:00:00+0200", "datasetUrl": "https://ec.europa.eu/eurostat/databrowser/view/nama_10_gdp/default/table", "source": "Eurostat", "scrapedAt": "2026-10-20T08:36:18.972Z"},
{"dataset": "nama_10_gdp", "datasetTitle": "Gross domestic product (GDP) and main components (output, expenditure and income) - annual data", "freq": "Annual", "freqCode": "A", "unit": "Current prices, million euro", "unitCode": "CP_MEUR", "na_item": "Gross domestic product at market prices", "na_itemCode": "B1GQ", "geo": "France", "geoCode": "FR", "period": "2024", "value": 2935236.2, "flag": "p", "flagMeaning": "provisional", "lastUpdated": "2026-10-19T23:00:00+0200", "datasetUrl": "https://ec.europa.eu/eurostat/databrowser/view/nama_10_gdp/default/table", "source": "Eurostat", "scrapedAt": "2026-10-20T08:36:19.232Z"}
]

The second row carries the flag p: Eurostat marks the most recent years of these accounts as provisional.

Limits

  • 10,000 observations per run, over all tables. For more, run again with other countries or other periods.
  • Speed. Eurostat answered in about half a second to just over a second for filtered requests in our tests. A run of 3,000 rows took 259 seconds, about 12 rows a second, so 10,000 rows take around 15 minutes, and the run timeout is set to one hour by default. If you lower it, the run stops cleanly before the limit and keeps what it has.
  • Big tables. One request is read up to 8 MB. If you ask for a large table with no filters and no period, the actor reads the latest period only and says so in the run log and in RUN_SUMMARY. For a chosen part of a big table, add filters or a shorter time range. The latest period of nama_10_gdp with no filters is 58,656 cells and took about 15 seconds.
  • Filters apply to every table. A filter on a dimension that a table does not have makes Eurostat refuse that table, and the actor skips it with a message. When the tables differ, use one run per table.
  • Typos. A table code that does not exist ends with zero rows. A wrong category code (for example geo=XX) matches no values and ends with zero rows and a message. A dimension name that does not exist ends with the message Eurostat gives.
  • Rate limit. The actor sends one request at a time, at most one per second, with a User-Agent that names the actor, and it tries a failed request up to three times with a pause between tries.
  • Data changes. Eurostat revises figures. Compare lastUpdated between runs, and use flag to see which values are still provisional.
  • Time formats differ by table. A yearly table wants 2024, a monthly one 2024-03, a quarterly one 2024-Q1. Use the table's own format.

FAQ

How much does it cost to collect 10,000 observations? $10, plus $0.001 for each run.

Do I pay for compute or proxy on top? No. Platform usage is included in the $1 per 1,000 price. No proxy is used.

Do I need an API key or a Eurostat account? No. The actor reads the public Eurostat API.

How do I get one country only? Add the filter geo=DE, with the country code Eurostat uses. For several, geo=DE,FR,IT. Eurostat uses EL for Greece and UK for the United Kingdom.

Why do some rows have a flag? Eurostat marks values that are provisional, estimated, forecast or of low reliability. flagMeaning gives the plain words in the language you chose.

How current is the data? The actor reads Eurostat at the moment you run it. lastUpdated shows when the table last changed.

Is it legal? The actor reads statistics that Eurostat publishes openly for reuse, and it does not log in to anything. How you use the data is up to you: follow Eurostat's copyright and reuse notice and the law where you live.

Is this an official Eurostat product? No. It is an independent tool and is not affiliated with or endorsed by Eurostat or the European Commission.

Do I need an Apify account? Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can sign up here. This is a referral link and it costs you nothing.

Is there a limit on the free plan? Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included. See the whole store: https://apify.com/one_dollar_store

Open data and statistics

Changelog

  • October 2026: first release.