EMA Medicines Scraper / API: Shortages & Authorisations Watch avatar

EMA Medicines Scraper / API: Shortages & Authorisations Watch

Pricing

from $7.00 / 1,000 change returneds

Go to Apify Store
EMA Medicines Scraper / API: Shortages & Authorisations Watch

EMA Medicines Scraper / API: Shortages & Authorisations Watch

EU medicines regulatory watch: authorisations, withdrawals and shortages for your substances, twice a day. Reads EMA's published JSON files, diffs against your last run and returns only what changed, matched against your substances, ATC codes and marketing-authorisation holders.

Pricing

from $7.00 / 1,000 change returneds

Rating

0.0

(0)

Developer

Kittiwake Data

Kittiwake Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

EU medicines regulatory watch: authorisations, withdrawals and shortages for your substances, twice a day. EMA shortage alerts and EMA authorisation alerts in one feed: new marketing authorisations, withdrawals and medicine shortages, filtered by active substance, ATC code or marketing-authorisation holder.

The European Medicines Agency publishes its full register of centrally authorised medicines, and its list of supply shortages, as downloadable files that it refreshes about twice a day. The files are public. What they do not tell you is what changed since you last looked.

This Actor reads both files, compares them with your previous run, and returns only the changes, matched against the substances, ATC codes and companies you care about.

What it is for

  • Generic and biosimilar developers: see a reference product's withdrawal or a competitor's new authorisation the day EMA publishes it.
  • Distributors, parallel importers and hospital pharmacy buyers: new and resolved shortages for the substances you handle.
  • Regulatory-intelligence and market-access teams: a change feed by ATC class or by marketing-authorisation holder, into your own systems.

What you get

changewhen
new-medicinea product number appears in EMA's medicines file for the first time
status-changedits status moved, e.g. Opinion → Authorised, Authorised → Withdrawn; previousStatus holds the old one
updateda field you receive changed without a status change (e.g. additional monitoring added)
removed-from-filea product number no longer appears in the file
new-shortage, shortage-status-changed, shortage-updated, shortage-removedthe same, for EMA's shortages file
watchlist-baselinefirst run only: the current state of everything on your watchlist, so you start with a picture rather than an empty table

A change to EMA's "last updated" date on its own is not returned: EMA touches that date without changing anything in the fields you receive.

Quick start

Watch two substances and an ATC class, every change on your watchlist:

{
"watchSubstances": ["semaglutide", "adalimumab"],
"watchAtcCodes": ["L01FX"],
"onlyWatchlistMatches": true
}

Every change in the EU register, medicines only:

{ "includeShortages": false }

Schedule it twice a day. Each run compares with the last run of the same saved task, so two tasks with different watchlists never consume each other's changes.

Input

fieldtypedefaultwhat it does
watchSubstancesstring[]—Active substances or INNs. Case-insensitive substring
watchAtcCodesstring[]—ATC codes. Prefix match: L01 catches L01FX22
watchHoldersstring[]—Marketing-authorisation holders. Case-insensitive substring
onlyWatchlistMatchesbooleanfalseReturn only watchlist hits
includeShortagesbooleantrueAlso read the shortages file

Output

One row per change. Every row has the same fields; the ones that do not apply are null.

{
"emaProductNumber": "EMEA/H/C/004127",
"medicineName": "Zonisamide Viatris (previously Zonisamide Mylan)",
"inn": "zonisamide",
"activeSubstance": "zonisamide",
"atcCode": "N03AX15",
"category": "Human",
"medicineStatus": "Withdrawn",
"marketingAuthorisationHolder": "Viatris Limited",
"generic": true,
"withdrawalOrLapseDate": "2026-09-20",
"medicineUrl": "https://www.ema.europa.eu/en/medicines/human/EPAR/zonisamide-viatris",
"shortageStatus": null,
"changeType": "status-changed",
"previousStatus": "Authorised",
"watchlistMatch": { "matchedOn": "substance", "value": "zonisamide" },
"source": "Source: European Medicines Agency (EMA), https://www.ema.europa.eu/en/documents/report/medicines-output-medicines_json-report_en.json"
}

Also returned: therapeuticArea, opinionStatus, biosimilar, orphan, conditionalApproval, additionalMonitoring, opinionAdoptedDate, marketingAuthorisationDate, ecDecisionDate, lastUpdatedDate, and for shortages shortageStart, expectedResolution and alternativesAvailable. Dates are ISO YYYY-MM-DD; a date EMA leaves blank is null.

What you pay for

eventpricewhen
Change returned$0.01one change row written to the dataset
EMA file read$0.01one file fetched, parsed and compared. Only when all of that succeeds
Watchlist match$0.05a change matched your watchlist. Zero if you supply no watchlist

Apify Store discounts apply by subscription plan: the prices above are the Free-plan prices; Starter pays 10% less, Scale 20% less and Business 30% less on every event.

Nothing is charged for a failed run. If a run reaches your spending limit, the changes it did not return are kept and come back on the next run.

What this Actor does not do

  • No personal data. It returns medicine, substance, status and company fields only. EMA's free-text indication and any person-level field are never copied.
  • No logins, proxies or retries. Two requests per run, ten seconds apart, with one identifying User-Agent. If EMA refuses a request, the run fails and says so; it does not try again.
  • No advice. EMA's pages are the authority; every row links to the official page.

Source and attribution

Data comes from the European Medicines Agency's published JSON files (ema.europa.eu/en/about-us/about-website/download-website-data-json-data-format). This Actor reformats and compares what EMA publishes and adds nothing to it.

EMA's legal notice allows reproduction "for non-commercial and commercial purposes … provided that EMA is always acknowledged as the source of the material. Such acknowledgement must be included in each copy of the material." So every row carries it, in the source field:

Source: European Medicines Agency (EMA), <the EMA file URL the row came from>

FAQ

Which medicines does it cover? The medicines in EMA's own register, which are the centrally authorised ones. A medicine authorised only by a national agency is not in EMA's file and is not covered.

Does it cover national shortage lists? No. It reads the shortages EMA itself publishes. National agencies' shortage registers are not read.

How fresh is it? EMA refreshes its files about twice a day, so schedule the Actor twice a day. Each run returns what changed since the previous run of the same task.

Can I export to CSV or Excel? Yes. The dataset downloads as JSON, CSV, Excel or XML, or you can read it over the Apify API.

Support

Use the Issues tab on this Actor. Include the run id and the input you used.