10-KAnnual 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
111M+
Standardized facts, all form types
292
Standardized financial concepts
1993
Earliest filing year
2.35M
XBRL filings processed
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.
Show the query ↓Hide the query ↑
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.
Show the query ↓Hide the query ↑
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.
Show the query ↓Hide the query ↑
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.
Show the query ↓Hide the query ↑
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}")Query 10-K data with natural language
The Valuein MCP (Model Context Protocol) server connects Claude, Copilot, ChatGPT, or Cursor directly to the 10-K dataset. Ask a question in plain English — the agent calls typed, deterministic tools and every figure comes back with its fact_id and source filing.
Add the remote server URL to your Claude Desktop or Cursor config and get instant access to 30+ years of annual filings without writing a single line of SQL.
{ "mcpServers": { "valuein": { "url": "https://mcp.valuein.biz/mcp", "headers": { "Authorization": "Bearer YOUR_API_TOKEN" } } }}Example prompts for 10-K data:
The MCP server works on every plan — the free sample tier needs no token at all. See pricing →
Start with 10-K data today
The S&P 500 tier is free — no credit card. Pro unlocks the full 19,000+ company universe.