EU TED Tender Monitor — Procurement Notice Alerts API
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
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
| Field | Type | Required | Description |
|---|---|---|---|
search_queries | array[object] | yes | 1-20 search queries |
max_results_per_query | integer | no | Maximum notices fetched per query (default: 100, range: 1-1000) |
webhook_url | string | no | Public HTTPS endpoint for event delivery |
webhook_secret | string (secret) | no | HMAC signing key (required if webhook_url set) |
webhook_filter | object | no | Alert on event types (default: ["new"]) |
self_test | boolean | no | Probe TED API without monitoring |
replay_dlq | boolean | no | Replay dead-letter queue events |
Search Query
| Field | Type | Description |
|---|---|---|
keywords | string[] | Match against notice title |
cpv_codes | string[] | EU CPV codes (8 digits, e.g. 72000000) |
countries | string[] | Buyer country codes (ISO 3166-1 alpha-2, e.g. DE) |
notice_types | string[] | contract-notice, prior-information-notice, etc. |
min_value_eur | integer | Minimum estimated contract value |
max_deadline_days | integer | Notices 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 8601X-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
| Code | Meaning |
|---|---|
ERR_CONNECT | Network error connecting to TED API |
ERR_RATE_LIMITED | TED API rate limited (429) after retries |
ERR_TIMEOUT | TED API request timed out |
ERR_PARSE | TED API response parse failure |
ERR_HTTP_NNN | Unexpected HTTP status |
ERR_CONCURRENT_RUN | Overlapping run detected |
ERR_STATE_CORRUPT | State read failed, reset required |
ERR_BILLING | Internal event-accounting hook failed; the Actor is currently free |
ERR_PARTIAL | Some queries failed |
ERR_PAGINATION_LIMIT | Query exceeded 10K result limit |
ERR_INTERNAL | Internal error |
Limits
- 1-20 search queries per input
- Maximum
max_results_per_queryof 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.txtpytest
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).