Obscura

Board Composition and Committee Membership

Board composition from SEC DEF 14A proxy statements: one row per director per proxy, with age, year first elected, independence, board role, audit/compensation/nominating committee seats, committee chairmanships and other public directorships. Extracted from proxy prose and tables, so each row carries how it was obtained and how far to trust it.

edgar_board_members - the dataset name to pass to the Obscura API.

Category Corporate Columns 20 Refresh Daily Entity key cik Point-in-time available_date

What one row means

One director as presented on one company's DEF 14A proxy statement, with their tenure, independence, committee seats and other public directorships.

One row per (filename, seq).

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_board_members: filing_join: available_date is the day SEC disseminated the proxy, taken from the bronze dissemination-day partition exactly as every other feed-derived dataset does - never the proxy's own cover date, which precedes publication. The FISCAL YEAR the proxy reports on is rehomed to period_end and must never be used as the availability basis: a proxy filed in April 2026 describes board service through 2025, so treating the reporting year as availability would make a board roster visible a year before it was published.

Refresh cadence

Obscura refreshes edgar_board_members daily - 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 - 20 columns

The full public column list for edgar_board_members, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_board_members.

ColumnTypeDescription
filenametext · not nullThe proxy's EDGAR Archives path - the unique accession that carries this board roster. Part of the key, and the provenance a consumer follows back to the filed document.
seqinteger · not nullZero-based index of this director within the proxy's board table, in the order the document lists them. Part of the key because a proxy names many directors and the printed name is not a safe key - two directors can share a name, and the same person is spelled differently across years.
cikbigint · not nullCIK of the COMPANY whose board this is - the proxy's filer. The join to every other EDGAR dataset.
company_nametextThe company name as filed.
director_nametext · not nullThe director's name EXACTLY as printed in the proxy, including middle initials and suffixes. Deliberately not normalised: normalisation is lossy and irreversible, and the raw string is what a consumer needs to audit a match. Match on `matched_owner_cik` instead.
matched_owner_cikbigintBest-effort match of `director_name` to a Form 4 filer's `owner_cik`, so this dataset joins to `people` and `board_interlocks`. NULL when no confident match exists - which is the honest answer far more often than a wrong CIK would be. Read `match_confidence` before relying on it.
match_confidencedouble precisionHow confident the name match is, 0.0 to 1.0. NULL when unmatched. A join for research should threshold this; a join that ignores it will silently merge two different people who share a name.
ageintegerDirector's age as stated in the proxy, or NULL when not disclosed. Proxies usually print age; some omit it.
director_since_yearintegerThe year the director first joined this board, as the proxy states it ("Director since 2014"). The tenure measure, and the field Form 4 cannot give you - Form 4 only knows when someone first FILED, which is a different and later date.
is_independentbooleanWhether the company classifies this director as INDEPENDENT under the listing standards it is subject to. NULL when the proxy does not say. This is the company's own assertion, not an assessment: boards decide their own independence determinations and disclose them. Treat it as a disclosed fact about what the board claims, which is exactly what makes it interesting when it changes.
board_roletextThe director's role on the board where the proxy names one: `chair`, `lead_independent`, `vice_chair`, or NULL for an ordinary member.
on_audit_committeebooleanServes on the audit committee.
on_compensation_committeebooleanServes on the compensation committee.
on_nominating_committeebooleanServes on the nominating and corporate-governance committee.
committee_chair_oftextThe committee this director CHAIRS, where the proxy says so (`audit`, `compensation`, `nominating`), else NULL. Chairing is materially different from serving and is disclosed separately.
other_public_boardsintegerHow many OTHER public-company boards the director sits on, as disclosed. The overboarding measure that proxy advisers score against, and one of the few board attributes with a widely-agreed threshold.
extraction_methodtext · not nullHOW THIS ROW WAS OBTAINED, because the source is unstructured and the method determines the trust: `table` (parsed from a structured director table), `prose` (extracted from narrative bio text), or `xbrl` (a tagged fact, where a filer provides one). Carried as a real column rather than a caveat in prose so a consumer can filter on it, and so a later parser improvement is measurable as a shift in the mix rather than an invisible change.
extraction_confidencedouble precision · not nullHow much to trust this row, 0.0 to 1.0, from the extractor's own signals - how well the table matched an expected shape, whether the fields cross-agree, whether the director count is plausible for a public board. **This dataset is inference, not transcription.** Every other EDGAR dataset here parses XML or inline XBRL; a proxy is prose written to no schema. Filtering on this column is the correct way to use the data.
period_enddateThe fiscal year the proxy reports on, as its last day. REHOMED here and never allowed onto `available_date`: a proxy filed in April 2026 describes service through 2025, so using the reporting year as availability would publish a board roster a year before anyone could read it. **NULL on every `extraction_method = 'table'` row, and that is a stated absence rather than a gap.** A director summary table states no reporting period, and EDGAR's own `CONFORMED PERIOD OF REPORT` on a DEF 14A is the ANNUAL MEETING DATE — which falls AFTER dissemination — so reading it here would fabricate a fiscal year out of a field that means something else. The column is real for the prose extractor, which can read "fiscal year ended September 28, 2025" off the page.
available_datedate · not nullPUBLIC-AVAILABILITY DATE - the day SEC disseminated this proxy. **The point-in-time column.** Exact, from the bronze dissemination-day partition, even though the row's CONTENT is heuristic.

Access edgar_board_members

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_board_members",
    symbols=["NVDA", "AAPL"],
    start="2024-01-01",
)

Create a free account Browse all 123 datasets

Frequently asked questions

What is in the edgar_board_members dataset?

Board composition from SEC DEF 14A proxy statements: one row per director per proxy, with age, year first elected, independence, board role, audit/compensation/nominating committee seats, committee chairmanships and other public directorships. Extracted from proxy prose and tables, so each row carries how it was obtained and how far to trust it. One director as presented on one company's DEF 14A proxy statement, with their tenure, independence, committee seats and other public directorships.

How do I avoid look-ahead bias with edgar_board_members?

Filter on edgar_board_members.available_date, the day the publisher made the row public. For this dataset that date is derived as follows - filing_join: available_date is the day SEC disseminated the proxy, taken from the bronze dissemination-day partition exactly as every other feed-derived dataset does - never the proxy's own cover date, which precedes publication. The FISCAL YEAR the proxy reports on is rehomed to period_end and must never be used as the availability basis: a proxy filed in April 2026 describes board service through 2025, so treating the reporting year as availability would make a board roster visible a year before it was published. 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_board_members?

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_board_members". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_board_members.

Can I filter edgar_board_members by company or symbol?

Yes. edgar_board_members carries cik, the column the API's symbols filter resolves against.

How often is edgar_board_members updated?

Obscura refreshes edgar_board_members on a daily 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.

Related datasets

Corporate Board InterlocksPairs of public companies that share a director, reconstructed from SEC insider filings: one row per (director, company … Company Subsidiary Lists (SEC Exhibit 21)Parent-and-subsidiary lists taken from the Exhibit 21 that public companies attach to their annual report. One row per s… Company Subdomain Discovery CountsSubdomains discovered for each public company's registered domains, as a daily count with its net change, mapped to tick… Company Employee Headcount from 10-K FilingsEmployee headcount as stated in the text of 10-K annual reports, extracted from the filing prose rather than a structure… Executive Compensation (Pay versus Performance)Executive pay from the Pay-versus-Performance table in proxy statements: reported and 'actually paid' compensation for t… Corporate Governance Events from 8-K FilingsGovernance events distilled from company 8-K filings and tagged by type: executive changes, auditor changes, restatement… Monthly Insider Buying and Selling SentimentMonthly insider buying and selling per company, netted from Form 4 open-market trades: shares and dollars bought versus … Company Job Posting Counts Over TimeOpen job-posting counts for a curated set of companies, captured over time from the public applicant-tracking boards tho…