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.
For asset managers
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
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.
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.
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.
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
Filings from SEC EDGAR, EDINET, OpenDART, MOPS, ESEF, Companies House, and more across 62 markets — every record links back to the original document.
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.
Subscribe each strategy to its own ticker set. A signed POST fires when a constituent files — idea desks stop running on yesterday's disclosures.
Every KPI and section carries filing_id and source URL. Trace the number back to the disclosure before it reaches the portfolio meeting.
Integration
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
Get started
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.
FAQ
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.
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.
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.
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.
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.
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.