EU Open Data Change Feed
Pricing
$2.00 / 1,000 changed dataset record returneds
EU Open Data Change Feed
Pricing
$2.00 / 1,000 changed 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-dataset-changes
A change feed for the EU Open Data Portal: which datasets moved inside a time window, newest first.
Search answers what exists. This answers the question you have once you already hold a copy: what do I have to fetch again? It is the difference between re-mirroring 1.7 million datasets every night and fetching the eleven that changed.
Input
Every field is optional. With no input you get everything modified in the last 7 days.
{"since": "2026-09-01","until": "2026-09-16","date_type": "modified","query": "air quality","country": ["be"],"catalogue": ["data-gov-be"],"categories": ["ENVI"],"language": "en","max_results": 50}
| Field | Meaning |
|---|---|
since / until | ISO date (2026-09-01) or full timestamp. Defaults: 7 days ago → now |
date_type | modified (default) or issued — changed vs. newly published |
query, country, catalogue, categories | same filters as eu-open-data-search |
language | which language to collapse multilingual titles to |
max_results | 1 to 500 |
Output
Same dataset record as eu-open-data-search, plus changed_at — the value of whichever
date field you filtered on, so you can store it as your watermark for the next call.
{"unit": "eu-dataset-changes","version": "1.0.0","window": { "since": "2026-09-01T00:00:00Z", "until": "2026-09-16T15:34:45Z", "date_type": "modified" },"total_matches": 162,"returned": 4,"datasets": [{ "id": "...", "title": "Traffic on rivers in Wallonia", "changed_at": "2026-09-08T18:30:35.451Z","country_code": "BE", "licenses": [ { "id": "CC_BY_4_0", "...": "..." } ],"attribution_required": "yes", "distribution_count": 4 }]}
Records come back newest first. A change feed that is not ordered forces the caller to buffer the whole window before acting on any of it.
total_matches is how many datasets changed in the window; returned is how many you
asked for. When they differ, narrow the window or raise max_results — do not assume the
list is complete.
esquema.json is the contract. If it changes, this is a new version, not a fix.
Licensing, personal data, rate limiting
Identical to eu-open-data-search: portal metadata is CC0 1.0, each dataset keeps its own
licence and carries attribution_required (yes / no / unknown), no personal data is
emitted, one request per second, Retry-After honoured, official API over plain HTTP.
Running it
python main.py '{"since": "2026-09-01", "country": ["be"]}' # or pipe JSON on stdinpython conferir.py output.jsonpython fumaca.py