EDGAR Shares Outstanding
Shares outstanding over time, reported in companies' XBRL filings.
edgar_shares_outstanding — the dataset name to pass to the Obscura API.
What one row means
One common-shares-outstanding data point for a single SEC registrant as of a single XBRL period-instant: the value of `dei:EntityCommonStockSharesOutstanding` reported for company `cik` at instant `period_end`, sourced either from the SEC quarterly XBRL frames API (bulk, all companies for one quarter-instant) or from the per-company companyconcept API (recent top-up). Feeds the `edgar_dilution` view (QoQ/YoY dilution %).
One row per (cik, period_end).
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_shares_outstanding: filing_join via accn: available_date is the SEC filing date this observation became publicly available — set directly from the XBRL `filed` fact on concept-sourced rows, and recovered on frames-sourced rows (which carry no `filed`) by a set-based UPDATE joining accn -> edgar_filings on every collector run, exactly as edgar_fundamentals and edgar_dilution_metrics do. period_end is the separate XBRL period-instant the share count is measured as of, never the public date.
Refresh cadence
Obscura refreshes edgar_shares_outstanding every weekday — 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_shares_outstanding, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_shares_outstanding.
| Column | Type | Description |
|---|---|---|
| cik | bigint · not null | SEC Central Index Key of the registrant; part of the primary key. |
| period_end | date · not null | XBRL period-instant (the 'end' fact) the share count is measured as-of, e.g. the cover-page / quarter-instant date; part of the primary key. A period/as-of date, distinct from the public availability date. |
| entity_name | text | Registrant name as reported in the XBRL fact (entityName). |
| shares | bigint · not null | Common shares outstanding count (dei:EntityCommonStockSharesOutstanding); fractional API values are rounded to i64. The core measure. |
| accn | text | SEC accession number of the filing the value came from; the join key to edgar_filings for recovering the public filing date. |
| form | text | SEC form type that carried the fact (e.g. 10-Q, 10-K); populated only on concept-sourced rows (the frames path leaves it unset). |
| available_date | date | SEC filing date — the public-availability date this observation became known. Populated directly on concept-sourced rows; recovered via accn -> edgar_filings for frames-sourced rows. |
| frame | text | XBRL frame identifier (e.g. "CY2026Q1I") when sourced from the frames API. |
| loc | text | Registrant location code from the frames API (`data[].loc`), e.g. `US-IL`, `US-CA`, or a foreign ISO code like `CA-ON` — the ISO-3166 state-or-country of the entity's principal office / incorporation. Frames-only; the concept endpoint omits it. Not derivable from any other stored field. Nullable. |
| source | text · not null | Provenance tag: "frames" (quarterly bulk) or "concept" (recent per-company top-up). Determines whether form/available_date are populated directly. |
Access edgar_shares_outstanding
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_shares_outstanding",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the edgar_shares_outstanding dataset?
Shares outstanding over time, reported in companies' XBRL filings. One common-shares-outstanding data point for a single SEC registrant as of a single XBRL period-instant: the value of `dei:EntityCommonStockSharesOutstanding` reported for company `cik` at instant `period_end`, sourced either from the SEC quarterly XBRL frames API (bulk, all companies for one quarter-instant) or from the per-company companyconcept API (recent top-up). Feeds the `edgar_dilution` view (QoQ/YoY dilution %).
How do I avoid look-ahead bias with edgar_shares_outstanding?
Filter on edgar_shares_outstanding.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — filing_join via accn: available_date is the SEC filing date this observation became publicly available — set directly from the XBRL `filed` fact on concept-sourced rows, and recovered on frames-sourced rows (which carry no `filed`) by a set-based UPDATE joining accn -> edgar_filings on every collector run, exactly as edgar_fundamentals and edgar_dilution_metrics do. period_end is the separate XBRL period-instant the share count is measured as of, never the public date. 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_shares_outstanding?
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_shares_outstanding". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_shares_outstanding.
Can I filter edgar_shares_outstanding by company or symbol?
Yes. edgar_shares_outstanding carries cik, the column the API's symbols filter resolves against.
How often is edgar_shares_outstanding updated?
Obscura refreshes edgar_shares_outstanding on a every weekday 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.