Para hedge funds

Filings de fuente primaria y KPI estandarizados —
empujados a tu libro, no sondeados.

58 fuentes regulatorias normalizadas a una taxonomía KPI cross-GAAP, con un webhook firmado que se dispara en el momento en que un filing llega a tu watchlist — sin scraper, sin parser de PDF, sin lote nocturno que mantener.

pip install openfilings y conecta tu primer handler en una tarde.

El problema

Los fundamentos cross-market no deberían exigir un equipo de data-eng

La cobertura está fragmentada

Tu libro abarca emisores de EE. UU., UE, Asia y el CCG — cada uno con su portal regulatorio, formato de filing y retraso de divulgación. Coserlo en casa significa un scraper por mercado y un parser por taxonomía.

Los PDF no computan

Los 10-K, Yūho, DART, MOPS e informes anuales ESEF todos dicen «ingresos» de forma distinta. Sin normalización, las pantallas cross-market y los modelos de factores corren sobre cifras que no son comparables.

Las reexpresiones se cuelan

Un KPI extraído una vez y cacheado se queda obsoleto en el momento en que un emisor enmienda un filing. La corrección punto-en-el-tiempo importa para backtests y para cualquier cosa que toque una posición viva.

Qué obtienes

Una API, una taxonomía, un push firmado

Fuente primaria, no un scrape

Los filings se recogen del feed del regulador — SEC EDGAR, EDINET, OpenDART, MOPS, ESEF, Companies House y más en 58 mercados — con un enlace al documento original en cada registro.

KPI estandarizados, cross-GAAP

Ingresos, márgenes, BPA y deltas interanuales normalizados a una taxonomía entre mercados y normas contables — consulta un código de partida en lugar de parsear cada formato de divulgación.

Push de webhook firmado

Registra una URL una vez; los filings, comunicados y transacciones insider nuevos de tu watchlist llegan como POST firmado HMAC — sin bucle de sondeo, verificable solo con la biblioteca estándar.

Pipeline

Resolver → rellenar → suscribir → verificar

01

Resuelve el universo

search_ticker / entities.search resuelve nombre, ticker, LEI o ISIN a un emisor canónico — lee entity.listings[] antes de asumir un solo mercado.

02

Rellena el historial

get_company_financials extrae una serie plurianual con filtros fiscal_year_from/to y line_items en una llamada — sin bucle por filing para un relleno KPI estándar.

03

Suscríbete al delta

Crea un webhook una vez (event_types=["filing.discovered"]); cada nueva divulgación de tu watchlist llega firmada, en segundos, en lugar de un sondeo nocturno.

04

Verifica y actúa

verify_webhook() comprueba la firma con hmac.compare_digest; luego GET /api/v1/filings/{id}/kpis / get_filing_section hidrata lo que tu señal necesita a partir de ese filing_id.

Integración

Un handler de webhook firmado, de principio a fin

Las entregas se firman con HMAC-SHA256 sobre el cuerpo crudo — verify_webhook() no necesita más que la biblioteca estándar de Python.

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"])
        # ... run your signal against kpis.canonical ...
        print(event.data["ticker"], kpis.canonical.get("revenue"))
    return {"ok": True}

filing.discovered payload

{
  "event": "filing.discovered",
  "version": "1",
  "timestamp": "2026-08-08T09:14:02.331Z",
  "data": {
    "canonical_key": "sec:0000320193",
    "ticker": "AAPL",
    "market_id": "us",
    "form_type": "10-Q",
    "filing_id": "3f1b7e2a-...",
    "filing_date": "2026-08-08"
  }
}

Cobertura en vivo

En vivo
5,722
Publicados en 24 h
67,306
Empresas indexadas
2,100,577
Filings indexados

Obtener acceso

Cuéntanos tu universo

Pega los tickers o ISIN que cubres y lo que estás construyendo — un lead de data-eng te responderá con acceso API, detalle de cobertura de tus mercados y condiciones del plan Business para entrega por webhook.

Or email [email protected] directly.

FAQ

Lo que los quants preguntan primero

¿Cuál es la diferencia entre OpenFilings y un feed Bloomberg/FactSet?

OpenFilings es una capa de filings de fuente primaria y KPI estandarizados, no un terminal de datos de mercado — sin precios ni consensos. Está hecho para sentarse junto a tu stack existente en el lado de evento regulatorio y fundamentos: qué se presentó, cuándo, y qué dicen las cifras normalizadas.

¿Cómo de rápido llega un filing nuevo al webhook?

De descubrimiento a consultable suele ser menos de 60 segundos en mercados nativos RSS/stream; el webhook se dispara justo después de persistir, así que tu handler ve el evento antes de que la mayoría de agregadores de titulares publiquen un resumen.

¿Qué plan incluye webhooks?

La entrega de webhooks firmados es una función del plan Business (véase /pricing). La REST API y el SDK Python funcionan en todos los planes de pago; los webhooks añaden la capa push encima del sondeo.

¿Necesito el SDK, o puedo llamar a la REST API directamente?

Cualquiera — pip install openfilings envuelve la misma REST API con modelos tipados, backoff automático 429 y un helper verify_webhook() solo stdlib. Cada respuesta del SDK también expone .raw / .to_dict() para campos que aún no hemos envuelto.

¿Cómo manejan los KPI estandarizados distintas normas contables?

Las partidas divulgadas de cada filing se mapean a una taxonomía compartida (GET /api/v1/kpi-taxonomy / client.companies.kpi_taxonomy()) en el parseo, así que los ingresos de un 10-K de EE. UU., un Yūho y un informe anual ESEF se consultan con el mismo código line_items.

¿Qué ocurre si un filing se reexpresa o se enmienda?

Los KPI se vuelven a derivar contra el filing enmendado y la API sirve los valores más recientes por defecto; get_company_financials acepta un parámetro as_of cuando necesitas el valor punto-en-el-tiempo.