Valuein

The financial dataset

SEC EDGAR financial statement data, point-in-time.

120.5M+ standardized facts from 28,000+ companies since 1993, as Parquet tables you query with DuckDB, Python or an AI agent. Every figure our tools return carries a fact_id that traces to its SEC filing.

Try it free: no token, no card

pip install valuein-sdk

The free sample is a slice of today's S&P 500. Paid plans unlock the full universe.

Financial facts
120.5M+
Entities
28,000+
SEC filings since 1993
3.7M+
Smart-money rows
109M+

Schema

Every table, grouped by what it answers

Open a table for its description and columns. entity is the hub; every fact ties to an entity and the filing it came from.

Fundamentals and ratios

Every plan
  • fact120.5M+ rowsThe core table: one standardized fact per filing, period and concept.Show 19 columns

    The core table. Every standardized financial fact extracted from every filing. Supports point-in-time queries via accepted_at, quarterly derivation via derived_quarterly_value, and a value_current vs. value_as_filed view for restated values.

    • fact_id
    • entity_id
    • accession_id
    • concept
    • standard_concept
    • numeric_value
    • derived_quarterly_value
    • value_current
    • value_as_filed
    • first_filed_at
    • restated
    • unit
    • reporting_currency
    • fiscal_year
    • fiscal_period
    • period_end
    • period_span_days
    • is_cumulative
    • accepted_at
  • ratio15.8M rowsPipeline-computed ratios per entity and fiscal period, kept as they were known.Show 13 columns

    Pipeline-computed financial ratios per entity per fiscal period. Append-on-restatement: accepted_at is the point-in-time vintage (max accepted_at of the input facts), so filter accepted_at <= as_of then take the latest vintage to avoid look-ahead bias. Filter by category for grouped screens.

    • entity_id
    • ratio_name
    • category
    • value
    • confidence_score
    • unit
    • period_end
    • fiscal_year
    • fiscal_period
    • is_ttm
    • accepted_at
    • computed_at
    • ingested_at
  • factor_scoresCross-sectional factor scores and ranks per entity and fiscal year.Show 17 columns

    Pre-computed cross-sectional factor scores and ranks per entity per fiscal year: margins, ROE, leverage, Piotroski F-score, and a composite rank. Powers universe screening without a full fact-table scan.

    • entity_id
    • symbol
    • sector
    • fiscal_year
    • period_end
    • gross_margin
    • operating_margin
    • net_profit_margin
    • roe
    • debt_to_equity
    • current_ratio
    • asset_turnover
    • fcf_to_assets
    • revenue_growth_yoy
    • piotroski_f_score
    • composite_rank
    • accepted_at
  • earnings_signalsEPS actuals and surprise, revenue growth and price momentum per period.Show 14 columns

    Per-period earnings and momentum signals: EPS actuals and surprise, revenue YoY, 1/3/6/12-month momentum, and 52-week price context, each row stamped with its own accepted_at.

    • entity_id
    • fiscal_year
    • fiscal_period
    • period_end
    • eps_actual
    • eps_surprise_pct
    • revenue_yoy_pct
    • momentum_1m
    • momentum_3m
    • momentum_6m
    • momentum_12m
    • price_52w_high
    • price_52w_low
    • accepted_at
  • taxonomy_guide11,966 rowsDefinition of every standard_concept used in fact.Show 6 columns

    Definitions for every standard_concept used in the fact table: human_name, definition, unit_type, balance_type, and source_reference (US-GAAP taxonomy reference).

    • standard_concept
    • human_name
    • definition
    • unit_type
    • balance_type
    • source_reference
  • standard_concept851 rowsThe published concept dictionary behind standardization.Show 12 columns

    The canonical concept dictionary behind standardization: category, statement type, Bloomberg/FactSet equivalents, and review-status columns (reviewed, review_confidence; only a few concepts are hand-reviewed so far). The mapping layer is published, not a black box.

    • standard_concept
    • category
    • statement_type
    • definition
    • parent_concept
    • level
    • is_flow
    • unit_default
    • bloomberg_equivalent
    • factset_equivalent
    • reviewed
    • review_confidence

Filings and restatements

Every plan
  • filing3.71M rowsEvery XBRL filing processed, with its SEC acceptance timestamp.Show 18 columns

    Every XBRL filing processed: 10-K, 10-Q, 8-K, 20-F, and their amendments since 1993. accepted_at is the SEC acceptance timestamp; superseded_by chains the amendment lineage.

    • accession_id
    • entity_id
    • form_type
    • core_type
    • filing_date
    • report_date
    • accepted_at
    • is_amendment
    • amendment_no
    • superseded_by
    • is_xbrl
    • is_inline_xbrl
    • is_xbrl_numeric
    • is_audited
    • primary_document
    • size
    • file_number
    • act
  • restatement_eventsOne row per fact a later filing materially changed. Powers Restatement Radar.Show 20 columns

    One row per financial fact a later filing materially changed (>0.5% swing from the originally-reported value), 1993 to present. disclosure_class records whether anyone was told: non_reliance (an 8-K Item 4.02 was filed), amended (a 10-K/A or 10-Q/A), or undisclosed (the value changed inside a routine filing). Powers Restatement Radar.

    • event_id
    • cik
    • ticker
    • concept
    • standard_concept
    • statement_type
    • period_start
    • period_end
    • first_value
    • current_value
    • delta_pct
    • version_count
    • first_accession
    • current_accession
    • restated_in_form
    • restated_in_amendment
    • disclosure_class
    • severity
    • concept_importance
    • company_rank
  • industry_classificationPoint-in-time SEC SIC classification, one row per company and SIC spell.Show 15 columns

    Point-in-time SIC classification built from the SIC each filer reported in its own filings. valid_from is the acceptance instant of the first filing that showed the SIC; valid_to is exclusive, NULL for the current spell. references.sector, industry and sic_code are current values; use this table for as-of questions. No GICS: the 4-digit SIC is the finest level published. Every tier.

    • cik
    • sic_code
    • sic_description
    • sic_division
    • sic_division_name
    • sic_major_group
    • sic_industry_group
    • sector
    • industry
    • valid_from
    • valid_to
    • first_accession_id
    • last_accession_id
    • evidence_count
    • valid_from_basis
  • filing_registrantEvery registrant of an accession, including co-registrants. Paid plans.Show 2 columns

    Every registrant of an SEC accession. filing keeps one row per accession, owned by the first registrant, so a combined (co-registrant) filing appears under one CIK there. Join to filing on accession_id to list a company's filings including the combined ones. Paid tiers.

    • accession_id
    • entity_id

Prices

Daily bars: Pro and Institutional
  • stock_priceCoarse series on every plan: period-end and month-end closes with total return.Show 11 columns

    Coarse price series per entity, on every tier: one close at each fiscal period end (the price behind every published multiple) plus month-end closes, each carrying the priced listing's total_return_index, so the ratio of two month-end rows is the total return between them, dividends between the month-ends included. Resolved to the issuer's primary listing before alignment; security_id and symbol record which one.

    • entity_id
    • security_id
    • symbol
    • price_date
    • close
    • div_cash
    • split_factor
    • accepted_at
    • period_end
    • observation
    • total_return_index
  • stock_price_dailyDaily OHLCV per listing with a dividend-reinvested total return index.Show 15 columns

    Pro and Institutional only: the free tiers do not carry the daily series (licensed market data); they keep the valuation multiples in ratio, momentum in earnings_signals and the coarse stock_price series. Daily OHLCV bar series per listing (open, high, low, close, volume) with total_return_index (dividends reinvested, splits neutralized, forward-compounded so it is point-in-time immutable) plus the raw corporate-action factors, so price returns and valuation multiples never double-count a dividend or miss a split. Grain is one row per SECURITY per trading day; filter is_primary_listing for one row per company. adjusted_close is a vendor passthrough and is null on the large majority of bars: use total_return_index for total return. Prices are licensed market data, not EDGAR, so they do not share the 1993 fundamentals floor: no bars exist in 1993 and the earliest bar differs per security, from 1994 onward.

    • entity_id
    • security_id
    • symbol
    • is_primary_listing
    • price_date
    • open
    • high
    • low
    • close
    • adjusted_close
    • total_return_index
    • volume
    • div_cash
    • split_factor
    • accepted_at

Reference and identifiers

Every plan
  • references17,539 rowsStart here: entity and security flattened to one row per security.Show 14 columns

    Derived flat join of entity + security. One row per security. Eliminates 2-table joins for company metadata. The starting point for any cross-company analysis. For index membership (current or historical), join index_membership on cik.

    • cik
    • symbol
    • name
    • sector
    • industry
    • exchange
    • mic
    • is_active
    • valid_from
    • valid_to
    • sic_code
    • entity_type
    • figi
    • composite_figi
  • entity33,316 rowsEvery SEC-registered filer of XBRL statements, active or not.Show 14 columns

    Every SEC-registered entity that has filed XBRL financial statements. Includes active, delisted, bankrupt, and acquired companies.

    • cik
    • name
    • sic_code
    • sic_description
    • sector
    • industry
    • state_of_incorporation
    • fiscal_year_end
    • business_address
    • mailing_address
    • former_names
    • is_foreign
    • flags
    • category
  • security17,539 rowsTicker and exchange history as a type-2 slowly changing dimension.Show 14 columns

    Ticker symbols and exchange listings (SCD Type 2 with valid_from / valid_to). One entity may have multiple securities: filter is_primary_ticker = TRUE for one row per CIK.

    • id
    • entity_id
    • symbol
    • exchange
    • mic
    • valid_from
    • valid_to
    • is_active
    • is_primary_ticker
    • figi
    • composite_figi
    • share_class_figi
    • security_type
    • market_sector
  • index_membership25,374 rowsHistorical S&P 500 and Russell 1000/2000/3000 constituents.Show 8 columns

    Historical index constituents (SP500, RUSSELL1000, RUSSELL2000, RUSSELL3000). Keyed on cik, with [) interval semantics. Join "references" on cik to attach company metadata. There is no is_sp500 flag.

    • cik
    • index_name
    • effective_date
    • removal_date
    • removal_reason
    • successor_cik
    • source
    • confidence

Smart money

Institutional

The nine Institutional smart-money tables (insider transactions and institutional holdings) live in the smart-money dataset.

Form ADV (investment advisers)

Institutional
  • investment_adviserOne row per registered or exempt-reporting adviser (Form ADV Part 1A).Show 9 columns

    Form ADV Part 1A for registered investment advisers and Exempt Reporting Advisers. A separate SEC source from EDGAR filings: rows key on the firm's CRD number, with cik a nullable soft link. Exempt Reporting Advisers do not file Items 5.A-5.F by obligation, and raum_total is double-counted across affiliated filings, so read it per firm only.

    • crd_number
    • filing_date
    • legal_name
    • firm_type
    • registration_status
    • cik
    • total_employees
    • raum_total
    • has_private_funds
  • investment_adviser_private_fundOne row per private fund an adviser reports (Form ADV Schedule D, Section 7.B.(1)).Show 9 columns

    Private funds advised by a registered investment adviser, one row per adviser, fund and filing vintage; joins to investment_adviser on crd_number.

    • crd_number
    • fund_id
    • filing_date
    • fund_name
    • fund_type
    • gross_asset_value
    • owner_count
    • is_master_fund
    • is_feeder_fund
How the core tables relate: entity is the hub; every fact ties to an entity and the SEC filing it came from. Hover a table to trace its joins.
Core financialsReferenceDerived
Financials core schema. 9 tables, 9 foreign-key relationships. Full text below the diagram.∞1∞1∞1∞1∞1∞1∞1∞1∞1entity● cik name sector statussecurity● id◇ entity_id symbol valid_from/tofiling● accession_id◇ entity_id form_type accepted_atfact● fact_id◇ entity_id◇ accession_id◇ standard_conceptstandard_concept● standard_concept statement_type leveltaxonomy_guide● standard_concept human_name unit_typeratio◇ entity_id ratio_name value accepted_atreferences◇ cik symbol sector is_activeindex_membership◇ cik index_name effective_date removal_date
Relationships (text)
  • security references entity via entity_id → cik (many → 1)
  • filing references entity via entity_id → cik (many → 1)
  • fact references entity via entity_id → cik (many → 1)
  • fact references filing via accession_id (many → 1)
  • fact references standard_concept via standard_concept (many → 1)
  • standard_concept references taxonomy_guide via standard_concept (many → 1)
  • ratio references entity via entity_id → cik (many → 1)
  • references references entity via cik (many → 1)
  • index_membership references references via cik = cik (many → 1)

Why trust it

Know what was known, and when

Every fact carries accepted_at, the moment the SEC accepted the filing that introduced it, and a fact_id that traces to that filing. Filter on a date and you see only what was public then.

Point-in-time, so backtests cannot peek

Without it, a 2015 backtest quietly uses numbers that were only published in 2016 (look-ahead bias), and the returns evaporate in live trading. Filtering on accepted_at hides every later filing and amendment, exactly as it would have been in real time.

  • Eliminates look-ahead bias in walk-forward backtests
  • Supports event studies around filing dates
  • Reproduces any historical research state exactly
Show the SDK query
point_in_time.pypython
from valuein_sdk import ValueinClient, ValueinError # AAPL quarterly revenue rows exactly as known on 2023-05-01:# nothing the SEC accepted after that moment is visible.sql = """SELECT  f.period_end,  f.fiscal_period,  f.numeric_value / 1e9 AS revenue_billions,  f.accepted_at,  fi.form_typeFROM fact fJOIN "references" r ON r.cik = f.entity_idJOIN filing fi      ON fi.accession_id = f.accession_idWHERE r.symbol = 'AAPL'  AND r.is_active  AND f.standard_concept = 'TotalRevenue'  AND fi.form_type IN ('10-Q', '10-Q/A')  AND f.accepted_at <= TIMESTAMP '2023-05-01 00:00:00'ORDER BY f.period_end DESC, f.accepted_at DESCLIMIT 5;"""try:    with ValueinClient() as client:        df = client.run_query(sql)        print(df)except ValueinError as e:    print(f"Valuein error: {e}")

Original and restated, side by side

When a company files a 10-K/A or 10-Q/A it restates earlier numbers. Most datasets overwrite the original; Valuein keeps both, each with its own accepted_at, and flags the filing with is_amendment.

  • 10-K/A and 10-Q/A restate annual and quarterly financials
  • value_as_filed sits next to value_current on every fact
  • restatement_events lists every material change
Show the SDK query
amendments.pypython
from valuein_sdk import ValueinClient, ValueinError # Every filing that reported Apple's fiscal 2023 revenue, oldest first.# Each one is its own row with its own accepted_at; nothing is overwritten.sql = """SELECT  fi.form_type,  fi.filing_date,  f.accepted_at,  fi.is_amendment,  f.numeric_value  / 1e9 AS revenue_billions,  f.value_as_filed / 1e9 AS first_reported_billions,  f.restatedFROM fact fJOIN "references" r ON r.cik = f.entity_idJOIN filing fi      ON fi.accession_id = f.accession_idWHERE r.symbol = 'AAPL'  AND r.is_active  AND f.standard_concept = 'TotalRevenue'  AND f.fiscal_period = 'FY'  AND f.period_end = DATE '2023-09-30'ORDER BY f.accepted_at ASC;"""try:    with ValueinClient() as client:        df = client.run_query(sql)        print(df)except ValueinError as e:    print(f"Valuein error: {e}")

Delisted companies stay in

Datasets that keep only today's survivors never see the Enrons and Lehmans, which inflates historical returns. Pro and Institutional keep every entity that ever filed XBRL statements, through its final SEC filing. The free Benchmark tier covers the large-cap US benchmark universe, former members included.

  • Enron Corp
  • Lehman Brothers
  • RadioShack
  • Toys R Us
  • Blockbuster
  • WorldCom
  • Bear Stearns
  • Washington Mutual
  • Kodak
  • Sears Holdings

A large share of the 28,000+ entities no longer trade, and some have no listed stock at all: privately held companies with public bonds (BNSF), finance arms that issue only debt (Toyota Motor Credit), non-traded REITs and private credit funds file the same 10-K and 10-Q. Foreign companies that file a 20-F or 40-F are in too, in their own reporting currency. See the methodology and the governance overview.

350+ standard concepts; unmapped tags are kept as Other

Raw XBRL tags map to a canonical standard_concept, while the original tag stays in fact.concept and every definition is published in the standard_concept table.

Raw XBRL revenue tags and the standard concept they map to
Raw XBRL tagStandard concept
us-gaap:RevenueFromContractWithCustomerExcludingAssessedTaxTotalRevenue
us-gaap:SalesRevenueNetTotalRevenue
us-gaap:RevenuesTotalRevenue
us-gaap:SalesRevenueGoodsNetTotalRevenue
us-gaap:RevenueFromContractWithCustomerIncludingAssessedTaxTotalRevenue
custom:TotalNetRevenuesTotalRevenue

Revenue alone has 80+ raw synonyms. Browse every mapping in the data catalog.

Measured accuracy: published and re-derivable

We publish a falsifiable test: Of 18,385 evaluable annual filings in the large-cap US benchmark universe, 93.31% pass every active error-severity accounting identity (91.46% for filings from 2010 onward; measured 2026-10-24). Filings with no testable facts are excluded. The baseline ships in our public repo and re-derives from one DuckDB script; the nightly publisher refuses to publish a baseline whose modern figure drops more than half a point. See the methodology for how the identities are checked.

Where the data comes fromShow

The SEC requires every public company to file structured XBRL statements, published as the EDGAR Financial Statements Data Sets: quarterly archives with num.txt, sub.txt, tag.txt, pre.txt and cal.txt.

Publisher
U.S. Securities and Exchange Commission
Dataset
EDGAR Financial Statements Data Sets
Format
Quarterly ZIP archives (TSV files)
Update frequency
Quarterly, with amendments filed continuously
Coverage
All SEC-registered entities filing XBRL (2009+, with historical data back to 1993)
Source
sec.gov/dera/data/financial-statement-data-sets
The ten-step pipelineShow
  1. 01

    SEC EDGAR ingestion

    Quarterly XBRL bulk downloads from the SEC EDGAR Financial Statements Data Sets are ingested automatically. Each release contains num.txt, sub.txt, tag.txt, pre.txt, and cal.txt files covering every public filing.

  2. 02

    XBRL submission parsing

    Every XBRL submission in the quarterly dump is parsed. Filing metadata, entity info, tagged numeric values, and calculation linkbases are extracted and validated.

  3. 03

    Entity and security normalization

    CIK numbers are resolved to standardized entity records. SIC codes are mapped to sectors and industries. Exchange information, ticker symbols, and open FIGI identifiers are enriched from multiple sources.

  4. 04

    Concept standardization

    Raw XBRL tags are mapped to 350+ canonical standard_concept values. Revenue synonyms, debt variants, and custom extensions all resolve to a single canonical concept name; unmapped tags fall through to Other.

  5. 05

    Point-in-time indexing

    Every fact receives an accepted_at timestamp equal to the SEC acceptance date of the filing that introduced it. No backfilling, no estimation.

  6. 06

    Amendment reconciliation

    10-K/A and 10-Q/A filings (restated financials) are tracked separately. Original values and restated values coexist in the dataset, each with their own accepted_at timestamp.

  7. 07

    Derived quarterly values

    Q2 and Q3 cash flow statements in 10-Qs report year-to-date totals, and there is no Q4 10-Q. The pipeline stores the quarter-only figure as derived_quarterly_value alongside the filed number; on the FY row, that is Q4.

  8. 08

    Index membership enrichment

    S&P 500 and Russell 1000/2000/3000 membership is tracked historically in index_membership with effective_date / removal_date and [) interval semantics.

  9. 09

    Parquet export

    Column-oriented Parquet files with ZSTD compression are generated for each tier, optimized for DuckDB, Polars, and Spark, and exported to object storage after every EDGAR quarterly release.

  10. 10

    Manifest update

    manifest.json records the snapshot, the last_updated timestamp, the table list and every table's column schema. SDKs and integrations use it to detect fresh data automatically.

Three ways in

Same data, whichever way you work

One token unlocks the Python SDK, the MCP server and the Parquet API at your plan's tier. With no token you get the free sample.

Python SDK

DuckDB over Parquet, in your notebook.

first_read.pypython
from valuein_sdk import ValueinClient with ValueinClient() as client:  # no key: the free sample    facts = client.read_table(        "fact",        tickers="AAPL",        columns=["standard_concept", "period_end", "fiscal_period", "numeric_value"],        limit=10,    )    print(facts)
SDK docs

MCP for agents

Tools that return figures with a fact_id attached.

mcpbash
# Add this server URL to your MCP client:https://mcp.valuein.biz/mcp # Then your agent calls:search_companies(query="Apple")get_company_fundamentals(ticker="MSFT", period="FY", limit=5)
Connect over MCP

REST and Parquet

Stream ZSTD Parquet over HTTPS.

rest.shbash
# No token: the public sample manifest and a sample Parquet tablecurl -s https://data.valuein.biz/v1/sample/manifestcurl -sL https://data.valuein.biz/v1/sample/fact -o fact.parquet # With a token: your plan's manifestcurl -s -H "Authorization: Bearer $VALUEIN_API_KEY" https://data.valuein.biz/v1/manifest
API reference

Coverage at a glance

Date range
1993–present
Parquet tables
27 (schema v5.1.1)
Standard concepts
350+
Delivery
Parquet, ZSTD
Freshness
New SEC filings typically live within minutes

Filing types

  • 10-KAnnual report
  • 10-QQuarterly report
  • 8-KCurrent report (material events)
  • 20-FAnnual report (foreign private issuers)
  • 10-K/AAnnual report amendment
  • 10-Q/AQuarterly report amendment

Tier breakdown

BenchmarkFree
Free

Large-cap US benchmark universe, including former members · 500+ current tickers · 1993–present

60 req/min · 1,000 req/hr

ProPopular
$49/mo

Active + delisted US universe · 28,000+ entities · 15-year history (2011→present)

100 req/min · 3,000 req/hr

Institutional
$499/mo

Two datasets: fundamentals (120.5M+ facts, 28,000+ entities, 1993–present) + smart-money (109M+ rows · 9 tables: Forms 3/4/5/144 + 13F/13D/13G)

300 req/min · 10,000 req/hr

Frequently asked questions

What is in the Valuein financial dataset?
Standardized financial statement facts from SEC EDGAR filings (10-K, 10-Q, 8-K, 20-F and amendments) back to 1993, plus ratios, factor scores, prices, restatement events and identifiers, delivered as 27 Parquet tables. Smart-money tables (insider transactions and institutional holdings) are Institutional-only.
Can I try the data without a token or a card?
Yes. Run pip install valuein-sdk and query the free sample: no token, no card. The free tiers cover the large-cap US benchmark universe, including companies that later left the index; Pro and Institutional unlock the full SEC universe.
What does point-in-time mean here?
Every fact carries accepted_at, the moment the SEC accepted the filing that introduced it. Filtering on accepted_at <= a date returns only what was publicly known then, so a backtest cannot see a restatement or a later filing.
Are delisted and bankrupt companies included?
On Pro and Institutional, yes: every entity that ever filed XBRL statements stays in the universe, up to its final SEC filing. The free tiers cover the large-cap US benchmark universe, including its former members, and are survivorship-bias-free for that universe.
What happens when a company restates?
Nothing is overwritten. The original and the restated value each keep their own accepted_at, fact carries value_as_filed next to value_current, and restatement_events records every material change with its disclosure class.
How do I get the data into Python, an agent or a warehouse?
Three ways in: the Python SDK (DuckDB over Parquet), the MCP server for AI agents, and the REST/Parquet API at data.valuein.biz. One token works on all three at your plan's tier.

Start querying 120.5M+ facts today

Free sample with no card. Pro adds the full universe; Institutional adds smart-money data. Also available as direct Parquet download.