EU Public Tenders (TED) Scraper avatar

EU Public Tenders (TED) Scraper

Pricing

$2.00 / 1,000 tender notices

Go to Apify Store
EU Public Tenders (TED) Scraper

EU Public Tenders (TED) Scraper

EU public tenders scraper from the TED Search API. Filter procurement notices by keyword, buyer country, CPV, publication date and value; export available notice fields as JSON.

Pricing

$2.00 / 1,000 tender notices

Rating

0.0

(0)

Developer

Grit

Grit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Share

EU tenders scraper returns public TED procurement notices with buyer, value, deadline, and source links. TED tenders API search results include notice type and publication date for filtering competitions and awards.

Search by keyword, buyer country, CPV code, publication date and notice value. The actor uses the public TED v3 Search API, without a TED API key. Results include competition notices, awards and other published notice types unless you filter them.

What it returns

FieldTypeExample value
noticeIdstring"682380-2026"
titlestring"France – IT services: consulting, software development, Internet and support – Assistance technique sécurité"
titleLanguagestring"eng"
noticeTypestring"can-standard"
publicationDatestring"2026-10-05"
buyerNamestring"Mairie d'Asnières sur Seine"
buyerNamesarray["Mairie d'Asnières sur Seine"]
buyerCountriesarray["FRA"]
buyerCitiesarray["Asnières sur seine"]
buyerWebsitesarray[]
cpvCodesarray["72000000", "72413000", "72267100", "72600000", "72415000", "72317000"]
valuenumber140444.52
currencystring"EUR"
valueCurrenciesarray["EUR"]
valueSourcestring"total-value"
totalValuenumber140444.52
estimatedValuenumber0.0
estimatedCurrencystring"EUR"
deadlinestring"2026-10-30T22:59:00Z"
deadlinesarray[]
deadlineSourcestring"deadline-receipt-request"
otherDeadlinesarray[]
submissionTimesarray[]
contractNaturearray["services"]
procedureTypestring"open"
noticeUrlstring"https://ted.europa.eu/en/notice/-/detail/682380-2026"
pdfUrlstring"https://ted.europa.eu/en/notice/682380-2026/pdf"
xmlUrlstring"https://ted.europa.eu/en/notice/682380-2026/xml"
sourcestring"TED"
scrapedAtstring"2026-10-05T12:27:09.699682+00:00"
errorsarray[]

Missing values remain null or empty arrays. A notice's title or buyer can use another published language when the requested one is unavailable. No machine translation or AI enrichment is performed.

TED's total-value can describe an estimate, an award or a framework amount. valueSource identifies the selected indexed field; it does not certify what was awarded. Choose estimated-value-proc for the separately published procedure estimate. These distinctions follow the official search field list.

Input example

{
"keyword": "software",
"countries": [
"FRA"
],
"maxItems": 10
}

Use the input schema for the remaining filters and defaults.

Output example

This is a selected-field excerpt of the first object in sample_output.json.

{
"noticeId": "682380-2026",
"titleLanguage": "eng",
"noticeType": "can-standard",
"publicationDate": "2026-10-05",
"buyerName": "Mairie d'Asnières sur Seine",
"buyerNames": [
"Mairie d'Asnières sur Seine"
],
"buyerCountries": [
"FRA"
],
"buyerCities": [
"Asnières sur seine"
],
"buyerWebsites": [],
"cpvCodes": [
"72000000",
"72413000",
"72267100",
"72600000",
"72415000",
"72317000"
],
"value": 140444.52,
"currency": "EUR",
"valueCurrencies": [
"EUR"
],
"valueSource": "total-value"
}

Pricing

Proposed price: $0.002 per notice, or $2 per 1,000 billable notices, with no additional actor-start or dataset-item surcharge. A billable notice has a usable title or buyer; a warning about another field does not make it free. Error-only rows, empty searches and within-run duplicates have no notice charge. See PRICING.md for dated Store comparisons, event definitions and the publication configuration. Cloud platform billing depends on the owner's settings.

Limits and failure behavior

  • maxItems caps output rows including errors. API candidates are also bounded by maxItems, so duplicates can leave the dataset below the requested cap. Deduplication does not persist between separate runs.
  • TED requests are sequential, use a 30-second request timeout and at most three attempts for transport errors or HTTP 408/429/500/502/503/504. Backoff is bounded at 30 seconds and respects a bounded Retry-After value.
  • The actor uses TED scroll/iteration mode. Broad queries can still time out or encounter upstream availability/field limits. A failed search adds an uncharged error row and fails the run; earlier successful rows remain saved.
  • Malformed individual notices produce uncharged error rows and processing continues. Missing amounts and deadlines are normal source omissions, especially on award notices.
  • Submission deadlines prefer deadline-receipt-request, then the published tender date. Generic deadline values are retained separately and never substituted as submission deadlines. Confirm timing and lot terms in the linked official notice before bidding.
  • Dates and timestamps retain the published precision; the actor does not reconstruct lot relationships. No attachments, national portal crawling, contact enrichment, login or CAPTCHA processing are included.
  • Results are notice publications rather than unique procurement procedures; corrections or subsequent awards can have different notice IDs.

Use with AI agents / MCP

An AI agent can call a published actor through the Apify MCP server or Apify API, pass the JSON input, then read the run’s default dataset. Check the actor’s published identifier and permissions in your Apify account.

After the owner publishes and configures this actor, connect your agent to the Apify MCP server at https://mcp.apify.com. Running actors requires Apify authentication; TED itself requires no key.

Use fetch-actor-details with the published actor ID, then call-actor with the structured input above. Fetch the returned dataset with get-dataset-items; call-actor returns run/storage information, not the notice rows themselves. The output schema exposes a Results dataset link. Ask the agent to cite noticeUrl, distinguish awards from competitions using noticeType, and retain null amounts/deadlines instead of inventing them. Start with a small maxItems and a charge limit.

FAQ

What limits the output? The maxItems input caps output rows; its schema maximum is 100,000. Source availability and errors may yield fewer rows.

Does it need a proxy, login, or API key? The actor calls the public TED API without a TED key or proxy input. An Apify credential is needed to run a private actor through the platform.

How is it priced? PRICING.md proposes $0.002 per unique usable notice saved within a run. Error and duplicate rows have no notice event; the proposal is unpublished.

What happens on rate limits? The TED client retries throttling and transient server failures with Retry-After when supplied. Exhausted failures are reported.

How fresh is the data? Rows reflect TED at run time. publicationDate is the notice date; scrapedAt records retrieval.

Does a publication date mean bidding is still open? No. Inspect noticeType, deadline, and the linked TED notice.

Local development and measured checks

Use the existing C:/GritWork/earn/.venv/Scripts/python.exe; do not install packages into the shared environment. Runtime requirements are apify and httpx.

From this actor directory in PowerShell, set local storage, save the input example as storage/key_value_stores/default/INPUT.json, then run:

$env:APIFY_LOCAL_STORAGE_DIR = "$PWD/storage"
& C:/GritWork/earn/.venv/Scripts/python.exe -m src
& C:/GritWork/earn/.venv/Scripts/python.exe -m pytest -q
apify validate-schema

Ordinary local runs do not charge a real account. To reproduce local billing simulation and the acceptance probes, run C:/GritWork/earn/.venv/Scripts/python.exe evidence/local_run.py, then C:/GritWork/earn/.venv/Scripts/python.exe evidence/verify_outputs.py. The harness supplies explicit prices and zero starting charge counts; test logs are stored under evidence/. Unit tests use saved real responses; the marked live smoke test contacts TED.

Observed on 2026-10-05: 59 tests passed, including the live smoke test. The sample query saved 10 notices in 2.015 seconds of local process wall time (1.313 seconds inside the initialized actor). These are one local run's measurements, not a throughput guarantee. evidence/local-runs.json includes changed-country, empty/invalid-input, duplicate, malformed-response and budget probes; twelve saved notices were independently compared with TED.