For asset managers

Filings your models read,
citations your PMs trust.

62 regulator sources normalized to one cross-GAAP KPI taxonomy — resolve holdings by ticker, LEI, or ISIN, backfill fundamentals in one call, and get a signed webhook when a name on the book files.

Try the free MCP in Claude, or send us your universe, before any commercial call.

The problem

The work you pay analysts to avoid

The manual loop

Someone opens the regulator site, downloads the PDF, drops it in a shared drive, and renames it — every reporting season, across every name. That is analyst time you pay for document janitorial work.

Many markets, many formats

There is no single global EDGAR. US 10-Ks, ESEF annuals, Yūho, DART, and MOPS each publish differently. Maintaining parsers and scrapers across 62 sources is engineer-quarters you never get back.

Numbers that don't compare

Raw PDFs and off-the-shelf converters lose table structure and leave line items in local GAAP. Screens and RAG answers run on numbers that aren't actually comparable across holdings.

Unsourced answers

An AI or research note with nothing to click through to is a liability the moment it reaches a PM. If you can't open the filing behind the figure, you can't defend it.

What you get

One taxonomy, one push, source links on every record

Primary source, end-to-end

Filings from SEC EDGAR, EDINET, OpenDART, MOPS, ESEF, Companies House, and more across 62 markets — every record links back to the original document.

Standardized cross-GAAP KPIs

Revenue, margins, EPS, and YoY deltas mapped to one taxonomy at parse time — query the same line_items codes for a US holding and a Korean or Japanese peer.

Watchlist webhooks

Subscribe each strategy to its own ticker set. A signed POST fires when a constituent files — idea desks stop running on yesterday's disclosures.

Citations the PM trusts

Every KPI and section carries filing_id and source URL. Trace the number back to the disclosure before it reaches the portfolio meeting.

Integration

A portfolio's filings in a few calls

Resolve holdings, pull multi-year KPIs, then subscribe a watchlist webhook — we verify the HMAC signature and yield a typed event.

portfolio_financials.py

from openfilings import Client

client = Client(api_key="of_...")  # or OPENFILINGS_API_KEY

# Resolve holdings, then pull multi-year KPIs in one call
for ticker in ["AAPL", "7203.T", "005930.KS"]:
    entity = client.entities.search(ticker=ticker).entity
    market = entity.listings[0].market_id
    series = client.companies.financials(
        ticker=ticker,
        market_id=market,
        fiscal_year_from=2020,
        fiscal_year_to=2024,
        line_items=["revenue", "ebitda", "net_income"],
    )
    for period in series.periods:
        print(entity.canonical_key, period.fiscal_year, period.values)

webhook_handler.py · FastAPI

import os
from fastapi import Depends, FastAPI
from openfilings import Client
from openfilings.integrations.fastapi import openfilings_webhook_dependency
from openfilings.webhooks import WebhookEvent

app = FastAPI()
client = Client(api_key=os.environ["OPENFILINGS_API_KEY"])
verify = openfilings_webhook_dependency(os.environ["OPENFILINGS_WEBHOOK_SECRET"])

@app.post("/openfilings-webhook")
async def on_filing(event: WebhookEvent = Depends(verify)) -> dict:
    if event.event == "filing.discovered":
        kpis = client.filings.kpis(event.data["filing_id"])
        # ... refresh the screen / research queue ...
        print(event.data["ticker"], kpis.canonical.get("revenue"))
    return {"ok": True}

Live coverage

Live
5,304
Published last 24h
67,251
Companies indexed
3,406,900
Filings indexed

Get started

Send your ISIN or ticker list

Paste the universe you cover — we follow up with coverage detail per market, API access, and Business plan terms for webhook delivery. Keep the free MCP whether or not you sign.

Or email [email protected] directly.

FAQ

What asset managers ask first

Why buy this — can't we build it?

The US half is relatively free off EDGAR. The expensive part is the long tail of markets and formats, plus keeping cross-GAAP KPIs correct when issuers amend. OpenFilings is the drop-in layer: primary-source ingest, standardized taxonomy, and push delivery.

How do we stop hallucinations reaching a PM?

Every KPI and section response ties back to a filing_id and source document URL with the original release timestamp. Wire citations into your retrieval or note template so every figure is one click from the disclosure.

We already pay for Bloomberg / FactSet / CapIQ.

Keep them. OpenFilings is a complement for primary-source filings and normalized fundamentals across markets terminals under-serve — not a rip-and-replace for pricing or consensus.

Which plan includes webhooks?

Signed webhook delivery is a Business-plan feature. REST API and the Python SDK work on paid plans; webhooks add the push layer on top of polling.

Can we try before a commercial call?

Yes — the free MCP server works in Claude and other MCP clients today. Paste your ISIN or ticker list on the form below and we reply with coverage detail for your universe.

Do you cover private companies or stock prices?

No. OpenFilings covers listed-issuer regulatory filings and derived KPIs/sections — not private-firm fundamentals or market data. Pair us with your price vendor when you need both.