ValueinValuein
All SEC Filing Coverage
10-K
Annual Report

Annual filings. 30+ years of alpha.

The 10-K is the most information-dense document a public company produces. Audited financials, risk factors, segment breakdowns, management commentary. We standardize every XBRL tag across 19,000+ companies so your queries work across tickers and decades without schema gymnastics.

  • Full income statement, balance sheet, cash flow statement
  • Segment-level revenue and operating income
  • Historical data from 1993 to present
  • Amendment tracking — 10-K/A restated values preserved
  • Point-in-time: accepted_at timestamps for clean backtests

~85M

Annual report facts in dataset

200+

Standardized financial concepts

1993

Earliest filing year

< 24h

Post-EDGAR processing time

Python SDK

SQL queries that deliver alpha

Production-ready queries using ValueinClient. Copy, run, adapt.

5-Year Revenue CAGR Screener

Find S&P500 companies with 5-year revenue CAGR above 15% — the core compounders screen. Uses a single pivot over the fact table for efficiency.

Python
Show the query ↓
valuein_query.pypython
from valuein_sdk import ValueinClient, ValueinError sql = """SELECT    r.symbol,    r.name,    r.sector,    MAX(CASE WHEN standard_concept = 'Revenues' AND fiscal_year = 2024 THEN numeric_value END) AS rev_2024,    MAX(CASE WHEN standard_concept = 'Revenues' AND fiscal_year = 2019 THEN numeric_value END) AS rev_2019,    ROUND(        POWER(            MAX(CASE WHEN standard_concept = 'Revenues' AND fiscal_year = 2024 THEN numeric_value END) /            NULLIF(MAX(CASE WHEN standard_concept = 'Revenues' AND fiscal_year = 2019 THEN numeric_value END), 0),            0.2        ) - 1, 4    ) AS cagr_5yrFROM fact fJOIN references r        ON f.entity_id = r.cikJOIN index_membership im ON im.cik = r.cikWHERE f.form_type = '10-K'  AND f.standard_concept = 'Revenues'  AND im.index_name = 'SP500'  AND im.removal_date IS NULL  AND r.is_active = TRUEGROUP BY r.symbol, r.name, r.sectorHAVING cagr_5yr > 0.15ORDER BY cagr_5yr DESCLIMIT 25""" try:    with ValueinClient() as client:        df = client.run_query(sql)        print(df)except ValueinError as e:    print(f"Valuein error: {e}")

Operating Leverage Detector

Find companies where operating margin expanded more than 3 percentage points over 3 years — a hallmark of businesses with fixed-cost structures scaling into profit.

Python
Show the query ↓
valuein_query.pypython
from valuein_sdk import ValueinClient, ValueinError sql = """WITH annual_metrics AS (    SELECT        r.symbol,        r.name,        f.fiscal_year,        MAX(CASE WHEN standard_concept = 'Revenues' THEN numeric_value END)           AS revenue,        MAX(CASE WHEN standard_concept = 'OperatingIncomeLoss' THEN numeric_value END) AS op_income    FROM fact f    JOIN references r        ON f.entity_id = r.cik    JOIN index_membership im ON im.cik = r.cik    WHERE f.form_type = '10-K'      AND f.fiscal_year BETWEEN 2021 AND 2024      AND im.index_name = 'SP500'      AND im.removal_date IS NULL    GROUP BY r.symbol, r.name, f.fiscal_year),margins AS (    SELECT symbol, name, fiscal_year,        op_income / NULLIF(revenue, 0) AS op_margin    FROM annual_metrics)SELECT    m24.symbol, m24.name,    ROUND(m21.op_margin * 100, 1) AS margin_2021_pct,    ROUND(m24.op_margin * 100, 1) AS margin_2024_pct,    ROUND((m24.op_margin - m21.op_margin) * 100, 1) AS margin_expansion_ppFROM margins m24JOIN margins m21 USING (symbol, name)WHERE m24.fiscal_year = 2024  AND m21.fiscal_year = 2021  AND (m24.op_margin - m21.op_margin) > 0.03ORDER BY margin_expansion_pp DESCLIMIT 20""" try:    with ValueinClient() as client:        df = client.run_query(sql)        print(df)except ValueinError as e:    print(f"Valuein error: {e}")

Free Cash Flow Quality Screen

High FCF conversion — where FCF exceeds net income — signals earnings quality. Companies with persistent FCF > net income generate real cash, not accrual accounting profits.

Python
Show the query ↓
valuein_query.pypython
from valuein_sdk import ValueinClient, ValueinError sql = """SELECT    r.symbol, r.name, r.sector,    ROUND(        MAX(CASE WHEN standard_concept = 'NetCashProvidedByUsedInOperatingActivities'            THEN COALESCE(derived_quarterly_value, numeric_value) END) -        ABS(MAX(CASE WHEN standard_concept = 'PaymentsToAcquirePropertyPlantAndEquipment'            THEN numeric_value END)), 0    ) AS fcf,    ROUND(        MAX(CASE WHEN standard_concept = 'NetIncomeLoss' THEN numeric_value END), 0    ) AS net_income,    ROUND(        (MAX(CASE WHEN standard_concept = 'NetCashProvidedByUsedInOperatingActivities'            THEN COALESCE(derived_quarterly_value, numeric_value) END) -        ABS(MAX(CASE WHEN standard_concept = 'PaymentsToAcquirePropertyPlantAndEquipment'            THEN numeric_value END))) /        NULLIF(MAX(CASE WHEN standard_concept = 'NetIncomeLoss' THEN numeric_value END), 0),        2    ) AS fcf_conversion_ratioFROM fact fJOIN references r        ON f.entity_id = r.cikJOIN index_membership im ON im.cik = r.cikWHERE f.form_type = '10-K'  AND f.fiscal_year = 2024  AND im.index_name = 'SP500'  AND im.removal_date IS NULLGROUP BY r.symbol, r.name, r.sectorHAVING fcf > 0 AND fcf_conversion_ratio > 1.1ORDER BY fcf_conversion_ratio DESCLIMIT 20""" try:    with ValueinClient() as client:        df = client.run_query(sql)        print(df)except ValueinError as e:    print(f"Valuein error: {e}")

Return on Invested Capital (ROIC) Trend

ROIC is the most reliable predictor of long-term equity returns. This query computes ROIC across 5 annual filings and filters to companies sustaining above 15% average.

Python
Show the query ↓
valuein_query.pypython
from valuein_sdk import ValueinClient, ValueinError sql = """WITH invested_capital AS (    SELECT        r.symbol, r.name,        f.fiscal_year,        MAX(CASE WHEN standard_concept = 'OperatingIncomeLoss' THEN numeric_value END)            * (1 - 0.21) AS nopat,        MAX(CASE WHEN standard_concept = 'Assets' THEN numeric_value END) -        MAX(CASE WHEN standard_concept = 'LiabilitiesCurrent' THEN numeric_value END) AS ic    FROM fact f    JOIN references r        ON f.entity_id = r.cik    JOIN index_membership im ON im.cik = r.cik    WHERE f.form_type = '10-K'      AND f.fiscal_year BETWEEN 2020 AND 2024      AND im.index_name = 'SP500'      AND im.removal_date IS NULL    GROUP BY r.symbol, r.name, f.fiscal_year)SELECT    symbol, name, fiscal_year,    ROUND(nopat / NULLIF(ic, 0) * 100, 1) AS roic_pctFROM invested_capitalWHERE ic > 0QUALIFY AVG(nopat / NULLIF(ic, 0)) OVER (PARTITION BY symbol) > 0.15ORDER BY symbol, fiscal_year""" try:    with ValueinClient() as client:        df = client.run_query(sql)    print(df.pivot(index=["symbol", "name"], columns="fiscal_year", values="roic_pct"))except ValueinError as e:    print(f"Valuein error: {e}")
MCP Server

Query 10-K data with natural language

The Valuein MCP (Model Context Protocol) server connects Claude, ChatGPT, and other AI assistants directly to your 10-K dataset. Ask a question in plain English — the MCP server translates it to the right DuckDB query and returns structured results.

Add your Valuein API key to your Claude Desktop or Cursor config and get instant access to 30+ years of annual filings without writing a single line of SQL.

claude_desktop_config.jsonjson
{  "mcpServers": {    "valuein": {      "command": "uvx",      "args": ["valuein-mcp"],      "env": {        "VALUEIN_API_KEY": "vi_live_your_key"      }    }  }}

Example prompts for 10-K data:

Show me all S&P500 companies with 10-K revenue CAGR above 20% over the last 5 years
Which sectors have the highest median operating margins based on the latest 10-K filings?
Find technology companies where free cash flow conversion exceeded 110% in 2024
Compare Apple's gross margin trend from 2015 to 2024 using annual filings

MCP server available for Pro and Enterprise subscribers. See pricing →

Start with 10-K data today

Free tier includes sample data. Pro unlocks the full S&P500 universe.