Drug Pricing
September 17, 2026
8 min

France drug prices: the BDPM, PFHT and what the public list leaves out

What the French public medicines database publishes, what it leaves out, and how the back calculation to the manufacturer level actually works.

Blog Image
Table of contents
    Summary
    • The French public file carries a gross consumer price, not a manufacturer price, and it excludes the dispensing fee.
    • A price is present for 13,648 of 20,900 packs, because non reimbursed products are not priced there.
    • The pack code CIP13 is a valid GTIN-13, verified across all 20,900 packs, so the join runs on the code.
    • Both trade margins are calculated on the manufacturer price, so the schedule has to be inverted numerically rather than stage by stage.
    • The wholesale margin changes on 20 January 2027, which breaks every stored back calculation that carries no rule version.

    France publishes one of the most usable medicine price files in Europe, and almost everyone reads it wrong. The public database carries a gross consumer price, not a manufacturer price, it covers only reimbursed products, and the route down to the French ex-factory level runs through a margin formula that is defined on the manufacturer price rather than on each trading stage. This article sets out what the file contains, what it leaves out, and how the back calculation actually works.

    What France publishes

    The public medicines database of the French state publishes a set of tab separated files. The one that carries prices is CIS_CIP_bdpm.txt, addressed through a constant URL without a token, which makes it one of the few European sources that a pipeline can fetch unattended. On 5 September 2026 the file returned HTTP 200 at 4,148,043 bytes.

    PropertyValue
    SourceBase de données publique des médicaments, file CIS_CIP_bdpm.txt
    Price levelConsumer price including VAT
    FormatTab separated text
    Update rhythmMonthly, partial files more frequently
    Pack codeCIP13
    LicenceLicence Ouverte Etalab 2.0, commercial use explicitly permitted
    ConditionsAttribution and the date of the extract are mandatory

    The licence matters commercially. Etalab 2.0 permits commercial reuse, including reuse in a paid product, provided the source and the update date travel with the data. That is a lighter obligation than most European price sources impose, and it is the reason France sits in the first wave of any European price project.

    The field that trips people up

    The price field in the file is described as the price of the medicine in euro. It is a gross consumer price and it excludes the pharmacy dispensing fee, which is charged separately in France. A figure taken from that column is therefore neither what the manufacturer receives nor what the patient pays at the counter. It is a defined intermediate value, and it needs to be labelled as such in any dataset that stores it.

    Coverage: two thirds, not everything

    The file lists 20,900 packs. A price is present for 13,648 of them. The gap is not a data quality problem, it is the scope of the file: products that are not reimbursed by the statutory system are not priced there, because their prices are not regulated.

    Anyone reporting a French average price from this file is therefore reporting the reimbursed segment. That is a defensible figure as long as the denominator is stated. Presented as a national average across all medicines, it is wrong.

    Pack identification: the CIP13 is a GTIN

    The French pack code CIP13 is a valid GTIN-13. We verified this across all 20,900 packs in the file, and the property holds without exception. That is an unusually clean result for a European price source and it decides the whole matching strategy: the join runs on the code, not on the pack description.

    The pack size itself is only available as free text inside the product designation, with inconsistent grammar. The number sometimes stands at the front, sometimes after a preposition, and combination packs carry it twice. Parsing it is worth doing as a plausibility check against the code based join, but it is not a foundation to build on.

    The back calculation to the French ex-factory price

    The French ex-factory equivalent is the prix fabricant hors taxes. Reaching it from the published consumer price takes two operations, and the second one is more complicated than it looks.

    Step one: remove VAT at 2.1 percent. France applies a super reduced rate to reimbursable medicines under Article 281 octies of the tax code. Divide the gross price by 1.021.

    Step two: remove both trade margins. The statutory schedule is set in the Arrêté du 4 août 1987, annexes I-1 and I-2, in the version in force on 3 September 2026. Two properties of that schedule decide the implementation.

    The wholesale margin is 6.93 percent with a minimum of 0.30 euro and a cap of 32.50 euro, and it applies up to a manufacturer price of 468.97 euro. The pharmacy margin follows a band scale:

    Manufacturer price fromtoRate
    0.00 euro1.91 euro10 percent
    1.92 euro22.90 euro7 percent
    22.91 euro150.00 euro5.5 percent
    150.01 euro1,930.00 euro5 percent
    above 1,930.00 euro0 percent

    The decisive detail: both margins are calculated on the manufacturer price, not on the purchase price of the respective stage. That is unusual in Europe, where most schedules apply each margin to the price at which that stage buys. It also means the formula cannot be inverted algebraically stage by stage. The forward function is monotonic, so the practical route is a numerical inversion: search for the manufacturer price whose forward calculation reproduces the published consumer price.

    Why the manufacturer price is not simply downloaded

    There is a second French source that carries the manufacturer price directly. The national health insurance code database exposes a field for the prix fabricant hors taxes in its item view, and the value is populated.

    It is not usable as a bulk source. The field is reachable only through a single query per CIP13, the site states in plain words that the bulk module is not in operation, and the host is reachable over HTTP only, with port 443 refusing the connection. For a pipeline covering more than 20,000 packs, that route does not carry. It is useful for spot checks of a back calculation, and for nothing else.

    The date that breaks the formula

    The French wholesale margin changes on 20 January 2027. Every stored back calculation therefore needs a rule version and a validity window, not just a result. A dataset that carries a derived French manufacturer price without the date of the rule that produced it will be silently wrong from that day on, and the error will look like a price change rather than a calculation artefact.

    This is the general lesson from France, and it applies to every derived price in Europe: store the rule, its legal basis and its effective date next to the number.

    What to check before you use French prices

    1. Confirm which column you are reading, and whether the dispensing fee is included. It is not.
    2. State the coverage: 13,648 of 20,900 packs carry a price.
    3. Remove VAT at 2.1 percent before anything else.
    4. Invert the margin schedule numerically, and remember that both margins sit on the manufacturer price.
    5. Mark every derived manufacturer price as derived, with the rule version and the date.
    6. Carry the attribution and the extract date that the licence requires.
    7. Diary the rule change on 20 January 2027.

    Three traps specific to the French file

    Reading the price column as a manufacturer price. It is a gross consumer figure. The distance between the two is not a rounding difference, it is two trade margins plus tax.

    Treating a missing price as a price of zero. Roughly a third of the rows have no price because the product is outside the reimbursed segment. Those rows belong in a separate bucket, not in an average.

    Joining on the pack description. The description carries the pack size in free text with inconsistent grammar, and combination packs carry two numbers. The code is a valid GTIN across the entire file, so the join belongs on the code and the description belongs in the validation step.

    A fourth point is organisational rather than technical. The main file is monthly, but partial files appear more often, so a pipeline that fetches only once a month will lag behind the fastest available state of the data. Decide deliberately which rhythm you promise your own users, and record the extract date with every delivery.

    Where France fits in European comparisons

    France appears in several national reference price baskets, including the Dutch maximum price calculation, and it is one of the countries that publishes a gross figure while its basket partners publish net ones. That asymmetry is exactly why the normalisation above matters: without it, France looks systematically expensive against countries that publish at manufacturer level, for reasons that have nothing to do with French prices.

    Read together with the German system, France is also the clearest illustration of the two European models. Germany publishes and negotiates at manufacturer level and the negotiated figure becomes visible. France publishes at consumer level and leaves the manufacturer figure to be reconstructed, except in a single query interface that no pipeline can use.

    Conclusion

    The French price file is open, licensed for commercial use, fetchable from a constant URL, and keyed by a code that doubles as a GTIN. Those four properties make it one of the best starting points in Europe. What it does not give you is a manufacturer price, a complete national universe or a stable formula: two thirds coverage, a numerically inverted margin schedule, and a rule change already scheduled for January 2027.

    Related reading: European Drug Pricing Database: how cross-border prices work and Pharma pricing Germany: how the system works, plus VAT on medicines in Europe and wholesale and pharmacy margins.

    pharmazie.com is the consolidated pharmaceutical data platform by DACON Datenbank Consulting GmbH that bundles 25+ specialist databases into a single search, exclusively for healthcare professionals. Price coverage focuses on the DACH region and a number of further EU countries, with more countries following in the coming months.

    Author Image
    Ursula Tschorn
    Ursula Tschorn is CEO of DACON Datenbank Consulting GmbH and has been building pharmaceutical information infrastructure since 1989. She writes on drug data standards, pricing regulation and market access in the DACH region.

    FAQ

    Where can I find French drug prices?
    How do I calculate the French manufacturer price?
    Does the French database contain the manufacturer price?
    How complete is the French price file?
    What is the prix fabricant hors taxes?
    May French price data be used commercially?
    Since 1989, over 1,000 customers have placed their trust in our data.

    The most comprehensive drug database for pharma professionals.