Eurostat Scraper: EU Statistics by Dataset | $1/1K
Pricing
from $1.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
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.
What it costs
| Observations | This 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,FRand 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
flagandflagMeaning. 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
- Open the actor, keep the example values, press Start.
- 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 }
- 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 ApifyClientclient = 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
| Field | Type | Default | What it does |
|---|---|---|---|
datasets | list of text | required | Eurostat table codes, one per line, for example une_rt_m, nama_10_gdp or prc_hicp_manr. Up to 20. Not case sensitive. |
filters | list of text | none | One 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. |
lastTimePeriod | number | none | Only the latest N periods of each series. Ignored when you set a first or last period. |
sinceTimePeriod | text | none | First period, in the table's own format: 2020, 2020-03, 2020-Q1 or 2020-S1. |
untilTimePeriod | text | none | Last period, in the same format. Empty means up to the latest data. |
language | choice | EN | Language of table titles and dimension labels: English, French or German. Codes do not change. |
maxItems | number | 1000 | Most 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
| Field | Meaning |
|---|---|
dataset, datasetTitle | The table code (lower case) and its title in the chosen language. |
period | The 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, freq | The label of the category, such as Germany. A table's dimensions differ from table to table. |
The same name plus Code, for example geoCode, unitCode | The code of the category, such as DE. It is left out when the label and the code are the same. |
value | The observation, as a number. Missing values are not returned. |
flag, flagMeaning | Eurostat's status flag, such as p for provisional or e for estimated, and what it stands for. Left out for ordinary values. |
lastUpdated | When Eurostat last updated the table. |
datasetUrl | Link to the table in the Eurostat Data Browser. |
source, scrapedAt | Where 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 ofnama_10_gdpwith 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
lastUpdatedbetween runs, and useflagto see which values are still provisional. - Time formats differ by table. A yearly table wants
2024, a monthly one2024-03, a quarterly one2024-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
- Socrata Open Data Search: Datasets and rows from city and state portals.
- Internet Archive Scraper: Books, media and web items from archive.org.
- World Bank Indicators: Country indicators by year.
- Wikipedia Pageviews: Daily and monthly views per article.
- GDELT Scraper: Worldwide news articles by theme and tone.
Changelog
- October 2026: first release.