EU Tenders and Awards: TED Public Procurement, EU and EEA
Pricing
$4.00 / 1,000 tenders
EU Tenders and Awards: TED Public Procurement, EU and EEA
Returns EU public tenders and contract award notices from the official TED API for all EU and EEA countries: buyer, value, deadline, winning supplier and awarded value. Filter by country, date, CPV code, keyword and notice type. Supports onlyNew for daily tender and award alerts.
Pricing
$4.00 / 1,000 tenders
Rating
0.0
(0)
Developer
Viktor Wiberg
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Public tenders from all 27 EU member states plus Norway, Iceland and Liechtenstein, fetched from TED (Tenders Electronic Daily), the official EU journal for public procurement. You get one clean row per notice with title, buyer, country, CPV codes, estimated value and currency, publication date, tender deadline, notice type and a link to the full notice on TED. With noticeTypes: ["award"] you get contract award notices instead: who won, the awarded value and how many tenders the buyer received.
Use it to watch for new calls for tenders in your field, to build a lead list of public buyers in the countries you sell to, or to analyse who buys what across Europe. Schedule a daily run with dateFrom and dateTo left empty and filter on your countries and CPV codes to get a simple tender alert.
What is covered
TED publishes every procurement notice above the EU thresholds from the EU and the EEA. From 30 September to 2 October 2026, for example, TED published 5 470 open calls for tenders (the competition group) from these 30 countries, about 1 800 per weekday. Norway, Iceland and Liechtenstein publish through the EEA agreement. Smaller procurements below the thresholds are only published in national databases (for example Doffin in Norway, Hilma in Finland or the national portals in Germany and France) and are not included.
Notices from 2023 onwards use the eForms format that this actor reads, so dateFrom can be at earliest 2023-01-01.
Countries
Use the ISO 3166 alpha-2 code in countries. Leave the list empty to get all 30.
| Code | Country | Code | Country | Code | Country |
|---|---|---|---|---|---|
AT | Austria | FR | France | LV | Latvia |
BE | Belgium | GR | Greece | MT | Malta |
BG | Bulgaria | HR | Croatia | NL | Netherlands |
CY | Cyprus | HU | Hungary | NO | Norway |
CZ | Czechia | IE | Ireland | PL | Poland |
DE | Germany | IS | Iceland | PT | Portugal |
DK | Denmark | IT | Italy | RO | Romania |
EE | Estonia | LI | Liechtenstein | SE | Sweden |
ES | Spain | LT | Lithuania | SI | Slovenia |
FI | Finland | LU | Luxembourg | SK | Slovakia |
The filter is on the buyer's country. Notices from EU institutions or from countries outside the EU and EEA, which TED also publishes, are not included.
Example from a real run
This is the input and the first rows of a run on the Apify platform on 3 October 2026 (run pCVPwcPLo9a6Wwnft, 150 rows in total). Nothing is edited except that only the first rows are shown.
Input:
{"countries": ["DE","FR","SE"],"dateFrom": "2026-10-01","dateTo": "2026-10-03","noticeTypes": ["competition"],"maxResults": 150}
Output (excerpt):
[{"id": "681480-2026","title": "Catering Betrieb der Mensa und des Kiosks im Internat Schloss Hansenberg","titleLanguage": "deu","buyer": "Land Hessen, vertreten durch das Hessische Competence Center -Beschaffungen-","buyerCity": "Wiesbaden","country": "DE","countries": ["DE"],"cpvCodes": ["55524000"],"mainCpvCode": "55524000","estimatedValue": null,"currency": null,"publicationDate": "2026-10-02","deadline": "2026-10-12T12:00:00+02:00","deadlineDate": "2026-10-12","noticeType": "cn-standard","noticeTypeGroup": "competition","procedureType": "open","contractNature": "services","url": "https://ted.europa.eu/en/notice/-/detail/681480-2026","source": "TED (Tenders Electronic Daily), Publications Office of the European Union","license": "CC BY 4.0 / Commission Decision 2011/833/EU"},{"id": "681455-2026","title": "Bussresor med förare","titleLanguage": "swe","buyer": "Uppsala universitet; Nordiska Afrikainstitutet; Institutet för arbetsmarknads- och utbildningspolitisk utvärdering","buyerCity": "Uppsala","country": "SE","countries": ["SE"],"cpvCodes": ["60172000","34121000","63515000","60100000"],"mainCpvCode": "60172000","estimatedValue": 16000000,"currency": "SEK","publicationDate": "2026-10-02","deadline": "2026-10-27T00:00:00+01:00","deadlineDate": "2026-10-27","noticeType": "cn-standard","noticeTypeGroup": "competition","procedureType": "open","contractNature": "services","url": "https://ted.europa.eu/en/notice/-/detail/681455-2026","source": "TED (Tenders Electronic Daily), Publications Office of the European Union","license": "CC BY 4.0 / Commission Decision 2011/833/EU"}]
Contract awards: who won and for how much
Set noticeTypes to ["award"] to get contract award notices (eForms subtypes can-standard and can-social). Each row then also carries the winning suppliers, the total awarded value, the number of tenders received and the date of the award decision. The fields are filled from the award section of the notice and are null when the buyer did not publish them, for example when a procedure ended without a contract or the value is confidential.
This is the input and two of the rows from a run on the Apify platform on 7 October 2026 (run GsvEJIdYyIezH3jUA, 20 rows, 3.4 seconds). The rows are shown exactly as the actor returned them. 16 of the 20 rows had at least one winner and 13 had an awarded value; the others were procedures closed without a winner or awards where the buyer did not publish the value.
Input:
{"noticeTypes": ["award"],"countries": ["SE"],"maxResults": 20}
Output (two rows):
[{"id": "692753-2026","title": "Partneringledare i projekt om- utbyggnad av Norsa avloppsreningsverk, Köping","titleLanguage": "swe","buyer": "Västra Mälardalens Energi och Miljö AB","buyerCity": "KÖPING","country": "SE","countries": ["SE"],"cpvCodes": ["71310000"],"mainCpvCode": "71310000","estimatedValue": 5000000,"currency": "SEK","publicationDate": "2026-10-07","deadline": null,"deadlineDate": null,"noticeType": "can-standard","noticeTypeGroup": "award","procedureType": "restricted","contractNature": "services","awardedValue": 5000000,"awardedCurrency": "SEK","winnerNames": ["VBHR - vi bygger hållbara relationer AB"],"winnerCountries": ["SE"],"numberOfTenders": 2,"awardDate": "2026-09-04","url": "https://ted.europa.eu/en/notice/-/detail/692753-2026","source": "TED (Tenders Electronic Daily), Publications Office of the European Union","license": "CC BY 4.0 / Commission Decision 2011/833/EU"},{"id": "691976-2026","title": "Framtagande av vägplan samt förfrågningsunderlag för utförandeentreprenad avseende trafiksäkerhetshöjande åtgärder väg 63 Stjärnfors - Kopparberg inom Ljusnarsbergs kommun, Örebro län","titleLanguage": "swe","buyer": "Trafikverket Myndighet","buyerCity": "BORLÄNGE","country": "SE","countries": ["SE"],"cpvCodes": ["71311000","71310000"],"mainCpvCode": "71311000","estimatedValue": 4500000,"currency": "SEK","publicationDate": "2026-10-07","deadline": null,"deadlineDate": null,"noticeType": "can-standard","noticeTypeGroup": "award","procedureType": "open","contractNature": "services","awardedValue": 3496745,"awardedCurrency": "SEK","winnerNames": ["AFRY Infrastructure AB"],"winnerCountries": ["SE"],"numberOfTenders": 10,"awardDate": "2026-09-15","url": "https://ted.europa.eu/en/notice/-/detail/691976-2026","source": "TED (Tenders Electronic Daily), Publications Office of the European Union","license": "CC BY 4.0 / Commission Decision 2011/833/EU"}]
estimatedValue is what the buyer expected when the procedure started; awardedValue is what the award notice says the contracts are worth. For framework agreements the awarded value is usually the maximum value of the framework, not what has been bought. winnerNames lists every supplier that got a contract in the notice, so a framework agreement with several suppliers gives several names.
Only organisation names and countries are taken from the winners. Contact persons, e-mail addresses, phone numbers and registration numbers of the suppliers are not fetched.
Use the awards view in the dataset (or ?view=awards in the dataset API) for a table with buyer, title, winners, awarded value, currency and country.
Input
| Field | Type | Default | Description |
|---|---|---|---|
countries | array | all 30 | Buyer countries as ISO codes, for example DE, FR, SE. See the table above. |
dateFrom | string | six days before dateTo | First publication date, YYYY-MM-DD. |
dateTo | string | today | Last publication date (inclusive). At most 366 days per run. |
noticeTypes | array | ["competition"] | competition, planning, award and/or result. See below. |
cpvCodes | array | none | Only notices with at least one of these CPV codes. Trailing zeros match the whole category, so 72000000 (IT services) also matches 72221000. The check digit is optional. |
keywords | string | none | Full text search in the notice. Several words are searched as a phrase. |
maxResults | integer | 50 | Maximum number of notices, newest first. 1 to 10 000. |
onlyNew | boolean | false | Return only notices that earlier runs with the same input did not deliver. See "Monitoring and scheduling". |
A run with empty input returns the 50 newest open competitions from all 30 countries published in the last seven days.
Notice types
| Group | What it means | eForms subtypes |
|---|---|---|
competition | Open calls you can bid on now | cn-standard, cn-social, cn-desg, qu-sy, subco, pin-cfc-standard, pin-cfc-social |
planning | Planned procurements and market consultations | pin-only, pin-buyer, pin-rtl, pin-tran, pmc |
award | Contract award notices: who won and for how much | can-standard, can-social |
result | All result notices: contract awards plus design contest results, transport awards, contract modifications and voluntary transparency notices | can-standard, can-social, can-desg, can-tran, can-modif, veat |
award is the one to use when you want winners and values. result is wider; the award fields are filled for those notices too when TED has them. noticeTypeGroup in the output shows the group you asked for, so a can-standard notice is award in an award run and result in a result run.
Example input: IT and software tenders in the five Nordic countries published in September 2026.
{"countries": ["SE", "NO", "DK", "FI", "IS"],"dateFrom": "2026-09-01","dateTo": "2026-09-30","noticeTypes": ["competition"],"cpvCodes": ["72000000", "48000000"],"maxResults": 500}
Example input: construction work tendered in Germany and France in the last seven days.
{"countries": ["DE", "FR"],"noticeTypes": ["competition"],"cpvCodes": ["45000000"],"maxResults": 1000}
Keywords work best in the buyer's own language, since most notices are written in the language of the country: Reinigung finds more German cleaning contracts than cleaning, and nettoyage more French ones. Many notices from smaller countries also have an English title.
Output
| Field | Description |
|---|---|
id | TED publication number, for example 681455-2026 |
title | Title of the procurement as published by the buyer |
titleLanguage | Language of the title (ISO 639-2, for example swe, eng) |
buyer | Name of the contracting authority. Joint procurements list all buyers separated by ; |
buyerCity | City of the (first) buyer |
country | Country of the (first) buyer, ISO 3166 alpha-2 |
countries | All buyer countries |
cpvCodes | All CPV codes in the notice |
mainCpvCode | Main CPV code of the procedure |
estimatedValue | Estimated value excluding VAT, or the sum of the lots when the total is missing and all lots use the same currency. null if the buyer did not publish a value |
currency | Currency of estimatedValue, for example EUR, SEK, PLN, CZK, NOK |
publicationDate | Publication date in TED, YYYY-MM-DD |
deadline | Earliest deadline for tenders across the lots, ISO 8601 with time zone. null for notices without a deadline (awards, most prior information notices) |
deadlineDate | Date part of deadline |
noticeType | eForms notice subtype, for example cn-standard |
noticeTypeGroup | competition, planning, award or result |
procedureType | For example open, restricted, neg-w-call, comp-dial |
contractNature | services, supplies or works |
awardedValue | Award notices: total value of the awarded contracts excluding VAT (the notice total, or the sum of the lot results when the total is missing). null when not published and for other notice types |
awardedCurrency | Currency of awardedValue |
winnerNames | Award notices: names of the winning organisations. null when no contract was awarded |
winnerCountries | Countries of the winners, ISO 3166 alpha-2 |
numberOfTenders | Number of tenders received (the highest number for a single lot when the notice has several lots) |
awardDate | Date of the award decision, or the date the contract was concluded when no decision date is given. Earliest date across the lots |
url | Link to the full notice on ted.europa.eu |
source, license | Attribution for the data |
{"id": "692799-2026","title": "Vernieuwen van de trambaan in eigen bedding tussen de Kolegemstraat en de eindhalte Wondelgem, t.h.v. de R4","titleLanguage": "nld","buyer": "Vlaamse Vervoermaatschappij De Lijn","buyerCity": "Mechelen","country": "BE","countries": ["BE"],"cpvCodes": ["45234120"],"mainCpvCode": "45234120","estimatedValue": null,"currency": null,"publicationDate": "2026-10-07","deadline": "2026-11-09T11:00:00+01:00","deadlineDate": "2026-11-09","noticeType": "cn-standard","noticeTypeGroup": "competition","procedureType": "open","contractNature": "works","awardedValue": null,"awardedCurrency": null,"winnerNames": null,"winnerCountries": null,"numberOfTenders": null,"awardDate": null,"url": "https://ted.europa.eu/en/notice/-/detail/692799-2026","source": "TED (Tenders Electronic Daily), Publications Office of the European Union","license": "CC BY 4.0 / Commission Decision 2011/833/EU"}
This row is the first one from a run with empty input on 7 October 2026 (run jEtQg3u4gEuNWRp2O, 50 rows). The award fields are null for open competitions and planning notices.
Monitoring and scheduling
Set onlyNew to true to use the actor for recurring monitoring. The actor then remembers which notices it has delivered for the same input, in a named key-value store in your Apify account (nightwave-state-eu-public-procurement, one record per input). Each run returns and charges only notices that earlier runs did not deliver. The first run returns everything in the selection. A run without news finishes successfully with 0 rows.
A notice is identified by its TED publication number. The default date range is the last seven days, so a daily run looks at a week of notices and returns the ones it has not delivered before. Set maxResults above the number of notices your search normally gets in a week, otherwise only the newest notices are checked.
onlyNew and maxResults are not part of the remembered input, so you can change them without starting over. Changing any other field starts a fresh state. To start over with the same input, delete the record in the key-value store.
Example: a daily run at 07:00 that returns new IT tenders (CPV 72000000) from the Nordic countries. In Apify Console, open Schedules, create a schedule with the cron expression 0 7 * * * and add this actor with the input below.
{"countries": ["SE", "NO", "DK", "FI"],"cpvCodes": ["72000000"],"noticeTypes": ["competition"],"onlyNew": true,"maxResults": 200}
The same schedule through the Apify API:
curl -X POST "https://api.apify.com/v2/schedules?token=<YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"name": "daily-eu-public-procurement", "cronExpression": "0 7 * * *", "timezone": "Europe/Stockholm", "isEnabled": true, "isExclusive": true,"actions": [{"type": "RUN_ACTOR", "actorId": "nightwave-owner~eu-public-procurement","runInput": {"contentType": "application/json; charset=utf-8", "body": "<the input above as a JSON string>"}}]}'
Example: a weekly overview of who wins IT contracts (CPV 72000000) in Sweden, Norway and Denmark. Schedule it with the cron expression 0 8 * * 1 (Mondays at 08:00) and this input. onlyNew works the same way for award notices: each run returns the awards that earlier runs did not deliver.
{"countries": ["SE", "NO", "DK"],"cpvCodes": ["72000000"],"noticeTypes": ["award"],"onlyNew": true,"maxResults": 200}
Connect a webhook or an integration (Slack, e-mail, Google Sheets) to the actor in Apify Console if you want the new rows sent somewhere when the run finishes.
Good to know
- Personal data is left out. The actor does not fetch the contact person, e-mail or phone fields that some notices contain. E-mail addresses and phone numbers that a buyer has written into a title are replaced with
[removed]. Open the TED link for the buyer's official contact details. estimatedValueis what the buyer estimated when the notice was published. The value of the signed contracts is inawardedValue, which only award notices have.- TED publishes new notices on weekdays, so a run for a Saturday or Sunday returns no rows.
- Requests are retried three times on network errors, rate limits and server errors. A rejected search or a response in an unexpected format stops the run with a clear message instead of storing broken rows.
- The run log shows the exact TED expert query, which you can paste into the search on ted.europa.eu to compare.
Use cases
- A daily tender alert: filter on your countries and CPV codes, run every morning with
onlyNew: trueand send new notices to Slack or e-mail with an Apify integration. - Build a list of public buyers that procure what you sell, with
buyer,buyerCityandcountry, for account planning. - Track deadlines: sort the open calls for tenders in your field by
deadlineDatein a spreadsheet. - Competitor tracking: run with
noticeTypes: ["award"]and your CPV codes to see which suppliers win in your field, at what value and against how many tenders. - Market analysis: count notices and estimated values per CPV code and country over a period with
dateFromanddateTo. - Feed a bid management tool or CRM with the TED link and the structured fields instead of copying notices by hand.
FAQ
How often is the data updated? Every run reads the TED API live. New notices appear in TED when the Publications Office of the EU publishes them, normally in a batch every working day.
What does 1 000 rows cost?
4 USD (0.004 USD per notice, event tender, the same for award notices), plus Apify platform usage, which is a fraction of a cent per run. maxResults caps how many notices a run returns.
Can I schedule it?
Yes. Leave dateFrom and dateTo empty, set onlyNew: true and add the actor to an Apify schedule. See "Monitoring and scheduling" above.
Can I use the data commercially? Yes. TED data is reusable under the Commission's reuse policy (Decision 2011/833/EU) and CC BY 4.0, with attribution to the Publications Office of the European Union.
Data source and license
The data comes from the public TED Search API (POST https://api.ted.europa.eu/v3/notices/search), which needs no API key. TED is run by the Publications Office of the European Union. Reuse of TED data is allowed under Commission Decision 2011/833/EU on the reuse of Commission documents, and the TED datasets on data.europa.eu are published under CC BY 4.0. Credit the source as "TED, Publications Office of the European Union" when you publish the data. Every row carries source and license for that purpose. The actor reshapes the notices (selected fields, deduplicated codes, summed lot values) but does not change their content.
This actor is not affiliated with the European Union or the Publications Office.
Pricing
Pay per result: 0.004 USD per row returned (event tender, also for award notices), which is 4 USD per 1 000 notices. Apify bills platform usage on top as usual. It is small: the example run above returned 150 rows and used 0.0011 USD of platform usage, and the award run on 7 October 2026 returned 20 rows for 0.00035 USD. maxResults caps how many rows a run returns, so you always know the highest possible cost.
Contact
Built and maintained by Nightwave AB. Questions, bugs and feature requests: kontakt@nightwave.se
På svenska
Actorn hämtar offentliga upphandlingar från alla 27 EU-länder samt Norge, Island och Liechtenstein ur TED, EU:s officiella databas för upphandlingar över EU:s tröskelvärden. Varje upphandling blir en rad med titel, köpare, land, CPV-koder, uppskattat värde och valuta, publiceringsdatum, sista anbudsdag, notistyp och länk till TED.
- Filtrera på land (landskod, till exempel SE, DE eller FR; tom lista betyder alla 30), publiceringsdatum, CPV-koder (72000000 träffar hela IT-kategorin), sökord och notistyp (pågående upphandlingar, förhandsannonser, tilldelningsbeslut eller alla resultat).
- Med
noticeTypes: ["award"]får du tilldelningsbeslut: vilka leverantörer som vann (winnerNames,winnerCountries), kontraktens värde (awardedValue,awardedCurrency), antal anbud (numberOfTenders) och datum för beslutet (awardDate). Fälten är tomma (null) när köparen inte har publicerat uppgiften. - Upphandlingar under tröskelvärdena finns bara i nationella databaser och ingår inte.
- Kontaktpersoners namn, e-post och telefonnummer tas inte med.
- Källa: TED, Europeiska unionens publikationsbyrå. Fri återanvändning enligt kommissionens beslut 2011/833/EU och CC BY 4.0, med källhänvisning.
- Med
onlyNew: truelevereras bara upphandlingar som tidigare körningar med samma input inte har levererat, vilket passar för daglig bevakning (se "Monitoring and scheduling"). - Pris: 0,004 USD per upphandling (4 USD per 1 000) plus Apifys plattformsanvändning.
- Kontakt: kontakt@nightwave.se