Skip to main content
01 / For asset managers

One feed. Every filing in your universe.

53,660 companies, 28,034,025 filings, 48 markets — through one typed REST and GraphQL endpoint. Markdown by default. New filings indexed in under 60 seconds, webhook fires under 90.

Long-only platforms still pay analysts to do janitorial work. Three patterns we see on every call.

2.1 / Scrapers

Seven scrapers, three regulators each.

In-house pipelines that break every time a regulator changes a button. Maintenance budget rises every quarter; coverage stays the same.

2.2 / Lag

Fundamentals land 24 hours late.

Most third-party feeds re-index on overnight cycles. Quarterly screens and rebalances run on yesterday's filings while the desk reads today's news.

2.3 / Identifiers

ISIN, LEI, ticker — three databases.

Order-management uses one identifier system; the research platform uses another; the compliance file uses a third. Each filing has to be reconciled to all three before it's usable.

Same filings the regulators publish. Cleaned, normalised, identifier-resolved, delivered to the format your stack expects.

3.1 / Coverage

48 markets, end-to-end.

53,660 listed companies. 28,034,025 filings indexed. Annual, quarterly, interim, ad-hoc — every filing class your portfolio universe touches.

3.2 / Markdown

~70 % token reduction vs PDF.

A 412-page annual becomes ~3,200 tokens of clean Markdown. Tables intact, footnotes attached, ready for retrieval, summarisation, or screen logic.

3.3 / Identifiers

ISIN · LEI · ticker, resolved.

Every filing carries its full identifier stack. Join straight against your OMS, risk system, or factor library — no reconciliation step.

3.4 / Redistribution

Internal use, surfaced in client tools.

Enterprise contracts include redistribution rights for client portals, factsheets, and adviser tools. No per-seat surprise.

Pass an identifier set, get the latest filing record per name. Same endpoint serves Markdown, JSON, or the original PDF.

Python SDK · returns Markdown per holding
from financialreports import Client

client = Client(api_key=os.environ["FR_API_KEY"])

# Latest annual or quarterly per portfolio holding
portfolio = ["DE000A1EWWW0", "FR0000131104", "NL0011794037"]

filings = client.filings.latest_for(
    isins=portfolio,
    types=["annual", "quarterly"],
    format="markdown",
)

for f in filings:
    print(f.ticker, f.period, len(f.content))
Webhook Fires < 90 s after publication
# POST https://your-app.example/hooks/filings
{
  "event": "filing.published",
  "isin":  "DE000A1EWWW0",
  "lei":   "529900D6BF99LW9R2E68",
  "ticker": "ADS.DE",
  "type":   "quarterly",
  "period": "Q1 2026",
  "published_at": "2026-04-30T06:02:11Z",
  "indexed_at":   "2026-04-30T06:02:48Z",
  "markdown_url": "https://api.financialreports.eu/api/filings/674321/markdown/"
}

Three patterns we see ship into production at long-only platforms.

5.1 / Screens

Filing-driven portfolio screens.

Quarterly screens that update on the wire. Idea-generation desks stop running on a 24-hour lag because a webhook re-runs the screen the moment a constituent files.

5.2 / Research

Internal RAG over the universe.

Markdown filings feed straight into a vector store. Analysts query natural language across the whole portfolio universe instead of opening one PDF at a time.

5.3 / Mandates

Mandate-level monitoring.

Subscribe each strategy to its own ISIN list. Filing-class breaches (profit warning, restatement, ad-hoc) raise an alert before the news desks pick it up.

Customer reference · Head of data, EU asset manager

"We were maintaining seven scrapers across regulators. We now maintain zero. The screens that used to run on yesterday's filings now run when the filing lands."

— Head of data · EU asset manager · €18 bn AUM

Six recurring questions from PMs, heads of research, and platform leads.

53,660 listed companies across 48 markets, end-to-end. Send a sample ISIN list before signing — we report a per-line coverage match in writing on the first call.
Indexed in under 60 seconds from publication. The webhook fires under 90 seconds. Continuous polling per regulator — no fixed cron, no overnight batch.
ISIN, LEI, ticker, FIGI, and our internal company ID. Every filing record carries the full stack — so the same call works whether your OMS speaks ISIN or your factor library speaks ticker.
Yes. Enterprise contracts include redistribution rights for client portals, adviser tools, factsheets, and pitchbooks. Per-seat licensing is not how we charge.
28,034,025 filings already indexed across 53,660 companies. Depth varies by market — typically several years per name. Bulk historical exports are a contract item.
Three inputs: data volume, refresh frequency, and feature/delivery requirements. We quote on a 15-minute call — no per-seat tier.

Filing volumes, sector signal, language and length trends across the 48 markets we index. PDF plus the underlying CSV.

State of Filings — quarterly report cover
01
Allocation context
Macro and sector-level shifts in filing volume, sentiment, and forward-looking language.
02
Sector rotation signal
Which industries are signalling growth or contraction through their regulatory language this quarter.
03
Thematic risk surface
Cross-issuer thematic flags — supply chain, regulation, FX exposure, AI policy — across thousands of filings.
Lead magnet

Get the report.

Instant access to the PDF and the supplementary data file. Work email, please — gated.

Get started

Filings, in the format your stack expects.

15-minute call with a data engineer. Send your ISIN list — we report coverage in writing before the call ends.

Base URL api.financialreports.eu
Auth x-api-key header
Rate limit 600 req / min standard
p50 latency · EU edge ~41 ms