# FDA Medical Device Manufacturer Registry (`automation-lab/fda-medical-device-manufacturer-registry`) Actor

Search official openFDA medical device establishment registrations and listed products by manufacturer, device, product code, or registration number.

- **URL**: https://apify.com/automation-lab/fda-medical-device-manufacturer-registry.md
- **Developed by:** [Automation Lab](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.93 / 1,000 item extracteds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## FDA Medical Device Manufacturer Registry

Search official openFDA medical device establishment registration and device listing records. Find FDA medical device manufacturers by establishment name, listed device name, product code, or registration number. Export one dataset row per FDA registration/listing API record, including establishment location, owner/operator, activities and listed products. No FDA API key or browser session is required.

### Who is it for

Medtech procurement teams can verify supplier identity and location; regulatory researchers can inspect a registered firm's listed product codes; data teams can refresh a bounded establishment export in a spreadsheet or pipeline. This is a public-data research tool, not a certificate of current compliance or a verified supplier directory.

### Why use the official record

Each row links to the precise openFDA API request that returned it. You can check the registration number against the FDA source. Product-code searches retain only matching listed products in the row, so unrelated products attached to the same registration are not mislabeled as matches. The output stays in the default Apify dataset for CSV, Excel and JSON exports.

### What data is returned

| Field | Meaning |
| --- | --- |
| `registrationNumber`, `feiNumber` | FDA identifiers as supplied by the record |
| `establishmentName`, `ownerOperator`, `establishmentTypes` | Registered establishment, owning firm and activities |
| `address`, `city`, `state`, `country` | Establishment address and geography |
| `listedDevices`, `productCodes` | Listed device names, codes, class and regulation number when available |
| `sourceUrl`, `retrievedAt` | Official query URL and retrieval timestamp |

Some source fields are absent; nulls and empty arrays mean FDA did not provide them on that record. The same registration number may appear on multiple API records for different listings. Rows are not unique companies.

### Get started

1. Select a search mode and enter an establishment name, device name, three-letter FDA product code, or registration number.
2. Optionally enter a two-letter US establishment state, such as `TN`.
3. Set `maxItems` (1–1,000), run the Actor, and inspect the default dataset.
4. Export the dataset from Apify Console or fetch it with the dataset API. Schedule the same input again to compare snapshots externally; the Actor does not perform change detection.

### Input parameters

| Input | Example | Behavior |
| --- | --- | --- |
| `mode` | `manufacturer` | `manufacturer`, `device`, `productCode`, or `registrationNumber` |
| `query` | `Medtronic` | Literal search value; product codes must be three letters, registration numbers 5–12 digits |
| `state` | `TN` | Optional two-letter state filter on the establishment address |
| `maxItems` | `25` | Maximum emitted rows, capped at 1,000 |

The `manufacturer` mode searches registered establishment names, not owner/operator names. A matching device name is searched in listed products; the whole listing record is returned. Input is validated before any API request.

### Example input

```json
{"mode":"manufacturer","query":"Medtronic","maxItems":2}
```

A live openFDA result for this input has registration number `1030489`, establishment `MEDTRONIC SOFAMOR DANEK USA, INC.`, city `Memphis`, state `TN`, and a listed product code `MQP`. Source fields vary over time; verify current values in the returned row rather than relying on the example.

### How much does it cost to search FDA device establishment records?

The Actor charges $0.005 for one `start` event per run and an `item` event per emitted registration/listing row. At BRONZE the item price is $0.008212; FREE $0.0094438, SILVER $0.0064054, and GOLD/PLATINUM/DIAMOND $0.0049272. These are monthly Store-spend tiers, **not** per-run volume discounts. Estimated BRONZE Actor event totals: one row $0.013212, five rows $0.04606, 25 rows $0.2103, 100 rows $0.8262. Final bills may vary with platform/account terms, refunds, fraud, disputes, taxes, corrections or clawbacks; earnings/payout estimates are not guaranteed. Empty searches charge only the start event. Exporting rows adds no Actor event charge. Check the live pricing panel for current prices.

### Integrations

Use a scheduled Apify task to rerun a fixed supplier-name lookup, export the dataset to a spreadsheet, and compare successive results in your own system. A product-code lookup can feed a sourcing shortlist; manually verify firms and FDA records before commercial use. Use webhooks or the dataset API to ingest completed runs into an ETL pipeline.

### Run with the Apify API

Replace `YOUR_TOKEN` with your Apify token. The sync endpoint returns dataset items for a short run:

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~fda-medical-device-manufacturer-registry/run-sync-get-dataset-items?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"mode":"productCode","query":"KWI","maxItems":5}'
```

JavaScript:

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/fda-medical-device-manufacturer-registry').call({ mode: 'manufacturer', query: 'Medtronic', maxItems: 10 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python:

```python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/fda-medical-device-manufacturer-registry').call(run_input={'mode': 'registrationNumber', 'query': '1030489', 'maxItems': 5})
print(client.dataset(run['defaultDatasetId']).list_items().items)
```

### MCP

Expose this Actor as a tool to Claude Code:

```bash
claude mcp add --transport http apify 'https://mcp.apify.com?tools=automation-lab/fda-medical-device-manufacturer-registry'
```

For Claude Desktop, Cursor, or VS Code, configure the same HTTP endpoint in the client's MCP server settings:

```json
{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/fda-medical-device-manufacturer-registry"}}}
```

Example prompts: “Find Medtronic establishment registrations and show the city and source URL”; “Which Tennessee records under registration 1030489 list medical devices?” The MCP client invokes the Actor and returns its dataset items.

### Output coverage

The default dataset contains registration/listing rows rather than a deduplicated manufacturer table. Product names and classification metadata are supplied only where openFDA includes them. To produce an owner/operator list, group or deduplicate exported rows downstream by the identifiers appropriate to your use case.

### Limits and freshness

openFDA is a periodically refreshed public snapshot, not a real-time compliance registry. The API search window is limited to the first 1,000 source results; a very broad query can exceed that window. Narrow by name, identifier or state. Anonymous API requests may be rate limited. Transient 429 and 5xx responses are retried twice; persistent errors fail the run instead of silently returning partial results. A valid query with no FDA matches returns an empty dataset.

### Legality and responsible use

The FDA cautions that openFDA results are unvalidated and should not be relied on for medical-care decisions. Establishment registration and device listing do not mean FDA approval, clearance, endorsement or a safety determination. Review the [openFDA terms](https://open.fda.gov/terms/) and [dataset documentation](https://open.fda.gov/apis/device/registrationlisting/) and independently verify critical supplier decisions. Avoid republishing personal contact data without lawful grounds.

### FAQ

**Why are there several rows for one registration?** FDA may expose multiple listing records for a registration. Use registration number and product context together; do not count rows as unique businesses.

**Why did a product-code query return fewer rows than the FDA total?** The API's search may match a product elsewhere in a nested array. This Actor discards rows whose returned listed products do not include the requested code.

**Why is my search empty?** Check exact spelling, search mode and state filter. Try a known company without state first; an empty FDA response is not an API outage.

**What if the run fails?** Check the run log for a validation or FDA HTTP error; reduce query breadth or rerun after upstream rate limits subside. Failed results do not earn per-item charges.

### Related automation-lab Actors

For drug application approvals rather than device registrations, see [FDA Drug Approval Records Search](https://apify.com/automation-lab/fda-drugs-approval-records-search). For FDA drug shortage information, see [FDA Drug Shortages Scraper](https://apify.com/automation-lab/fda-drug-shortages-scraper). These are distinct datasets and do not imply device registration status.

# Changelog

This Actor's version history is a separate document: https://apify.com/automation-lab/fda-medical-device-manufacturer-registry/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Field to search in the openFDA device registration and listing dataset.

## `query` (type: `string`):

For an establishment or device, enter a real name; for product code, three letters; for registration number, 5–12 digits.

## `state` (type: `string`):

Restrict establishment address to a two-letter US state code, such as MN.

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

Maximum registration/listing records to output; the openFDA search window covers the first 1,000 source results.

## Actor input object example

```json
{
  "mode": "manufacturer",
  "query": "Medtronic",
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

OpenFDA establishment and listed-device records in the default dataset overview view

# 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 = {
    "query": "Medtronic"
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/fda-medical-device-manufacturer-registry").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 = { "query": "Medtronic" }

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/fda-medical-device-manufacturer-registry").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 '{
  "query": "Medtronic"
}' |
apify call automation-lab/fda-medical-device-manufacturer-registry --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/fda-medical-device-manufacturer-registry"
        }
    }
}
```

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/5H0wnW1I5bZmXjf8g/builds/yex8trmr1WzhTpS1m/openapi.json
