BOAMP · French Public Tenders by Keyword or Dept
Pricing
from $3.49 / 1,000 tender notice retrieveds
BOAMP · French Public Tenders by Keyword or Dept
Export official French public tenders and awards from BOAMP — buyer, CPV, amounts, contacts when published. Daily presets or paste a URL. One row per notice. Public gazette. No API key.
Pricing
from $3.49 / 1,000 tender notice retrieveds
Rating
0.0
(0)
Developer
Corentin Robert
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
BOAMP · French Public Tenders
Export official French public procurement notices from the BOAMP gazette — calls for tenders and awards, with buyer, deadline, CPV, amounts, and contacts when published.
Pick a daily preset, add keywords or a department, get one row per notice. JSON, CSV, or Excel from Apify Console.
No login. No API key. No account on boamp.fr.
Built for B2G suppliers, bid desks, and market intel — see Who is this for? below.
Who is this for?
| You are… | Typical goal | Suggested setup |
|---|---|---|
| B2G supplier / SME | Morning list of new calls for tenders in your trade | Daily open tenders · add Keywords |
| Bid / tender desk | Nationwide watch, then filter by department | Open tenders — last 7 days · Departments 75 |
| Agency / outsourcer | Recurring pipeline for several clients | Keyword watch · schedule daily · maxResults: 0 |
| Market intel | Who won what, and for how much | Recent awards |
| Data / ops | Master table of gazette notices | Daily preset · raise or clear the row cap |
What you get by default: notice type, dates, buyer name, subject, procedure, contract kind, department, CPV when present, and a direct BOAMP link.
Contacts and money: email, phone, SIRET/SIREN, e-procurement URL, estimated value and award value when the gazette embeds them. Coverage is incomplete — many notices have no mailbox or no amount.
On a mixed sample of 50 notices (16–23 Aug 2026): ~78% email/phone, ~52% SIRET, ~62% website, ~78% CPV. Award winner names appear on attribution notices only.
Quick start
Console (2 clicks)
- Leave What do you need? on Daily open tenders.
- Click Start — export from the Dataset tab.
Store Try caps at 10 notices. If yesterday is empty (weekend / holiday), the Actor retries the last 7 days. Set maxResults to 0 for an uncapped daily job.
Optional: add Keywords (restauration, voirie) or a department (75).
Already searched on boamp.fr?
- Copy the URL from your browser (results page or a single notice).
- Paste into BOAMP search URL.
- Click Start — keywords, notice type, dates, and department are extracted automatically.
Ready-made examples (published tasks)
| Example | Best for |
|---|---|
| Daily French open tenders | Morning bid desk |
| Recent BOAMP award notices | Winner / B2G intel |
| Open tenders in Paris (75) | Île-de-France pipeline |
| School catering tenders (restauration) | Keyword vertical |
What does this Actor do?
BOAMP is France’s official bulletin of public procurement. This Actor lists calls for tenders, award notices, and corrections published there, then flattens each notice into one export row.
| Preset | What it does |
|---|---|
| Daily open tenders | Yesterday→today · calls for tenders only |
| Recent awards | Yesterday→today · award / result notices |
| Open tenders — last 7 days | Wider bid window · calls for tenders |
| Keyword watch | Last 7 days · meant to be used with keywords |
What data does it extract?
| Category | Fields |
|---|---|
| Notice | ID, type (EN + FR label), procedure, family (national / EU), status, sub-type |
| Dates | Publication, response deadline, diffusion end, planned contract start/end |
| Object | Full subject, short subject (~300 chars), descriptors, CPV, lot count |
| Money | Estimated value + currency; award value + currency when published |
| Buyer | Name, SIRET, SIREN, email, phone, website, street, city, postal code, contact title |
| E-procurement | Buyer profile URL (marche-publics portals) when published |
| Award | Unique winner names, winner count, winner SIRET when distinct, related notice ID |
| Geo | Buyer department codes; place-of-performance departments when filled |
| Link | Official BOAMP notice URL |
Raw nested gazette XML/JSON is not dumped into the dataset (it is huge). Useful values are harvested into the columns above.
How it works
- Apply the preset (notice type + date window).
- Optionally narrow by keywords and/or department codes.
- List matching notices from the public gazette.
- Flatten each notice into one row and write it immediately (you see the Dataset fill as the run goes).
- If a daily window is empty, retry the last 7 days.
How much does it cost to scrape BOAMP?
HTTP-only gazette feed. Pay per notice row, plus a one-time actor-start charge.
| Scenario | Rows billed | FREE | Bronze | Silver | Gold |
|---|---|---|---|---|---|
| 10 notices (Try) | 10 | ~$0.05 | ~$0.04 | ~$0.04 | ~$0.03 |
| 25 notices | 25 | ~$0.12 | ~$0.11 | ~$0.10 | ~$0.09 |
| 500 notices (busy day) | 500 | ~$2.50 | ~$2.25 | ~$2.00 | ~$1.75 |
| 5,000 notices | 5,000 | ~$25.00 | ~$22.45 | ~$19.95 | ~$17.45 |
Includes actor-start (~$0.00005). Row prices fall on higher Apify plans. About $5 / 1,000 notices on Free.
Residential proxy is not required.
Is it legal to scrape BOAMP?
This Actor only reads notices the DILA publishes as open data (Licence Ouverte 2.0). Rows may include buyer contact details. Ensure your use complies with GDPR and French public-procurement outreach rules.
Input
| Field | Console | Description |
|---|---|---|
runPreset | Yes | Daily open tenders · Recent awards · Last 7 days · Keyword watch |
keywords | Yes | Optional OR terms — one per line |
departments | Yes | Optional department codes (75, 69…) |
searchUrl | Yes | Paste a boamp.fr search or notice URL |
maxResults | Yes | Row cap; 0 = no numerical cap (date window and gazette size still apply) |
dateFrom / dateTo | API | Override the preset window (YYYY-MM-DD) |
natures | API | APPEL_OFFRE, ATTRIBUTION, RECTIFICATIF |
verboseLogs | API | Technical debug lines |
proxyConfiguration | API | Default { useApifyProxy: true } on cloud |
Example — daily open tenders, restauration, 25 rows
{"runPreset": "daily_open_tenders","keywords": ["restauration"],"maxResults": 25}
Example — awards nationwide, no row cap (API)
{"runPreset": "recent_awards","maxResults": 0}
Output example
{"notice_id": "26-82217","publication_date": "2026-08-23","response_deadline": "2026-09-29","notice_type": "Call for tenders","notice_type_fr": "Avis de marché","procedure": "Procédure Ouverte","contract_kind": "Fournitures","subject": "Fourniture de Dispositifs Médicaux Stériles","cpv_codes": "33140000","estimated_value": "280000","estimated_value_currency": "EUR","buyer_name": "Centre Hospitalier Universitaire de Besançon","buyer_siret": "26250176000264","buyer_siren": "262501760","buyer_email": "camsp-marches@chu-besancon.fr","buyer_city": "Besançon","department_code": "25","url": "https://www.boamp.fr/pages/avis/?q=idweb:26-82217"}
Dataset views: Overview (bid desk), Buyer contacts, Awards.
FAQ
Why is email empty? The gazette only stores a mailbox when the buyer published one. That is expected — not a scrape miss.
Why is estimated_value empty? Older notices and some eForms variants omit amounts. Award value is mainly on Recent awards.
Can I get every notice in France? Yes — leave keywords and departments blank, set maxResults to 0, and use a date window. Very large windows still stop at the gazette listing ceiling (~10,000 rows per query).
Do I need a BOAMP account? No.
Local development
npm installnpm testapify run --input-file=./input.json
storage/key_value_stores/default/INPUT.json must satisfy the input schema, or pass --input-file. On local runs, repo input.json is merged first; CLI / KV input overwrites the same keys.
Also available
BODACC · French Legal Announcements — company creations, insolvency, business sales.
JOAFE · French Association Notices — association creations and dissolutions.
French Companies · Search & SIREN Enrich — directors and VAT from a buyer SIREN.
Support
Custom BOAMP watches, CPV packs, or CRM push: corentin@outreacher.fr