EU TED Procurement Deadline & Change Monitor avatar

EU TED Procurement Deadline & Change Monitor

Pricing

$3.00 / 1,000 procurement change events

Go to Apify Store
EU TED Procurement Deadline & Change Monitor

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

xinyao a

Maintained by Community

Actor 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:

  • NEW procurement procedures on the first observation;
  • CHANGED procedures when deadlines, values, CPV codes, countries, buyers, title, notice type, or official change text changes;
  • previousValues and changedFields, 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

  1. Create one task per watchlist and give it a stable, unique watchKey.
  2. Schedule daily or hourly.
  3. Connect the run-finished webhook or an integration to consume only dataset events.
  4. 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/activate
pip install -r requirements-dev.txt
pytest -q
RUN_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.