EU Tenders Procurement & Opportunity Notification avatar

EU Tenders Procurement & Opportunity Notification

Pricing

Pay per usage

Go to Apify Store
EU Tenders Procurement & Opportunity Notification

EU Tenders Procurement & Opportunity Notification

Query TED EU procurement database in 24 languages, save configurable fields as flat JSON to Apify, optionally email results as HTML table with PDF/HTML links.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Fabio Borsotti

Fabio Borsotti

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

8 days ago

Last modified

Share

TED Search API Actor

Apify Actor that queries the public TED (Tenders Electronic Daily) Search API v3 and saves results to the dataset.

Description

This Actor performs a single search on the TED Search API using the provided input parameters and saves the results to the Apify dataset.

Endpoint used: POST https://api.ted.europa.eu/v3/notices/search

What Is TED? Tenders Electronic Daily (TED) is the official online journal for European public procurement. Operated by the Publications Office of the European Union, TED is where all above-threshold procurement notices from EU and EEA member states are published. With approximately 700,000 notices per year representing hundreds of billions of euros in contract value, TED is the single most important starting point for any business seeking government contracts in Europe.

Input Parameters

The Actor accepts the following input parameters (defined in .actor/input_schema.json):

Required Parameters

query (string)

  • Description: Expert search query for TED notice search

  • Editor type: Textarea

  • Requirements: Non-empty string

  • Example values:

    • "STATUS = \"ACTIVE\""
    • "place-of-performance=ITC49"
    • "publication_date >= 2025-06-01"
    • "buyer-name LIKE \"Municipality\"
    • Complex queries combining multiple conditions with AND, OR, NOT

    To build complex query please:

  1. Use official query builder: https://ted.europa.eu/en/expert-search.
  2. Cut & Paste query into parameter "query"

returned-fields (array[string])

  • Description: List of TED fields to include in the response

  • Editor type: Select (multiple choice)

  • Requirements: Non-empty array of valid field names

  • Default value: ["buyer-name", "publication-date"]

  • Available fields (1,855+ options including):

    • Core fields: publication-number, publication-date, buyer-name, buyer-profile, buyer-category, buyer-country, sme-part
    • Contact fields: buyer-person, tendering-party-name, buyer-touchpoint-contact-point
    • Contract details: contract-value-amount, contract-nature, contract-title, contract-duration-start-date, contract-duration-end-date
    • Procedure fields: procedure-identifier, procurement-document-id-part, legal-basis
    • Tender data: deadline-receipt-tender-date-lot, tender-validity-deadline-lot, award-criterion-*
    • Organisation fields: organisation-* patterns for various organization types (buyer, tenderer, subcontractor, etc.)
    • Touchpoint fields: touchpoint-* patterns for contact information
    • Location fields: place-of-performance, place-of-performance-country-*, place-performance-street*
    • And many more specific procurement-related fields

    See below table:

fieldareameaningtypeexample / notes
publication-dateIdentificationDate when the notice was published on TED.datePublication date of the notice.
BT-01-noticeIdentificationMain identifier or title of the notice, depending on notice type and representation.stringStandard eForms/TED identifier.
BT-05(a)-noticeIdentificationStandardized notice classification field.stringUsed in the eForms model.
BT-803(d)-noticeIdentificationStandardized notice field for a specific section or attribute.stringMeaning depends on notice type.
BT-127-noticeIdentificationStandardized notice attribute.stringProcedural or content-related attribute.
BT-140-noticeIdentificationGeneral notice content attribute.stringStandardized TED/eForms field.
BT-758-noticeIdentificationStandardized field associated with a specific notice characteristic.stringExact meaning depends on the schema context.
BT-13716-noticeIdentificationStandardized field identifying a notice result/content element.stringSchema-specific field.
description-gloSubject matterGeneral description of the contract, available in multilingual form.stringGlobal description.
OPP-021-ContractSubject matterContract object description.stringMultilingual text field.
OPP-034-TenderSubject matterTender description.stringMultilingual text field.
OPP-080-TenderSubject matterDetailed tender information.stringStructured or multilingual field.
OPP-130-BusinessSubject matterBusiness opportunity description.stringMultilingual text field.
buyer-profileBuyer / organizationBuyer profile reference or link.string / urlProcurement profile page.
buyer-categoryBuyer / organizationType or category of the contracting authority.stringPublic authority, utility, etc.
buyer-touchpoint-gatewayBuyer / organizationTED communication gateway or contact channel for the buyer.stringTechnical contact route.
organisation-name-serv-provBuyer / organizationService provider name.stringMultilingual field.
organisation-name-tender-receip-lotBuyer / organizationName of the entity receiving tenders for a lot.stringMultilingual field.
organisation-country-buyerBuyer / organizationCountry of the buyer.stringISO-like country value.
organisation-city-signatoryBuyer / organizationCity of the signatory or organization contact.stringLocation field.
organisation-identifier-signatoryBuyer / organizationSignatory identifier.stringOrganizational identifier.
contract-nature-main-procProcedureMain nature of the contract, such as works, supplies, or services.stringHigh-level procedure classification.
BT-5121-ProcedureProcedureStandardized procedure attribute.stringSchema-defined field.
BT-1252-ProcedureProcedureStandardized procedure detail.string / numberDepends on context.
BT-271-ProcedureProcedureNumerical or coded procedure attribute.number / stringSchema-defined value.
BT-88-ProcedureProcedureProcedure title or description.stringMultilingual text field.
BT-21-ProcedureProcedureProcedure description field.stringMultilingual text field.
BT-11-Procedure-BuyerProcedureProcedure information related to the buyer.stringBuyer-specific procedure attribute.
deadline-receipt-tender-date-lotDates / deadlinesDeadline for receipt of tenders for a lot.dateOffer submission deadline.
deadline-receipt-requestDates / deadlinesDeadline for receipt of requests.dateRequest submission deadline.
deadline-receipt-expressions-date-lotDates / deadlinesDeadline for expressions of interest or related requests for a lot.dateLot-specific deadline.
deadline-receipt-expressions-time-lotDates / deadlinesTime limit for expressions of interest or related requests for a lot.timeLot-specific cutoff time.
deadline-time-partDates / deadlinesDeadline time for a specific part.timeSection-level deadline.
public-opening-date-lotDates / deadlinesPublic opening date for a lot.dateOpening session date.
contract-duration-start-date-partDates / deadlinesStart date of contract duration for a part.dateContract start date.
contract-duration-end-date-partDates / deadlinesEnd date of contract duration for a part.dateContract end date.
framework-maximum-value-lotValues / amountsMaximum framework agreement value for a lot.numberMonetary value.
framework-estimated-value-gloValues / amountsEstimated total value of the procedure or notice.numberMonetary value.
tender-value-cur-highestValues / amountsCurrency of the highest tender value.stringCurrency code or currency label.
subcontracting-value-curValues / amountsCurrency for subcontracting value.stringMonetary currency.
concession-revenue-buyerValues / amountsBuyer revenue in a concession context.numberMonetary value.
BT-64-LotValues / amountsMonetary amount associated with a lot.numberFinancial field.
BT-98-LotValues / amountsValue/unit pair for a quantitative lot parameter.number / objectQuantity-related field.
BT-1561-NoticeResultValues / amountsNumerical value of the notice result.numberResult amount.
BT-156-NoticeResult-CurrencyValues / amountsCurrency associated with the notice result value.stringCurrency code or label.
BT-711-LotResult-CurrencyValues / amountsCurrency of the lot result value.stringCurrency field.
BT-635-LotResultValues / amountsNumerical lot result value.numberResult amount.
BT-793-ReviewReview / appealsMonetary amount related to a review or appeal.numberReview-related financial field.
review-request-feeReview / appealsFee for submitting a review request.numberAdministrative fee.
review-remedy-valueReview / appealsValue of the requested or granted remedy in a review.numberRemedy amount.
framework-agreement-lotLot / subdivisionIndicates whether the lot is part of a framework agreement.booleanTrue/false flag.
framework-maximum-participants-number-lotLot / subdivisionMaximum number of participants allowed in the framework/lot.integerParticipant limit.
renewal-maximum-lotLot / subdivisionMaximum number of renewals for the lot.integerRenewal count.
variant-allowed-lotLot / subdivisionIndicates whether variants are allowed.booleanTrue/false flag.
lots-max-allowed-procLot / subdivisionMaximum number of lots allowed in the procedure.integerProcedure-level limit.
significance-lotLot / subdivisionRelevance or classification of the lot.stringSchema-defined classification.
requirement-stage-lotLot / subdivisionRequirement stage associated with the lot.stringStage indicator.
place-of-performancePerformance locationPlace where the contract will be performed.stringGeneral location field.
place-of-performance-country-partPerformance locationCountry of performance for a part.stringCountry-level location.
place-of-performance-city-partPerformance locationCity of performance for a part.stringCity-level location.
place-of-performance-post-code-partPerformance locationPostal code of the performance location for a part.stringZIP / CAP value.
place-performance-street-procPerformance locationStreet address of the performance location for the procedure.stringAddress field.
place-performance-street-lotPerformance locationStreet address of the performance location for the lot.stringAddress field.
touchpoint-contact-point-buyerContacts / touchpointsBuyer contact point.stringTechnical or administrative contact.
touchpoint-contact-point-tendererContacts / touchpointsTenderer contact point.stringOfferer contact data.
touchpoint-contact-point-docprovider-partContacts / touchpointsDocument provider contact point for a part.stringDocument-related contact.
touchpoint-email-docprovider-lotContacts / touchpointsEmail address of the lot document provider.stringEmail field.
touchpoint-tel-buyerContacts / touchpointsBuyer phone number.stringTelephone field.
touchpoint-fax-buyerContacts / touchpointsBuyer fax number.stringFax field.
touchpoint-internet-address-buyerContacts / touchpointsBuyer website or internet address.stringURL field.
touchpoint-gateway-ted-esenContacts / touchpointsTED/eSender gateway for the organization or flow.stringIntegration channel.
review-idReview / appealsReview or appeal identifier.stringUnique appeal ID.
review-titleReview / appealsTitle of the review.stringMultilingual title.
review-previous-idReview / appealsReference to a previous review.stringPrior appeal link.
review-applicant-idReview / appealsIdentifier of the applicant filing the review.stringParty identifier.
review-irregularity-typeReview / appealsType of irregularity being challenged.stringComplaint category.
winner-countryAward / winnersCountry of the winner.stringWinner location.
winner-post-codeAward / winnersPostal code of the winner.stringPostal code value.
winner-touchpoint-post-codeAward / winnersPostal code of the winner’s touchpoint.stringContact location field.
BT-688-LotResultAward / winnersMultilingual description of the lot result.stringResult description.
BT-13713-LotResultAward / winnersStandardized lot result field.stringSchema-defined field.
BT-1118-NoticeResult-CurrencyAward / winnersCurrency of the notice result value.stringCurrency field.
  • Example values:
    ["buyer-name", "publication-date"]
    ["publication-number", "buyer-name", "publication-date", "buyer-profile"]
    ["buyer-category", "sme-part", "contract-value-amount", "buyer-country"]

limit (integer)

  • Description: Maximum number of notices to return from the API
  • Type: Integer
  • Range: 1 - 250
  • Default value: 10
  • Example values:
    • 1 - retrieve just one notice
    • 50 - retrieve up to 50 notices
    • 100 - retrieve up to 100 notices
    • 250 - retrieve maximum notices per request

lang (string)

  • Description: Language code to filter multilingual output fields to the specified language
  • Editor type: Select (single choice)
  • Type: Single language code string
  • Default value: "ENG"
  • Available language codes (24 EU languages):
    • BUL - Bulgarian / български
    • SPA - Spanish / Español
    • CES - Czech / Čeština
    • DAN - Danish / Dansk
    • DEU - German / Deutsch
    • EST - Estonian / Eesti
    • ELL - Greek / Ελληνικά
    • ENG - English
    • FRA - French / Français
    • GLE - Irish / Gaeilge
    • HRV - Croatian / Hrvatski
    • ITA - Italian / Italiano
    • LAV - Latvian / Latviešu
    • LIT - Lithuanian / Lietuvių
    • HUN - Hungarian / Magyar
    • MLT - Maltese / Malti
    • NLD - Dutch / Nederlands
    • POL - Polish / Polski
    • POR - Portuguese / Português
    • RON - Romanian / Română
    • SLK - Slovak / Slovenčina
    • SLV - Slovenian / Slovenščina
    • FIN - Finnish / Suomi
    • SWE - Swedish / Svenska
  • Behavior: All multilingual fields are extracted in the specified language; PDF and HTML links are extracted for this language with fallback to ENG if unavailable
  • Example values:
    • "ITA" - Italian
    • "DEU" - German
    • "FRA" - French
    • "ENG" - English (default)

Optional Parameters

send-mail (boolean)

  • Description: Enable email notification of search results
  • Editor type: Checkbox
  • Type: Boolean
  • Default value: false
  • Behavior: When enabled, sends email with results table to the specified email address
  • Example values:
    • false - No email notification (default)
    • true - Send email notification with results

alert-mail (string)

  • Description: Email address to receive search results notification
  • Editor type: Text input
  • Type: String (email address)
  • Required: Only when send-mail is true
  • Validation: Must be a valid email address format
  • Email Details:
    • From: TED Scraper <noreply@ttalbuzzano.it>
    • Subject: [TED Scraper] Search Results: {query}
    • Body: HTML table containing all requested fields plus notice-title, pdf, and html
    • Columns: All fields from returned-fields + notice-title, pdf, html links
  • Example values:
    • "user@example.com" - Valid email
    • "alerts@company.com" - Company email list

Email Notification Feature

When send-mail is enabled and a valid alert-mail is provided:

  • Results are sent as an HTML-formatted email
  • Table includes all requested fields plus:
    • notice-title: Title of the procurement notice
    • pdf: Direct link to PDF document in specified language
    • html: Direct link to HTML portal view in specified language
  • Email includes:
    • Search query used
    • Number of results found
    • Professional HTML table with all data rows
  • API Requirement: Requires RESEND_API_KEY environment variable to be set with valid Resend API credentials

Input Example

Minimal input (English, default):

{
"query": "STATUS = \"ACTIVE\"",
"returned-fields": ["buyer-name", "publication-date"],
"limit": 10
}

Complete input with Italian language:

{
"query": "place-of-performance=ITC49 SORT BY publication-number DESC",
"returned-fields": ["publication-number", "buyer-name", "publication-date", "buyer-profile", "buyer-category"],
"lang": "ITA",
"limit": 50
}

Input with email notification:

{
"query": "buyer-category = \"PUBLIC\" AND place-of-performance=ITC49",
"returned-fields": ["publication-number", "buyer-name", "publication-date", "contract-value-amount"],
"lang": "ITA",
"limit": 25,
"send-mail": true,
"alert-mail": "procurement@company.com"
}

Complex query example with German language:

{
"query": "publication_date >= 2025-06-01 AND buyer-category = \"PUBLIC\" NOT sme-part = \"true\"",
"returned-fields": ["publication-number", "buyer-name", "buyer-country", "contract-value-amount"],
"lang": "DEU",
"limit": 100
}

Output

The Actor saves results to the Apify dataset as flattened key-value pairs with no nested structures.

Output format

Each notice is saved as a flat object with only simple string values:

Example:

{
"publication-number": "343654-2026",
"buyer-name": "Provincia di Monza e della Brianza",
"publication-date": "2026-05-20+02:00",
"buyer-profile": "https://www.monzabrianza.it/",
"sme-part": null,
"pdf": "https://ted.europa.eu/it/notice/343654-2026/pdf",
"html": "https://ted.europa.eu/it/notice/-/detail/343654-2026"
}

Output characteristics

  • Flat structure: All values are simple strings or null (no nested objects)
  • Language-filtered: All multilingual fields are extracted for the specified language only
  • Array handling: Arrays are reduced to their first element
  • Missing fields: Fields in returned-fields that are not present in the notice are included with null value
  • PDF & HTML links: Always included if available for the specified language
  • No summary: No metadata summary item is included in the output

Important notes

  • The Actor performs a single call to the TED Search API. Pagination is not implemented.
  • The returned-fields input field is mapped to the fields field in the TED API request payload.
  • No authentication is required: the search endpoint is public.
  • The TED response can contain up to limit notices (maximum 250).
  • The lang parameter filters all multilingual fields to the specified single language with automatic fallback to English (ENG) if a field is not available in the requested language.
  • notice-title is automatically added to returned-fields if not already present (required field in output).
  • Email notifications: When send-mail is enabled, results are sent to the specified email address in HTML table format with all requested fields plus notice details and direct links to PDF and HTML documents.
  • Email sender: Emails are sent from noreply@ttalbuzzano.it using the Resend service.

Input validation

The Actor validates the following constraints:

  • query: Non-empty string (required)
  • returned-fields: Non-empty array of valid TED field names (required); automatically adds notice-title if not present
  • lang: Valid ISO 639-2 single language code (required) - must be one of: BUL, CES, DAN, DEU, ELL, ENG, EST, FIN, FRA, GLE, HRV, HUN, ITA, LAV, LIT, MLT, NLD, POL, POR, RON, SLK, SLV, SPA, SWE
  • limit: Integer between 1 and 250 (required)
  • send-mail: Boolean value (optional, default: false)
  • alert-mail: Valid email address (required if send-mail is true); ignored if send-mail is false

If input is invalid, the Actor terminates with a clear error message.

Email Notification Setup

To use email notifications, ensure:

  1. send-mail is set to true
  2. alert-mail is set to a valid email address
  3. The RESEND_API_KEY environment variable is set with a valid Resend API key

Error handling

In case of errors during execution:

  • Input validation error: Clear error message
  • Timeout (30s): Request takes too long
  • HTTP error from TED API: API response details are logged
  • Invalid JSON response: Parsing error

All errors are logged in detail via Actor.log.

Usage example

  1. Create the Actor on Apify (optional)
  2. Prepare the input:
    {
    "query": "publication_date >= 2025-06-01",
    "returned-fields": ["publication-date", "buyer-name", "contract-value-amount"],
    "lang": "ITA",
    "limit": 100
    }
  3. Run the Actor (locally or on Apify Platform)
  4. Download the dataset with the results

References

Limitations

  • Single request only: This Actor does not implement pagination
  • 250 notices per request limit: TED API limitation
  • Specific search fields: Query fields must be valid according to TED documentation
  • Language availability: Not all fields are available in all languages; missing values return null