# EU Website Compliance Audit (GDPR, EAA, Security) (`mrdexter4/eu-website-compliance-audit`) Actor

One call audits a website for EU compliance: cookie consent, WCAG scan, accessibility statement, security headers and DMARC/SPF, webshop consumer-law info. One score, grade, fix list and HTML report per site. $0.15 per site plus each module Actor's own price.

- **URL**: https://apify.com/mrdexter4/eu-website-compliance-audit.md
- **Developed by:** [Mateus Correia](https://apify.com/mrdexter4) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $105.00 / 1,000 site auditeds

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

### What does EU Website Compliance Audit do?

**EU Website Compliance Audit** checks a website against the most common EU web requirements in **one run** and returns **one score, an A–F grade, a prioritised fix list and a combined HTML report** per site. It runs five specialised Actors and merges their results:

| Module | What it checks | Actor |
|---|---|---|
| 🍪 Cookie consent | Trackers and cookies before consent, after "Reject" and after "Accept"; reject button; pre-ticked boxes; Consent Mode v2 (tested from an EU IP) | [GDPR Cookie Consent Verifier](https://apify.com/mrdexter4/cookie-consent-verifier) |
| ♿ Accessibility scan | WCAG 2.1 AA issues mapped to EN 301 549 (European Accessibility Act) | [EU Accessibility Scanner](https://apify.com/mrdexter4/eu-accessibility-scanner) |
| 📄 Accessibility statement | Is there a statement, and does it cover the EU model statement elements? | [Accessibility Statement Checker](https://apify.com/mrdexter4/accessibility-statement-checker) |
| 🔐 Security & email | HTTPS, TLS, HSTS, CSP, SPF, DKIM, DMARC, DNSSEC, security.txt | [Website Security & Email Trust Check](https://apify.com/mrdexter4/website-security-email-check) |
| 🛒 Webshop info | Trader identity, withdrawal right, delivery costs, VAT-inclusive prices and more (only scored for webshops) | [Webshop EU Consumer-Law Checker](https://apify.com/mrdexter4/webshop-consumer-law-checker) |

### Who is it for?

- 🏢 **Web agencies and freelancers:** one audit per prospect or client site, with a report you can send.
- 🛒 **Webshop owners:** a quick check of the EU basics after a redesign or platform migration.
- 🤖 **AI agents:** a single tool call answers "is this website EU-compliant?" with structured scores per area. It works with Claude, ChatGPT and other agents through the Apify MCP server.

### What does it return?

| Field | Description |
|---|---|
| `domain` | Site that was audited |
| `overallScore`, `grade` | Weighted 0–100 score and A–F grade. Cookie consent and the WCAG scan count double. |
| `moduleScores` | Score per module (`null` if the module was not run or does not apply) |
| `modules` | Per module: headline result and top fixes |
| `topFixes` | Up to 12 prioritised fixes across all modules |
| `moduleRunIds` | Run IDs of the underlying Actors, so you can open the full detail |

### How to audit a website for EU compliance

1. Click **Try for free** and enter one or more websites.
2. Untick any modules you don't need.
3. Click **Start**. A typical site takes 1–3 minutes, because the modules run in parallel.
4. Download `report.html` from the key-value store, or use the dataset or the API.

### How much does it cost?

You pay a small fee **per site audited** (see the Pricing tab). The underlying module Actors run in your account and are charged at **their own pay-per-event prices**:

- security check: 1 event per domain
- statement check: 1 event per site
- WCAG scan: 1 event per page, 5 pages by default
- cookie test: 1 event per page, 1 page by default
- webshop check: 1 event per site

**Typical total per site with all modules on (no discount):** $0.15 audit fee + $0.01 security + $0.02 statement + $0.075 WCAG scan (5 pages × $0.015) + $0.10 cookie test + $0.05 webshop check = **about $0.41 per site**. Higher Apify plans get tiered discounts on every part. Untick modules you don't need to pay less.

Reports of the sub-modules are switched off, so you only get the combined report. Use **Max charge per site per module** to cap spending.

### Output example

```json
{
  "domain": "example-shop.nl",
  "overallScore": 58,
  "grade": "D",
  "moduleScores": { "security": 72, "accessibilityStatement": 0, "accessibilityScan": 64, "cookieConsent": 20, "webshopLaw": 81 },
  "topFixes": [
    "[Cookie consent (before / reject / accept)] Google Analytics loads before consent",
    "[Accessibility statement] Publish an accessibility statement and link it from every page (usually the footer).",
    "[Accessibility scan (WCAG 2.1 AA)] Fix WCAG 1.4.3 Contrast (Minimum) (14 issue(s) on 5 page(s))"
  ]
}
```

### FAQ

**Is a high score a guarantee of compliance?** No. These are automated technical checks of what is publicly visible. They catch common problems quickly but don't replace a manual or legal review.

**Can I run only some modules?** Yes. Untick the modules you don't need in the input.

**Does it collect personal data?** No. All modules analyse the website's own configuration, network behaviour and published information.

*Indicative technical checks; not legal advice.* Questions? Open an issue on the **Issues** tab.

# Actor input Schema

## `websites` (type: `array`):

Homepage URLs or domains, one per line.

## `security` (type: `boolean`):

HTTPS, TLS, HSTS, CSP, SPF, DKIM, DMARC, DNSSEC, security.txt (Website Security & Email Trust Check).

## `accessibilityStatement` (type: `boolean`):

Find and check the accessibility statement (Accessibility Statement Checker).

## `accessibilityScan` (type: `boolean`):

Scan pages for WCAG 2.1 AA issues (EU Accessibility Scanner).

## `cookieConsent` (type: `boolean`):

Test the cookie banner before consent, after reject and after accept from an EU IP (GDPR Cookie Consent Verifier, 1 page per site).

## `webshopLaw` (type: `boolean`):

Trader identity, withdrawal right, delivery costs and more (Webshop EU Consumer-Law Checker). Non-shops are not scored.

## `accessibilityPages` (type: `integer`):

Pages scanned per site by the WCAG module.

## `maxChargePerSitePerModuleUsd` (type: `number`):

Spending cap passed to each module run (multiplied by the number of sites).

## `generateReport` (type: `boolean`):

Save a combined report.html to the key-value store.

## Actor input object example

```json
{
  "websites": [
    "https://www.w3.org"
  ],
  "security": true,
  "accessibilityStatement": true,
  "accessibilityScan": true,
  "cookieConsent": true,
  "webshopLaw": true,
  "accessibilityPages": 5,
  "maxChargePerSitePerModuleUsd": 1,
  "generateReport": true
}
```

# Actor output Schema

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

No description

## `report` (type: `string`):

No description

## `summary` (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 = {
    "websites": [
        "https://www.w3.org"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdexter4/eu-website-compliance-audit").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 = { "websites": ["https://www.w3.org"] }

# Run the Actor and wait for it to finish
run = client.actor("mrdexter4/eu-website-compliance-audit").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 '{
  "websites": [
    "https://www.w3.org"
  ]
}' |
apify call mrdexter4/eu-website-compliance-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdexter4/eu-website-compliance-audit"
        }
    }
}
```

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/MA7bLh5a1qZSo9rzZ/builds/0u1Wlg1YqA1q3Q1zb/openapi.json
