# MHRA UK Drug & Device Safety Alerts & Recalls Scraper (`scrapers_lat/mhra-drug-device-alerts-scraper`) Actor

Scrape MHRA UK drug & medical device safety alerts and recalls: Field Safety Notices, National Patient Safety Alerts, Device Safety Information, medicines recalls. Filter by alert type, date, keyword, product.

- **URL**: https://apify.com/scrapers\_lat/mhra-drug-device-alerts-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Other, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## MHRA UK Drug & Device Safety Alerts & Recalls Scraper

Structured, up-to-date access to the **MHRA (UK Medicines and Healthcare products Regulatory Agency)** drug and medical device safety alerts — every Field Safety Notice, National Patient Safety Alert, Device Safety Information notice, medicines recall/notification and MHRA Safety Roundup, delivered as clean JSON.

Ideal for pharmacovigilance, medical-device compliance, hospital and pharmacy safety teams, KYB/regulatory monitoring and market-surveillance feeds. Complements our recall franchise (openFDA food recalls, FDA drug/device recalls, Health Canada recalls, EU RASFF and EU Safety Gate) with UK coverage.

### What you get

Each record includes:

- **Reference number** — the official MHRA identifier where present (e.g. `DSI/2026/007`, `NatPSA/2025/003`, `EL(26)A/36`)
- **Title** and **short summary**
- **Alert type** — Field Safety Notice, National Patient Safety Alert, Device Safety Information, Medicines recall / notification, or MHRA Safety Roundup
- **Issued date**, **first-published** and **last-updated** timestamps
- **Source URL** on gov.uk

With **Fetch full detail** enabled (recommended), each alert is enriched with:

- **Full body text** of the alert
- **Issue / hazard** description
- **Action required** / recommended advice
- **Who / what is affected**
- **Medical specialisms** the alert is relevant to
- **Attachments** — Field Safety Notice PDFs, recall letters and supporting documents (title + direct URL)
- **Withdrawal notice**, if the alert has been withdrawn

### Filters

- **Search keyword** — full-text across the MHRA feed (product, manufacturer, hazard)
- **Alert type** — one or more of the five MHRA categories
- **Issued date range** — from / to (YYYY-MM-DD)
- **Product / manufacturer filter** — match a device model, drug or manufacturer
- **Max alerts** — cap how many records you collect

### Output

One item per alert in the dataset. Export to JSON, CSV, Excel or via the Apify API. Use it to build a UK medical-safety monitoring feed, cross-reference against your product catalogue, or push alerts into your compliance workflow.

### Pricing

Pay per result. A small add-on applies only when an alert is enriched with its full structured detail. You are never charged for failed or empty lookups.

### Notes

- Covers the complete MHRA drug & device alerts archive (~1,400+ alerts) plus every new alert as it is published.
- Data originates from the MHRA / gov.uk. This is an independent tool and is not affiliated with or endorsed by the MHRA.

# Actor input Schema

## `maxAlerts` (type: `integer`):

Maximum number of MHRA drug / device safety alert records to collect.

## `searchKeyword` (type: `string`):

Full-text search across the MHRA drug & device alerts feed (product, manufacturer, hazard, e.g. 'insulin', 'infusion pump', 'contamination', 'Medtronic'). Leave empty to pull the most recent alerts.

## `alertType` (type: `array`):

Restrict to one or more MHRA alert types. Leave empty to include every type.

## `dateStart` (type: `string`):

Only keep alerts issued on or after this date. Optional. Format YYYY-MM-DD.

## `dateEnd` (type: `string`):

Only keep alerts issued on or before this date. Optional. Format YYYY-MM-DD.

## `productFilter` (type: `string`):

Optional. Only keep alerts whose title or summary contains this text (e.g. a device model, drug name or manufacturer).

## `withDetails` (type: `boolean`):

Fetch each alert's structured content to add the full body text, issue, action required, who is affected, medical specialisms, attachments (FSN PDFs / recall letters), first-published and last-updated dates. Turn off to return the fast listing-level fields only.

## `proxyConfiguration` (type: `object`):

Optional proxy settings. The MHRA / gov.uk source is an open, reliable endpoint reachable directly from a datacenter, so a proxy is not required. Enable only if you need one.

## Actor input object example

```json
{
  "maxAlerts": 10,
  "alertType": [],
  "withDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "maxAlerts": 10,
    "searchKeyword": "",
    "dateStart": "",
    "dateEnd": "",
    "productFilter": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/mhra-drug-device-alerts-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 = {
    "maxAlerts": 10,
    "searchKeyword": "",
    "dateStart": "",
    "dateEnd": "",
    "productFilter": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/mhra-drug-device-alerts-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "maxAlerts": 10,
  "searchKeyword": "",
  "dateStart": "",
  "dateEnd": "",
  "productFilter": ""
}' |
apify call scrapers_lat/mhra-drug-device-alerts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/mhra-drug-device-alerts-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jGIBK7MzPQYDFvt1V/builds/0TeYldNsMeiQZ6FFK/openapi.json
