# France Medicines Database Scraper - BDPM Drugs (`dltik/bdpm-medicaments-fr-scraper`) Actor

Search the official French public drug database (BDPM). 15K+ medications: active substances + dosage, form, route, marketing status, holder/labo, reimbursement rate and price. Filter by name, substance, manufacturer or reimbursed-only. For pharma/health SaaS, pharmacies, health data. $2/1K.

- **URL**: https://apify.com/dltik/bdpm-medicaments-fr-scraper.md
- **Developed by:** [dltik](https://apify.com/dltik) (community)
- **Categories:** Business, AI, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 medication scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## France Medicines Database Scraper — BDPM (Drugs, Reimbursement) API

> Query the **official French public drug database** — the **BDPM (Base de Données Publique des Médicaments)** published by the ANSM, HAS and the Ministry of Health. **15,000+ medications** with composition, active substances + dosage, pharmaceutical form, route, marketing status, holder/laboratoire, **reimbursement rate and price**. Filter by name, substance, manufacturer or reimbursed-only and get a clean, exportable dataset. **HTTP-only, $0.002 per medication**.

⭐ **Bookmark this France Medicines Database Scraper** — Apify ranks actors by bookmarks, so it directly helps the visibility of this scraper on the Apify Store.

### What is the France Medicines Database Scraper?

The **France Medicines Database Scraper** is an Apify actor that turns the [official BDPM](https://base-donnees-publique.medicaments.gouv.fr/) into a filterable, exportable dataset. The Base de Données Publique des Médicaments is the authoritative French registry of every medication with marketing authorisation (AMM) in France, maintained jointly by the ANSM, the HAS and the Assurance Maladie.

The BDPM is published as raw, Latin-1 encoded TSV files split across several tables. This actor downloads them, **joins the medication table with the composition and presentation tables on the CIS code**, and returns one clean, fully-typed row per medication — including the active substances, the reimbursement rate and the public price.

### Why it matters: pharma and health data

Health and pharma software constantly needs a reliable, up-to-date medication reference: composition for drug-interaction checks, reimbursement rates for cost simulation, CIS/CIP codes for prescription and dispensing systems. The BDPM is the source of truth, but its raw TSV format (Latin-1, multi-file, tab-separated) is awkward to consume. This scraper does the joining and normalisation for you.

### Use cases

- **Pharma / health SaaS** — seed or refresh a medication reference with composition, status and reimbursement.
- **Pharmacies & dispensing tools** — pull CIS/CIP codes, prices and reimbursement rates.
- **Drug-interaction & pricing engines** — get active substances + dosage per medication.
- **Market & reimbursement analysis** — analyse the catalogue of reimbursed drugs by substance, labo or rate.
- **Health data science** — export the full ~15K-drug database for research.

### Input

```json
{
  "substance": "paracetamol",
  "reimbursed_only": true,
  "maxResults": 200
}
````

- `query` — drug-name keyword (`doliprane`, `amoxicilline`).
- `substance` — active ingredient / INN (`paracetamol`, `ibuprofene`).
- `labo` — manufacturer / AMM holder (`sanofi`, `biogaran`).
- `reimbursed_only` — keep only medications with a reimbursement rate.
- `maxResults` — cap on rows (aliases `limit`, `max`).

### Output

```json
{
  "type": "medication",
  "cis_code": "60904643",
  "name": "CODOLIPRANE 500 mg/30 mg, comprimé",
  "pharmaceutical_form": "comprimé",
  "routes": ["orale"],
  "active_substances": ["PARACÉTAMOL", "PHOSPHATE DE CODÉINE HÉMIHYDRATÉ"],
  "holder_labo": "OPELLA HEALTHCARE FRANCE",
  "marketing_status": "Commercialisée",
  "reimbursed": true,
  "reimbursement_rates": ["65%"],
  "min_price_eur": 2.74,
  "max_price_eur": 2.74,
  "amm_date": "2013-05-10",
  "presentations": [
    { "cip13": "3400927562396", "label": "plaquette de 16 comprimés", "reimbursement_rate": "65%", "price_eur": 2.74 }
  ]
}
```

### Pricing

**PAY\_PER\_EVENT — $0.002 per medication** (= $2 per 1,000). Free actor starts. No charge when nothing matches.

### FAQ — BDPM drug database

**Where does the data come from?** The official BDPM (base-donnees-publique.medicaments.gouv.fr), published as open data by the ANSM / HAS / Ministry of Health. No key required.

**Does it include reimbursement rate and price?** Yes — joined from the BDPM presentation table (CIS\_CIP). A medication may have several presentations; the row exposes all rates and the min/max price.

**Does it include the active substances?** Yes — joined from the composition table (CIS\_COMPO), with dosage.

**Can I export the whole database?** Yes — leave all filters empty and set `maxResults` high to export all ~15,000 medications.

***

⭐ **Found this useful? Bookmark this France Medicines Database Scraper** — it's the strongest signal for Apify Store ranking.

#### Related actors

- [France Public Administration Directory Scraper](https://apify.com/dltik/annuaire-administration-fr-scraper) — 94K+ public bodies with contacts
- [Pappers Sirène Scraper](https://apify.com/dltik/pappers-sirene-scraper) — 26M French companies (SIREN/SIRET)
- [data.gouv.fr MCP Server](https://apify.com/dltik/mcp-server-data-gouv) — French open-data catalog for AI agents

License: MIT · Author: [dltik](https://apify.com/dltik)

# Actor input Schema

## `query` (type: `string`):

Search the medication name (case/accent-insensitive). Examples: 'doliprane', 'amoxicilline', 'ventoline'. Matches anywhere in the brand/INN name.

## `substance` (type: `string`):

Filter by active ingredient / INN (case/accent-insensitive). Examples: 'paracetamol', 'ibuprofene', 'amoxicilline'. Matches the BDPM composition data.

## `labo` (type: `string`):

Filter by AMM holder (laboratoire). Examples: 'sanofi', 'biogaran', 'mylan'. Matches anywhere in the holder name.

## `reimbursed_only` (type: `boolean`):

If true, return only medications with at least one reimbursed presentation (a reimbursement rate on file).

## `maxResults` (type: `integer`):

Max medications to return. Aliases accepted: 'limit', 'max'. Each one is charged at the per-event price - start small. The full database is ~15,000 medications.

## `proxyConfig` (type: `object`):

Optional. The BDPM open data files have no anti-bot, so proxy is rarely needed.

## Actor input object example

```json
{
  "reimbursed_only": false,
  "maxResults": 50,
  "proxyConfig": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Medication records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/bdpm-medicaments-fr-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("dltik/bdpm-medicaments-fr-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call dltik/bdpm-medicaments-fr-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=dltik/bdpm-medicaments-fr-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "France Medicines Database Scraper - BDPM Drugs",
        "description": "Search the official French public drug database (BDPM). 15K+ medications: active substances + dosage, form, route, marketing status, holder/labo, reimbursement rate and price. Filter by name, substance, manufacturer or reimbursed-only. For pharma/health SaaS, pharmacies, health data. $2/1K.",
        "version": "1.0",
        "x-build-id": "xJFbaT5sj3nvEFDcw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/dltik~bdpm-medicaments-fr-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-dltik-bdpm-medicaments-fr-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/dltik~bdpm-medicaments-fr-scraper/runs": {
            "post": {
                "operationId": "runs-sync-dltik-bdpm-medicaments-fr-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/dltik~bdpm-medicaments-fr-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-dltik-bdpm-medicaments-fr-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "title": "Drug name keyword",
                        "type": "string",
                        "description": "Search the medication name (case/accent-insensitive). Examples: 'doliprane', 'amoxicilline', 'ventoline'. Matches anywhere in the brand/INN name."
                    },
                    "substance": {
                        "title": "Active substance",
                        "type": "string",
                        "description": "Filter by active ingredient / INN (case/accent-insensitive). Examples: 'paracetamol', 'ibuprofene', 'amoxicilline'. Matches the BDPM composition data."
                    },
                    "labo": {
                        "title": "Manufacturer / holder",
                        "type": "string",
                        "description": "Filter by AMM holder (laboratoire). Examples: 'sanofi', 'biogaran', 'mylan'. Matches anywhere in the holder name."
                    },
                    "reimbursed_only": {
                        "title": "Reimbursed only",
                        "type": "boolean",
                        "description": "If true, return only medications with at least one reimbursed presentation (a reimbursement rate on file).",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max medications",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Max medications to return. Aliases accepted: 'limit', 'max'. Each one is charged at the per-event price - start small. The full database is ~15,000 medications.",
                        "default": 50
                    },
                    "proxyConfig": {
                        "title": "Proxy (rarely needed)",
                        "type": "object",
                        "description": "Optional. The BDPM open data files have no anti-bot, so proxy is rarely needed.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
