Skip to content

🏦 sec

Securities and Exchange Commission financial data including XBRL filings (10-K, 10-Q, 8-K), insider trading transactions, stock prices, and earnings transcripts. Enables financial analysis, regulatory compliance monitoring, and investment research across public companies. Uses document-based ETL to extract multiple tables from each SEC filing. Stock prices can be seeded from a bulk Stooq zip archive stored in S3, with fallback to the HTTP API for missing or newly-listed tickers.

16 datasets · 170 columns

filing_metadata · table

SEC filing metadata for all public company submissions. Forms include: 10-K (annual report with audited financials), 10-Q (quarterly report), 8-K (current report of a material event), DEF 14A (proxy statement for shareholder meetings), and Form 3/4/5 (insider trading). This table does not carry 8-K item codes (which event a given 8-K reports — earnings, M&A, executive changes, etc.); that classification is not currently exposed in any queryable table (the item-header regex that used to derive it fed the old per-schema vectorized_chunks writer, removed when SEC chunking centralized into ref.vectorized_chunks via ChunkOrganizer's cross-schema sweep). Use for: identifying available filings, filtering by company/date/type, joining to other SEC tables, and tracking filing history.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_type string no Type of SEC filing (e.g., '10-K', '10-Q', '8-K', 'DEF 14A')
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
primary_document string yes Primary document filename in the filing
company_name string yes Legal name of the registrant company
period_of_report string yes Reporting period end date (ISO 8601 format)
acceptance_datetime string yes Date and time the filing was accepted by SEC
file_size long yes Total size of filing in bytes
fiscal_year int yes Fiscal year of the reporting period
state_of_incorporation string yes State or jurisdiction of incorporation
fiscal_year_end string yes Fiscal year end date (MMDD format)
business_address string yes Physical business address of the company
mailing_address string yes Mailing address for correspondence
phone string yes Company phone number
sic_code string yes Standard Industrial Classification code
irs_number string yes IRS Employer Identification Number (EIN)
ticker string yes Stock ticker symbol (if available)

financial_line_items · table

Raw XBRL facts extracted from 10-K/10-Q/20-F filings, one row per (cik, accession_number, concept, context_ref) using native US-GAAP concept names (e.g. us-gaap:Assets, us-gaap:Revenues) — variant concepts for the same metric are NOT consolidated here. Carries both the original text value and a derived value_numeric (value_numeric_method records direct vs. heuristic conversion), plus unit_ref_normalized for the canonical unit. For canonical metric names, dollar-scaled values, and consolidated-vs-segment filtering on the ~40 common income-statement/balance-sheet concepts it recognizes (revenue, net income, assets, liabilities, EPS, etc. — see financial_facts' own comment for the exact list), use the financial_facts view built on top of this table. THIS TABLE, NOT financial_facts, IS WHERE EVERYTHING ELSE LIVES: any concept outside that ~40-item list — including every filer-specific/custom-taxonomy concept (a bank's loan-portfolio breakdown, an industry-specific disclosure, anything namespaced to the filer's own ticker prefix rather than us-gaap:) — is only ever queryable here, by its raw concept string, never through financial_facts (whose concept_aliases mapping is a fixed literal list and silently omits everything not on it — an empty financial_facts result for a concept means "not on the alias list", not "not disclosed"; check this table before concluding a metric is absent). This table is also the one to filter by cik/accession_number directly for a single-filer or single-filing lookup — filtering financial_facts by cik has been observed to be dramatically slower (a hang, in one case) than the identical filter run here, most likely because the predicate does not push through financial_facts' LEFT JOIN to filing_contexts before that join executes. For a sub-category breakdown of a concept (loan class, geography, product line, business segment) rather than one consolidated total, join this table's context_ref to filing_contexts.context_id (same cik + accession_number) and read filing_contexts.segment for the dimension — see that column's comment.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
concept string no XBRL concept name (e.g., 'us-gaap:Assets', 'dei:EntityRegistrantName')
context_ref string no Reference to context element defining the reporting period and entity
unit_ref string yes Raw unit reference as reported in the source XBRL document
unit_ref_normalized string yes Canonical unit (e.g. USD, shares, pure, usdPerShare); equals unit_ref when no normalization rule matches
value string yes Text value of the fact element
full_text string yes Full text content for TextBlock elements (narrative disclosures)
value_numeric double yes Best-effort numeric value as reported by the filer, with the iXBRL scale factor already applied (a statement "in thousands" tagging 1,234 with scale=3 stores 1234000). The as-displayed text is kept verbatim in the value column, and scale is kept for provenance. Not a verbatim copy of the filing text; see value_numeric_method for how it was derived.
value_numeric_method string yes Provenance of value_numeric — direct, heuristic, or null if no conversion possible
period_start string yes Start date of the reporting period (ISO 8601 format)
period_end string yes End date of the reporting period (ISO 8601 format)
is_instant boolean no Whether this is an instant-in-time fact (true) or duration fact (false)
footnote_refs string yes Comma-separated list of footnote references
element_id string no Unique element identifier for linking to other elements
decimals int yes Decimal precision of the numeric value
scale int yes iXBRL scale factor for this fact, already applied to value_numeric; retained for provenance and to relate value_numeric back to the as-displayed value text.

filing_contexts · table

XBRL context definitions from 10-K and 10-Q filings that specify the reporting period and entity for each financial fact. Contexts define whether a value is a point-in-time snapshot (instant) or covers a duration (e.g., fiscal quarter). Use for: understanding the time period of financial data, segment-level analysis, and resolving dimensional breakdowns (e.g., revenue by geography or product line).

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
context_id string no Unique identifier for this context element
entity_identifier string no Entity identifier (typically CIK number)
entity_scheme string yes Entity identifier scheme (e.g., 'http://www.sec.gov/CIK')
period_start string yes Start date of the reporting period (ISO 8601 format)
period_end string yes End date of the reporting period (ISO 8601 format)
period_instant string yes Instant date for point-in-time facts (ISO 8601 format)
effective_date string yes Unified recency anchor for instant and duration contexts, so a caller sorting or filtering by recency doesn't need to know the two are mutually exclusive. period_instant is populated only for point-in-time (balance-sheet) facts; duration facts (most segment/disclosure breakdowns) carry it NULL and populate period_start/ period_end instead. Sorting a mixed set by period_instant alone silently buries every duration-context row behind NULL-sorts-first semantics, reading as "coverage stopped here" when it hasn't (see the sec-filing-contexts-mixed-instant-duration-sort recipe). The two source columns are perfectly complementary in production (confirmed live: 0 rows with both NULL, 0 rows with both populated), so this COALESCE has no ambiguous case to special-case.
segment string yes NULL for a consolidated (company-wide) fact; non-NULL for a fact broken out by a sub-category. THIS IS THE JOIN PATH TO DIMENSIONAL BREAKDOWNS — loan class, business segment, geography, product line. Format is a semicolon-joined list of XBRL "Axis=Member" pairs, e.g. "us-gaap:FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis= fbc:CommercialRealEstateLoansMember; us-gaap:FinancingReceivablePortfolioSegmentAxis= fbc:MortgageLoansHeldForInvestmentMember" — the Member after each '=' names the actual sub-category and is namespaced to the FILER'S OWN taxonomy prefix (here 'fbc:'), not a fixed vocabulary, so search it with ILIKE on the category name (e.g. '%CommercialRealEstate%', '%Office%', '%Multifamily%') rather than an exact match. To pull the dollar value for a sub-category: find its context_id here (filtering segment + cik + accession_number to one filing keeps this cheap), then join financial_line_items.context_ref = context_id (same cik + accession_number) and read value_numeric there for the concept you want.
scenario string yes Scenario dimension information (XML fragment)

mda_sections · table

Management Discussion & Analysis (MD&A) text from 10-K (Item 7) and 10-Q (Item 2) filings. MD&A is a required narrative section where management explains the company's financial condition, results of operations, and known risks/uncertainties. Use for: sentiment analysis, risk factor monitoring, NLP-based insights, comparing management tone across periods, and identifying forward-looking statements. For a pre-chunked, embedding-ready version of this same text, see ref.vectorized_chunks (source_table='mda_sections') — populated by ChunkOrganizer's cross-schema sweep, not by this schema's own ETL; source_type there is 'row_concat' like every other ChunkOrganizer contributor, not a per-content label.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
section string no Item section identifier (e.g., 'Item 7', 'Item 7A')
subsection string yes Immediate heading enclosing this chunk (null when no heading context)
section_path string yes Full heading breadcrumb as ' > '-delimited string for cluster analysis
paragraph_continuation boolean yes True when this chunk is a continuation of an oversized split element
paragraph_number int no Sequential paragraph number within the subsection
paragraph_text string no Full text content of the paragraph
footnote_refs string yes Comma-separated list of footnote references

risk_factor_sections · table

Item 1A (Risk Factors) text from 10-K filings. Risk Factors is a required narrative section where management discloses material risks to the business, operations, and financial condition. Use for: risk-disclosure trend analysis, climate/ESG-risk screening, cross-company risk-language comparison, and NLP-based topic clustering.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
section string no Item section identifier (always 'Item 1A' today)
subsection string yes Immediate heading enclosing this chunk (null when no heading context)
section_path string yes Full heading breadcrumb as ' > '-delimited string for cluster analysis
paragraph_continuation boolean yes True when this chunk is a continuation of an oversized split element
paragraph_number int no Sequential paragraph number within the subsection
paragraph_text string no Full text content of the paragraph
footnote_refs string yes Comma-separated list of footnote references

xbrl_relationships · table

XBRL linkbase relationships from 10-K and 10-Q filings showing how financial concepts connect (e.g., Assets = CurrentAssets + NoncurrentAssets). Includes calculation links (mathematical rollups), presentation links (display order), and definition links (dimensional/hypercube structure via context_element and closed, with arc_use/arc_priority resolving prohibited vs. asserted arcs). Use for: validating financial statement math, reconstructing statement hierarchy, understanding concept relationships, and building automated financial models.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
linkbase_type string no Type of linkbase relationship (presentation, calculation, definition)
arc_role string no Arc role defining relationship type (e.g., parent-child, summation-item)
link_role string yes Role URI of the extended link element containing this arc (e.g., presentation role URL)
from_concept string no Source concept in the relationship
to_concept string no Target concept in the relationship
weight double yes Calculation weight (+1 for addition, -1 for subtraction)
order double yes Presentation order for display sequencing
preferred_label string yes Preferred label role for presentation
arc_use string yes Arc use, "optional" or "prohibited". A prohibited arc states that the relationship does NOT hold — it removes one inherited from a base taxonomy — so a consumer reconstructing the graph must exclude it rather than treat it as an assertion.
arc_priority int yes Arc priority, resolving which arc wins when several share the same from/to and role. Meaningless without arc_use, since its purpose is ordering prohibition against assertion.
context_element string yes xbrldt:contextElement on a hypercube arc, "segment" or "scenario" — which part of the XBRL context the dimension applies to. Definition linkbases only.
closed boolean yes xbrldt:closed on a hypercube arc. When true the hypercube admits only the members it names, so a fact dimensioned outside it is invalid. Definition linkbases only.

insider_transactions · table

Insider trading transactions from Form 3 (initial ownership), Form 4 (changes in ownership within 2 days), and Form 5 (annual summary). Required filings by company officers, directors, and 10%+ shareholders showing their buy/sell activity. Use for: tracking insider sentiment, identifying unusual trading patterns, corporate governance analysis, and generating buy/sell signals based on insider activity. For entity-type reporting persons (an insider that is itself an organization, not an individual), reach this insider's cross-schema identity FROM another schema by joining ref.canonical_org_entity on sec_reporting_person_cik = reporting_person_cik — that table carries one foreign key per source, so the org's LEI and its reporting_person_cik sit in the same row and the join is exact. Matching reporting_person_name as text finds the wrong entities.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
filing_type string no Type of SEC filing (e.g., '10-K', '10-Q', '8-K', 'DEF 14A')
reporting_person_cik string no CIK of the reporting insider
reporting_person_name string no Name of the reporting insider
is_director boolean no Whether the insider is a director
is_officer boolean no Whether the insider is an officer
is_ten_percent_owner boolean no Whether the insider owns 10% or more of the company
officer_title string yes Title of the officer (if applicable)
transaction_date string yes Date of the transaction (ISO 8601 format) - null for holdings
transaction_code string yes Transaction code (P=purchase, S=sale, A=award, H=holding, I=initial appointment with no securities)
security_title string yes Title of the security transacted
shares_transacted double yes Number of shares bought or sold (null for holdings)
price_per_share double yes Price per share in the transaction
shares_owned_after double yes Shares beneficially owned after the transaction
acquired_disposed_code string yes Whether shares were acquired (A) or disposed (D) - null for holdings
ownership_type string yes Type of ownership (direct or indirect)
footnotes string yes Additional footnotes and explanations

institutional_holdings · table

Institutional investment manager holdings from Form 13F-HR. Filed quarterly by managers with $100M+ in qualifying assets. Contains per-security positions with share counts, market value, and voting authority. Known as "whale watching" data — tracks positions of Berkshire Hathaway, Bridgewater, Renaissance, etc. Use for: tracking institutional ownership changes, identifying crowded trades, monitoring activist accumulation, and building factor models. To reach a filing manager's cross-schema identity FROM another schema rather than by name, join ref.canonical_org_entity on sec_manager_cik = manager_cik — that table carries one foreign key per source, so the manager's LEI and its manager_cik sit in the same row and the join is exact. Matching manager_name as text finds the wrong entities and misses managers filing under a differently-worded name.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
filing_type string no Type of SEC filing (e.g., '10-K', '10-Q', '8-K', 'DEF 14A')
manager_name string yes Name of the filing investment manager
manager_cik string yes CIK of the filing investment manager
report_period date yes Calendar quarter end date for the report (ISO 8601)
issuer_name string yes Name of the security issuer (company name)
title_of_class string yes Title/class of the security (e.g., COM, CL A, PFD)
cusip string yes CUSIP identifier (9-character)
value_thousands double yes Market value in thousands of USD
shares_or_principal double yes Number of shares or principal amount
shares_or_principal_type string yes SH for shares, PRN for principal amount
investment_discretion string yes Investment discretion (SOLE, DFND, OTR)
voting_authority_sole double yes Shares with sole voting authority
voting_authority_shared double yes Shares with shared voting authority
voting_authority_none double yes Shares with no voting authority
put_call string yes Put or Call indicator for options (null for common stock)

beneficial_ownership · table

Beneficial ownership filings from Schedule 13D (activist >5% holders) and Schedule 13G (passive >5% holders). Discloses who owns large stakes, how many shares, percent of class, source of funds, and critically — the purpose of the transaction (Item 4). 13D filers may push for M&A, board changes, or restructuring. Use for: tracking activist campaigns, monitoring ownership concentration, detecting accumulation patterns, and governance risk analysis.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
filing_type string no Type of SEC filing (e.g., '10-K', '10-Q', '8-K', 'DEF 14A')
subject_company string yes Name of the company whose shares are held
subject_cik string yes CIK of the subject company
filer_name string yes Name of the beneficial owner filing the schedule
filer_cik string yes CIK of the beneficial owner
date_of_event string yes Date of event requiring filing (ISO 8601)
title_of_class string yes Title/class of securities (e.g., Common Stock)
cusip string yes CUSIP identifier of the security
percent_of_class double yes Percent of class beneficially owned
shares_beneficially_owned double yes Number of shares beneficially owned
sole_voting_power double yes Shares with sole voting power
shared_voting_power double yes Shares with shared voting power
sole_dispositive_power double yes Shares with sole dispositive power
shared_dispositive_power double yes Shares with shared dispositive power
type_of_reporting_person string yes Type code (IN=individual, CO=corporation, IA=investment adviser, etc.)
source_of_funds string yes Source of funds (WC=working capital, BK=bank, OO=other)
purpose_of_transaction string yes Item 4 text describing intent (investment, activist, M&A, etc.)

earnings_transcripts · table

Earnings-related content from 8-K filings (Item 2.02 - Results of Operations). 8-K forms are "current reports" filed within 4 days of material events; Item 2.02 covers earnings releases with quarterly results, guidance, and press release text, split into prepared_remarks vs qa_session paragraphs with speaker_name/speaker_role for the Q&A portion. Use for: earnings surprise analysis, guidance tracking, management commentary on results, and correlating announcements with stock price movements. For a pre-chunked, embedding-ready version of this same text, see ref.vectorized_chunks (source_table='earnings_transcripts') — populated by ChunkOrganizer's cross-schema sweep, not by this schema's own ETL; source_type there is 'row_concat' like every other ChunkOrganizer contributor, not a per-content label.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
accession_number string no SEC accession number (unique filing identifier, format 0000000000-00-000000)
filing_date string no Date the filing was submitted to SEC (ISO 8601 format)
year int no Filing year for Iceberg partitioning
filing_type string no Type of SEC filing (e.g., '10-K', '10-Q', '8-K', 'DEF 14A')
exhibit_number string yes Exhibit number within the filing
section_type string no Section type (prepared_remarks, qa_session)
paragraph_number int no Sequential paragraph number
paragraph_text string no Full text content of the paragraph
speaker_name string yes Name of the speaker (for Q&A sections)
speaker_role string yes Role/title of the speaker

stock_prices · table

Daily open/high/low/close/volume stock prices, one row per (ticker, date), plus adjusted_close (close price adjusted for splits and dividends) for computing returns across corporate actions. Sourced from Stooq (bulk S3 zip checked first via StooqBulkProxy, HTTP API fallback) and linkable back to SEC filers via cik. Use for: event studies, volatility analysis, price correlation studies.

Column Type Null Description
cik string no Central Index Key (unique SEC company identifier, 10 digits zero-padded)
ticker string no Stock ticker symbol in Stooq format (e.g., 'AAPL.US', 'MSFT.US')
date string no Trading date in ISO 8601 format (YYYY-MM-DD)
open double yes Opening price for the trading day
high double yes Highest price during the trading day
low double yes Lowest price during the trading day
close double yes Closing price for the trading day
volume long yes Number of shares traded during the day
adjusted_close double yes Closing price adjusted for splits and dividends
year int no Trading year (Iceberg partition column; present in the data and the year=*/ path)

latest_filings · view

Most recent filing of each type per company

View — columns are resolved by the query engine at runtime.

Revenue-tagged XBRL facts (any concept whose name matches '%Revenue%') joined to company_name/ticker, one row per matching concept per period_end. Uses a simple substring match rather than the curated concept_aliases mapping in the financial_facts view, so it can include non-revenue concepts (e.g. DeferredRevenue) or miss unmapped revenue tags — prefer financial_facts (canonical_name='revenue') for precise revenue trend analysis.

View — columns are resolved by the query engine at runtime.

insider_activity_summary · view

Transaction count, total shares, and average price per share from insider_transactions, aggregated by company and transaction_code — purchases ('P') and sales ('S') only; awards, holdings, and other codes are excluded.

View — columns are resolved by the query engine at runtime.

financial_facts · view

Normalized financial line items with canonical metric names and scaled dollar values. Joins financial_line_items against an inline concept_aliases mapping to resolve XBRL concept variants (e.g. both us-gaap:Revenues and us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax map to canonical_name=revenue). value_dollars is retained as an alias of the (already scale-applied) value_numeric so existing callers keep working; the scale factor is applied once, in the base table. WARNING: a filing reports one consolidated value per concept plus, separately, its segment/geography/product-line breakdown members under the same canonical_name and period — each context_ref is a distinct fact, so SUM(value_dollars) across all context_refs for a (cik, canonical_name, period) multiplies the consolidated total by however many dimensional breakdowns the filer disclosed. Filter is_consolidated_total = TRUE to get the single company-wide figure per concept/period. SCOPE WARNING: canonical_name only covers the ~40 concepts listed in this view's own concept_aliases mapping below (revenue, net income, assets, liabilities, EPS and similar common income-statement/balance-sheet lines). It does NOT and structurally CANNOT cover filer-specific or industry-specific concepts (e.g. a bank's loan-portfolio breakdown by class) — those rows are simply excluded by this view's inner JOIN, not filtered out by any WHERE clause, so an empty or missing result here means "not one of the ~40 aliased concepts", not "not disclosed". Query financial_line_items directly by its raw concept string for anything outside that list (see that table's own comment). PERFORMANCE WARNING: filtering this view by cik/accession_number has been observed to be dramatically slower than the identical filter run directly against financial_line_items — in one case a hang lasting 45+ minutes at 900%+ CPU versus an instant response from the base table with the same predicate — most likely because the filter does not push through this view's LEFT JOIN to filing_contexts before that join executes. For a single-filer or single-filing lookup, prefer querying financial_line_items directly (optionally scoped to one accession_number) over filtering this view.

View — columns are resolved by the query engine at runtime.

company_financial_profile · view

Denormalised company identity: SEC filing metadata joined to GLEIF CIK-LEI bridge and GLEIF entity registry. One row per company — enables CIK-to-LEI resolution and cross-border corporate entity analysis. gleif_cik_mapping.cik is unpadded (GLEIF's own convention) while filing_metadata.cik is 10-digit zero-padded (SEC's convention); the join normalizes with LPAD. GLEIF's SEC-authority CIK bridge covers only entities GLEIF has registered under registration_authority_id='RA000665' (SEC EDGAR) — a minority of SEC filers, so lei/legal_name/headquarters_* are legitimately NULL for most companies, not a join defect. A company incorporated outside Delaware (e.g. Apple in California, Microsoft in Washington) commonly has no RA000665 record in GLEIF at all, even though it is a real SEC filer.

View — columns are resolved by the query engine at runtime.