# Compliance Risk Tool (`zentrafoundry/compliance-risk-tool`) Actor

Monitor EU Safety Gate alerts, EU ICSMS, European Database on Medical Devices and return product, brand, risk, authority, market, source URL, and business-action fields.

- **URL**: https://apify.com/zentrafoundry/compliance-risk-tool.md
- **Developed by:** [Zentra](https://apify.com/zentrafoundry) (community)
- **Categories:** AI, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 result delivereds

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

## Compliance Risk Tool

Monitor EU Safety Gate alerts, EU ICSMS, European Database on Medical Devices and return product, brand, risk, authority, market, source URL, and business-action fields.

### Who this is for

Marketplaces, sellers, importers, distributors, catalog teams, and compliance operators use this actor when they need focused compliance risk output instead of a broad generic scraper or manual checking.

### Buyer outcomes

- Catch compliance risk product-risk signals before manual checks miss catalog or marketplace exposure.
- Prioritize review with product, brand, risk type, authority, affected market, severity, dates, and source URL.
- Route source-backed decision-support alerts into compliance, catalog, seller, or importer workflows.

### Sources monitored

- [EU Safety Gate alerts](https://ec.europa.eu/safety-gate-alerts/)
- [EU ICSMS](https://webgate.ec.europa.eu/icsms/)
- [European Database on Medical Devices](https://ec.europa.eu/tools/eudamed/)
- [Apify MCP server](https://docs.apify.com/platform/integrations/mcp)

### Inputs

- `sourceMode`: use `sample` for a smoke run or configured official recall/safety source modes.
- `startUrls`: official alert, authority, recall, market-surveillance, or product-safety URLs when URL-backed lookup is supported.
- `sourceIds`: approved official recall, safety, medical-device, or compliance source identifiers.
- `maxItems`: bounded number of alert records to return.
- `sinceLastRun`: emit only new or updated safety alerts when scheduled.
- `watchlistTerms`: brand, product type, model, marketplace category, hazard, country, or authority keywords.
- `webhookUrl`: optional destination for compliance, catalog, seller, or importer review.

### How it transforms the input

- Input: official safety alert, recall, product-risk, medical-device, market-surveillance, or authority record.
- Transformation: normalize product, brand, risk, authority, affected market, severity, dates, and evidence fields.
- Output: source-backed alert record with recommended business action and decision-support context.

### Outputs

The actor returns recall and safety alert records with product, brand, risk type, authority, affected market, severity, dates, source URL, and recommended business action.

Family-specific fields to expect:

- `alertId`: Official alert or recall identifier.

- `productName`: Affected product name.

- `brand`: Brand or manufacturer when available.

- `category`: Product category.

- `hazard`: Hazard, defect, or risk description.

- `riskLevel`: Severity or risk level used for triage.

- `country`: Affected country or market.

- `authorityAction`: Recall, withdrawal, warning, corrective action, or authority note.

- `sourceUrl`: Official alert record URL.

- `recordId`: Stable record ID for exports, dedupe, and downstream joins.

- `title`: Human-readable record title for review and export.

- `sourceName`: Source identifier used to trace where the record came from.

- `sourceUrl`: Direct source URL for review and audit.

- `dedupeKey`: Stable key used for delta mode and duplicate suppression.

- `retrievedAt`: Timestamp showing when the actor retrieved or generated this record.

- `score`: Normalized field for filtering, routing, or downstream review.

- `scoreReasons`: Buyer-readable explanation for the score or match.

- `confidence`: Normalized field for filtering, routing, or downstream review.

- `errors`: Normalized field for filtering, routing, or downstream review.

- `runSummary`: Run-level summary for counts, filters, charges, and next actions.

### Pricing

This actor uses Apify pay-per-event pricing. Current public listing guidance: $29-$49 / 1,000 launch validation records until public data proof is complete. Charges are tied to buyer-visible value events such as `recall-alert`, `dataset-processed`, `record-saved`, `enriched-record`. Small validation runs are supported so you can inspect output before scaling a schedule.

- `recall-alert`: Charge when Compliance Risk Tool produces Risk Check. Typical price: $0.043. A run that produces 10 matching records charges only for the matched buyer-value events and remains capped by the run limit.
- `dataset-processed`: Base charge when Compliance Risk Tool writes a non-empty default dataset. Typical price: $0.011. A run that produces 10 matching records charges only for the matched buyer-value events and remains capped by the run limit.
- `record-saved`: Charge for each buyer-visible result saved by Compliance Risk Tool. Typical price: $0.003. A run that produces 10 matching records charges only for the matched buyer-value events and remains capped by the run limit.
- `enriched-record`: Charge when Compliance Risk Tool adds match scoring, source evidence, or enrichment to a saved result. Typical price: $0.022. A run that produces 10 matching records charges only for the matched buyer-value events and remains capped by the run limit.
- `first-run-cap`: Recommended first run budget cap. Typical price: $3.820. Start with the default small run, inspect the dataset, then raise maxItems or schedule recurring runs.

### API example

```bash
curl -X POST "https://api.apify.com/v2/actors/zentrafoundry~compliance-risk-tool/runs" \
+  -H "Authorization: Bearer $APIFY_TOKEN" \
+  -H "Content-Type: application/json" \
+  -d '{"maxItems":10,"sourceIds":["SAFETY-GATE","ICSMS","EUDAMED"],"includeSourceUrls":true,"includeMatchReasons":true,"outputMode":"buyer-ready-records"}'
```

### Recommended first run

```json
{
    "maxItems": 10,
    "sourceIds": [
        "SAFETY-GATE",
        "ICSMS",
        "EUDAMED"
    ],
    "includeSourceUrls": true,
    "includeMatchReasons": true,
    "outputMode": "buyer-ready-records"
}
```

### Sample output

Sample status: `sample_unavailable` at https://zentra.nimblique.studio/external/actor-review/samples/compliance-risk-tool.json. No fake sample is published; run a bounded real sample refresh before using examples in promotion.

### Recommended public tasks

```json
[
    {
        "name": "Review 10 safety alert matches",
        "description": "Low-cost validation run for checking product, brand, risk, authority, and source fields.",
        "input": {
            "maxItems": 10,
            "sourceIds": [
                "SAFETY-GATE",
                "ICSMS",
                "EUDAMED"
            ],
            "includeSourceUrls": true,
            "includeMatchReasons": true,
            "outputMode": "buyer-ready-records",
            "actorSlug": "compliance-risk-tool"
        }
    },
    {
        "name": "Daily recall and safety review",
        "description": "Recurring batch for new official recall, safety, or compliance-risk alerts.",
        "schedule": "Daily during local business hours",
        "input": {
            "maxItems": 25,
            "sourceIds": [
                "SAFETY-GATE",
                "ICSMS",
                "EUDAMED"
            ],
            "includeSourceUrls": true,
            "includeMatchReasons": true,
            "outputMode": "buyer-ready-records",
            "actorSlug": "compliance-risk-tool"
        }
    }
]
```

### Use cases

- Monitor compliance risk recalls and safety alerts without checking authority portals manually.
- Route high-risk product, brand, market, or category matches to compliance and catalog teams.
- Keep source URLs and authority context attached for review.
- Support marketplace, importer, seller, or distributor triage with decision-support signals.

### Trust and compliance

- Uses EU Safety Gate alerts, EU ICSMS, European Database on Medical Devices.
- Keeps source URLs and source identifiers in output records for auditability.
- Does not require private credentials unless a source is explicitly configured for approved authenticated access.
- Recall, safety, and compliance outputs are decision support only, not legal or regulatory advice.

### Limitations

- Results depend on public-source availability, source uptime, and source update cadence.
- Public sources can revise records after publication; rerun scheduled tasks for fresh evidence.
- Scores and match reasons are decision-support signals, not legal, financial, procurement, medical, safety, or regulatory advice.
- Large production runs can cost more than the default smoke run; start small, inspect output, then scale schedules.

### FAQ

**Can I run this without URLs?** Yes. The default `sample` mode is designed to succeed without user-supplied URLs, and URL-backed runs can use `startUrls` when needed.

**Can I schedule it?** Yes. Use `sinceLastRun`, `watchlistTerms`, and optional `webhookUrl` to turn the actor into a recurring alert or report workflow.

**How do I verify value before scaling?** Run the recommended first-run input, review the sample output fields, then increase `maxItems` or schedule recurring runs after the dataset matches your use case.

# Actor input Schema

## `watchlistTerms` (type: `array`):

Public product, vendor, or entity names to monitor with this product.

## `taskIntent` (type: `string`):

Stable product-specific purpose for this saved Apify task.

## `sourceMode` (type: `string`):

Sample emits public-safe Vendor Compliance Signal rows. Approved live source mode keeps the same output fields and only uses owner-approved public URLs.

## `outputMode` (type: `string`):

Use sample records for Apify Store QA or buyer-ready records for approved Vendor Compliance Signal delivery.

## `startUrls` (type: `array`):

Public URLs to use for live Vendor Compliance Signal extraction after source-policy approval. Leave empty for sample mode.

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

Caps the number of Vendor Compliance Signal rows written to the dataset.

## `perSourceLimit` (type: `integer`):

Caps validated rows from any one source before cross-source deduplication.

## `maxTotalChargeUsd` (type: `number`):

Buyer-selected spend ceiling; the Apify run-level maximum remains authoritative.

## `overallTimeoutSecs` (type: `integer`):

Stops additional source work once the bounded run deadline is reached.

## `requestTimeoutSecs` (type: `integer`):

Timeout applied independently to each approved source request.

## `maxRequestRetries` (type: `integer`):

Bounded retry count for transient source failures.

## `sinceLastRun` (type: `boolean`):

Uses stable Actor state to skip logical records delivered by earlier runs.

## `deltaMode` (type: `boolean`):

Preserves stable deduplication keys for recurring tasks and schedules.

## Actor input object example

```json
{
  "watchlistTerms": [
    "Deterministic fixture Vendor Name for Compliance Risk Tool"
  ],
  "taskIntent": "buyer-ready-product-run",
  "sourceMode": "sample",
  "outputMode": "sample-records",
  "startUrls": [],
  "maxItems": 1,
  "perSourceLimit": 25,
  "maxTotalChargeUsd": 5,
  "overallTimeoutSecs": 900,
  "requestTimeoutSecs": 30,
  "maxRequestRetries": 2,
  "sinceLastRun": false,
  "deltaMode": true
}
```

# 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 = {
    "watchlistTerms": [
        "Deterministic fixture Vendor Name for Compliance Risk Tool"
    ],
    "taskIntent": "buyer-ready-product-run",
    "sourceMode": "sample",
    "outputMode": "sample-records",
    "startUrls": [],
    "maxItems": 1,
    "perSourceLimit": 25,
    "maxTotalChargeUsd": 5,
    "overallTimeoutSecs": 900,
    "requestTimeoutSecs": 30,
    "maxRequestRetries": 2,
    "sinceLastRun": false,
    "deltaMode": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("zentrafoundry/compliance-risk-tool").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 = {
    "watchlistTerms": ["Deterministic fixture Vendor Name for Compliance Risk Tool"],
    "taskIntent": "buyer-ready-product-run",
    "sourceMode": "sample",
    "outputMode": "sample-records",
    "startUrls": [],
    "maxItems": 1,
    "perSourceLimit": 25,
    "maxTotalChargeUsd": 5,
    "overallTimeoutSecs": 900,
    "requestTimeoutSecs": 30,
    "maxRequestRetries": 2,
    "sinceLastRun": False,
    "deltaMode": True,
}

# Run the Actor and wait for it to finish
run = client.actor("zentrafoundry/compliance-risk-tool").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 '{
  "watchlistTerms": [
    "Deterministic fixture Vendor Name for Compliance Risk Tool"
  ],
  "taskIntent": "buyer-ready-product-run",
  "sourceMode": "sample",
  "outputMode": "sample-records",
  "startUrls": [],
  "maxItems": 1,
  "perSourceLimit": 25,
  "maxTotalChargeUsd": 5,
  "overallTimeoutSecs": 900,
  "requestTimeoutSecs": 30,
  "maxRequestRetries": 2,
  "sinceLastRun": false,
  "deltaMode": true
}' |
apify call zentrafoundry/compliance-risk-tool --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zentrafoundry/compliance-risk-tool",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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