Public Tenders France & EU: BOAMP + TED Alerts
Pricing
$4.00 / 1,000 new tenders
Public Tenders France & EU: BOAMP + TED Alerts
Daily alerts for new public tenders from BOAMP (France) and TED (EU) in one feed. Filter by keywords, CPV codes, departments, NUTS regions and countries. EU notices published on both sources are delivered once, and earlier runs are skipped. Pay per new tender.
Pricing
$4.00 / 1,000 new tenders
Rating
0.0
(0)
Developer
Yahya Nouali
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
Get every new public tender that matters to you from BOAMP (Bulletin officiel des annonces des marchés publics, France) and TED (Tenders Electronic Daily, the EU Official Journal) in one clean dataset. Filter by keywords, CPV codes, French departments, NUTS regions, buyer countries and notice type. Schedule it daily and receive only the notices you have not seen yet.
- Two official sources, one feed. EU-threshold French notices are published on both BOAMP and TED. The Actor reads the eForms notice UUID and delivers each notice once.
- Only new notices. With
onlyNewon, notices already delivered by an earlier run are skipped and not charged. - Ready for sales teams. Buyer, city, department, CPV, deadline, days left, estimated value, winners on award notices and the official link.
- Official open data. Licence Ouverte 2.0 (BOAMP) and the EU reuse policy (TED). No login, no scraping of private portals.
Use cases
- Daily tender alerts for a construction, cleaning, IT, consulting or catering company.
- Business development: feed new calls for tenders into a CRM, Google Sheets, Slack or Teams.
- Market intelligence: who buys what, at which value, and who wins (
noticeKinds: ["result"]). - Bid consultants watching several clients, with one
stateStoreNameper client profile.
Input
| Field | What it does | Default |
|---|---|---|
keywords | Any of these words or phrases must appear in the title or description. Accent and case insensitive, whole words. nettoy* matches word endings. | all notices |
excludeKeywords | Drop notices containing any of these. | none |
cpvCodes | CPV codes or prefixes. 72000000 = every IT service. | all |
sources | BOAMP, TED or both. | both |
tedCountries | Buyer countries for TED, ISO codes. ALL for all of Europe. | FR |
departments | French departments (75, 69, 2A, 974). | all |
nutsCodes | NUTS prefixes of the place of performance (FR1, BE1). | all |
noticeKinds | competition, result, planning, change or all. | competition |
contractTypes | works, supplies, services. | all |
lookbackDays | Days of publications, ending today (Europe/Paris). | 2 |
dateFrom, dateTo | Fixed publication window, max 31 days. | |
onlyNew | Skip notices delivered in earlier runs. | true |
stateStoreName | Key-value store that remembers delivered notices. | public-tenders-state |
maxItems | Hard cap on delivered (and charged) tenders. | 500 |
preferredLanguage | EN or FR for TED titles and links. | EN |
Example: IT services in France, Belgium and Luxembourg.
{"cpvCodes": ["72000000", "48000000"],"tedCountries": ["FR", "BE", "LU"],"noticeKinds": ["competition"],"lookbackDays": 2,"stateStoreName": "tenders-it-services","maxItems": 200}
Example: cleaning contracts in Paris and the inner suburbs.
{"keywords": ["nettoyage", "propreté", "entretien des locaux"],"departments": ["75", "92", "93", "94"]}
Output
One row per new tender, then one run_summary row. Views Tenders and Run summary are available in the dataset.
{"recordType": "tender","source": "BOAMP","noticeId": "26-103006","noticeUuid": null,"title": "Prestations de support de maintenance corrective et évolutive sur les produits SAP BO","buyerName": "Conseil régional Auvergne-Rhône-Alpes","buyerCity": "Lyon Cedex 2","buyerCountry": "FRA","departments": ["69"],"noticeKind": "competition","contractTypes": ["services"],"cpvCodes": ["72261000"],"mainCpv": "72261000","publicationDate": "2026-10-23","deadline": "2026-11-30T10:00:00+00:00","daysToDeadline": 36,"estimatedValue": 600000,"currency": "EUR","winners": [],"matchedKeywords": [],"url": "https://www.boamp.fr/pages/avis/?q=idweb:26-103006","licence": "Licence Ouverte 2.0 (DILA, BOAMP)","charged": true}
Every field can be null or empty when the source does not publish it. National BOAMP notices below EU thresholds often have no CPV code; a cpvCodes filter excludes them. The full field list is in the dataset schema.
Pricing
Pay per event: $0.004 per new tender delivered ($4 per 1,000).
Free: notices already delivered by an earlier run, the second copy of an EU notice found on both sources, notices removed by your filters, failed items and the summary row. maxItems caps the cost of each run.
| Run | Charge |
|---|---|
| Daily IT alert, about 30 new notices | $0.12 |
| Same schedule the next day, nothing new | $0 |
| All French calls for tenders over 2 days, about 900 notices | $3.60 |
Schedule it
Create a schedule in Apify with cron 0 7 * * 1-6 and time zone Europe/Paris. Keep lookbackDays at 2 and onlyNew on: late or delayed publications are caught the next morning without paying twice. Use a different stateStoreName for each alert profile.
Automate with Make, Zapier or n8n
Put the Apify token in the integration credentials. Never paste it into the Actor input. Synchronous calls that return dataset items time out at 300 seconds; a filtered daily alert finishes well inside that. For very wide windows, schedule the Actor in Apify and read the dataset afterwards.
Make
App Apify, module Run an Actor and Get Dataset (or Run an Actor, then Get Dataset Items).
- Start from a scheduled scenario at 07:00.
- Run an Actor and Get Dataset, Actor
public-tenders-france-eu, input from examples/input.it-services.json. - Filter:
recordType=tender. - Add a row in Google Sheets, post to Slack or Teams, or create a deal in your CRM. Map
title,buyerName,deadline,estimatedValueandurl.
Zapier
App Apify.
- Trigger: Schedule by Zapier, every weekday.
- Action: Run Actor with the JSON input, wait for finish.
- Action: Get Dataset Items. Filter by Zapier:
recordTypeistender. - Action: Gmail, Slack or a CRM. Alternatively use the trigger Finished Actor Run on an Apify schedule.
n8n
Official node: @apify/n8n-nodes-apify. Resource Actors, operation Run an Actor and Get Dataset. Select your Apify credential, set the Actor to public-tenders-france-eu, paste the JSON input, then add an IF node on recordType = tender before Slack, Google Sheets or email.
Sources and licences
| Source | Publisher | Coverage | Licence |
|---|---|---|---|
| BOAMP via the DILA open data API | Direction de l'information légale et administrative | French notices: national (MAPA over 90 k€, FNS) and EU-threshold notices | Licence Ouverte 2.0 / Etalab |
| TED API v3 | Publications Office of the European Union | EU, EEA and partner countries, EU-threshold notices | EU reuse policy, Decision 2011/833/EU |
The Actor uses the public anonymous APIs at a polite rate. Always read the official notice and documents before bidding. Notices are copied as published; the buyer's notice is authoritative.
En français
Cet Actor livre chaque jour les nouveaux appels d'offres publics du BOAMP et du TED (JOUE) dans un seul fichier, sans doublon. Filtrez par mots-clés (sans accents ni majuscules), codes CPV, départements, régions NUTS et type d'avis (avis de marché, attribution, pré-information, rectificatif). Avec onlyNew, seuls les avis jamais livrés sont facturés, 0,004 $ par avis. Les avis européens publiés à la fois au BOAMP et au TED sont dédoublonnés grâce à l'identifiant eForms. Données publiques sous Licence Ouverte 2.0 et politique de réutilisation de l'UE.
Local development
npm installnpm testnpm run typechecknpm run smoke # live calls to BOAMP and TED, no charges