EU TED Procurement Deadline & Change Monitor
Pricing
$3.00 / 1,000 procurement change events
EU TED Procurement Deadline & Change Monitor
Filter official EU procurement notices and emit NEW/CHANGED events with deadline deltas.
Pricing
$3.00 / 1,000 procurement change events
Rating
0.0
(0)
Developer
xinyao a
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
An Apify Actor that turns the official, keyless EU Tenders Electronic Daily (TED) Search API v3 into a structured event feed.
Verified output sample
The sample comes from a verified run against the official TED API and preserves the official notice URL for provenance.
It is intentionally not another “download some tenders” wrapper. Reuse the same watchKey on a schedule and it emits:
NEWprocurement procedures on the first observation;CHANGEDprocedures when deadlines, values, CPV codes, countries, buyers, title, notice type, or official change text changes;previousValuesandchangedFields, suitable for Slack/email/webhook/CRM automation;- normalized deadlines, earliest deadline, and days remaining;
- JSON/JSONL/CSV/Excel/XML/RSS export through Apify datasets.
Data source and compliance
The Actor calls POST https://api.ted.europa.eu/v3/notices/search directly. The official documentation says this Search API provides published notices for reuse/analysis and does not require authentication. It uses no browser, login, cookie, personal profile data, or paid proxy. Records are public procurement notices and buyer organisations.
Official docs: https://docs.ted.europa.eu/api/latest/search.html
Example input
{"keywords": ["cybersecurity", "cloud"],"countries": ["DEU", "FRA", "NLD"],"cpvCodes": ["72"],"publishedFrom": "2026-07-01","publishedTo": "2026-07-23","deadlineTo": "2026-10-31","watchKey": "eu-cloud-opportunities","monitorByProcedure": true,"maxItems": 250}
Dates default to the last seven days through today. cpvCodes accepts prefixes. Keyword matching is case-insensitive and matches title, buyer, and official change description.
Scheduling and change semantics
- Create one task per watchlist and give it a stable, unique
watchKey. - Schedule daily or hourly.
- Connect the run-finished webhook or an integration to consume only dataset events.
- Keep
monitorByProcedure=true: when TED publishes a correction/new notice for an existing procedure, the latest publication is compared with the previous stored procedure snapshot.
The state is stored in the default key-value store as TED_STATE_<watchKey>. A first run emits all matches as NEW. Identical subsequent runs emit nothing unless emitUnchanged=true.
Important: maxItems limits matched records, so selective client-side filters can require multiple official API pages. Very broad historical queries should use a larger maxItems or a narrow TED expertQuery.
Output excerpt
{"eventType": "CHANGED","publicationNumber": "497792-2026","procedureIdentifier": "e8ef638a-22e9-4113-baf6-def0457776e7","title": "Laboratory equipment","buyerNames": ["Example buyer"],"cpvCodes": ["38434540"],"countries": ["LTU"],"deadlineDates": ["2026-08-25"],"earliestDeadline": "2026-08-25","changedFields": ["deadlineDates"],"previousValues": {"deadlineDates": ["2026-08-14"]},"sourceUrl": "https://ted.europa.eu/en/notice/497792-2026"}
Local development
python -m venv .venv. .venv/bin/activatepip install -r requirements-dev.txtpytest -qRUN_LIVE=1 pytest -q -m live
Run as an Actor locally (Apify local storage):
$APIFY_INPUT='{"publishedFrom":"2026-07-20","publishedTo":"2026-07-23","maxItems":5,"watchKey":"demo"}' python -m src.main
Limits
- TED’s field/page budget requires small pages; this Actor handles paging automatically.
- Deadline fields differ across old and current TED form generations; output combines three official deadline fields and deduplicates dates.
- Procedure mode deliberately outputs the latest notice per procedure. Disable it when every notice version must be a separate event.
- This is procurement intelligence, not legal advice. Always follow the source URL before bidding.