SummaryIf your job is to build a model, a dashboard or a pricing analysis on top of pharmaceutical data, you have probably learned the hard way that "we have the data" and "the data is usable" are two different statements. Most pharma data projects do not fail on the analysis. They fail on ingestion: identifiers that will not join, prices that mean different things in different rows, product images missing exactly where you need them, and a refresh cadence nobody documented.
This is a practitioner's guide to sourcing European and German pharmaceutical data for analytics and data-science work. It is written for the data engineer, data scientist or market-access analyst who has to get structured pharma data into a pipeline, not for a procurement committee. The focus is on what to insist on, which formats to prefer, and the specific pitfalls that turn a two-week integration into a two-quarter one.
The single most important decision in a pharma data project is which identifier you join on. Get this wrong and every downstream table inherits the error. In the German market that anchor is the PZN (Pharmazentralnummer), the central product number. It is stable, it maps to a specific pack, and it is the key that connects pricing, availability, active-ingredient and shortage records to each other. The identity body behind it, IFA, publishes reference material on the PZN and its relationship to the international IDMP standard, which is worth reading before you design your schema.
The classic mistake is joining on product name or manufacturer string. Those are not stable, they are not unique across markets, and they will silently drop or duplicate rows. A single reformulation or a change of marketing authorisation holder breaks a name-based join without raising an error. Insist on the following, in order:
When you evaluate a source, ask for a sample payload and try the join yourself before you sign anything. If the identifier does not survive a join against your own reference table, no amount of field richness will rescue the project.
Pricing is where analytics projects quietly go wrong, because a price is not one number. Depending on the field you may be looking at a manufacturer price, a pharmacy purchase price, a pharmacy retail price, or a reimbursement-relevant reference. Mixing them produces analyses that look plausible and are wrong, and the error is hard to spot precisely because the numbers are all in the right order of magnitude.
Two rules save you. First, treat every price field as typed: label which price it is, at what level of the supply chain it sits, and as of what date it is valid. A column called simply price is a liability. Second, be realistic about geographic scope. Structured, reliable price data is deepest for the German-speaking markets and selected additional EU countries; further countries are being added over the coming months. It is not uniformly available for all of Europe, regardless of what a vendor's landing page implies. Product and drug attribute data, by contrast, reaches a much wider footprint of more than 50 countries, but attribute coverage is not price coverage, and conflating the two is a common briefing error.
The official picture reinforces why price data fragments at the national border. Prices of publicly reimbursed medicines are set and published country by country. The EURIPID price database collates them, but access is reserved for national pricing and reimbursement authorities, not commercial analytics teams. That is the honest limit: there is no single public API that hands you comparable prices for all of Europe. Build your model around the coverage you actually have, and treat coverage expansion as a roadmap item rather than an assumption baked into your forecasts.
For catalogue, e-commerce, verification and clinical-safety use cases, product images and full product-master attributes (form, strength, pack size, packaging, storage, authorisation status) are not a nice-to-have. They are the dataset. Three practical questions separate a usable source from a scrape:
The distinction between an authoritative master and a scraped catalogue is not academic. A consumer price-comparison scrape can look complete and still lack a stable key, a defined price type and a provenance you can defend in an audit. When a regulator, a payer or a safety reviewer asks where a figure came from, "we scraped a pharmacy website" is not an answer. The national authorities remain the system of record for authorisation status; the German BfArM medicinal products portal and the EMA directory of national registers are where authorisation and, in Germany, shortage information originate. A commercial data layer should consolidate and key that information, not replace it.
For analytics workloads you generally want two access patterns, and a serious provider supports both:
A provider that offers only bulk forces you to re-ingest the world to catch a single price change. One that offers only an API makes your initial load and your disaster-recovery re-sync painful. You want both, from the same identifier space, so the increment and the full extract reconcile without a mapping layer between them.
Refresh cadence matters as much as format. In the DACH context the useful rhythm is: product master, shortage information and news updated daily; price updates on a bi-weekly (14-day) cycle. Document that cadence in your pipeline so downstream consumers know how fresh each field is. A pricing dashboard that renders a 14-day-old figure as if it were live is a misuse of the data, not a limitation of it. For procurement-connected workflows in Germany, the MSV3-Client interface (availability query and digital ordering) is live and in production as a standard add-on module on the buyer side; the seller-side MSV3-Server interface is currently in its pilot phase. MSV3 is a German-specific capability, not an international feature, so scope it accordingly if your pipeline serves markets beyond Germany.
Different questions call for different sources, and the honest answer is that no single source covers everything. The table below maps a data need to where you should start, and what a consolidation layer such as pharmazie.com adds on top.
| If you need | Start with | Best access pattern | What a consolidation layer adds |
|---|---|---|---|
| Authorisation status, SmPC, national register | National authority (BfArM, EMA national registers) | Official portal or register lookup | Keyed to the PZN and joined to price, image and substance data |
| German product master, pack attributes, images | IFA Article Master, ABDA-Artikelstamm | Bulk extract for load, JSON-by-PZN API for increments | One search across 25+ databases, daily-updated master |
| DACH price data, typed and dated | Licensed DACH price source (deepest coverage) | Bulk plus API, bi-weekly cadence | Price fields joined to the same identifier, scope stated honestly |
| EU-wide comparable reimbursed prices | EURIPID (authorities only) or national gazettes | Restricted, no commercial API | Selected EU markets covered, further countries being added |
| Substance-level (molecule) analytics | Structured substance dossiers | API lookup by substance and PZN | 63,589 substance dossiers with clinical fields |
| Shortage and availability signals (DE) | BfArM shortage register | Register plus MSV3-Client availability query | Lieferengpass-Datenbank keyed to the PZN, updated daily |
The pattern to notice: the official bodies are the system of record for authorisation and shortage, and they should be. What a commercial layer earns its place doing is consolidation and keying, turning a dozen fragmented sources into one identifier space you can actually query. The EMA services and databases directory is a good reminder of how many separate systems that fragmentation spans.
Before you commit budget or engineering time, run the source against these five criteria. Each one maps to a failure mode we see teams hit after signing, not before.
Get these five right and the analysis is the easy part. Get them wrong and no model will save you, because the errors are in the ingestion layer where they are hardest to see and most expensive to unwind.
pharmazie.com is a consolidation layer over the official and commercial sources described above, built for teams that need structured pharmaceutical data in a pipeline rather than a single-source lookup. It brings 25+ pharmaceutical databases into one search, keyed on the PZN, with structured substance dossiers, product master and images, and availability data through the Lieferengpass-Datenbank and the live MSV3-Client interface. Delivery is available as both a licensed bulk extract and a JSON-by-PZN API, with the product master and shortage data refreshed daily and prices on a bi-weekly cycle. Price coverage is deepest for DACH and selected additional EU markets, with further countries being added, while product and drug data spans more than 50 countries.
If you want to see the API and a sample JSON payload keyed on the PZN, a short technical walkthrough is the fastest way to judge whether the identifier, the fields and the cadence fit your pipeline. That is a better test than any landing-page claim, including this one.
pharmazie.com is operated by DACON Datenbank Consulting GmbH, founded in 1989. It consolidates more than 25 pharmaceutical databases into one search and provides structured, daily-updated product data for pharmaceutical professionals, with data licensing and API access for analytics teams. It is a professional service and is not intended for patients.
Join on the PZN (Pharmazentralnummer), the central product number for the German market. It is stable, maps to a specific pack, and is the key that links pricing, availability, active-ingredient and shortage records to each other. Joining on product name or manufacturer string is the classic mistake: those fields are not unique and will silently drop or duplicate rows. Where you work across borders, keep a documented mapping from the PZN to international authorisation identifiers.
For products authorised in Germany, the authoritative basis is the IFA Article Master, complemented by the ABDA-Artikelstamm and other ABDA data sources. This matters because master data (form, strength, pack size, packaging, storage, authorisation status) and product images should join to the same PZN as everything else. On pharmazie.com this sits inside a consolidation of 25+ pharmaceutical databases in one search.
No. Structured, reliable price data is deepest for the German-speaking (DACH) markets and selected additional EU countries; further countries are being added over the coming months. It is not uniformly available for all of Europe, regardless of what a vendor page implies. Product and drug data (attributes, images, authorisation status) covers a much wider footprint of 50+ countries. Treat price coverage as the coverage you actually have, and coverage expansion as a roadmap item, not an assumption.
Cadence differs by field, so document it in your pipeline. On pharmazie.com the product master, shortage information and news are updated daily, while price updates run on a bi-weekly (14-day) cycle. Downstream consumers need to know how fresh each field is: a dashboard that treats a bi-weekly price like a real-time figure will mislead. Shortage figures should always be attributed to the register that publishes them, such as the BfArM.
Both. Use a licensed bulk extract in a machine-readable format (structured files, not PDFs) for the initial load and full re-syncs so you can build your own warehouse. Use API access returning JSON keyed on the PZN for incremental updates and identifier lookups, so your pipeline refreshes only the fields that change. A provider that offers only one of the two forces an awkward compromise on either freshness or control.