# FDA Import Alert Monitor — DWPE Scraper (`maximedupre/fda-import-alerts`) Actor

Collect current FDA Import Alert findings from the official public FDA system. Filter by alert number, list type, or country, or compare runs to find added, removed, and changed findings with firm, product, and FDA source links.

- **URL**: https://apify.com/maximedupre/fda-import-alerts.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Automation, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 import alerts

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 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

### 🚨 FDA Import Alerts for compliance work

Customs brokers, importers, and trade-compliance teams can use this Actor to collect current FDA Import Alert findings from the public FDA system. Each saved row gives the alert, affected firm, product, list, country, notes, publication date, and FDA source link. Choose Changes since the previous run to find added, removed, and changed findings for the selected scope.

- Check the current records available when you run the Actor with **[FDA Alerts](https://apify.com/maximedupre/fda-import-alerts/examples/fda-alerts)**.
- Review findings on the Green List with **[FDA Green List](https://apify.com/maximedupre/fda-import-alerts/examples/fda-green-list)**.
- Browse the available alerts with **[FDA Import Alert List](https://apify.com/maximedupre/fda-import-alerts/examples/fda-import-alert-list)**.
- Filter findings by country with **[FDA Import Alerts by Country](https://apify.com/maximedupre/fda-import-alerts/examples/fda-import-alerts-by-country)**.
- Check the current findings available on the day you run the Actor with **[FDA Alerts Today](https://apify.com/maximedupre/fda-import-alerts/examples/fda-alerts-today)**.

#### 📦 Returned data

Each dataset row is one FDA Import Alert finding. The row includes the alert, affected firm, product, source, and change details.

- `changeType` is `current` for a current finding, or `added`, `removed`, or `changed` for a change run.
- `changePriority` marks the row as `normal` or `high`.
- `listType` is `red`, `green`, or `yellow`.
- `hasRedactions` is `true` when the FDA source has one or more redacted values.
- A changed finding can include `previousProduct` with product details from before the change.

#### ▶️ Running the Actor

1. Choose `current-findings` for current findings or `changes` to compare with the previous run.
2. Select one or more Red, Green, or Yellow lists.
3. Optionally enter alert numbers and country names.
4. Set `Maximum findings`, or leave it empty to return all available findings until the source is exhausted.
5. Run the Actor and open the default dataset.

#### ⚙️ Input

Use one target per run. Filled filters work together.

| Field | Type | What it does |
|---|---|---|
| `target` | string | Chooses current findings or changes since the previous run. |
| `alertNumbers` | array of strings | Keeps only the FDA Import Alert numbers you enter. Leave empty to include all alert numbers. |
| `listTypes` | array of strings | Keeps Red, Green, and/or Yellow FDA Import Alert lists. Leave empty to include all three. |
| `countries` | array of strings | Keeps findings whose country matches one of the names you enter. Leave empty to include all countries. |
| `maxItems` | integer | Sets a run limit. Leave empty to return all available findings until the source is exhausted. |

This small successful input uses the current-findings target:

```json
{
  "target": "current-findings",
  "alertNumbers": [
    "99-52"
  ],
  "listTypes": [
    "red"
  ],
  "maxItems": 1
}
```

#### 📤 Output

The top-level output has a `dataset` URL that opens the default dataset for the run. Dataset rows use this shape:

| Field | Type | What it does |
|---|---|---|
| `changeType` | string | Says whether the row is `current`, `added`, `removed`, or `changed`. |
| `changePriority` | string | Gives the row priority: `normal` or `high`. |
| `alertNumber` | string | Gives the FDA Import Alert number. |
| `alertType` | string | Gives the FDA Import Alert type. |
| `alertTitle` | string | Gives the alert title. |
| `listType` | string | Gives the FDA list: `red`, `green`, or `yellow`. |
| `firmName` | string | Gives the affected firm name. |
| `firmAddress` | string | Gives the affected firm address. |
| `country` | string | Gives the country listed for the firm. |
| `product` | object | Holds the product details in the finding. |
| `product.description` | string | Gives the product details listed by the FDA. |
| `product.code` | string | Gives the FDA product code when the source provides one. |
| `previousProduct` | object | Holds product details from before a change, when available. |
| `previousProduct.description` | string | Gives the previous product details. |
| `previousProduct.code` | string | Gives the previous FDA product code when shown. |
| `notes` | string | Gives notes listed in the FDA finding. |
| `publicationDate` | date | Gives the date the FDA published the alert or finding. |
| `sourceUrl` | URL | Links to the official FDA source page. |
| `hasRedactions` | boolean | Says whether the FDA source has one or more redacted values. |

##### Current finding

```json
{
  "changeType": "current",
  "changePriority": "normal",
  "alertNumber": "66-40",
  "alertType": "DWPE",
  "alertTitle": "\"Detention Without Physical Examination of Drugs From Firms Which Have Not Met Drug GMPs\"",
  "listType": "red",
  "firmName": "BABIKIAN HEALTHCARE PRODUCTS",
  "firmAddress": "8 North Ave, Apt 22 , Yerevan, ARMENIA",
  "country": "ARMENIA",
  "product": {
    "description": "Vitamins/Minerals (Human/Animal); Proteins/Unconv Dietary Supp (Human), Human N/Rx 1 Ingr",
    "code": "54 - D - --"
  },
  "notes": "",
  "publicationDate": "2026-06-22",
  "sourceUrl": "https://www.accessdata.fda.gov/cms_ia/importalert_189.html",
  "hasRedactions": false
}
```

##### Added finding

```json
{
  "changeType": "added",
  "changePriority": "high",
  "alertNumber": "99-52",
  "alertType": "DWPE",
  "alertTitle": "Detention Without Physical Examination of Certain Human Food Products From Certain Regions In Indonesia Subject To The Requirement of Import Certification Per Section 801(q)",
  "listType": "red",
  "firmName": "PT Natural Java Spice",
  "firmAddress": "Jl Raya Bumi Maspion I , Surabaya, Jawa Timur INDONESIA",
  "country": "INDONESIA",
  "product": {
    "description": "Spices, Flavors And Salts",
    "code": "28 - - - --"
  },
  "notes": "Firm is eligible for a TPP audit upon removal from IA # 99-51",
  "publicationDate": "2025-10-03",
  "sourceUrl": "https://www.accessdata.fda.gov/cms_ia/importalert_1188.html",
  "hasRedactions": true
}
```

#### 💳 Pricing

Pay-per-event pricing applies. The `Import alert` event costs $0.002 for each finding saved to the dataset. A run without a saved finding does not create this event.

#### 🔌 Integrations

Run the Actor in Apify Console, call it through the Apify API, schedule repeat runs, or use the default dataset in your workflow.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What is an FDA Import Alert?

FDA Import Alerts are public FDA entries about products or firms subject to import controls. This Actor returns source fields and does not give legal advice or an official compliance decision.

##### What is the difference between current findings and changes?

`current-findings` returns findings in the selected scope. `changes` returns findings added, removed, or changed since the previous run for that scope.

##### Does the Changes target keep a full history?

No. It compares the selected scope with the previous run and returns the changes it finds. Use your own dataset history when you need a longer archive.

##### Can I filter by country, alert number, or list?

Yes. Enter any alert numbers or country names, and choose any combination of Red, Green, and Yellow lists.

##### What happens when I leave a filter empty?

Empty Alert numbers, List types, or Countries include all values for that filter. An empty Maximum findings limit returns all available findings until the source is exhausted.

##### Does this return FDA import refusals, recalls, or warning letters?

No. It returns FDA Import Alert findings only. Use a different Actor for border refusals, recalls, warning letters, or other FDA enforcement sources.

##### Are redacted values preserved?

Yes. Values redacted by the FDA remain redacted, and `hasRedactions` marks the finding.

##### Does it need an FDA API key or login?

No. The Actor reads public FDA data, so you do not supply source credentials.

##### Is the data real-time?

The Actor gets the public FDA data available when it runs. It does not promise real-time updates or records that the FDA has not published.

##### Does each row represent a firm or a product?

Each row is one finding with firm and product details. A firm can appear in more than one row when the source lists more than one product.

### 📝 Changelog

#### 🧾 0.0: Initial release

- Collect current FDA Import Alert findings with filters for alert number, list, and country, or compare runs to identify added, removed, and changed findings.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~fda-import-alerts/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [FDA Food Recall Monitor](https://apify.com/maximedupre/fda-food-recalls-scraper) — review official FDA food recalls alongside import-alert findings.
- [FDA 510(k) Device Clearance Search](https://apify.com/maximedupre/fda-510k) — check medical-device clearance records during regulatory research.
- [FDA Import Alert & Supplier Ban Monitor](https://apify.com/achmadanam/fda-import-alert-monitor) — screen a supplier across import alerts and other FDA enforcement sources.
- [FDA Warning Letters Scraper](https://apify.com/taroyamada/fda-warning-letter-digest) — find public FDA warning letters for enforcement research.
- [FDA Medical Device Recall Search](https://apify.com/ryanclinton/fda-device-recalls) — look up structured FDA medical-device recall data.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose whether to return current findings or changes since the previous run.

## `alertNumbers` (type: `array`):

Optional FDA Import Alert numbers to include. Enter one number per line. Leave empty to include all alert numbers.

## `listTypes` (type: `array`):

Choose Red, Green, and/or Yellow FDA Import Alert lists. Leave empty to include all three.

## `countries` (type: `array`):

Optional country names to match against FDA findings. Enter one country per line. Leave empty to include all countries.

## `maxItems` (type: `integer`):

Optional limit for this run. Leave empty to return all available findings until the source is exhausted. The run stops after the number you enter.

## Actor input object example

```json
{
  "target": "current-findings",
  "alertNumbers": [
    "99-52"
  ],
  "listTypes": [
    "red"
  ],
  "maxItems": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset with the FDA Import Alert findings saved in this run.

# 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 = {
    "target": "current-findings"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/fda-import-alerts").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 = { "target": "current-findings" }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/fda-import-alerts").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 '{
  "target": "current-findings"
}' |
apify call maximedupre/fda-import-alerts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/fda-import-alerts",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/YjjZeROCje00FjbdC/builds/MNL77ulXZolazcCmv/openapi.json
