Public Tenders France & EU: BOAMP + TED Alerts avatar

Public Tenders France & EU: BOAMP + TED Alerts

Pricing

$4.00 / 1,000 new tenders

Go to Apify Store
Public Tenders France & EU: BOAMP + TED Alerts

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

Yahya Nouali

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

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 onlyNew on, 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 stateStoreName per client profile.

Input

FieldWhat it doesDefault
keywordsAny of these words or phrases must appear in the title or description. Accent and case insensitive, whole words. nettoy* matches word endings.all notices
excludeKeywordsDrop notices containing any of these.none
cpvCodesCPV codes or prefixes. 72000000 = every IT service.all
sourcesBOAMP, TED or both.both
tedCountriesBuyer countries for TED, ISO codes. ALL for all of Europe.FR
departmentsFrench departments (75, 69, 2A, 974).all
nutsCodesNUTS prefixes of the place of performance (FR1, BE1).all
noticeKindscompetition, result, planning, change or all.competition
contractTypesworks, supplies, services.all
lookbackDaysDays of publications, ending today (Europe/Paris).2
dateFrom, dateToFixed publication window, max 31 days.
onlyNewSkip notices delivered in earlier runs.true
stateStoreNameKey-value store that remembers delivered notices.public-tenders-state
maxItemsHard cap on delivered (and charged) tenders.500
preferredLanguageEN 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.

RunCharge
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).

  1. Start from a scheduled scenario at 07:00.
  2. Run an Actor and Get Dataset, Actor public-tenders-france-eu, input from examples/input.it-services.json.
  3. Filter: recordType = tender.
  4. Add a row in Google Sheets, post to Slack or Teams, or create a deal in your CRM. Map title, buyerName, deadline, estimatedValue and url.

Zapier

App Apify.

  1. Trigger: Schedule by Zapier, every weekday.
  2. Action: Run Actor with the JSON input, wait for finish.
  3. Action: Get Dataset Items. Filter by Zapier: recordType is tender.
  4. 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

SourcePublisherCoverageLicence
BOAMP via the DILA open data APIDirection de l'information légale et administrativeFrench notices: national (MAPA over 90 k€, FNS) and EU-threshold noticesLicence Ouverte 2.0 / Etalab
TED API v3Publications Office of the European UnionEU, EEA and partner countries, EU-threshold noticesEU 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 install
npm test
npm run typecheck
npm run smoke # live calls to BOAMP and TED, no charges