EU Tenders Search & TED Notice Monitor
Pricing
Pay per event
EU Tenders Search & TED Notice Monitor
Search EU procurement notices through the official TED API. Schedule saved searches to return newly seen notices. No TED API key needed.
Pricing
Pay per event
Rating
0.0
(0)
Developer
mia.cx
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Find procurement opportunities without parsing TED notice pages. Search the official TED API and receive structured notices, or schedule a saved search to return newly seen notices. Each Notice costs $0.0009, plus $0.00005 per run start at default memory.
Try it
{"keywords":["software"],"monitor":true,"maxNotices":10}
Save this input as an Apify task and add a schedule to monitor it. No TED API key is needed.
An empty input {} searches software notices from seven days ago through today, using UTC dates, without saving monitor progress.
It returns at most 10 notices. The example enables monitoring with the same initial window.
Use from an agent
Add https://mcp.apify.com?tools=miacx/eu-public-tenders-ted-search-monitor to your MCP client and sign in to Apify.
Call the dedicated Actor tool, then use get-dataset-items to read the completed run's dataset.
Or set APIFY_TOKEN to your Apify API token and call the API for JSON rows:
curl --fail-with-body 'https://api.apify.com/v2/actors/miacx~eu-public-tenders-ted-search-monitor/run-sync-get-dataset-items' \-H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' \-d '{"keywords":["software"],"monitor":true,"maxNotices":10}'
What you get
Read status first. An ok row contains one notice; no_results means no matching or unseen notices.
Notice IDs are deduplicated within each run. Monitor runs also suppress notices recorded in saved progress.
Rows contain notice metadata and links; document files are not downloaded.
Selected fields from the recorded TED fixture, replayed with an October 2026 publication window:
{"status": "ok","noticeId": "675397-2026","noticeType": "cn-standard","buyerName": "Urząd Komisji Nadzoru Finansowego","buyerCountry": "POL","cpvCodes": ["72000000", "72611000", "72260000"],"estimatedValue": null,"currency": null,"submissionDeadline": "2026-10-09","publicationDate": "2026-10-01","procedureType": "open","tedUrl": "https://ted.europa.eu/en/notice/-/detail/675397-2026","documentUrl": "https://www.ezamowienia.gov.pl","reason": null}
Every row includes input, source and fetchedAt. input is the TED query, or submitted JSON before query construction.
source links to the notice, or the search API for failed and empty results.
fetchedAt marks this run's search start, including cache hits.
Titles and buyer names prefer English, then the first available language in sorted key order. No translation runs.
Buyer names join with semicolons; buyerCountry is the first country. titleLanguage identifies the selected title's language.
CPV codes retain source order with duplicates removed. Missing scalar fields are null; missing CPV codes are [].
estimatedValue is a procedure estimate in currency, not an award amount.
submissionDeadline is the earliest lot submission date, without time of day or timezone.
documentUrl is the first supplied document link. Failed rows have null notice fields and an explanatory reason.
Input
| Field | Default | Accepted input |
|---|---|---|
keywords | ["software"] | Up to 50 phrases, each 1–150 characters. [] disables text filtering. |
cpvCodes | [] | Up to 50 exact eight-digit CPV codes. Add child codes explicitly. |
buyerCountries | [] | Up to 50 uppercase ISO alpha-3 codes, such as NLD or FRA. |
noticeTypes | [] | Up to 50 entries using cn-standard, can-standard or pin-only. Empty includes all TED types. |
publishedFrom | "" | Inclusive YYYY-MM-DD; empty starts seven days ago in UTC. Saved monitor progress takes precedence. |
publishedTo | "" | Inclusive YYYY-MM-DD; empty uses today's UTC date. Leave empty for ongoing monitoring. |
monitor | false | Save progress and return unseen notices. Scheduling is a separate Apify task setting. |
maxNotices | 10 | 1–1,000 successful notices per run, subject to budget and runtime limits. |
Lists use OR within a field and AND between fields. Duplicate filter values are removed.
The explicit notice types mean contract notices, contract awards and prior information notices, respectively.
Unknown fields and invalid values produce invalid_input. The lower date must not exceed the upper date.
Monitor progress belongs to the running user, saved task and filter values.
Direct API runs use that user's direct-run store. Changing filters starts separate progress; changing maxNotices preserves it.
The first run returns the window's backlog. Subsequent runs continue capped backlogs and suppress seen notices.
Run each saved query sequentially; concurrent runs can return duplicates.
Pricing
| Event | Price | Counted unit |
|---|---|---|
| Notice | $0.0009 | One returned ok notice, including notices with missing optional fields. |
| Actor start | $0.00005 | One run start at the default 256 MB memory. |
Ten notices cost $0.00905 including startup at default memory.
Duplicates within the run and notices suppressed by saved monitor progress incur no additional Notice events.
Cached search results still count. Error and no_results rows incur no Notice events.
The $0.00005 per run start at default memory applies even with no billable notices.
Apify counts one startup event per GB of memory, with a minimum of one event.
Limits and data freshness
- Each run reads at most eight 250-notice pages within a 24-second core deadline.
- Ordinary search responses can be reused for 15 minutes. Monitor searches bypass this cache.
- Monitor scroll snapshots expire; after 23 hours, the Actor restarts from the saved inclusive publication date and IDs.
- Interrupted runs or failed progress writes can redeliver notices. Deduplicate downstream by
noticeId. - Backdated notices inserted before saved progress require an ordinary search. Monitoring does not detect them retroactively.
If a row fails
| Status | Next step |
|---|---|
no_results | Broaden an ordinary search, or wait for new matching notices before rerunning a monitor. |
invalid_input | Check field names, list values and dates. |
invalid_notice, invalid_response | Inspect reason; TED omitted required notice data or returned an unexpected response. |
network_error, rate_limited, upstream_error, upstream_timeout | Retry later; follow any wait described in reason. |
budget_exhausted | Raise the spending limit. A monitor can resume from saved progress. |
run_limit | Rerun the monitor to continue, or narrow an ordinary search. |
storage_error | Retry and deduplicate notice IDs; progress could not be saved. |
internal_error | Keep the run ID and reason when reporting the failure. |
Successful notices remain billable if another row fails in the same run.