EDGAR Fundamentals
Financial-statement figures (revenue, net income, assets, liabilities and more) pulled from companies' XBRL filings.
edgar_fundamentals — the dataset name to pass to the Obscura API.
What one row means
One core financial-statement fact from an SEC XBRL "frames" query: a single us-gaap concept value (e.g. Revenues, NetIncomeLoss, EarningsPerShareDiluted, Assets) reported by one filer for one fiscal period, in long/EAV format. Metric keys come from `FundamentalMetric::as_str` in tasks/edgar_fundamentals.rs.
One row per (cik, period_end, metric) -- one row per (filer, fiscal-period-end, financial concept).
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For edgar_fundamentals: published: available_date = the SEC dissemination date of the filing (10-Q/10-K) that reported this fact, recovered from edgar_filings via accn; NULL until the accession is captured (the frames collector re-fetches to backfill historical rows).
Refresh cadence
Obscura refreshes edgar_fundamentals weekly — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema — 10 columns
The full public column list for edgar_fundamentals, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_fundamentals.
| Column | Type | Description |
|---|---|---|
| cik | bigint · not null | SEC Central Index Key of the filing entity, from the XBRL frame entry's `cik`. Part of the primary key. |
| period_end | date · not null | Reporting-period end (`end` from the frame) — the fiscal period this value is AS OF. Part of the grain — a fact is one value per company/period/metric. This is a period date, not the public availability date; see `available_date` for that. |
| period_start | date | Reporting-period START date of the fact (`start` from the frame entry). Together with `period_end` it defines the duration window (e.g. `2024-01-01 → 2024-03-31` = a 3-month figure vs a YTD/annual figure) and disambiguates off-calendar fiscal quarters (e.g. `2023-12-01 → 2024-02-29`) that `period_end` alone cannot. NULL for instant (balance-sheet) metrics, which have no start. Nullable. |
| metric | text · not null | The financial concept key (e.g. revenues, net_income, eps_diluted, assets, long_term_debt) from `FundamentalMetric::as_str`, mapping to a us-gaap XBRL tag. Part of the primary key; makes this a long/EAV table. |
| available_date | date | PUBLIC-availability date: the SEC dissemination date of the filing that reported this fact, recovered from `edgar_filings` via `accn`. NULL until the accession is captured (the frames collector re-fetches to backfill historical rows). The point-in-time column to filter/join on — never `period_end`. |
| accn | text | Accession of the source filing (from the frames API) — the join key to `edgar_filings` for the public date. |
| value | double precision · not null | The numeric fact value in the concept's unit (USD for most metrics, USD-per-shares for eps_diluted); fractional values preserved. From the XBRL entry's `val`. |
| entity_name | text | Human-readable filer name from the XBRL entry's `entityName`; nullable. |
| frame | text | Source XBRL frame identifier (CCP), e.g. CY2026Q1 or CY2026Q1I for instant/balance-sheet metrics; from the frame doc's `ccp`. Identifies the calendar period bucket the fact was pulled from and drives the immutable-frame skip logic. Nullable. |
| loc | text | Filer location as an ISO-3166-2 code from the XBRL frame entry's `loc` (e.g. `US-IL`, `US-CA` for US filers; a bare country code for foreign filers). A per-filer state/country geo attribute; not derivable from any other stored field. Nullable. |
Access edgar_fundamentals
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="edgar_fundamentals",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the edgar_fundamentals dataset?
Financial-statement figures (revenue, net income, assets, liabilities and more) pulled from companies' XBRL filings. One core financial-statement fact from an SEC XBRL "frames" query: a single us-gaap concept value (e.g. Revenues, NetIncomeLoss, EarningsPerShareDiluted, Assets) reported by one filer for one fiscal period, in long/EAV format. Metric keys come from `FundamentalMetric::as_str` in tasks/edgar_fundamentals.rs.
How do I avoid look-ahead bias with edgar_fundamentals?
Filter on edgar_fundamentals.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date = the SEC dissemination date of the filing (10-Q/10-K) that reported this fact, recovered from edgar_filings via accn; NULL until the accession is captured (the frames collector re-fetches to backfill historical rows). A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get edgar_fundamentals?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="edgar_fundamentals". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_fundamentals.
Can I filter edgar_fundamentals by company or symbol?
Yes. edgar_fundamentals carries cik, the column the API's symbols filter resolves against.
How often is edgar_fundamentals updated?
Obscura refreshes edgar_fundamentals on a weekly schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.