EU & UK Tender Monitor avatar

EU & UK Tender Monitor

Pricing

$3.00 / 1,000 tender notices

Go to Apify Store
EU & UK Tender Monitor

EU & UK Tender Monitor

New public tenders from TED (EU), TenderNed (NL), BOAMP (FR) and Doffin (NO) in one English feed. One keyword, 5 languages, no duplicates.

Pricing

$3.00 / 1,000 tender notices

Rating

0.0

(0)

Developer

Mike Berckmoes

Mike Berckmoes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

EU Tender Monitor: TED, TenderNed, BOAMP and Doffin in one English feed

Get new public tenders from the EU (TED), the Netherlands (TenderNed), France (BOAMP) and Norway (Doffin) in one clean table, with only the notices you haven't seen yet. Type a keyword in English, for example software. The Actor searches each portal in its own language and adds an English title to every notice. It can also send a digest to your inbox or Slack after each scheduled run.

What does EU Tender Monitor do?

SourceCoverageAccess
TEDEU-wide tenders above EU thresholds (all EU/EEA countries)Official TED API v3, no key
TenderNedDutch tenders incl. national (below-threshold) onesOfficial TenderNed open-data service, no key
BOAMPFrench tenders incl. small MAPA contracts (<90 k€)DILA open-data API (Opendatasoft), no key
Doffin (beta, optional)Norwegian tendersOfficial Doffin Public API v2, works without a key (shared Actor key, limited searches per run); for more, add your own free key (self-service at dof-notices-prod-api.developer.azure-api.net)
SAM.gov (beta, optional, not selected by default)US federal contract opportunitiesOfficial SAM.gov Get Opportunities API v2, your own free key required
Find a Tender (UK) (beta, optional, not selected by default)All UK public procurements published since 24 Feb 2025, above and below threshold (Scottish below-threshold notices excepted)Official Find a Tender OCDS API, no key
Contracts Finder (UK) (optional, not selected by default)UK below-threshold noticesOfficial Contracts Finder OCDS search, no key, Open Government Licence v3.0. Folded into the Find a Tender row when both publish the same procedure
e-Zamówienia BZP (Poland) (optional, not selected by default)Polish below-threshold noticesFree public BZP WebService, no key. Above-threshold Polish notices are left to TED
simap.ch (Switzerland) (optional, not selected by default)Swiss public procurement noticesOfficial simap publications API, no key. Notice text is kept as published, with simap's disclaimer in its own field

Why use it?

  • One English keyword covers the portal languages. software becomes software, programmatuur, applicatie (NL), logiciel, progiciel (FR), programvare, fagsystem (NO) and Anwendungssoftware (DE). Polish BZP also searches oprogramowanie, and simap also searches German, French and Italian. It also matches the right CPV codes from the official EU CPV list (48*, 722*, …). About 30 sectors are built in, from IT and cloud to cleaning, construction, catering, security, energy, medical, legal, training and translation.
  • English titles. Where a notice has an English title, that is used. Dutch, French and Norwegian titles are translated by an offline model that runs inside the Actor, so no text leaves the run. Polish, German, Italian and any other title gets an English CPV label. Every row also includes the original title. simap titles are the text simap published (English when simap provides it), never rewritten.
  • One row per tender, even when it's on two portals. Big French and Dutch tenders appear on TED and on BOAMP or TenderNed. The Actor merges them into one row: sources lists both portals, and alsoPublishedOn gives the national ID, URL and how they were matched. When matching IDs are published, the match is exact (BOAMP shares eForms IDs with TED); otherwise it compares buyer + title, backed by the deadline or CPV code. It also remembers a tender that showed up on BOAMP or TenderNed yesterday and arrives on TED today, so you are not alerted twice.
  • Relevant results only. Strict keyword match (on by default) keeps notices whose title, short description or CPV code matches. Every row gets a relevance score (0–100) and a matchType.
  • Only new notices. The monitor remembers what it has already shown you, so a daily schedule gives you a clean daily list.
  • Alert-ready. A run writes a DIGEST record when it found new notices (or when you ask to be notified even if nothing is new), with counts per source, the list of new notices, and a ready-made e-mail subject, text and HTML. It can also POST the digest to any webhook.
  • Fast and cheap. Plain HTTP against official APIs, with no browser and no proxies.

How to use it

  1. Pick sources and type keywords in English (or in any language).
  2. Optionally add CPV prefixes (e.g. 72) and buyer countries (ISO-3 such as NLD, or ISO-2 such as NL). Leave Published on or after empty: the monitor is incremental. Each run starts where the previous successful run stopped, and the very first run looks back 3 days.
  3. Keep Only new notices on and give each saved search its own Monitor ID.
  4. Optional alerts: set Webhook URL and Digest e-mail recipient.

The monitor is incremental by default. Each Monitor ID remembers its last successful run and every notice it has already shown you, so each run returns only notices that are new since the previous run. If a portal is down during a run, that portal catches up from its own last successful day on the next run, so nothing is lost.

1. Create one saved Task per search

  1. Open the Actor and fill in the input: sources, keywords (e.g. software), CPV prefixes and countries. Leave Published on or after empty.
  2. Give the search a unique Monitor ID, e.g. it-software-nl-fr. Each Task needs its own Monitor ID so the searches don't share memory.
  3. Click Save as a new task and name it after the search.

2. Add the schedule (Apify Console → Schedules → Create new)

RunCron expressionTimezone
Morning run, weekdays at 07:00 (recommended)0 7 * * 1-5Europe/Amsterdam
Optional afternoon run, weekdays at 13:00 (picks up notices national portals post during the morning)0 13 * * 1-5Europe/Amsterdam

Add your Task(s) to the schedule as Actions. You can use one schedule for several Tasks. The 13:00 run costs nothing extra unless it finds new notices, because you only pay per notice returned.

The Actor default stays 1024 MB because translating titles needs that much memory. A Task with Translate titles turned off fits in 512 MB: set that Task's schedule action to 512 MB. Leave a Task that still translates titles at 1024 MB.

3. Get the digest by e-mail, Slack or Teams A run writes a DIGEST record when it found new notices, or when Notify even when nothing new is on. The record has counts per source, the list of new notices with English titles, and a ready-made email.subject, email.text and email.html.

  • Webhook (simplest): put a Make, Zapier, n8n or Slack Workflow webhook URL into Webhook URL. The Actor POSTs the digest JSON after each run that found new notices; turn on Notify even when nothing new if you want a daily "nothing new" message too. In your automation, send email.html with subject email.subject to email.to (filled from Digest e-mail recipient), or post email.text to Slack or Teams.
  • Apify integrations: in the Task's Integrations tab, add Slack or e-mail on Run succeeded. You can also add an Apify webhook on ACTOR.RUN.SUCCEEDED and let your automation read …/key-value-stores/{defaultKeyValueStoreId}/records/DIGEST.
  • Pull: the dataset of each run contains only the new notices. Connect Google Sheets or read it via the Apify API.

Set Max notices per source above your busiest day (default 50). If a run hits the cap, RUN_SUMMARY shows capReached: true for that source. Its start date is then not moved forward, so the next run picks up the remaining older notices (already delivered notices are skipped before they count towards the cap).

To start a search over, run it once with Reset monitor memory on. For a one-off backfill, use a separate Monitor ID and set Published on or after.

Input example

{
"sources": ["TED", "TENDERNED", "BOAMP"],
"keywords": ["software"],
"expandKeywords": true,
"strictMatch": true,
"mergeDuplicates": true,
"maxItemsPerSource": 50,
"onlyNew": true,
"monitorId": "it-software-nl-fr",
"webhookUrl": "https://hook.eu1.make.com/your-hook-id",
"digestEmailTo": "you@example.com"
}

Output example (one row)

{
"source": "TED",
"noticeId": "123456-2026",
"title": "Levering en onderhoud van een zaaksysteem",
"titleEn": "Supply and maintenance of a case management system",
"titleEnMethod": "machine-translation-opus-mt-nl",
"originalLanguage": "nl",
"buyerName": "Gemeente Voorbeeld",
"buyerCountry": "NLD",
"publicationDate": "2026-10-02",
"deadline": "2026-11-12T12:00:00",
"noticeType": "Aankondiging van een opdracht",
"cpvCodes": ["72260000-5"],
"cpvLabelsEn": ["Software-related services"],
"matchedTerms": ["software"],
"matchType": "title-or-description",
"relevance": 95,
"sources": ["TED", "TENDERNED"],
"alsoPublishedOn": [{"source": "TENDERNED", "noticeId": "123456", "url": "https://www.tenderned.nl/aankondigingen/overzicht/123456", "mergeMethod": "fuzzy:title+buyer+deadline+cpv", "mergeScore": 100}],
"mergeCount": 1,
"url": "https://www.tenderned.nl/aankondigingen/overzicht/123456",
"isNew": true
}

titleEnMethod tells you how much to trust titleEn:

  • original-en: the publisher's own English.
  • machine-translation-opus-mt-xx: offline machine translation, good for gist.
  • cpv-label-fallback: only the English CPV category, e.g. [Software package and information systems] (title not translated).

How much does it cost?

Pay per result: $3 per 1,000 notices ($0.003 per notice), with no start fee and no monthly rent. You only pay for notices returned, so a run that finds nothing new costs nothing. A daily monitor with ~20 new notices per weekday costs about $1.30 per month. maxItemsPerSource caps the cost of each run, and normal Apify platform usage applies.

Real example: a first "software" run across TED, TenderNed and BOAMP returned 87 notices in one table (TED 46, TenderNed 23, BOAMP 18).

Good to know / limitations

  • Machine translation covers Dutch, French and Norwegian. It is good for gist, but compound words, abbreviations and proper nouns can come out wrong (e.g. "Plotters" → "Platters"). TED titles in other languages, and Polish, German and Italian titles from BZP and simap, get the English CPV label instead. The original title is always kept.
  • The synonym map covers about 30 sectors. Keywords outside it are searched literally on every portal; on TED they also match CPV codes whose English label contains the word.
  • Full-text matches. BOAMP and TED full-text search can match a term anywhere in the notice. matchType = full-text-only flags these, and Strict keyword match removes them.
  • Duplicate merging. BOAMP is matched to TED by exact eForms IDs. TenderNed's public data has no TED reference, so Dutch duplicates are matched by buyer + title (+ deadline/CPV); a re-titled or re-worded notice can slip through. Two different tenders from the same buyer with an identical title could be merged (we haven't seen this so far). Doffin, Polish BZP and simap use the same buyer + title rules; simap and BZP also match TED when the notice carries the TED procedure id. Contracts Finder is matched to Find a Tender by OCDS ocid. Across runs, only exact ID or identical buyer + title matches are remembered.
  • Strict mode fetches up to 3× maxItemsPerSource per portal, so the cap still fills after filtering. If award notices, strict matching or already-seen notices still leave fewer rows than maxItemsPerSource, TED, TenderNed, BOAMP and Doffin fetch more (3× per step, at most 100 notices per portal per run, within the run's time budget).
  • Sorting and caps. TED results are sorted by publication date. With a low maxItemsPerSource, some notices from a busy day only arrive in a later run, so set the cap above your daily volume.
  • Spending limit. If your maximum charge per run is reached, the notices that could not be delivered are not marked as seen, and the next run delivers them.
  • Reliability. Rate limits and server errors are retried (honouring Retry-After). If a portal fails after its first page, or a run gets close to its timeout, the notices fetched so far are kept, the source is marked partial in RUN_SUMMARY, and its start date is not moved forward.
  • Other fields. Estimated value is often empty. BOAMP CPV codes exist only for eForms notices. Doffin field mapping was tested live on 4 October 2026.
  • Doffin (Norway). Add DOFFIN to Sources. No key is needed: the Actor brings a shared key, limited to 10 Doffin searches per run because all users share it. If Doffin is busy (HTTP 429 twice in a row), Doffin is skipped for that run and the other portals still deliver. For higher limits (30 searches per run, a quota of your own), enter your own free key in Doffin API key (doffinApiKey): sign up at dof-notices-prod-api.developer.azure-api.net, subscribe to the product Public Api, and copy the primary key from your profile. Doffin allows 30 searches per minute per key; the Actor spaces its calls 2.1 s apart and waits on Retry-After. Rows have the Norwegian title (English via translation), buyer, deadline, CPV codes and a link to doffin.no. Contact persons are not collected. Each row carries the CC BY 4.0 attribution.
  • Incremental window. With Only new notices on, every run looks back at least 3 days (or First-run lookback days, if lower), even when the last run was earlier today. Notices you already received are skipped by ID, so a weekend or holiday run still finds notices you have not seen. SAM.gov, Find a Tender and Contracts Finder keep the strict since-last-run window. Polish BZP and simap use the 3-day floor.
  • SAM.gov (US federal). Add SAM_GOV to Sources and paste your free public API key (SAM.gov account > Account Details) into SAM.gov API key. A basic key allows about 10 requests per day. The Actor uses at most SAM.gov requests per run calls (default 3), 1,000 notices per call: one call per keyword (title search, English, no translation) or one per NAICS code, with keywords then matched on the title. That is plenty for a daily monitor. SAM rows have buyerCountry USA, the department / agency as buyer, the NAICS code and the set-aside type; CPV codes are empty, and they are never merged with EU notices. If the quota is used up (HTTP 429), the run keeps what it has and the next run continues from the same date. Points of contact (names, e-mails) and awardee/entity data are not collected.
  • SAM.gov key renewal. SAM.gov public API keys must be renewed every 90 days (SAM.gov terms). When your key expires, SAM.gov is skipped with a clear message in RUN_SUMMARY; generate a new key in your SAM.gov Account Details and update SAM.gov API key in your input or saved task.
  • SAM.gov data used. Only the public Contract Opportunities API (Get Opportunities v2) is used. No Dun & Bradstreet (D&B) or entity data is output.
  • Find a Tender (UK). Add UK_FTS to Sources; no key is needed. The UK service has no keyword search, so the Actor reads every notice updated since the last run (several hundred per weekday; 955 in our 3-day test) and matches your English keywords on the title and description, plus the CPV codes linked to your keywords. Only open opportunities are returned: tender notices (UK4, and contract notices under the older rules) and their updates. Planning, award, contract and cancelled notices, and notices whose deadline has passed, are skipped. UK rows have buyerCountry GBR, the original English title, GBP values (as published), CPV codes and a link to the notice on find-tender.service.gov.uk. They are never merged with EU notices: the UK has not published on TED since 2021. With Merge cross-portal duplicates on (the default), an update to a tender you have already received is not sent again. Contact persons (names, e-mails, phones) are not collected. Every UK row carries the attribution and licenceUrl fields required by the Open Government Licence, and the digest repeats them.
  • Contracts Finder (UK). Add UK_CF to Sources; no key is needed. This is the below-threshold UK feed. The Actor asks for open tender stages only, matches your English keywords locally, and skips planning, award and cancelled notices and notices whose deadline has passed. When the same procedure is also on Find a Tender (same OCDS ocid), the Contracts Finder notice is attached to that Find a Tender row and is not pushed again. A Contracts Finder notice TED also publishes can still merge into the TED row. The same Open Government Licence v3.0 attribution is stored on every row. Contact persons are not collected. If Contracts Finder is down, that source is marked failed and the other sources are still delivered.
  • e-Zamówienia / BZP (Poland). Add PL_BZP to Sources; no key is needed. The public BZP WebService (platform terms, §11) is free to read and does not forbid reuse of published notices. Only notices flagged below the EU threshold are kept; above-threshold Polish notices stay on TED. The notice HTML is not stored, because it can contain contact persons. Polish titles stay as published. With translation on, the English title is the CPV label (there is no Polish translation model). A BZP notice that is also on TED is merged into the TED row. Search windows longer than 31 days are split. If BZP is down, that source is marked failed and the other sources are still delivered.
  • simap.ch (Switzerland). Add SIMAP to Sources; no key is needed. Commercial reuse is allowed only if the notice text is not altered, stays visually separate from any commentary, and the following disclaimer is shown word for word: Dies ist keine amtliche Veröffentlichung. Massgebend sind die auf der Plattform www.simap.ch veröffentlichten Daten. The Actor stores that sentence in disclaimer and attribution, never inside title or description. The title is one language as simap published it (English when simap provides an English title, otherwise German, French or Italian). Only tender publications are kept. If the detail call fails, the search row is still kept and further detail calls stop after two failures. If simap is down, that source is marked failed and the other sources are still delivered.

Data sources and licences

  • TED: © European Union. Notices may be reused, including commercially (Decision 2011/833/EU). This Actor is not affiliated with the Publications Office.
  • TenderNed: open data (CC0) via data.overheid.nl.
  • BOAMP: DILA open data, Licence Ouverte / Open Licence (Etalab).
  • Doffin: Source: Doffin (DFØ), CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Norwegian public procurement database run by DFØ, read through the official Public API v2. Every Doffin row carries this in attribution and licenceUrl, and the digest repeats it. This Actor is not affiliated with or endorsed by DFØ.
  • SAM.gov: Get Opportunities Public API v2 (U.S. General Services Administration), used with your own key under the SAM.gov terms of use. Only public opportunity fields are collected (no entity / Dun & Bradstreet data, no contact persons). Notices created by the U.S. federal government are generally not subject to copyright, but SAM.gov notes that some content may carry third-party restrictions. This Actor is not affiliated with GSA or SAM.gov.
  • Find a Tender and Contracts Finder (UK): Contains public sector information licensed under the Open Government Licence v3.0 (https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). Sources: Find a Tender service and Contracts Finder, Cabinet Office. This Actor is not affiliated with or endorsed by the Cabinet Office, Crown Commercial Service, Find a Tender or Contracts Finder.
  • e-Zamówienia / BZP (Poland): Source: Biuletyn Zamówień Publicznych (Urząd Zamówień Publicznych), e-Zamówienia API BZP (https://ezamowienia.gov.pl/pl/regulamin/). Below-threshold notices only. This Actor is not affiliated with or endorsed by the Urząd Zamówień Publicznych.
  • simap.ch (Switzerland): Dies ist keine amtliche Veröffentlichung. Massgebend sind die auf der Plattform www.simap.ch veröffentlichten Daten. Terms: https://www.simap.ch/en/about/legal. Notice text is stored unaltered and apart from this disclaimer. This Actor is not affiliated with or endorsed by simap.ch.
  • CPV 2008 labels: official EU CPV list (© European Union, reuse permitted).
  • Title translation: OPUS-MT models (Helsinki-NLP, CC BY 4.0), packaged by Argos Translate (MIT), run with CTranslate2 (MIT).

Only need US federal tenders?

Use US Federal Tender Monitor (SAM.gov): SAM.gov contract opportunities by keyword and NAICS code, with set-asides and only-new alerts.

FAQ

Does it send e-mails itself? No. It prepares the digest; your webhook or an Apify integration delivers it. Can I search in Dutch or French directly? Yes. Any keyword is also searched literally. Do I need an API key? Not for TED, TenderNed, BOAMP, Find a Tender, Contracts Finder, Polish BZP or simap. Doffin (Norway) works with the Actor's shared key (10 searches per run); your own free Doffin key gives more. SAM.gov (US federal) needs your own free key; without it that source is simply skipped. Is Doffin tested? Yes, live on 4 October 2026 (search, field mapping, English titles); it is still marked beta. TED, TenderNed and BOAMP are tested. SAM.gov is beta: tested live on 3 October 2026 (keyword search, one request). Find a Tender (UK) is beta: tested live locally on 3 October 2026 (keyword software, 2-day window, plus an only-new rerun). What does a run cost if nothing is new? Nothing for results, because you pay only per notice returned. More countries? Poland (below-threshold BZP), Switzerland (simap) and UK Contracts Finder are optional sources, off unless you select them. Germany (service.bund), Belgium (e-Procurement), Denmark and Sweden can be added. Open an issue on the Actor page to request one.