EU TED Tender Monitor — Procurement Notice Alerts API avatar

EU TED Tender Monitor — Procurement Notice Alerts API

Pricing

Pay per usage

Go to Apify Store
EU TED Tender Monitor — Procurement Notice Alerts API

EU TED Tender Monitor — Procurement Notice Alerts API

Monitor EU TED API for new procurement tenders matching your criteria. Webhook alerts on new/changed/deadline_changed events.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Marcus Lee

Marcus Lee

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Public Tender Monitor — Apify Actor

Monitor EU TED API for new procurement tenders matching your criteria. Emits structured events to Apify dataset and delivers signed webhooks.

Quick Start

{
"search_queries": [
{
"keywords": ["software", "IT services", "cloud infrastructure"],
"cpv_codes": ["72000000", "48000000"],
"countries": ["DE", "FR", "NL", "ES"],
"notice_types": ["contract-notice", "prior-information-notice"],
"min_value_eur": 50000,
"max_deadline_days": 60
}
]
}

Features

  • TED API v3 — queries using expert search syntax, no auth required
  • Multi-query — 1-20 independent search queries per run
  • Smart dedup — cross-query deduplication (one event per notice, merged matched_queries)
  • Delta detection — baseline run stores state; subsequent runs emit new/changed/deadline_changed events
  • Webhook delivery — HMAC-SHA256 signed payloads with retry, DLQ, and SSRF protection
  • Free Actor — no separate Actor charge; ordinary Apify platform usage still applies
  • Crash-consistent — 7-step idempotent pipeline with outbox persistence

Input

FieldTypeRequiredDescription
search_queriesarray[object]yes1-20 search queries
max_results_per_queryintegernoMaximum notices fetched per query (default: 100, range: 1-1000)
webhook_urlstringnoPublic HTTPS endpoint for event delivery
webhook_secretstring (secret)noHMAC signing key (required if webhook_url set)
webhook_filterobjectnoAlert on event types (default: ["new"])
self_testbooleannoProbe TED API without monitoring
replay_dlqbooleannoReplay dead-letter queue events

Search Query

FieldTypeDescription
keywordsstring[]Match against notice title
cpv_codesstring[]EU CPV codes (8 digits, e.g. 72000000)
countriesstring[]Buyer country codes (ISO 3166-1 alpha-2, e.g. DE)
notice_typesstring[]contract-notice, prior-information-notice, etc.
min_value_eurintegerMinimum estimated contract value
max_deadline_daysintegerNotices closing within N days

Output

Dataset (event stream)

{
"event_id": "sha256:tender-monitor:237195-2016:new:01",
"event_type": "new",
"publication_number": "237195-2016",
"notice_version": "01",
"title": "Cloud infrastructure modernization services",
"buyer": "Bundesministerium des Innern",
"buyer_country": "DE",
"notice_type": "contract-notice",
"cpv_codes": ["72000000", "48810000"],
"deadline": "2026-08-15T17:00:00Z",
"estimated_value_eur": 2500000,
"first_seen_at": "2026-07-12T10:30:00Z",
"source": "TED",
"source_url": "https://ted.europa.eu/udl?uri=TED:NOTICE:237195-2016:2026:TEXT",
"matched_queries": [0, 2]
}

KV Store (run summary)

{
"run_mode": "delta",
"run_timestamp": "2026-07-12T10:30:00Z",
"queries_executed": 3,
"queries_succeeded": 3,
"queries_failed": 0,
"total_notices_fetched": 145,
"new_events": 12,
"changed_events": 2,
"deadline_changed_events": 1,
"webhook_delivered": 14,
"webhook_failed": 1,
"webhook_dlq": 1,
"status": "OK"
}

Webhook Payload

HMAC-SHA256 signed POST to your endpoint. Headers:

  • X-Tender-Monitor-Signature: v1=<hex> (HMAC-SHA256 of body + timestamp + delivery_id)
  • X-Tender-Monitor-Timestamp: ISO 8601
  • X-Tender-Monitor-Delivery-Id: UUID

Receiver must verify signature and deduplicate by delivery_id.

Pricing

This Actor is free. It has no separate Actor event charge. You pay only the normal Apify platform usage consumed by runs and storage under your Apify plan.

Support this Actor

If it is useful, bookmark it and leave an honest Apify review. If something does not work as expected, use the Actor's Issues tab so it can be fixed.

Error Codes

CodeMeaning
ERR_CONNECTNetwork error connecting to TED API
ERR_RATE_LIMITEDTED API rate limited (429) after retries
ERR_TIMEOUTTED API request timed out
ERR_PARSETED API response parse failure
ERR_HTTP_NNNUnexpected HTTP status
ERR_CONCURRENT_RUNOverlapping run detected
ERR_STATE_CORRUPTState read failed, reset required
ERR_BILLINGInternal event-accounting hook failed; the Actor is currently free
ERR_PARTIALSome queries failed
ERR_PAGINATION_LIMITQuery exceeded 10K result limit
ERR_INTERNALInternal error

Limits

  • 1-20 search queries per input
  • Maximum max_results_per_query of 1,000 notices per query (default: 100)
  • Webhook: 100 events/batch, 1MB payload
  • State retention: 30 days for snapshots
  • DLQ: max 100 failed events

Development

pip install -r requirements.txt -r requirements-dev.txt
pytest

Self-test

Run with self_test: true to verify TED API connectivity. Note: search_queries is still required (used for the probe query):

{
"self_test": true,
"search_queries": [{"keywords": ["test"]}]
}

Non-affiliation disclaimer

Not affiliated with, endorsed by, or sponsored by the EU Publications Office. TED data is published under EU open data terms (CC BY 4.0).