# EUR-Lex Scraper: EU Law, Regulations & Directives API (`dltik/eur-lex-scraper`) Actor

Scrape EU legislation from EUR-Lex (official EU law portal): regulations, directives, decisions, treaties. Search by keyword or CELEX ID. Get full metadata: ELI URI, dates, authors, EUROVOC topics, legal basis, multilingual texts. $8/1K docs.

- **URL**: https://apify.com/dltik/eur-lex-scraper.md
- **Developed by:** [Walid](https://apify.com/dltik) (community)
- **Categories:** Business, Other, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00005 / actor start

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## EUR-Lex Scraper — EU Regulations, Directives & CELEX Lookup API

**EUR-Lex Scraper** lets you **search and extract European Union legal documents** from the official [EUR-Lex](https://eur-lex.europa.eu) portal — regulations, directives, decisions, recommendations, treaties — with full structured metadata (CELEX, ELI, EUROVOC, dates, authors, legal basis, linked acts). No API token, no developer account, just enter a keyword or a CELEX ID.

> **HTTP-only, no proxy needed, datacenter-IP friendly.** The fastest way to feed your legal-tech, compliance, M&A, or AI agent with up-to-date EU law data.

<!-- bookmark-cta -->

> **Found this useful?** Click the **Bookmark** button at the top of [this page](https://apify.com/dltik/eur-lex-scraper) — it helps the scraper stay visible to other compliance and legal-tech builders who need it. Takes 1 click.

---

### What can EUR-Lex Scraper do?

- **Search EU law by keyword** — find every regulation, directive or decision mentioning "data protection", "AI Act", "tariff", etc.
- **Direct CELEX lookup** — paste any CELEX ID (e.g. `32016R0679` for GDPR) and get full structured metadata in one call.
- **24 official languages** — request results in EN, FR, DE, ES, IT, NL, PT, PL, RO, SV, DA, FI, EL, CS, SK, SL, HU, BG, ET, LV, LT, MT, GA, HR.
- **Filter by document type** — restrict to regulations, directives, decisions, recommendations, opinions, communications, or treaties.
- **Full text included (optional)** — fetch the body of the legal act, not just metadata.
- **ELI URIs + Official Journal references** — every doc returns its persistent ELI identifier and OJ citation.
- **Linked acts graph** — what this act amends, what acts amend it, and its legal basis (treaty articles).
- **EUROVOC + Subject matter taxonomy** — official EU thesaurus tags for downstream classification.

---

### What data can you extract from EUR-Lex?

| Field | Description |
|-------|-------------|
| `celex_id` | Unique EU document identifier (e.g. `32016R0679`) |
| `title` | Full official title of the legal act |
| `document_type` | Regulation, Directive, Decision, Treaty, Opinion, etc. |
| `form` | Verbose form label as published by EUR-Lex |
| `eli_uri` | Persistent European Legislation Identifier URI |
| `date_of_document` | Date the act was adopted (ISO `YYYY-MM-DD`) |
| `date_in_force` | Date the act entered into force |
| `date_of_effect` | Date of application (often later than entry-into-force) |
| `date_end_validity` | Repeal or expiry date (null if still in force) |
| `date_signature` | Date the act was signed |
| `authors` | Institutions that adopted the act (Parliament, Council, Commission...) |
| `responsible_body` | DG responsible (e.g. DG Justice, Eurostat) |
| `subject_matter` | High-level EU policy areas |
| `eurovoc_descriptors` | EUROVOC thesaurus tags |
| `directory_codes` | EUR-Lex directory classification codes |
| `legal_basis` | Treaty articles / acts the law is based on |
| `amends_celex` | List of CELEX IDs this act amends |
| `amended_by_celex` | List of CELEX IDs that amend this act |
| `official_journal_reference` | Citation in the Official Journal (e.g. `OJ L 119, 4.5.2016, p. 1`) |
| `available_languages` | Languages in which the act is published |
| `url` | Direct URL to the EUR-Lex page |
| `full_text_url` | HTML rendering of the legal text |
| `pdf_url` | Official PDF download |
| `full_text` | Optional: full body text (if `includeFullText: true`) |

---

### How to scrape EU legislation

1. **[Create a free Apify account](https://apify.com/sign-up)** — no credit card needed for the trial.
2. **Open [EUR-Lex Scraper](https://apify.com/dltik/eur-lex-scraper)** in the Apify Store.
3. **Enter a keyword** (e.g. `data protection`) or paste **CELEX IDs** directly into the `celexIds` array.
4. **Choose language** and `maxResults`. Tick `includeFullText` if you need the body text.
5. **Click Start** — results stream into the dataset within seconds.
6. **Download** as JSON, CSV, Excel or call the dataset via API.

---

### How much does it cost to scrape EUR-Lex?

**$0.008 per document** ($8 per 1,000 docs) + a flat `$0.00005` actor-start fee. That's roughly **2.6× cheaper than parseforge's european-eur-lex-scraper** ($0.021/item) and at this price-point bundles full multilingual metadata, the ELI cross-reference, and the linked-acts graph.

| Run size | Documents | Apify cost | Time |
|----------|-----------|------------|------|
| Quick test (10 docs) | 10 | ~$0.08 | ~30s |
| Standard (100 docs) | 100 | ~$0.80 | ~5min |
| Deep (250 docs) | 250 | ~$2.00 | ~12min |
| Massive (500 docs) | 500 | ~$4.00 | ~25min |

> Full-text fetch (`includeFullText: true`) keeps the same per-event price but doubles run time because we make a second HTTP call per CELEX.

---

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchTerms` | string | conditional | — | Keywords to search across the EU corpus (e.g. `data protection`) |
| `celexIds` | array of string | conditional | `[]` | Direct CELEX lookups, bypassing search (e.g. `["32016R0679"]`) |
| `language` | string | no | `EN` | Document language, ISO 2-letter code (24 EU languages supported) |
| `maxResults` | integer | no | `25` | Max documents to return (1–500) |
| `includeFullText` | boolean | no | `false` | Fetch the full text body of each act |
| `documentType` | string | no | `all` | Filter: `all`, `regulation`, `directive`, `decision`, `recommendation`, `opinion`, `communication`, `treaty` |
| `proxyConfig` | object | no | datacenter | Apify proxy — EUR-Lex tolerates datacenter IPs |

> Provide **either** `searchTerms` **or** `celexIds` (or both — CELEX lookups run first).

---

### Output example

```json
{
  "type": "document",
  "celex_id": "32016R0679",
  "title": "Regulation - 2016/679 - EN - gdpr",
  "document_type": "Regulation",
  "form": "Regulation",
  "eli_uri": "http://data.europa.eu/eli/reg/2016/679/oj",
  "date_of_document": "2016-04-27",
  "date_in_force": "2016-05-24",
  "date_of_effect": "2018-05-25",
  "date_end_validity": null,
  "date_signature": "2016-04-27",
  "authors": ["European Parliament", "Council of the European Union"],
  "responsible_body": ["Directorate-General for Justice and Consumers", "Eurostat"],
  "subject_matter": ["Area of freedom, security and justice", "Consumer protection", "Information and verification"],
  "eurovoc_descriptors": ["personal data", "data protection", "free movement of data", "right to information"],
  "directory_codes": ["13.30.99.00", "15.20.20.00"],
  "legal_basis": ["12012E016"],
  "amends_celex": [],
  "amended_by_celex": [],
  "official_journal_reference": "OJ L 119, 4.5.2016, p. 1",
  "available_languages": ["BG", "CS", "DA", "DE", "EL", "EN", "ES", "ET", "FI", "FR", "GA", "HR", "HU", "IT", "LT", "LV", "MT", "NL", "PL", "PT", "RO", "SK", "SL", "SV"],
  "language": "EN",
  "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679",
  "full_text_url": "https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32016R0679",
  "pdf_url": "https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32016R0679",
  "scraped_at": "2026-06-04T10:32:11Z"
}
````

***

### Use cases

- **Legal-tech & compliance feeds** — build an always-fresh local mirror of EU law for your SaaS, alerting clients when an act they depend on is amended or repealed.
- **GDPR / AI Act / DSA monitoring** — track each new regulation impacting privacy, AI, platforms; surface its EUROVOC tags and OJ citation.
- **M\&A due-diligence** — pull every directive a target company must comply with in its sector, cross-referenced by directory code.
- **AI agents for lawyers** — feed structured CELEX metadata into a RAG pipeline so a chatbot can cite primary EU sources instead of hallucinating.
- **Academic research** — bulk-download corpora of regulations or directives across decades for NLP, citation network analysis, comparative law.
- **Regulatory engineering** — build dashboards for in-house counsel that show legal-basis chains and amendment graphs.

***

### Use EUR-Lex Scraper via API

#### Python

```python
import requests

run = requests.post(
    "https://api.apify.com/v2/acts/dltik~eur-lex-scraper/run-sync-get-dataset-items",
    headers={"Authorization": "Bearer YOUR_APIFY_TOKEN"},
    json={
        "searchTerms": "artificial intelligence",
        "language": "EN",
        "maxResults": 50,
        "documentType": "regulation",
        "includeFullText": False
    },
    timeout=600,
).json()

for doc in run:
    print(doc["celex_id"], "-", doc.get("title"))
```

#### curl

```bash
curl -X POST "https://api.apify.com/v2/acts/dltik~eur-lex-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"celexIds": ["32016R0679", "32024R1689"], "language": "EN"}'
```

#### Direct CELEX lookup (zero search)

```python
run_input = {"celexIds": ["32016R0679", "32024R1689", "32022R2065"], "includeFullText": True}
```

***

### FAQ

**What is a CELEX number?**
CELEX is the unique identifier EUR-Lex assigns to every EU document. Format: `{sector}{year}{type}{number}`. Example: `32016R0679` = sector 3 (legislation) + 2016 + R (regulation) + 0679. You'll find it in every EUR-Lex URL after `CELEX:`.

**Do I need a special token or developer account?**
No. EUR-Lex is a public transparency portal. This actor scrapes it directly — no login, no API key, no developer registration. Just enter a keyword or a CELEX ID.

**Which is faster, keyword search or direct CELEX lookup?**
Direct CELEX is roughly 2× faster because it skips the search-pagination step. If you already know which acts you want, always pass them in `celexIds`.

**What languages are supported?**
All 24 official EU languages: EN, FR, DE, ES, IT, NL, PT, PL, RO, SV, DA, FI, EL, CS, SK, SL, HU, BG, ET, LV, LT, MT, GA, HR. Note that older acts (pre-2004) may not have full translations into all languages — `available_languages` echoes what was actually published.

**How fresh is the data?**
EUR-Lex is updated continuously by the EU Publications Office. Most new acts are searchable within 24–48 h of publication in the Official Journal.

**Can I get the full text of the regulation?**
Yes — set `includeFullText: true`. We fetch the HTML rendering of the body (capped at ~200KB per doc to keep dataset items small). For longer texts, use the `full_text_url` and `pdf_url` fields to download offline.

**I need help or a custom export.**
Open an issue on the [Issues tab](https://apify.com/dltik/eur-lex-scraper/issues) of the actor page.

***

### Connect with Make, Zapier & n8n

This actor integrates with any automation platform via the Apify API.

#### Make (Integromat)

1. Add an **Apify module** in your scenario.
2. Choose **Run Actor** → select `dltik/eur-lex-scraper`.
3. Pass your input JSON (e.g. `{"searchTerms": "AI Act"}`).
4. Add **Get Dataset Items** to pull the results.
5. Pipe into Notion, Airtable, Google Sheets, Slack, etc.

#### Zapier

1. Trigger: **Schedule** (e.g. daily) or **Webhook**.
2. Action: Apify → **Run Actor** with this actor's id.
3. Action: **Get Dataset Items** → forward to your CRM / mail / DB.

#### n8n

1. **HTTP Request** node → `POST https://api.apify.com/v2/acts/dltik~eur-lex-scraper/runs`.
2. Wait → **HTTP Request** → `GET /v2/datasets/{datasetId}/items`.
3. Process each EU document downstream.

#### Webhooks

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
client.actor("dltik/eur-lex-scraper").call(
    run_input={"searchTerms": "data protection"},
    webhooks=[{
        "eventTypes": ["ACTOR.RUN.SUCCEEDED"],
        "requestUrl": "https://your-endpoint.com/eur-lex-webhook"
    }]
)
```

***

⭐ **Found the EUR-Lex Scraper useful? Bookmark it** — Apify ranks actors by bookmarks, so it's the strongest single signal for Store visibility. One click directly helps this actor stay surfaced for the next compliance team that needs EU law data.

### Other scrapers by dltik

| Actor | What it does | Price |
|-------|-------------|-------|
| [BOAMP Scraper](https://apify.com/dltik/boamp-fr-scraper) | French national public tenders (marches publics) — B2B public-sector sales | $5/1K |
| [Pappers Sirene Scraper](https://apify.com/dltik/pappers-sirene-scraper) | 26M French companies — SIREN, SIRET, NAF, finances, dirigeants | $5/1K |
| [SEC EDGAR MCP Server](https://apify.com/dltik/mcp-server-sec-edgar) | 10K US public companies — filings, financials for AI agents | $0.01/call |
| [Pappers MCP Server](https://apify.com/dltik/mcp-server-pappers) | 26M French companies — MCP tools for AI legal/finance agents | $0.01/call |
| [BODACC MCP Server](https://apify.com/dltik/mcp-server-bodacc) | 4.5M French court announcements — bankruptcies, M\&A, insolvencies | $0.01/call |
| [HATVP Scraper](https://apify.com/dltik/hatvp-fr-scraper) | French lobbying registry — public-affairs intelligence | $5/1K |

***

> **EUR-Lex Scraper** is part of dltik's open-government data portfolio: clean structured access to public legal, fiscal and regulatory sources for compliance, legal-tech and AI agents.

# Actor input Schema

## `searchTerms` (type: `string`):

Free-text keywords to search EUR-Lex (e.g. 'data protection', 'gdpr', 'AI Act', 'tariff'). Searches across the whole EU legal corpus.

## `celexIds` (type: `array`):

Direct lookup by CELEX number (e.g. \['32016R0679', '32024R1689']). Bypasses search — faster and stable. Find CELEX in any EUR-Lex URL after 'CELEX:'.

## `language` (type: `string`):

Language for the document text and metadata labels (ISO 2-letter code). 24 EU languages supported. Defaults to English.

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

Cap on the number of EU legal documents to return per run. Each document = 1 paid event. Default 10 fits comfortably in Apify's 300s sync window (~5-15s per doc).

## `includeFullText` (type: `boolean`):

Fetch the full legal text of each document (regulation body, articles). Adds ~1MB per document. Disable for metadata-only runs (faster, cheaper).

## `documentType` (type: `string`):

Restrict results to a specific EU legal act type. 'all' returns regulations, directives, decisions, recommendations, etc.

## `proxyConfig` (type: `object`):

Optional proxy. EUR-Lex generally allows datacenter IPs and direct connections. Leave default unless you hit rate limits.

## Actor input object example

```json
{
  "searchTerms": "data protection",
  "celexIds": [],
  "language": "EN",
  "maxResults": 10,
  "includeFullText": false,
  "documentType": "all",
  "proxyConfig": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "searchTerms": "data protection",
    "celexIds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/eur-lex-scraper").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 = {
    "searchTerms": "data protection",
    "celexIds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("dltik/eur-lex-scraper").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 '{
  "searchTerms": "data protection",
  "celexIds": []
}' |
apify call dltik/eur-lex-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=dltik/eur-lex-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EUR-Lex Scraper: EU Law, Regulations & Directives API",
        "description": "Scrape EU legislation from EUR-Lex (official EU law portal): regulations, directives, decisions, treaties. Search by keyword or CELEX ID. Get full metadata: ELI URI, dates, authors, EUROVOC topics, legal basis, multilingual texts. $8/1K docs.",
        "version": "1.0",
        "x-build-id": "JcLmNadzCudajPI88"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/dltik~eur-lex-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-dltik-eur-lex-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/dltik~eur-lex-scraper/runs": {
            "post": {
                "operationId": "runs-sync-dltik-eur-lex-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/dltik~eur-lex-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-dltik-eur-lex-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search keywords",
                        "type": "string",
                        "description": "Free-text keywords to search EUR-Lex (e.g. 'data protection', 'gdpr', 'AI Act', 'tariff'). Searches across the whole EU legal corpus."
                    },
                    "celexIds": {
                        "title": "CELEX IDs (direct lookup)",
                        "type": "array",
                        "description": "Direct lookup by CELEX number (e.g. ['32016R0679', '32024R1689']). Bypasses search — faster and stable. Find CELEX in any EUR-Lex URL after 'CELEX:'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "language": {
                        "title": "Document language",
                        "enum": [
                            "EN",
                            "FR",
                            "DE",
                            "ES",
                            "IT",
                            "NL",
                            "PT",
                            "PL",
                            "RO",
                            "SV",
                            "DA",
                            "FI",
                            "EL",
                            "CS",
                            "SK",
                            "SL",
                            "HU",
                            "BG",
                            "ET",
                            "LV",
                            "LT",
                            "MT",
                            "GA",
                            "HR"
                        ],
                        "type": "string",
                        "description": "Language for the document text and metadata labels (ISO 2-letter code). 24 EU languages supported. Defaults to English.",
                        "default": "EN"
                    },
                    "maxResults": {
                        "title": "Max documents to scrape",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Cap on the number of EU legal documents to return per run. Each document = 1 paid event. Default 10 fits comfortably in Apify's 300s sync window (~5-15s per doc).",
                        "default": 10
                    },
                    "includeFullText": {
                        "title": "Include full document text",
                        "type": "boolean",
                        "description": "Fetch the full legal text of each document (regulation body, articles). Adds ~1MB per document. Disable for metadata-only runs (faster, cheaper).",
                        "default": false
                    },
                    "documentType": {
                        "title": "Document type filter",
                        "enum": [
                            "all",
                            "regulation",
                            "directive",
                            "decision",
                            "recommendation",
                            "opinion",
                            "communication",
                            "treaty"
                        ],
                        "type": "string",
                        "description": "Restrict results to a specific EU legal act type. 'all' returns regulations, directives, decisions, recommendations, etc.",
                        "default": "all"
                    },
                    "proxyConfig": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy. EUR-Lex generally allows datacenter IPs and direct connections. Leave default unless you hit rate limits.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
