French procurement · Source coverage
Compare BOAMP and TED coverage with matches you can trace to the sources.
Compare six BOAMP and eight TED notices from one CPV 72 publication day. Download four confirmed matches, six unresolved rows and a reproducible category audit.
The BOAMP API and TED should be compared with an explicit publication window, category rule and notice-matching method. Counting search results alone cannot tell you how much French procurement coverage a second source adds.
We queried both official APIs for September 1, 2026, using CPV division 72 as the category. The bounded study selected six BOAMP notices and eight TED notices, with four exact notice-and-version matches. Two BOAMP rows and four TED rows had no confirmed counterpart in the selected day.
Those six unmatched rows remain unresolved. They are not proof of exclusive coverage. A further 35 of the 271 BOAMP records returned for that day had no recognized structured CPV code in our extraction, making the category boundary itself something to audit.
Define the category, window and counting unit
The question is narrow: which notice versions can we positively link between a BOAMP publication-day extract and a TED French-buyer category query? It is an engineering coverage test, not a census of French public contracts.
We fixed the date and category before collecting. The study includes primary, additional and lot-level structured CPV codes beginning with 72; it does not require the main code alone to belong to that division. The CPV filtering guide explains why that choice changes the population.
Both sides include all notice stages. The selected BOAMP rows contain three calls for competition and three award notices; TED contains five competition notices and three result notices. This mix supports publication-coverage analysis, but it must not be presented as a list of currently open opportunities.
The geographical rules also need to be visible. BOAMP supplies its own publication population. TED is filtered by buyer country FRA, not place of performance. An application focused on work delivered in France might need a different geographical definition.
The counting unit is a published notice/version. A procedure can generate several notices, and one notice can contain multiple lots. Neither the source totals nor the comparison's ten rows establish ten distinct procurement procedures.
Query BOAMP and TED with explicit source rules
DILA provides a free BOAMP API with filtering and export facilities. Its published scope includes competition notices, results and other public procurement announcements. The API listing also identifies the applicable open-data licence. We use the operational API and observed schema here; this article does not derive current procurement-law thresholds from the listing. DILA BOAMP API listing.
For BOAMP, the collector requests the complete publication day before applying the category filter locally. The first request uses the following parameters:
GET https://boamp-datadila.opendatasoft.com/api/explore/v2.1/catalog/datasets/boamp/records
where=dateparution = date'2026-09-01'
order_by=idweb
limit=100
offset=0
The script URL-encodes the parameters and continues at offsets 100 and 200. These three responses contain 271 distinct idweb values, matching the reported total. The exact URLs are retained in the manifest. BOAMP API console.
The BOAMP donnees field contains serialized JSON. In this day’s responses it uses three structural families: EFORMS, FNSimple and MAPA. The extractor reads CPV-tagged eForms values and eight-digit codes in codeCPV subtrees, preserving each recognized value's data path. It does not search titles or treat every eight-digit number as a classification.
TED provides an anonymous published-notice Search API. We send this expert query to POST /v3/notices/search:
publication-date = 20260901
AND buyer-country = FRA
AND classification-cpv = 72*
The request uses scope: ALL, onlyLatestVersions: false, a limit of 100 and page-number pagination. It returned eight notices, a reported total of eight and timedOut: false. The saved projection includes publication number, date, notice identifier, version, procedure identifier, form type, title, buyer and CPV codes. TED Search API documentation.
This small result fits in one TED response. Larger collectors need a suitable pagination strategy and reconciliation; the TED Search API guide covers those operational details.
Read the overlap and classification results
The September 24 retrieval produced the following outcomes for the fixed September 1 publication window:
Six BOAMP notices and eight TED notices, joined into ten comparison rows. Unmatched rows do not establish source exclusivity. Thirty-five unclassified BOAMP records sit outside this comparison.
Four of the six selected BOAMP rows match four of the eight TED rows. Those fractions describe confirmed overlap within the two selected extracts. They are not estimates of either source's recall across the French market.
The BOAMP classification audit is just as important as the overlap:
| BOAMP publication-day classification | Records | Treatment |
|---|---|---|
| At least one recognized CPV 72 code | 6 | Included in the comparison |
| Recognized CPV codes, none beginning with 72 | 230 | Outside this category rule |
| No recognized structured CPV code | 35 | Unclassified; retained for review |
| Total returned publication-day records | 271 | Reconciled to the API total |
We did not infer a category for the 35 unclassified records from their titles. Some may need additional schema handling or another classification method. Treating them as irrelevant would turn an extraction limitation into an unsupported coverage claim.
Match current notice identities and versions
BOAMP’s eForms payloads expose a current notice UUID and version. We match the root cbc:ID tagged notice-id and root cbc:VersionID against TED's notice-identifier and notice-version. The rule requires a unique identity on each side and normalizes numeric versions such as 01 and 1.
The implementation choice followed schema inspection: the initial scope called for explicit source-reference matching, and the actual payloads provided shared eForms identities. We recorded that choice in the scope file rather than relying on an assumed current TED publication-number field. TED documents notice-related identifiers separately from procedure and other references. eForms schema guidance.
| BOAMP notice | TED publication | Subject |
|---|---|---|
| 26-84367 | 602270-2026 | Winter-road decision-support data |
| 26-84410 | 602100-2026 | Risk and quality management software |
| 26-84468 | 602231-2026 | Digital network infrastructure assistance |
| 26-84513 | 601223-2026 | Electronic voting solution |
For example, BOAMP 26-84513 and TED 601223-2026 share current notice UUID d5cd30d0-9970-4d9e-9157-f9bcf68c95bd, version 1. Their matching key is that identity, not the translated title.
The same BOAMP award payload also contains a notice-document reference to 316248-2026. Using any TED-looking number found in the document would risk joining the award to a related earlier publication. The audit retains those references separately and excludes them from the current-notice match key.
Procedure IDs are also excluded from this join. They can help investigate a procurement lifecycle, but shared procedure identity does not make a competition notice and an award notice the same publication.
Keep source-only observations unresolved
The two BOAMP-only observations are national-format FNSimple records: 26-84783, concerning IBM programme support for GIE iMSA, and 26-85080, concerning a risk-prevention management system. Neither carries the shared current eForms identity used by this matcher. Their absence from the confirmed join is not evidence that the underlying procurements never appear on TED.
The four TED-only observations are 601348-2026, 601753-2026, 602579-2026 and 602600-2026. Their notice/version identities have no unique counterpart in the selected BOAMP day. We did not search every other BOAMP publication date or resolve them through buyer-portal records.
One illustrates the category rule: TED 601753-2026 has an education-related title and includes a CPV 72 classification. A title-based “IT notices” filter could exclude it, while the declared any-code rule includes it. Before measuring supplier performance, make sure both parties mean the same thing by category coverage.
The unresolved CSV keeps exact links and identities so these cases can be investigated. Possible follow-up work includes searching adjacent publication dates, checking current notice versions and inspecting national identifiers. Those steps belong in a wider study; they are not silently folded into the same-day result.
Reproduce the comparison or collect a new observation
The download contains the four compressed official responses, request receipts, scope, comparison code and expected outputs. Python 3.10 or later is sufficient; there are no third-party dependencies or API keys.
python3 -B compare.py --output reproduced
python3 -B -m unittest test_compare.py
The offline run verifies SHA-256 hashes of the decompressed responses, reconciles counts and source IDs, applies the category rule and regenerates the comparison CSV, unresolved CSV, category audit and summary. Eleven tests cover identity/version matching, related references, duplicate identities, classification, pagination failures, timeouts and output reproduction.
For a fresh observation of the same fixed study date:
python3 -B collect.py --output new-observation
python3 -B compare.py --inputs new-observation --output new-results
The collector refuses to overwrite an existing output directory. New requests have new timestamps and may yield different results. Preserve them alongside the original evidence.
Count reconciliation establishes that these responses satisfy the declared query totals and checks. It does not make offset pagination an atomic historical snapshot or prove that a source index contains every eligible notice. The saved files make the published result reproducible even if source data subsequently changes.
Turn the study into an application coverage test
For an opportunity alerting product, first narrow the stage to relevant competition notices and define deadline handling. For award intelligence, use the appropriate result population. Mixing both can inflate the apparent number of actionable leads.
Next, agree whether geography means buyer country, delivery location or another boundary. Specify primary-only versus any-code category selection, and decide how unclassified records enter review. Extend the date range across several publication cycles and investigate lag before calling an unmatched row “additional coverage.”
Keep three quantities separate: confirmed cross-source matches, unresolved source observations and notices whose category cannot be evaluated. A bigger combined feed is useful only if you understand how duplicates, lifecycle events and classification gaps affect the application's output.
This study gives a concrete reason to test national-source coverage alongside TED: the selected extracts are not interchangeable, and their matching and classification paths differ. It does not establish a percentage uplift or complete French-market coverage. For the broader source-selection framework, see government tender data across official sources.
Request a scoped French procurement sample
Start with the downloadable comparison, then provide the buyer or delivery geography, CPV rules, notice stages and date range your product needs. Ask for source-level counts, matching evidence, unresolved cases and refresh expectations before agreeing a recurring feed.
This is a new BOAMP coverage study, not a claim that WebTruffle already supplies a production BOAMP feed. Adding a national source requires an agreed scope and feasibility assessment.
Frequently asked questions
Is the BOAMP API free to access?
DILA provides a free API for querying and exporting BOAMP data. This example uses unauthenticated official requests and retains source attribution and retrieval evidence in the download.
Do two BOAMP-only rows mean two opportunities missing from TED?
No. They are unmatched observations within a specific date, category and identity rule. One is an award notice, and neither has the shared eForms identity used by this matcher. Cross-date and alternative-identifier investigation remains unresolved.
Does the study measure all French IT procurement?
No. It measures one publication day under a declared CPV rule. It also retains 35 BOAMP records without recognized structured CPV codes, and it does not establish completeness across buyer portals, other publication dates or the whole French market.