EU Pharma Sites Graph - EudraGMDP Manufacturers & Distributors avatar

EU Pharma Sites Graph - EudraGMDP Manufacturers & Distributors

Pricing

from $5.00 / 1,000 site returneds

Go to Apify Store
EU Pharma Sites Graph - EudraGMDP Manufacturers & Distributors

EU Pharma Sites Graph - EudraGMDP Manufacturers & Distributors

Every EU/EEA pharma site from EMA EudraGMDP with all its authorisations and certificates (WDA, MIA, GMP, GDP, API) and status signals: active WDA, valid GDP, GMP non-compliance. Company graph by OMS ID.

Pricing

from $5.00 / 1,000 site returneds

Rating

0.0

(0)

Developer

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

EU Pharma Sites Graph — every pharma factory and warehouse in Europe, with its licences

One row per pharmaceutical site (factory, warehouse, distributor premises) registered with the European Medicines Agency (EMA EudraGMDP), with all its licences and certificates and simple yes/no answers such as "is it allowed to distribute medicines?" or "did it fail a factory inspection?".

No pharma background needed — this page explains everything in plain words.


What is a site?

A site is one physical place where medicines or their ingredients are made, stored or shipped: a factory, a logistics warehouse, a hospital pharmacy that manufactures, a blood centre...

  • One company can own many sites. Each site has an official ID (LOC-…) and belongs to a company ID (ORG-…).
  • Each site can hold several documents from regulators:
DocumentPlain meaning
WDALicence to store and distribute medicines (wholesaler)
MIALicence to manufacture or import medicines
GMPCertificate: the factory passed its inspection
GDPCertificate: the warehouse passed its inspection (storage, temperature, traceability)
API-REGRegistration to make, import or trade active ingredients

So a row tells you, for one building: who owns it, where it is, what it's allowed to do, and whether its inspections are in order.

Company ORG-100010408 (BITRADE d.o.o.)
└── Site LOC-100068134 Blatnica 12, Trzin, Slovenia
├── WDA licence 801-39/2021-11 Active 2022-02-22
└── GDP certificate 402-16/2023-4 Active 2023-08-29

How to run it (3 steps)

  1. Countries → e.g. Spain (≈1,700 sites) or All EEA countries (≈24,000 sites, several hours).
  2. Optionally Company / site name contains → e.g. pharma.
  3. Click Start. Download as Excel, CSV or JSON from the Output tab.

Optional:

  • Include full licence details — opens every document to add inspection dates, authorised activities and special product types (cold chain, vaccines, blood products, narcotics). 2–3 s per document.
  • Filters — address, exact site ID, only sites with current licences, failed-inspection check.

What you get: field-by-field guide

ColumnPlain meaningExample
siteNameName of the site / company at that locationBITRADE d.o.o.
omsOrganisationIdOfficial company ID — group by it to see a company's whole footprintORG-100010408
omsLocationIdOfficial site ID — best key to join with other dataLOC-100068134
ncaReferenceKeyThe national authority's own reference for the site1648016744469
address.street / city / postcode / country / countryCodeWhere it isTrzin, 1236, SI
documentCountHow many current licences/certificates it has2
documents[]One entry per document: type, number, nca (issuing authority code), status, issueDate, permalinksee example
documents[].statusDocument status, normalised (Active); statusRaw keeps the original spellingActive
documents[].detailFull document content, only with Include full licence details
nonComplianceStatements[]Failed factory inspections linked to this site
_flagsData-quality warnings (see below)

signals — ready-made yes/no answers

SignalAnswers the question
hasActiveWDAIs it licensed to distribute medicines right now?
hasActiveMIAIs it licensed to manufacture/import right now?
hasActiveGDPDoes its warehouse hold a current inspection certificate?
hasActiveGMPDoes its factory hold a current inspection certificate?
hasAPIRegIs it registered for active ingredients?
hasNonComplianceDid it fail a factory (GMP) inspection that is still current? (null if the check was off or unavailable — never a guessed "no")
documentTypesList of document types it holds
latestIssueDateMost recent document date
latestInspectionDateMost recent inspection (only with details)

All signals are computed only from data the source publishes.

_flags — warnings, never filters

FlagMeaning
no_documentsThe site exists in the register but lists no current licence (about 30% of sites). Kept so you decide
encoding_suspectGarbled characters in the source address; kept as published
address_unparsedCity/postcode couldn't be separated
uk_legacy_pre2021UK data frozen since Brexit (Northern Ireland excepted)
detail_fetch_failedA document's details couldn't be loaded
noncompliance_check_unavailableThe failed-inspection check couldn't run this time

Example (real record)

{
"siteId": 190000,
"siteName": "BITRADE podjetje za trgovino na debelo in drobno d.o.o.",
"omsOrganisationId": "ORG-100010408",
"omsLocationId": "LOC-100068134",
"address": { "street": "Blatnica 12", "city": "Trzin", "postcode": "1236", "countryCode": "SI" },
"documentCount": 2,
"documents": [
{ "type": "WDA", "number": "801-39/2021-11", "nca": "SI_ARSZMP", "status": "Active", "issueDate": "2022-02-22" },
{ "type": "GDP", "number": "402-16/2023-4", "nca": "SI_ARSZMP", "status": "Active", "issueDate": "2023-08-29" }
],
"signals": { "hasActiveWDA": true, "hasActiveGDP": true, "hasActiveMIA": false, "hasNonCompliance": false,
"latestIssueDate": "2023-08-29" }
}

Reading it: a Slovenian wholesaler, licensed to distribute medicines, whose warehouse passed its last inspection. With details on, its licence also shows it handles cold-chain products.


EU Pharma Sites Graph input parameters

ParameterTypeDefaultDescription
countriesarray of strings["EEA"] (pre-filled: ["ES"])Where the sites are located. EEA = all EEA countries (about 24,000 sites, several hours), ALL = all countries (GMP/GDP include non-EEA sites), THIRD = only non-EEA countries; or any 2-letter country code.
siteNamestringemptyCompany / site name contains (at least 3 characters, for example pharma).
fetchDocumentDetailsbooleanfalseInclude full licence details: opens every document to add issuing authority, inspection dates, authorised activities and special product types. About 2-3 seconds per document.
maxItemsinteger (min 1)500 (pre-filled: 50)Stop after this many sites.
legalAddressstringemptyAddress contains (at least 3 characters): city, street, postcode.
omsLocationIdstringemptyLook up one exact site by its LOC-... ID.
skipSitesWithoutDocumentsbooleanfalseOnly sites with current licences: hides sites that list no licence or certificate (about 30% of sites).
crossCheckNonCompliancebooleantrueAdds signals.hasNonCompliance from current GMP non-compliance statements. Adds about 3 minutes per run.
documentTypesarray of strings["WDA","GDP","MIA","GMP","API-REG"]With details on, open only these document types.
startPageinteger (min 1)1Resume a long run from this results page (20 sites per page).
maxConcurrencyinteger (1-2)2Parallel requests, capped at 2 out of respect for the public EMA website.
proxyConfigurationobjectApify Proxy offNot needed: the source is public.
scopestringemptyLegacy and hidden; use countries instead.

Pre-filled input (the fastest way to try EU Pharma Sites Graph):

{"countries": ["ES"], "maxItems": 50}

Ready-to-use examples

Copy any of these into the JSON input tab, or open the matching saved example from the Examples tab.

1. Every pharma site in Spain, licences grouped

{ "countries": ["ES"], "maxItems": 2000, "skipSitesWithoutDocuments": true }

2. All sites of one company (then group by omsOrganisationId)

{ "countries": ["EEA"], "siteName": "Novo Nordisk" }

3. Pharma sites in one city

{ "countries": ["AT"], "legalAddress": "Vienna", "maxItems": 500 }

4. Check one supplier site by its official ID

{ "countries": ["ALL"], "omsLocationId": "LOC-100001653", "fetchDocumentDetails": true }

5. Cold-chain / vaccine warehouses in the Netherlands (details on WDA only)

{ "countries": ["NL"], "fetchDocumentDetails": true, "documentTypes": ["WDA"], "skipSitesWithoutDocuments": true, "maxItems": 500 }

Example values for the empty fields

FieldTry one of these
Company / site name containsAlliance Healthcare, Phoenix, Novo Nordisk, Sanofi, Sandoz, Teva, Zentiva, Takeda, Fresenius Kabi, Gedeon Richter, Octapharma, Linde — or Logistics, Pharma, Apotheke
Address containsVienna, Warsaw, Budapest, Prague, Berlin, Hamburg, Munich, Barcelona, Madrid, Amsterdam, Paris, Milan, Dublin
Site ID (LOC-…)LOC-100000862 (Novo Nordisk, Hilleroed DK), LOC-100001653 (Gedeon Richter, Debrecen HU), LOC-100000528 (GSK Biologicals, Rixensart BE), LOC-100005629 (Laboratorios Normon, Tres Cantos ES), LOC-100068134 (BITRADE, Trzin SI)

Use cases for EU pharma site data (EudraGMDP)

  • Sales prospecting — every licensed distributor and manufacturer in a country, by site.
  • Pharma logistics — find warehouses with cold-chain or special products (with details).
  • Supplier checks — is this site licensed and inspected? Any failed inspection?
  • Data enrichment — join with your CRM or company registers via ORG-… / LOC-….

Run time

ScenarioTypical time
Failed-inspection check (once per run)~3 min
One country, e.g. Spain (≈1,700 sites)~15–20 min
All EEA (≈24,000 sites)~4 h
With full details+2–3 s per document

How much does it cost to scrape EU pharma sites from EudraGMDP?

Pay per result, no subscription. Prices per 1,000 events (Apify plan discounts applied automatically):

EventFreeBronzeSilverGold+
Site returned (one row, all documents grouped + signals)$8.00$7.00$6.00$5.00
Document details loaded (only with Include full licence details)$3.00$2.50$2.00$1.50

Failed detail loads are never charged. Typical costs (Free plan):

RunSitesCost
One company or city10–200$0.08–$1.60
Spain~1,700~$13.60
Whole EEA~24,000~$190

Worked example (BRONZE tier): 100 sites with Include full licence details on, loading 150 documents: 100 x $0.007 = $0.70 for the sites, plus 150 x $0.0025 = $0.375 for the document details, plus the $0.00005 Actor start event (512 MB = one event). Total: about $1.08. Without details the same 100 sites cost about $0.70.

Set Max sites to cap your spend on any run.

EudraGMDP source, limits and good to know

  • Source: EudraGMDP is run by the EMA; content is provided by national authorities, and the EMA accepts no liability for it.
  • The public site list shows current documents only: withdrawn licences and failed inspections are not attached by the source (we add failed factory inspections via a separate check; failed warehouse inspections are available in EudraGMDP Pharma Registry).
  • No personal data is collected. We query the EMA website politely (max 2 parallel requests).

FAQ

Difference with EudraGMDP Pharma Registry? That actor gives one row per document (and covers failed warehouse inspections and certificate dates in bulk); this one gives one row per site with everything grouped.

How do I see all sites of one company? Group rows by omsOrganisationId.

How much does a test run cost? The pre-filled input (Spain, 50 sites) on the Free plan is 50 x $0.008 = $0.40, plus the $0.00005 Actor start event. Max sites caps any run.

Why is hasNonCompliance sometimes null? It is null when the failed-inspection check was switched off or could not run (flag noncompliance_check_unavailable); it is never a guessed "no".

How often should I run it? The Actor reads the EMA website live on every run, so run it when you need current data. It has no change-tracking mode; for scheduled alerts on changed documents see EudraGMDP Pharma Registry, which offers Return only changes.

Does it need proxies or collect personal data? No proxy is needed (the source is public) and no personal data is collected.

Something looks wrong? Open an issue from the Actor page and include the omsLocationId of the site.