# ESMA Consultation Deadlines (`vixendata/esma-consultation-deadlines`) Actor

Structured ESMA consultation periods, official response phase, regulatory sections and consultation document references from bounded public HTML.

- **URL**: https://apify.com/vixendata/esma-consultation-deadlines.md
- **Developed by:** [Vixendata](https://apify.com/vixendata) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 71.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 recognized consultation/publication/alert metadata records

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/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

## ESMA Consultation Deadlines

A source-specific inventory for securities-regulation consultation workflows: opening and closing dates, source-stated response phase, policy sections, official document references, publication dates and document links. Useful for compliance teams triaging consultations and linking rulemaking deadlines to internal reviews. No legal or financial advice, predictions, or inferred status.

### Coverage

Uses the public [ESMA consultation catalog](https://www.esma.europa.eu/press-news/consultations) and its canonical consultation detail pages. Discovery reads only the first catalog page (20 consultations observed in the captured fixture); pagination and the complete historical inventory are not supported. Explicit detail URLs provide bounded access to known older consultations. URLs are deduplicated, explicit URLs first, then limited by `maxItems`. Defaults: `discoverList: true`, `maxItems: 5`, `consultationUrls: []`. Hard maximum is 20 detail pages per run.

Example input:

```
{"discoverList":false,"maxItems":1,"consultationUrls":["https://www.esma.europa.eu/press-news/consultations/consultation-update-guidelines-disclosure-requirements-under-prospectus"]}
```

### Fields and meaning

- `source`, `url`, `title`: regulator, canonical source URL and source heading.
- `openedDate`, `closingDate`: ISO date component from the source consultation period's machine-readable timestamps. These are not document publication dates.
- `openingTimestamp`, `closingTimestamp`: full unmodified source timestamp, preserving its UTC offset. Calendar display text can differ by local timezone.
- `responsePhase`: only an explicit Respond or See Responses button, otherwise null. No computed open/closed classification.
- `sections`: source regulatory topics such as Prospectus or Simplification and Burden Reduction.
- `documents`: related-document rows containing reference, title, publishedDate (ISO date or null), and official landing-page/PDF URLs. Documents and submitted responses are not downloaded. Empty arrays mean no matching source rows, not proof that no documents exist.
- `observedAt`: UTC extraction time; `attribution`, `reuseNotice`, `freeSourceNotice`, `licenseUrl`: provenance and reuse disclosures retained with every record.

`RUN_SUMMARY` reports discovered and returned counts, input counts, item-limit truncation and the bounded coverage description. Source failures stop the run. A failed run may have partial dataset rows; do not treat it as a complete inventory. Source layout changes fail when required title or date markup is missing. This actor does not harvest personal response form fields, attachments, third-party materials, IFRS content or logos.

### Access safeguards

HTTPS and exact ESMA host/path allowlist; no arbitrary URLs, query strings, fragments, application-configured scraping proxies, browser, CAPTCHA solver, authentication or redirect following. Checks robots.txt before page requests; stops on robots denial, access denial, rate limit, unexpected redirects or other HTTP failure. Sequential requests wait at least two seconds and honor longer advertised robots crawl delays/request rates. Delays above 60 seconds stop the run. Standard runtime networking, including infrastructure egress when required, is retained. Two-MiB per-response cap, 30-second network timeout, at most 22 requests (robots, catalog, 20 details), no retries or alternate access path.

### Reuse and free originals

[ESMA's official FAQ](https://www.esma.europa.eu/sk/node/200096) permits reproduction subject to attribution and reuse conditions. Original information is available free of charge on ESMA's website. Any paid service using this output must disclose that free original availability before purchase and preserve provenance when presenting data. Output restructures source metadata; it is not an official ESMA publication.

This document has been drafted using material downloaded from ESMA’s website.

ESMA does not endorse this publication and in no way is liable for copyright or other intellectual property rights infringements nor for any damages caused to third parties through this publication.

Source: European Securities and Markets Authority (ESMA). Excluded materials may have separate rights; linking a document does not grant blanket redistribution rights. No public-domain claim is made.

### Professional workflow and scope distinction

[Compliance.ai's regulatory content coverage](https://www.compliance.ai/available-regulatory-content/) includes EU-ESMA Consultation Papers, and [Forseti](https://forseti.citiumtech.com/) describes tracking ESMA/EBA/EIOPA draft consultations. These are evidence of a professional monitoring workflow, not guaranteed Actor sales. Store qualification found adjacent ESMA firm registers and enforcement/sanctions tools; this actor instead exports a typed consultation lifecycle and document inventory. Generic website monitors are also available. No claim is made that ESMA cannot otherwise be scraped.

### Run and test

Python 3.12. Install `pip install -r requirements.txt`, then run `python -m unittest test_main.py` and `python main.py` (Apify SDK). The portable test file embeds compressed, real official list/detail HTML captured 2026-10-05; it asserts a 20-link discovery fixture and the Prospectus consultation (2026-09-09 to 2026-11-09), reference ESMA32-753890202-3085, document date and PDF URL. Tests also cover bad inputs, off-host/path URLs, missing markup and redirects. Fixture counts describe the captured sample, not a guaranteed current count. Private build review only; no paid platform runs are initiated by the actor itself.

# Actor input Schema

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

Maximum detail pages and output records; 1 to 20, defaults to 5. Explicit URLs are processed first.

## `discoverList` (type: `boolean`):

Read only the verified first ESMA consultation catalog page. No pagination or complete historical archive.

## `consultationUrls` (type: `array`):

Up to 20 canonical https://www.esma.europa.eu/press-news/consultations/<slug> URLs without queries or fragments.

## Actor input object example

```json
{
  "maxItems": 5,
  "discoverList": true,
  "consultationUrls": []
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("vixendata/esma-consultation-deadlines").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("vixendata/esma-consultation-deadlines").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 '{}' |
apify call vixendata/esma-consultation-deadlines --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vixendata/esma-consultation-deadlines"
        }
    }
}
```

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/mSB3jdXoZLq3aElVJ/builds/e6Antv1k9opnQeNSS/openapi.json
