EU Open Data Search
Pricing
$2.00 / 1,000 dataset record returneds
EU Open Data Search
Pricing
$2.00 / 1,000 dataset record returneds
Rating
0.0
(0)
Developer
Igor Lima
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
eu-open-data-search
Search the EU Open Data Portal (1.7 million datasets, measured 16 Sep 2026, harvested from dozens of national catalogues) and get back flat, clean JSON.
The portal's own API answers with records that carry every title in 24 languages, nest the licence three levels down inside each distribution, and include the publisher's contact e-mail. This unit returns one record per dataset, in the language you asked for, with the licence resolved and no personal data in it at all.
Input
Every field is optional. With no input you get the 20 most relevant datasets on the portal.
{"query": "air quality","country": ["be", "nl"],"catalogue": ["data-gov-be"],"categories": ["ENVI"],"formats": ["CSV", "JSON"],"licenses": ["CC_BY_4_0"],"language": "en","max_results": 20}
| Field | Meaning |
|---|---|
query | full-text search over titles, descriptions and keywords |
country | lowercase country codes as the portal uses them (be, de, fr, …) |
catalogue | source catalogue id (data-gov-be, govdata, datos-gob-es, …) |
categories | EU data theme codes (ENVI, TECH, AGRI, SOCI, EDUC, …) |
formats | distribution formats (CSV, JSON, XLSX, SHP, PDF, …) |
licenses | licence ids as published by the portal (CC_BY_4_0, …) |
language | which language to collapse multilingual titles to; falls back to English, then to whatever the publisher provided |
max_results | 1 to 500 |
Output
{"unit": "eu-open-data-search","version": "1.0.0","generated_at": "2026-09-16T15:30:00Z","source": { "portal": "data.europa.eu", "portal_metadata_license": "CC0-1.0", "...": "..." },"query": { "...": "echoed back, so a stored result explains itself" },"total_matches": 269,"returned": 2,"datasets": [{"id": "https-www-odwb-be-explore-dataset-belaqi-qualite-air-issep-","title": "BelAQI Index - Belgian Air Quality Index","description": "The dataset presents air quality according to the BelAQI index...","portal_url": "https://data.europa.eu/data/datasets/...?locale=en","landing_page": "https://www.odwb.be/explore/dataset/belaqi-qualite-air-issep/information/","publisher": "City of Liège","catalogue_id": "data-gov-be","country_code": "BE","country_label": "Belgium","categories": ["AGRI"],"keywords": ["environnement", "air"],"languages": ["fr"],"issued": "2024-04-15T00:00:00","modified": "2026-09-08T01:05:14.968Z","high_value_dataset": false,"formats": ["CSV", "JSON", "PARQUET", "SHP", "XLSX", "..."],"licenses": [{ "id": "CC_BY_4_0", "label": "Creative Commons Attribution 4.0 International","uri": "http://spdx.org/licenses/CC-BY-4.0" }],"attribution_required": "yes","distribution_count": 15}]}
esquema.json is the contract. If it changes, this is a new version, not a fix.
Licensing and attribution
Portal metadata is dedicated to the public domain under CC0 1.0
(https://data.europa.eu/en/legal-notice). Individual datasets keep their own licence,
which is why every record carries licenses and attribution_required:
"yes"— the licence asks for credit. Attribute thepublisher."no"— a public-domain dedication, no credit required."unknown"— the source published no licence for this dataset. It is never reported as"no"by default: an absent licence is not a permissive one.
No personal data
Upstream records contain contact_point and creator fields with people's names and
e-mail addresses. This unit builds its output field by field from an allowlist, so those
fields cannot travel through it, and it redacts e-mail addresses out of free text as well.
publisher is emitted only when the source types it as an organisation. The smoke test
asserts all of this on every run.
Rate limiting
The portal publishes no rate limit. This unit self-throttles to one request per second,
walks at most 20 pages per call, and honours Retry-After on HTTP 429. Nothing here works
around a limit, a login, or a bot check — it is the official documented API over plain
HTTP, with no browser involved.
Running it
python main.py '{"query": "air quality", "max_results": 5}' # or pipe JSON on stdinpython conferir.py output.json # validate against the schemapython fumaca.py # live end-to-end check