TED Tender Monitor - EU & Nordic Public Procurement avatar

TED Tender Monitor - EU & Nordic Public Procurement

Pricing

$3.90 / 1,000 tender notices

Go to Apify Store
TED Tender Monitor - EU & Nordic Public Procurement

TED Tender Monitor - EU & Nordic Public Procurement

Monitor EU & Nordic public tenders from the official TED API. Filter by country, CPV, keywords and notice type; get clean records with buyer, value, deadline, lots and links. Only-new mode for alerts.

Pricing

$3.90 / 1,000 tender notices

Rating

0.0

(0)

Developer

Niklas Bergström

Niklas Bergström

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Track public tenders from all EU/EEA countries on TED (Tenders Electronic Daily, the EU's official procurement journal) - with a focus on the Nordics (Sweden, Norway, Finland, Denmark, Iceland). Filter by country, CPV code, keywords and notice type, and get one clean, normalized record per notice: title, buyer and contact, CPV codes, estimated value and currency, tender deadline, procedure type, lots and direct links to the notice, tender documents and submission portal.

Switch on Only new since last run and schedule it daily: you get (and pay for) only notices you have not seen before - a ready-made tender alert feed for your CRM, Slack, Google Sheets or bid team.

Data comes from the official TED API v3 of the Publications Office of the EU. No API key, no login, no scraping of web pages.

What can it do?

  • Tender alerts / bid monitoring - daily feed of new calls for tender in your sector (e.g. CPV 72000000 IT services in SE+NO+FI).
  • Sales prospecting - find public buyers that procure what you sell, with buyer email and website.
  • Market intelligence - contract award notices with winners and awarded values (who wins what, at what price).
  • Pipeline planning - prior information notices (planned procurements) months ahead.

Input

FieldWhat it doesExample
countriesBuyer countries, ISO alpha-2. Default: SE, NO, FI, DK, IS. Empty or ALL = all countries["SE","NO","DE"]
cpvCodesCPV codes, hierarchical (72000000 or 72 = all IT services)["72000000","48"]
keywordsFull-text, any keyword matches; phrases allowed; * prefix["cloud","städ*"]
noticeTypescompetition (calls for tender, default), planning, award, modification; empty = all["competition"]
publishedSince / publishedUntilAbsolute or relative dates"7 days", "2026-10-01"
onlyNewMonitoring mode: return only notices not delivered in earlier runstrue
monitorIdName of the watchlist state (one per saved search)"it-nordics"
activeOnlySkip notices whose deadline has passedfalse
maxResultsMax notices per run (0 = 10,000)100
preferredLanguageLanguage for multilingual texts (falls back to English, then original)"ENG"
includeDescriptionInclude the full procedure descriptiontrue

Example - new Nordic IT tenders every morning:

{
"countries": ["SE", "NO", "FI", "DK", "IS"],
"cpvCodes": ["72000000", "48000000"],
"noticeTypes": ["competition"],
"onlyNew": true,
"monitorId": "nordic-it",
"maxResults": 500
}

Output

One item per notice in the default dataset (views: Overview, Buyers & contacts, Awards, Errors). Example (shortened):

{
"noticeId": "747805-2026",
"title": "Konsulttjänst för behovsanalys och kravställning inom kontinuerligt lärande",
"headline": "Sweden – Systems consultancy services – Konsulttjänst för behovsanalys ...",
"noticeType": "cn-standard",
"noticeCategory": "competition",
"procedureType": "open",
"contractNature": "services",
"buyer": {"name": "Skatteverket", "city": "MALMÖ", "country": "SE", "email": "...@skatteverket.se", "website": "http://www.skatteverket.se"},
"country": "SE",
"mainCpv": "72246000",
"cpvCodes": ["72246000", "72200000", "72220000", "79410000"],
"estimatedValue": 5000000,
"currency": "SEK",
"valueType": "estimated",
"tenderDeadline": "2026-11-11T22:59:59Z",
"publicationDate": "2026-10-28",
"isFrameworkAgreement": true,
"lotCount": 2,
"lots": [{"lotId": "LOT-0001", "title": "Obligatoriska krav", "estimatedValue": 5000000, "currency": "SEK", "tenderDeadline": "2026-11-11T22:59:59Z"}],
"winners": null,
"links": {
"notice": "https://ted.europa.eu/en/notice/-/detail/747805-2026",
"pdf": "https://ted.europa.eu/en/notice/747805-2026/pdf",
"xml": "https://ted.europa.eu/en/notice/747805-2026/xml",
"documents": "https://tendsign.com/doc.aspx?MeFormsNoticeId=101072",
"submission": "https://tendsign.com/doc.aspx?MeFormsNoticeId=101072&GoTo=Tender"
},
"source": "TED - Tenders Electronic Daily (Publications Office of the European Union)"
}

Other fields: titleLanguage, placeOfPerformanceNuts, requestToParticipateDeadline (restricted/negotiated procedures), dispatchDate, description, officialLanguages, procedureId, noticeVersion, fetchedAt. Award notices fill winners and valueType: "awarded". Fields TED does not publish for a notice are null.

Run statistics (TED query used, matching total, notices returned, already-seen skips, charged events) are saved as RUN_STATS in the run's key-value store.

How "Only new since last run" works

The Actor keeps a small state record per monitorId in the named key-value store ted-tender-monitor-state on your Apify account: the latest publication date delivered and the notice IDs of that day. The next run continues from there, oldest first, so a run capped by maxResults or by your spending limit simply continues next time - nothing is skipped and nothing is delivered twice. Use a different monitorId per saved search; delete the record in the store to start over. The first run starts from publishedSince (default: last 7 days).

Pricing

Pay per event - you pay only for notices delivered to your dataset:

EventPrice
Tender noticesee the Pricing tab

Free: already-seen notices in monitoring mode, notices skipped by activeOnly, invalid-input and API error items. Platform usage is minimal (a run of 100 notices typically takes a few seconds at 256 MB).

Spending limit: set Maximum cost per run - the Actor checks the remaining budget before every notice and stops cleanly when the next one would exceed it. In monitoring mode the rest is picked up by the next run.

Tips

  • Use CPV codes for precision and keywords for recall; keywords match the notice text as written (often the local language), e.g. ["städ*", "siivous*", "rengøring"] for cleaning.
  • A daily schedule with onlyNew: true is the cheapest way to monitor: you only pay for each notice once.
  • TED publishes on working days; an empty run on weekends is normal.
  • Integrate with Slack, email, Google Sheets, Make, Zapier or webhooks from the Actor's Integrations tab.

Notices come from the TED API v3 (api.ted.europa.eu), the official, free and open API of the Publications Office of the European Union. TED data is (c) European Union and may be reused, including commercially, under Commission Decision 2011/833/EU, with attribution. The Actor sends polite, rate-limited requests (max ~1.5 req/s) with retries and backoff. It covers notices above the EU thresholds published on TED; purely national below-threshold tenders (e.g. only on national portals) are not included.

FAQ

Which countries are supported? All countries publishing on TED: EU27, Norway, Iceland, Liechtenstein, Switzerland and others. Nordic defaults are just a preset.

Why is estimatedValue empty? Many buyers don't disclose it. TED's "-1" (undisclosed) is returned as null.

Can I get the full tender documents? The links.documents URL points to the buyer's procurement portal (e.g. Mercell, TendSign, Kommers, Doffin, Hilma). Downloading documents there may require registration and is not done by this Actor.

Feedback / feature requests? Open an issue on the Issues tab.