# EU Accessibility Privacy Lead Scanner (`zinin/eu-accessibility-privacy-lead-scanner`) Actor

BYOD compliance scanner for observed accessibility and privacy exposure signals on a submitted URL. Deterministic, robots-aware, no LLMs, no legal verdicts.

- **URL**: https://apify.com/zinin/eu-accessibility-privacy-lead-scanner.md
- **Developed by:** [Tim Zinin](https://apify.com/zinin) (community)
- **Categories:** MCP servers, Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## EU Accessibility Privacy Lead Scanner

Point this Actor at a list of submitted URLs and it returns a deterministic, robots-aware
report of accessibility and privacy exposure signals that are visible in the page HTML. It
is designed for repeatable lead research with bounded network work, strict output counters,
and replay-safe result delivery for automation teams.

### What it does

- Reads only the URLs you submit.
- Fetches `robots.txt` first, then the page itself.
- Checks a fixed signal set for image alt usage, control names, document language,
  keyboard semantics, privacy notice links, tracker-before-choice, consent choice, and
  personal-data form notices.
- Emits only useful Dataset rows with `result-found` billing.
- Stores the compact run envelope in the default Key-Value Store key `OUTPUT`.
- Never uses an LLM, browser, proxy, login, side effect, or legal verdict.

### Features

Robots rules are checked before the submitted path and every same-host redirect target.
Public-address SSRF protection, a real connection timeout, terminal request state, and a
16 KiB compact envelope keep the result deterministic and suitable for API clients.

### Input

```json
{
  "schemaVersion": "1.0",
  "requestId": "demo-ai-001",
  "urls": ["https://www.intercom.com", "https://www.w3.org"],
  "maxResults": 10,
  "freshnessMinutes": 60,
  "detailLevel": "compact"
}
```

### How to run

Submit the JSON input in the Apify Console or call the API endpoint shown below. Start with
one or two URLs, choose `compact` for normal use, and use `evidence` when excerpts are useful.
Each `requestId` is idempotent: a completed request is replayed without another paid result.

### Output

Useful Dataset rows contain the observed signals, `accessibilityGapScore`,
`privacyGapScore`, `combinedExposureScore`, `leadTier`, `isLead`, `needsReview`, and
source evidence hashes. The compact `OUTPUT` envelope in the default Key-Value Store
keeps the summary, counts, warnings, and status.

### Input and output examples

The input example above is accepted as-is. A useful output summary contains `sourceUrl`,
`canonicalUrl`, the accessibility and privacy gap scores, `combinedExposureScore`, `leadTier`,
`isLead`, `needsReview`, and evidence hashes. Errors use a fixed enum such as `ROBOTS_DENIED`,
`SOURCE_TIMEOUT`, or `DELIVERY_CHARGE_UNKNOWN`.

### Pricing

- `apify-actor-start`: $0.005 minimum platform start event
- `result-found`: $0.05

Only useful rows create `result-found` charges. Garbage, robots denial, SSRF blocks,
source outages, and invalid input do not create result charges, although the platform may
charge the automatic start event. Request replay and cached report reuse are handled
through the persistent named actor cache.

### Limits

- 1..100 URLs per run
- Same-host fetch only
- 3 redirects maximum
- 5 second connect timeout, 15 second attempt timeout, 25 second per-URL work unit
- 2 MiB decoded page body limit
- 50 MiB aggregate decoded response limit and 150 second hard stop
- 16 KiB maximum for the compact `OUTPUT` record

### Source notes

This Actor does not infer WCAG, EN 301 549, GDPR, ePrivacy, compliance, sanctions, or
liability. It only reports observed exposure indicators in the submitted page HTML.

### Support and limitations

This is a BYOD scanner, so the submitted page must be publicly reachable over HTTP(S) and
must allow the requested path in `robots.txt`. Report a reproducible bug with the input,
request ID, and OUTPUT error code; do not include secrets or private page content.

### API example

```bash
curl https://api.apify.com/v2/acts/zinin~eu-accessibility-privacy-lead-scanner/runs \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "schemaVersion": "1.0",
    "requestId": "demo-ai-001",
    "urls": ["https://www.intercom.com"],
    "maxResults": 10,
    "freshnessMinutes": 60,
    "detailLevel": "evidence"
  }'
```

#### Related tools

Related tools for adjacent workflows in operational gap-lead generation.

| Actor | What it does |
|---|---|
| [EU AI Act Transparency Lead Scanner](https://apify.com/zinin/eu-ai-act-transparency-lead-scanner) | Pair it in the operational gap-lead generation workflow: BYOD compliance scanner for observed AI transparency signals on a submitted URL. Deterministic,... |
| [Clinic Reception Gap Lead Finder](https://apify.com/zinin/clinic-reception-gap-lead-finder) | Pair it in the operational gap-lead generation workflow: Analyze submitted clinic websites for reception-channel gaps with exact BYOD crawling and no discovery |
| [Restaurant Booking Gap Lead Finder](https://apify.com/zinin/restaurant-booking-gap-lead-finder) | Pair it in the operational gap-lead generation workflow: Analyze submitted restaurant websites for booking-channel gaps with exact BYOD crawling and no discovery |
| [New Opening Permit Lead Radar](https://apify.com/zinin/new-opening-permit-lead-radar) | Pair it in the operational gap-lead generation workflow: Detect commercial permit and license openings from five fixed Socrata datasets and return evidence-backed... |

# Actor input Schema

## `schemaVersion` (type: `string`):

Input schema version. Must equal 1.0.

## `requestId` (type: `string`):

Stable idempotency key for this semantic input.

## `urls` (type: `array`):

Submitted absolute HTTP(S) URLs to audit. No discovery, no crawling beyond the page itself.

## `maxResults` (type: `integer`):

Maximum number of useful rows to deliver.

## `freshnessMinutes` (type: `integer`):

Use cached useful reports only if they are this fresh or newer.

## `detailLevel` (type: `string`):

compact for summaries, evidence for selectors and excerpts.

## Actor input object example

```json
{
  "schemaVersion": "1.0",
  "requestId": "web-daily-prefill-001",
  "urls": [
    "https://www.intercom.com",
    "https://www.w3.org"
  ],
  "maxResults": 10,
  "freshnessMinutes": 60,
  "detailLevel": "compact"
}
```

# Actor output Schema

## `OUTPUT` (type: `string`):

Compact business OUTPUT envelope stored in the default key-value store.

# 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 = {
    "requestId": "web-daily-prefill-001",
    "urls": [
        "https://www.intercom.com",
        "https://www.w3.org"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/eu-accessibility-privacy-lead-scanner").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 = {
    "requestId": "web-daily-prefill-001",
    "urls": [
        "https://www.intercom.com",
        "https://www.w3.org",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("zinin/eu-accessibility-privacy-lead-scanner").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 '{
  "requestId": "web-daily-prefill-001",
  "urls": [
    "https://www.intercom.com",
    "https://www.w3.org"
  ]
}' |
apify call zinin/eu-accessibility-privacy-lead-scanner --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zinin/eu-accessibility-privacy-lead-scanner",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/2Vd45SaLuzF4ldCT8/builds/A2VXM0RGhStvbi9T6/openapi.json
