EU TED Tender & Award Monitor
Pricing
from $10.00 / 1,000 useful history notices
EU TED Tender & Award Monitor
Search EU TED tenders and monitor lot deadlines, awards and winning suppliers. Export values, tender counts and verified changes for your CRM.
Pricing
from $10.00 / 1,000 useful history notices
Rating
0.0
(0)
Developer
Vadim Bezrukov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
What does EU TED Tender & Award Monitor do?
Search EU procurement notices, follow tender histories and inspect published awards and winning suppliers. Turn TED links, procedure identifiers or search filters into JSON/CSV-ready records for a procurement watchlist, CRM or analysis. The first successful monitor run returns a baseline; repeat runs identify newly observed publications and verified changes.
Use the official TED Search API and Open Data Service through this independent
Actor. The default example, 107799-2025, includes a Czech road tender, a deadline
correction and an award for CZK 4,000,000. Published award statistics identify five
received tenders and an award decision dated 2025-04-01. Fields that TED does not
publish remain null; a missing field is never a cancellation or a lost contract.
This repository describes the schema-2 upgrade. Its new search inputs must be deployed before using them on the hosted Actor. The technical Actor slug and existing API inputs remain unchanged.
Monitor tenders from announcement to award
Supply procedureIds, publicationNumbers, or the existing targets / tedUrls.
An entry in targets accepts exactly one noticeId, tedUrl or procedureId,
plus an optional externalRef for your CRM. Each input gets a target_status,
including invalid entries and duplicate aliases. Shared histories are delivered
once; join business-row input_indices to target_status.input_index for every
CRM reference.
Notice UUID, version, publication number and explicit procedure references carry identity. A title never establishes a relationship. Lots are notice-scoped; cross-notice continuity requires an explicit lot reference or a unique shared internal lot identifier. Ambiguous references remain visible as evidence/issues. Unresolved links do not justify moving an award onto another procedure or lot.
Track competitor contract wins
Use winnerNames to discover award/result publications. Search first finds
candidates; normalized whole-token phrase matching then verifies supplier names.
Accenture matches Accenture Outsourcing Services, but not NotAccenture.
winner_matches reports matched_winner_query, matched_winner_name and
EXACT_NORMALIZED or CONTAINS. No fuzzy matching or corporate alias resolution
is claimed.
Selected notices expand into their linked histories. Those histories may include
other suppliers or older awards: use winner_matches on award/winner rows to
select the requested supplier, and publication_date for the reporting window.
Search filters select notices; they do not filter every row in an expanded history.
Track tender and lot deadline changes
Corrections compare the full normalized states of verified lot tracks, including
lots omitted from the declared changed-section list. Deadlines retain their raw
source offset and a UTC instant. previous_deadline comes from a unique verified
parent; deadline_extension_days is the elapsed UTC difference divided by 86,400.
A negative value means a shortened deadline. Date-only or unknown-zone values
do not produce an elapsed-time delta.
Analyze awards and procurement outcomes
Award rows contain winners, winning-tender value, currency, tender count and award decision date when published. Contract rows retain their own lot reference, conclusion date and value. A conflicting contract/tender relationship is reported without transferring the tender's winner or value to the wrong contract.
Derived fields are deterministic convenience calculations, not official TED metrics:
| Field | Meaning |
|---|---|
award_vs_estimate_pct | (winning value - estimate) / estimate * 100, rounded to four decimals. Requires matching currency/scope, a positive estimate and one award outcome for that lot observation. |
single_bid | true for one received tender, false for more than one, otherwise null. |
competition_intensity | 1: SINGLE_BID; 2–3: LOW; 4–7: MEDIUM; 8+: HIGH; zero/missing: NONE_OR_UNKNOWN. |
time_to_award_days | Award decision's local calendar date minus the latest uniquely linked tender deadline's local date. Negative/unknown comparisons are null. Publication dates are never substituted. |
Multiple winners remain separate winner rows for the same award. Its full value
is repeated with JOINT_AWARD_NOT_ALLOCATED; do not sum those winner rows as
separate contracts. No FX conversion, supplier success rate or bid-win rate is
calculated: TED award publications do not expose every supplier's submitted bids.
What data do you get?
The default Dataset preserves existing snake_case record types and adds
winner_observation and search_status. Each row includes schema_version: 2,
source, stable source_id, source_url, UTC scraped_at and a deterministic
fingerprint. KVS state retains its existing version/layout; no baseline reset is
required. Parser version 3 causes a refresh; newly interpreted historical events
are marked INTERPRETATION_UPDATED, rather than presented as new buyer activity.
Views: Opportunities, Changes, Awards, Winners, plus the existing
dossiers, statuses and evidence views. Views select columns, not row types.
Filter downloaded records by record_type; award-only exports use award_outcome,
winner-only exports use winner_observation. No unsupported server-side view
filter is claimed.
Events include NEW_PROCEDURE, NEW_NOTICE, NEW_LOT, DEADLINE_CHANGED,
ESTIMATED_VALUE_CHANGED, LOT_STATUS_CHANGED, AWARD_PUBLISHED,
AWARD_CORRECTED, AWARD_VALUE_CHANGED, WINNER_CHANGED,
TENDERS_RECEIVED_CHANGED, CONTRACT_PUBLISHED and contract-modification events.
NEW_* means first observed in the verified history, not guaranteed earliest
publication in TED. Baseline history is backfill. For notifications use only
crm_eligible: true; deduplicate by event_id.
Input examples
Find new EU tender publications:
{"keywords":["cybersecurity"],"countries":["DEU"],"daysBack":7,"maxResults":100}
Monitor an existing tender:
{"publicationNumbers":["107799-2025"],"monitorKey":"important-bids","mode":"changesOnly"}
Track competitor awards:
{"winnerNames":["Accenture","Capgemini"],"countries":["DEU","FRA"],"cpvCodes":["72"],"daysBack":30,"monitorKey":"competitors"}
buyerNames, publicationDateFrom/To, deadlineFrom/To,
minEstimatedValue, maxEstimatedValue and currency are also supported.
Dates are inclusive YYYY-MM-DD. Use daysBack or explicit publication dates.
Countries identify buyers, not the place of performance. CPV accepts 2–8 digit
prefixes. TED's notice-level filters may match different lots in the same notice;
inspect the lot records before making a bid decision. Competition publications
are not guaranteed still open: check the current verified deadline.
Use search filters or an identifier watchlist, not both. Search defaults to a
30-day window and 100 candidate notices; arrays accept up to 20 search values.
maxResults bounds candidates, not the number of rows or expanded history notices.
When capped, narrow the dates/filters: incomplete searches do not advance state.
includeLots, includeAwards, includeChanges and includeDerivedMetrics control
output. They do not eliminate the source verification required for safe monitoring.
Output examples
A subset of the live Czech award observation:
{"record_type":"award_outcome","schema_version":2,"notice":"273334-2025","lot_handle":"LOT-0001","award_status":"WINNER_SELECTED","winning_value":{"amount":"4000000","currency":"CZK","value_type":"WINNING_TENDER","scope":"LOT","source_notice":"273334-2025"},"tenders_received":5,"award_decision_date":"2025-04-01","single_bid":false,"competition_intensity":"MEDIUM"}
search_status distinguishes SUCCESS, NO_RESULTS, PARTIAL, SOURCE_FAILED
and SUSPICIOUS_EMPTY. target_status.outcome retains SUCCESS, PARTIAL,
NOT_FOUND, INVALID_INPUT, FAILED and SKIPPED_LIMIT. A successful empty
search is different from a request failure. A previously populated search becoming
empty preserves state for investigation.
Schedule monitoring
Save a monitoring input and schedule it daily in your Apify account, for example
at 07:00 UTC (0 7 * * *). Keep monitorKey unchanged. It uses the persistent
ted-tender-award-monitor KVS in your account, with a namespace derived from the
monitor name and search filters. The first run emits a baseline; quiet repeats
still emit statuses. Changing filters creates a separate comparison namespace.
Existing mode: "monitor", watchlistId, and exactly one of stateStoreId or
stateStoreName remain supported. Do not combine those fields with monitorKey.
Use snapshotAndChanges with monitorKey for snapshots plus changes on each run;
without it, the mode is a non-persistent snapshot.
A run-success webhook can deliver the Dataset URL to n8n, Make or your CRM.
Fetch rows and process crm_eligible events only; inspect RUN_SUMMARY for partial
coverage first. Local Task drafts are in examples/upgrade-task-drafts.json.
Creating schedules, publishing Tasks and running paid jobs are separate actions.
API / automation use
Start the unchanged Actor slug automa-flow/eu-ted-tender-history-award-tracker
through the Apify API with your input JSON and a deliberate maxTotalChargeUsd
run setting. Read RUN_SUMMARY and the default Dataset, then join aliases through
input_indices. scripts/crm_adapter.py demonstrates deduplication and CRM export.
Direct MCP endpoint:
https://mcp.apify.com?tools=automa-flow/eu-ted-tender-history-award-tracker.
Example: “Inspect TED 107799-2025, show winning suppliers and tender counts, flag
unresolved links, and cap the run at $0.10.” Use your own authenticated Apify
session. New hosted schema/MCP exposure must be rechecked after this upgrade is
deployed; earlier checks do not establish availability of these new inputs.
Pricing
The existing contract remains $0.01 per useful unique notice version
(history-notice) and $0.01 per completed repeat procedure check (watch-check).
An unchanged successful check is still a paid check. Baseline has no check fee.
There is no extra fee for metrics, winner rows, retries, aliases or failure rows.
Award, lot and event rows belonging to one notice do not multiply its history fee.
For a three-useful-notice history, baseline is $0.03 and 30 successful quiet checks
are $0.30. This is an example workload, not an average. A $0.10 evaluation cap may
stop a longer history with explicit partial output. The minimum spend limit is
$0.01, not a minimum invoice. No useful billable units means zero custom events.
The upgrade's four offline baskets are in examples/upgrade-benchmark.json;
new hosted cost and margin remain unmeasured.
Limitations
- Monitoring reflects published TED data. External buyer portals may publish clarifications earlier; the Actor does not follow third-party documents.
- ODS enrichment can lag Search. Pending, failed and partial enrichment are explicit and retain known values. No missing value means cancellation/no-award.
- Legacy
WINNER_SELECTED,NO_WINNER,UNKNOWNmeanings are preserved. Procedure-wide cancellation/status transitions are not inferred from partial lot results. Dedicated cancellation classification is outside the verified mapping. - Lot/result continuity can remain unresolved. Contract identity across different
notices is not proven by reusing
CON-0001; term-level deltas require evidence. - Winner-name matching is not legal-entity resolution. Published data may omit winners, currencies, dates, values or tender counts.
- Three transport attempts are bounded. HTTP 429 opens a circuit immediately; the reported Retry-After should guide the next run. No proxy rotation or browser.
- Concurrent writers fail closed. Delivery is at-least-once; keep event IDs and billing receipts, and do not delete an active writer's lock. Export Dataset history before account retention removes it.
Data source and legal notes
TED, Publications Office of the European Union, © European Union. This Actor normalizes and interprets published data and is not endorsed by TED. See the Search API documentation and TED legal notice, rechecked 2026-09-13. Public procurement notices are reusable subject to the stated exceptions; third-party rights and personal-data rules still apply. No contact emails, telephone numbers, personal addresses or bidder profiles are collected. Organisation identifiers can identify sole traders: retain only what the procurement workflow needs.
From the repository root, uv run pytest actors/eu-ted-tender-history-award-tracker/tests
runs offline tests. scripts/local_run.py performs a bounded public HTTP snapshot
without Apify billing; scripts/revalidate_upgrade.py refreshes the source evidence.
For support, provide the public publication number, run ID and disputed field;
do not send credentials or an entire CRM export.