EUDAMED Devices & UDI Registry Scraper avatar

EUDAMED Devices & UDI Registry Scraper

Pricing

Pay per event

Go to Apify Store
EUDAMED Devices & UDI Registry Scraper

EUDAMED Devices & UDI Registry Scraper

πŸ”Ž Search and export public EUDAMED device and UDI registry records by identifiers, manufacturer, model, risk class, and status for EU compliance and market research.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Search and export public medical-device records from the European Commission's EUDAMED Device and UDI registry.

Turn UDI-DIs, manufacturer names, SRNs, product models, trade names, risk classes, EMDN codes, and status filters into a clean dataset ready for compliance work, market research, and monitoring.

No EUDAMED login or private credentials are required for the public device scope.

What does EUDAMED Devices & UDI Registry Scraper do?

The Actor queries the public EUDAMED device-search service and saves normalized device rows to an Apify dataset.

It can:

  • πŸ”Ž look up a specific UDI-DI or Basic UDI-DI;
  • 🏭 find devices associated with a manufacturer name or SRN;
  • πŸ₯ search by device name, model, trade name, or reference;
  • βš–οΈ narrow results with legislation, scope, type, risk class, EMDN, and status codes;
  • πŸ“š attach public version-history metadata;
  • πŸ“„ paginate through larger result sets;
  • πŸ“€ export records as JSON, CSV, Excel, XML, or RSS.

Who is it for?

Regulatory affairs and quality teams

Verify public registrations, compare identifiers, and prepare repeatable evidence for internal device files.

Medical-device manufacturers

Review how products and competitors appear in the public EU registry and check manufacturer identifiers.

Distributors and procurement teams

Confirm manufacturer, device status, UDI, and risk-class data before onboarding products.

Compliance consultants

Build reusable client checks without manually copying rows from the EUDAMED interface.

Market-intelligence analysts

Create structured lists of devices and manufacturers for segmentation, product research, and change tracking.

Why use this EUDAMED scraper?

Manual EUDAMED searches are useful for one-off checks, but repetitive research quickly becomes slow and difficult to reproduce.

This Actor provides:

  • structured fields instead of copied table cells;
  • deterministic filters that can be saved and rerun;
  • pagination and result limits;
  • machine-readable reference codes;
  • readable labels for common status and risk-class codes;
  • direct Apify API, webhook, schedule, and integration support;
  • normalized timestamps and source links for traceability.

What data can you extract?

FieldDescription
primaryDiPrimary UDI-DI
basicUdiBasic UDI-DI family identifier
uuidEUDAMED UUID
ulidEUDAMED ULID
basicUdiUlidLinked Basic UDI record identifier
tradeNameRegistered trade name
deviceNameRegistered device name
deviceModelDevice model
referenceManufacturer or registry reference
riskClassCodeOriginal EUDAMED risk-class code
riskClassHuman-readable risk class
deviceStatusCodeOriginal device-status code
deviceStatusHuman-readable device status
manufacturerNameLegal manufacturer name
manufacturerSrnManufacturer Single Registration Number
manufacturerStatusHuman-readable manufacturer status
authorisedRepresentativeNameEU authorised representative, when available
authorisedRepresentativeSrnRepresentative SRN, when available
versionNumberRegistry version number
latestVersionWhether this is the latest version
versionsOptional public version-history metadata
scrapedAtUTC extraction timestamp

How to scrape EUDAMED device records

  1. Open the Actor input page.
  2. Enter one or more device, manufacturer, or classification filters.
  3. Set a small maxItems value for the first run.
  4. Enable version history only when you need it.
  5. Click Start.
  6. Open the Dataset tab to inspect results.
  7. Export the dataset or connect it to your workflow.

The prefilled pacemaker model search is a low-cost smoke test.

Input options

Device identifiers

  • primaryDi β€” exact or partial primary UDI-DI supported by EUDAMED.
  • basicUdi β€” Basic UDI-DI family identifier.
  • reference β€” manufacturer or registry reference.

Names and models

  • deviceName β€” registered medical-device name.
  • deviceModel β€” model or model keyword.
  • tradeName β€” commercial trade name.

Manufacturer filters

  • manufacturerName β€” legal manufacturer name or keyword.
  • manufacturerSrn β€” EUDAMED manufacturer SRN.

Classification filters

  • legislationCode β€” applicable EUDAMED legislation code.
  • deviceScopeCode β€” device-scope reference code.
  • deviceTypeCode β€” device-type reference code.
  • riskClassCode β€” full risk-class code.
  • emdnCode β€” European Medical Device Nomenclature code.
  • statusCode β€” full device-status code.

Limits and paging

  • maxItems β€” maximum unique device rows to save.
  • pageSize β€” records requested per source page, from 1 to 300.
  • startPage β€” zero-based page for resumable exports.
  • language β€” two-letter EUDAMED language code.
  • includeHistoricalVersions β€” attach public version metadata.
  • additionalFilters β€” advanced official API query parameters.

Input example

{
"deviceModel": "pacemaker",
"statusCode": "refdata.device-model-status.on-the-market",
"includeHistoricalVersions": false,
"maxItems": 25,
"pageSize": 25,
"language": "en"
}

For a manufacturer lookup:

{
"manufacturerSrn": "IT-MF-000025272",
"maxItems": 100
}

Output example

{
"source": "EUDAMED",
"sourceUrl": "https://ec.europa.eu/tools/eudamed/#/screen/search-device",
"primaryDi": "D-899565UN",
"basicUdi": "B-899565UN",
"uuid": "f4cf4775-10c5-40f9-b1bf-fabfd8fdfe36",
"riskClassCode": "refdata.risk-class.class-iia",
"riskClass": "Class Iia",
"deviceStatus": "On The Market",
"manufacturerName": "MED ITALIA BIOMEDICA S.R.L",
"manufacturerSrn": "IT-MF-000025272",
"versionNumber": 1,
"latestVersion": true,
"reference": "899565",
"scrapedAt": "2026-07-14T00:00:00.000Z"
}

A source field can legitimately be null when EUDAMED does not publish it on the matching search row.

How much does it cost to scrape EUDAMED devices?

This Actor uses pay-per-event pricing: a $0.005 start fee plus one charge per saved device.

Apify tierPrice per deviceApprox. 1,000 devices incl. start
Free$0.00017037$0.1754
Bronze$0.00014815$0.1532
Silver$0.00011556$0.1206
Gold$0.000088891$0.0939
Platinum$0.000059261$0.0643
Diamond$0.000041483$0.0465

You pay for produced records rather than a monthly data subscription. Platform compute is covered by the pay-per-event price. The final run cost is visible in the Apify Console.

Use a low maxItems value to validate your filters before a larger export.

Pagination and large exports

EUDAMED uses zero-based result pages.

The Actor automatically advances pages until it reaches maxItems or the final source page. It deduplicates rows by UDI-DI and version number.

For resumable jobs:

  1. choose a fixed pageSize;
  2. run from startPage: 0;
  3. record the last completed page;
  4. resume with a later startPage;
  5. merge datasets using UDI-DI plus version number.

Source records can change between runs, so a stable identifier is better than relying on row order.

Historical versions

Set includeHistoricalVersions to true to call the public EUDAMED versions endpoint for every device.

The versions array may include:

  • version UUID and ULID;
  • version number;
  • latest-version flag;
  • version state code;
  • last-update date.

Version lookup adds one request per device. Leave it disabled for broad discovery when current rows are sufficient.

Tips for reliable EUDAMED searches

  • Start with one strong identifier whenever possible.
  • Use the full SRN for manufacturer verification.
  • Preserve reference codes from previous output for precise reruns.
  • Keep the first test to 10–25 records.
  • Avoid combining unrelated filters that cannot match the same row.
  • Use official full status and risk-class codes.
  • Schedule recurring searches with identical input for change detection.
  • Compare primaryDi, versionNumber, and lastUpdateDate between snapshots.

Data quality and limitations

The Actor returns data published by the European Commission's public EUDAMED service.

Keep in mind:

  • not every field is populated for every device;
  • some fields depend on the applicable legislation and record type;
  • public EUDAMED coverage evolves as modules and registration obligations change;
  • readable labels are derived from official reference codes;
  • version history contains metadata exposed by the public version endpoint;
  • EUDAMED source availability and behavior can change without notice.

The Actor does not certify a device, assess conformity, or replace professional regulatory advice.

Scheduling and monitoring

Apify schedules can rerun an input hourly, daily, weekly, or monthly.

A practical monitoring workflow is:

  1. save a manufacturer, model, or UDI search as a task;
  2. schedule the task;
  3. send each dataset to a webhook or storage system;
  4. compare stable identifiers and version fields;
  5. notify a compliance owner when status or version changes.

For sparse checks, a small scheduled lookup can be more useful than repeatedly exporting a full registry segment.

Integrations

Google Sheets

Send normalized rows to a sheet used by regulatory or procurement teams.

Slack or Microsoft Teams

Post a message when a scheduled device lookup returns a new status or version.

Make and Zapier

Trigger downstream enrichment, approval, or ticket workflows after each run.

Webhooks

Subscribe to run completion and fetch the default dataset through its API URL.

Data warehouses

Export JSON or CSV to BigQuery, Snowflake, PostgreSQL, or an object-storage pipeline.

Use with the Apify API β€” JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/eudamed-devices-udi-registry-scraper').call({
deviceModel: 'pacemaker',
maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use with the Apify API β€” Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/eudamed-devices-udi-registry-scraper').call(
run_input={'manufacturerName': 'MED ITALIA', 'maxItems': 50}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with the Apify API β€” cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~eudamed-devices-udi-registry-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"primaryDi":"D-899565UN","maxItems":10}'

Fetch results using the defaultDatasetId returned by the completed run.

Use EUDAMED data with MCP

Connect the Actor through this Apify MCP endpoint:

https://mcp.apify.com/?tools=automation-lab/eudamed-devices-udi-registry-scraper

Claude Code setup

$claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/eudamed-devices-udi-registry-scraper"

Provide your Apify token securely when prompted, then ask Claude to run the Actor with structured input.

Claude Desktop setup

Add the server to Claude Desktop's MCP configuration:

{
"mcpServers": {
"apify-eudamed": {
"url": "https://mcp.apify.com/?tools=automation-lab/eudamed-devices-udi-registry-scraper"
}
}
}

Cursor setup

Open Settings β†’ MCP, add a remote HTTP server, and use the same apify-eudamed name and MCP URL. Cursor also accepts the mcpServers JSON shown above.

VS Code setup

Open the MCP server configuration in VS Code, choose an HTTP server, and add the same Apify MCP URL. Store credentials in VS Code's secure input flow rather than committing them.

Example prompts:

  • β€œFind 20 public EUDAMED devices matching the model pacemaker and group them by manufacturer.”
  • β€œLook up this UDI-DI and summarize its manufacturer, risk class, and status.”
  • β€œCompare version metadata for devices associated with this manufacturer SRN.”

EUDAMED provides a public search surface for public device information. This Actor accesses that anonymous public scope.

You remain responsible for:

  • your lawful purpose and jurisdiction;
  • compliance with applicable terms and database rights;
  • responsible request volume;
  • secure handling of exported data;
  • validating information before regulated decisions.

No login-only or private EUDAMED data is accessed.

Frequently asked questions

Do I need an EUDAMED account?

No. The Actor is designed for the anonymous public device-search scope.

Can I search by UDI-DI?

Yes. Use primaryDi or basicUdi depending on the identifier you have.

Can I search by manufacturer?

Yes. Use manufacturerName for text search or manufacturerSrn for a registry identifier.

Does it include certificates?

No. This Actor focuses on device and UDI registry rows. Use the related EUDAMED certificates actor for certificates.

Why are some output values null?

EUDAMED search rows do not populate every field for every record. Null means the public source did not supply that field on the result.

Why did my search return no records?

Check for incompatible filters, remove optional criteria, verify full reference codes, and try one identifier or model keyword first.

Why did a run fail with an HTTP error?

The European Commission service may be temporarily unavailable or filter a request. The Actor retries transient failures; rerun later if the final retry still fails.

How do I monitor changes?

Save the input as an Apify task, schedule it, and compare UDI-DI, version, status, and update fields between datasets.

Support

If a valid public EUDAMED search behaves differently in this Actor, open an issue from the Actor page and include:

  • the input with sensitive data removed;
  • the run URL;
  • the expected registry result;
  • the observed output or error.

That evidence helps reproduce source changes quickly.