EU Open Data Change Feed avatar

EU Open Data Change Feed

Pricing

$2.00 / 1,000 changed dataset record returneds

Go to Apify Store
EU Open Data Change Feed

EU Open Data Change Feed

Pricing

$2.00 / 1,000 changed dataset record returneds

Rating

0.0

(0)

Developer

Igor Lima

Igor Lima

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

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
}
FieldMeaning
since / untilISO date (2026-09-01) or full timestamp. Defaults: 7 days ago → now
date_typemodified (default) or issued — changed vs. newly published
query, country, catalogue, categoriessame filters as eu-open-data-search
languagewhich language to collapse multilingual titles to
max_results1 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 stdin
python conferir.py output.json
python fumaca.py