French Public Tender Monitor - BOAMP Alerts avatar

French Public Tender Monitor - BOAMP Alerts

Pricing

from $1.60 / 1,000 baseline notices

Go to Apify Store
French Public Tender Monitor - BOAMP Alerts

French Public Tender Monitor - BOAMP Alerts

Soyez alerté dès qu'un nouveau marché public français correspondant à votre activité est publié au BOAMP. Filtrez par mots-clés, départements et type de marché ; uniquement les avis jamais vus. API officielle, données organisationnelles, sans contacts personnels.

Pricing

from $1.60 / 1,000 baseline notices

Rating

0.0

(0)

Developer

Lowland Data

Lowland Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

French Public Tender Monitor — BOAMP Alerts

Watches BOAMP (Bulletin officiel des annonces des marchés publics — France's official public-procurement bulletin) for new tender notices matching your profile: French keywords, departments, market type. It alerts the moment a matching notice is published, and it remembers what it has already told you — so an alert always means a genuinely new tender, never a re-scrape of yesterday's list.

It reads BOAMP's official open-data API (the reuse channel France publishes for exactly this), and the output is GDPR-clean by construction: buyer organization, subject, deadline, department — never the notice's contact persons. Safe to store, share with your bid team, or import into a CRM.

This is the French national leg of public procurement — the below-EU-threshold tenders that don't appear on TED. Its EU-wide sibling, the EU Tender Monitor, watches TED. Run both for full French + European coverage.

Quick start (30 seconds, no account keys needed)

  1. Run the actor with the prefilled input (keyword "informatique", last 3 days) — it finishes in a few seconds and shows a baseline of recent notices.
  2. Replace the demo profile with your own: your French keywords, the departments you serve, your market type.
  3. Add a daily schedule (Actor page → Schedule). From then on, runs are quiet until a matching tender is actually published.

Who uses this

  • A regional IT services company monitors
    keywords: ["informatique", "logiciel"]
    , departments: ["69", "01", "38"] (its region) daily — every new public IT tender near it lands with the deadline and the boamp.fr link the day it publishes.
  • A construction SME watches marketTypes: ["travaux"] in its departments — only public works it can actually bid on.
  • A supplier runs keywords for its product category nationwide to find every public buyer newly in the market.
  • A bid consultancy monitors several client profiles on one schedule, each a separate keyword/department set.
  • A market analyst tracks tender volumes per department and market type as a public-spending indicator — the baseline plus daily deltas is a clean series.

What you get

One JSON item per event: a baseline snapshot per notice on the first run, then only new matching notices. A new-tender alert looks like:

{
"noticeId": "26-71206",
"objet": "Marché d'acquisition et de livraison de véhicules pour la commune",
"buyerName": "Commune de Saint-Benoît",
"publishedDate": "2026-07-19",
"deadline": "2026-08-18",
"departments": ["974"],
"descriptors": ["Véhicules (acquisition)"],
"descriptorCodes": ["475"],
"marketType": "Fournitures",
"family": "Marchés européens",
"noticeType": "Avis de marché",
"url": "https://www.boamp.fr/pages/avis/?q=idweb:26-71206",
"isBaseline": false,
"isUpdate": false
}

Field honesty notes:

  • Everything is in Frenchobjet and descriptors are as BOAMP publishes them. Keyword matching runs on the French subject; use French terms.
  • deadline is the response deadline where the notice carries one (contract notices); award notices carry none.
  • noticeType distinguishes a contract notice (Avis de marché) from an award (Avis d'attribution) and other natures — filter downstream if you only want one.
  • winnerName appears on award notices — the winning organization, no contact data.
  • Corrections (rectificatifs) publish on BOAMP as their own new notice, so they arrive as a new alert rather than a modification of the original.

How much does tender monitoring cost?

Pay per outcome — checking costs nothing; you pay when the monitor tells you something new:

  • New matching notice (the alert): $0.02.
  • Baseline item (first run only): $0.002.
  • Actor start: $0.005. Everything included - no separate platform-usage charges, and higher Apify plans get automatic unit-price discounts.

Cost feel: a focused profile (a keyword or two, a few departments) sees a handful of new notices per working day → roughly $2–8/month for complete coverage, with the one-time baseline (say 100 notices) costing about $0.20. A run with zero new matches costs $0.005 all-in. Dedicated tender-alert services charge €30–200/month.

Why an alert costs more than a scraped row

The store's headline ("from $2.00 / 1,000 baseline results") is what a trial costs: a 100-notice baseline ≈ $0.20. Apify displays every event per 1,000, so the alert reads "$20.00 / 1,000" next to raw scrapers at $1–3 per 1,000 rows — but that is a different thing:

  • A raw scraper sells rows: to monitor with rows you re-download the BOAMP feed every day and diff it yourself.
  • This monitor sells the transition: it remembers state in your account and charges $0.02 exactly when a notice you have not seen matches your profile.

Not technical? Let your AI assistant set it up

Paste this prompt with a line about your business (in French or English):

Set up the Apify actor lowlanddata/france-public-tender-monitor to watch French
public tenders for me. Build the input JSON from my business description:
- keywords: 3-8 FRENCH words a tender subject would contain (e.g. ["informatique",
"logiciel"] for IT; BOAMP is a French bulletin so French terms match)
- departments: French department codes I serve (e.g. ["75","69","974"])
- marketTypes: ["services"], ["travaux"] (works) or ["fournitures"] (supplies) if
relevant
Leave alertOn, emitBaseline and maxItems at their defaults. Run it once and show
me the baseline as a table (objet, buyer, department, deadline, url). Then create
a daily schedule and set up a notification so I get an email when a run produces
items.

Coverage — measured, not promised

  • Source: BOAMP's official opendatasoft open-data API, keyless. Covers French public-procurement notices — over 1,000 published per working day.
  • French national scope by design — the below-EU-threshold tenders TED does not carry. For EU-wide above-threshold tenders, run the EU Tender Monitor alongside.
  • French only. BOAMP publishes in French; keyword matching is on the French objet. This monitor does not translate — that is stated, not hidden.
  • Server-side filters (date window, departments, market types, keyword search) run in the API query.
  • A profile broader than several thousand notices per run is truncated honestly (the run status says so) — narrow it.

How the monitor thinks

  • First run = baseline. It fetches your profile's matches from the last lookbackDays (default 7), pushes them flagged isBaseline: true at the low baseline price, and memorizes them. emitBaseline: false seeds silently.
  • After that, only new notices. Each run continues from the previous run (one day of overlap; the memory absorbs duplicates) and pushes only notices it has never alerted.
  • Editing the profile starts a fresh baseline — matching-relevant inputs are the profile's identity, so a changed profile can never flood you with alerts computed against another profile's memory.
  • Memory lives in a named key-value store (stateStoreName, default france-tender-monitor-state) in your account. Run several profiles on separate schedules against the same store — they never interfere. resetState: true wipes the current profile's memory.
  • Re-running after a crash or overlap re-alerts at most the last few unsaved items — state is checkpointed during the run.

Input reference

FieldTypeDefaultNotes
keywordsarray[]French terms, matched on the notice subject. OR within.
departmentsarray[]French department codes (75, 69, 974, 2A).
marketTypesarray[]fournitures, services, travaux.
lookbackDaysinteger7Baseline reach on the first run (max 30).
alertOnstring"new""new-and-updated" adds état-change alerts.
emitBaselinebooleantruefalse = silent seeding.
resetStatebooleanfalseOne-shot: wipe this profile's memory.
maxItemsinteger500Overflow alerts on the next run, never lost.
stateStoreNamestring"france-tender-monitor-state"Only change to fully isolate instances.

* At least one of keywords, departments or marketTypes is required.

Scheduling and API use

Run it daily and pair the schedule with a Monitoring alert on "dataset items > 0" to get an email exactly when a tender matched.

curl -X POST \
"https://api.apify.com/v2/acts/lowlanddata~france-public-tender-monitor/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"keywords": ["informatique"], "departments": ["75"]}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('lowlanddata/france-public-tender-monitor').call({
keywords: ['informatique', 'logiciel'],
departments: ['69', '01'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); // only new notices since the last run
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("lowlanddata/france-public-tender-monitor").call(run_input={
"keywords": ["travaux"],
"marketTypes": ["travaux"],
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Daily runs finish in well under a minute, comfortably inside the 300s sync-call wall.

Use it with AI agents (MCP)

Claude, Cursor and other MCP-capable agents can run this monitor as a tool through Apify's hosted MCP server: the agent builds the profile from a plain-language brief, runs it, and reads the notices back — no glue code.

Claude Code:

$claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/france-public-tender-monitor"

Cursor or Claude Desktop (add a custom connector / MCP server with this URL):

https://mcp.apify.com?actors=lowlanddata/france-public-tender-monitor

Sign in with your Apify account when prompted — runs are billed to it. Setup details per client: Apify MCP docs, or start from this actor's own MCP page: apify.com/lowlanddata/france-public-tender-monitor/api/mcp.

Prompts that work once connected:

  • "Surveille les marchés publics informatiques dans le Rhône et montre-moi ceux d'aujourd'hui."
  • "Watch French public works tenders in Paris and alert me daily."
  • "Quels marchés de services ont été publiés cette semaine en Île-de-France ?"

Yes — French public-procurement notices are published for exactly this purpose, and BOAMP provides an official open-data API for their reuse. No login walls, no anti-bot bypass — if the API is unreachable, the run reports it rather than fighting it. And the output is safe by construction: contact persons are never requested from the API (see below).

Source: BOAMP / DILA, reused under France's open-data licence.

Compliance: safe to store, safe to CRM-import

BOAMP notices do contain personal data — the buyer's contact person, with a name, email and phone, inside the notice's detailed data blob. This actor's guarantee is structural: it requests only the organization-level fields from the API (subject, buyer name, department, dates, descriptors, winner organization) and never fetches the contact blob at all — the personal data never crosses the wire. An automated test proves that even a response carrying such a blob cannot reach the output. One honest limit: objet is text the buyer wrote — on rare occasions a name appears in free text. Everything structured is guaranteed clean.

FAQ

Why did my second run return nothing? Because nothing new matched — that is the product working. The first run is the baseline; afterwards you only pay for notices you have not seen.

Does the output contain the buyer's contact person? No — by design. The API request never asks for the contact fields. You get the buying organization and the official notice link; contacts are on the notice itself if you need them for a bid.

Why French keywords? BOAMP is a French national bulletin — the notice subject is in French, so French keywords match. For English/multilingual EU-wide tenders, use the EU Tender Monitor (TED).

How is this different from the EU Tender Monitor? BOAMP covers French national tenders (including below the EU thresholds); TED covers EU-wide above-threshold tenders. Run both for complete coverage.

What about a correction to a tender? French corrections publish as their own new BOAMP notice, so you get them as a new alert with the same subject.

How do I get alerts for new BOAMP tenders? Schedule the actor once a day and add a Monitoring rule on "dataset items > 0" so the Console emails you only when a run actually pushed notices. Empty runs pass in silence.

Do I need a BOAMP account or API key? No. The actor reads BOAMP's official open-data API, which is keyless — no registration on the French side, nothing to renew.

What does BOAMP monitoring cost per month? Each new-notice alert is $0.02, baseline items are $0.002 and a run start is $0.005; there are no platform charges on top. A keyword-and-department profile typically totals $2–8/month, against €30–200/month for dedicated tender-alert services.

What does the first run deliver? A baseline of the last lookbackDays of matching notices (default 7, max 30), each flagged isBaseline: true at the cheap baseline rate. Prefer to start empty? emitBaseline: false seeds the memory without pushing items.

Can one notice be billed twice? No — each run overlaps the previous one by a day and the monitor's memory discards anything it already alerted, so a seen notice stays silent for good.

How do I watch tenders in my region only? List your department codes in departments75 for Paris, 69 for the Rhône, 974 for Réunion, 2A for Corse-du-Sud. Empty means all of France.

Can I limit alerts to works, services or supplies? Yes — set marketTypes to any of travaux, services, fournitures. Combined with keywords and departments, that is usually enough to keep a profile to a handful of alerts per day.

Can I see who won a French public tender? Award notices (noticeType: "Avis d'attribution") carry winnerName — the winning organization, without contact data. Filter on noticeType downstream if you only want awards or only open competitions.

Can a consultancy monitor several clients at once? Yes — one scheduled task per client profile. Each profile keeps its own memory, so a Lyon IT watch and a Paris travaux watch never contaminate each other's alerts.

Can I export the notices to Excel or a CRM? Yes — download any run's dataset from the Console (CSV, Excel, JSON, XML) or pull it over the API. With contact persons excluded by construction, the file is safe to archive and import without a GDPR pass.

How quickly does a new tender reach me? BOAMP publishes over 1,000 notices per working day and the monitor picks up a match on its next scheduled run — a daily schedule means at most a day between publication and alert.

Can I use it from an AI agent? Yes — through Apify's hosted MCP server, Claude, Cursor and similar agents can build the profile, run the monitor and summarize the day's notices, in French or English.

Troubleshooting

  • "The profile matches all of BOAMP" — add at least one of keywords, departments or marketTypes.
  • "Coverage truncated by the per-run request budget" — the window matched more than several thousand notices; narrow the profile or lower lookbackDays.
  • "Monitor state record … is not readable" — the state was written by a newer version; run once with resetState: true to start a fresh baseline.

Something else off? Open an issue on the actor's Issues tab — reports are read and answered. And if the alerts are earning their keep, a rating on this page takes ten seconds and helps other buyers find a GDPR-clean monitor among the lookalikes.