FDIC Financials
Quarterly financials for every FDIC-insured bank: assets, deposits, income and capital.
fdic_financials — the dataset name to pass to the Obscura API.
What one row means
One FDIC-certified bank's (`cert`) key aggregated Call Report financial metrics -- total assets, deposits, equity, net income, ROA, ROE -- for a single quarterly reporting date, as exposed by FDIC BankFind's `/financials` endpoint (itself an aggregation of the institution's Consolidated Reports of Condition and Income / "Call Report" filed with the FFIEC).
One row per (cert, period_end) -- one row per FDIC-certified institution per quarterly report date.
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 fdic_financials: release_calendar: available_date = period_end (Call Report quarter-end / REPDTE) + 55 calendar days, a STORED generated column covering the ~30-35d FFIEC Call Report filing deadline plus FDIC BankFind aggregation/publish lag.
Refresh cadence
Obscura refreshes fdic_financials 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 — 42 columns
The full public column list for fdic_financials, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/fdic_financials.
| Column | Type | Description |
|---|---|---|
| cert | bigint · not null | FDIC certificate number, the institution's unique regulatory identifier (BankFind field CERT, coerced from a JSON number to i64). Part of the primary key; the natural join key to other FDIC-published/ BankFind bank datasets. |
| period_end | date · not null | Call Report quarter-end reporting date (BankFind REPDTE), parsed from the source's 'YYYYMMDD' string. The period this row's financials cover -- NOT when they became public; see `available_date` for that. Part of the primary key alongside `cert`. |
| assets | double precision | Total assets for the quarter, in $ thousands (BankFind ASSET field, the FFIEC Call Report convention of reporting in thousands of dollars). Nullable -- dropped to None when the source field is missing or non-numeric for that institution/quarter. |
| deposits | double precision | Total deposits for the quarter, in $ thousands (BankFind DEP field). Nullable on missing/non-numeric source data. |
| equity | double precision | Total equity capital (net worth / regulatory capital) for the quarter, in $ thousands (BankFind EQ field). Nullable on missing/non-numeric source data. |
| net_income | double precision | Net income for the quarter, in $ thousands (BankFind NETINC field; can be negative for a loss quarter). Nullable on missing/non-numeric source data. |
| roa | double precision | Return on assets, in percent (BankFind ROA field) -- FDIC's own computed ratio of (typically annualized) net income to average total assets for the quarter. Nullable on missing/non-numeric source data. |
| roe | double precision | Return on equity, in percent (BankFind ROE field) -- FDIC's own computed ratio of (typically annualized) net income to average equity for the quarter. Nullable on missing/non-numeric source data. |
| rssd_id | bigint | Federal Reserve RSSD identifier of this institution (BankFind RSSDID), the primary key linking a bank to Fed/NIC (National Information Center) data -- the top cross-regulator join key. Nullable on missing source. |
| rssd_hcr | bigint | RSSD identifier of the top-tier holding company (BankFind RSSDHCR), parsed from the source's numeric string. The parent-org linkage key -- a DIFFERENT entity's RSSD than `rssd_id`, so it is not the row's own `rssd`. Nullable on missing source. |
| name_hcr | text | Name of the top-tier holding company (BankFind NAMEHCR); the human-readable label for the parent org referenced by `rssd_hcr`. Nullable/None when blank. |
| par_cert | bigint | FDIC certificate number of the direct parent institution (BankFind PARCERT), parsed from the source's numeric string -- the intra-FDIC ownership linkage. `0` in the source means "no parent". Nullable. |
| name | text | Short institution name (BankFind NAME); the human-readable entity label for this `cert`. Nullable/None when blank. |
| name_full | text | Full/legal institution name (BankFind NAMEFULL); the long-form variant of `name`. Nullable/None when blank. |
| state | text | Two-letter state abbreviation of the institution's headquarters (BankFind STALP). Nullable/None when blank. |
| state_name | text | Full state name of the institution's headquarters (BankFind STNAME); the spelled-out variant of `state`. Nullable/None when blank. |
| city | text | City of the institution's headquarters (BankFind CITY). Nullable/None when blank. |
| zip | text | ZIP code of the institution's headquarters (BankFind ZIP), stringified from the source's numeric value. Nullable/None when blank. |
| county | text | County of the institution's headquarters (BankFind STCNTY); the source emits the county NAME, e.g. "Green Lake", not a FIPS code. Nullable. |
| cbsa | text | Core Based Statistical Area / metro label of the headquarters (BankFind CBSA); the source emits a metro NAME string, e.g. "MADISON, WI", or null for non-metro institutions. Nullable/None when blank. |
| msa_name | text | Metropolitan Statistical Area name (BankFind MSA_NAME); an alternate metro label, often blank. Nullable/None when blank. |
| active | bigint | Active/inactive status flag (BankFind ACTIVE): 1 = live insured institution, 0 = inactive (failed/merged/closed). Distinguishes live vs. dead banks. Nullable on missing source. |
| bank_class | text | Charter/regulator class (BankFind BKCLASS): N (national bank), SM/NM (state member/nonmember), SB (savings bank), SA (savings association), etc. -- the institution's regulatory category. Nullable/None when blank. |
| num_emp | bigint | Number of employees (BankFind NUMEMP), an institution-scale attribute. Nullable on missing source. |
| established_date | date | Date the institution was established (BankFind ESTYMD), parsed from the source's 'YYYYMMDD' integer. Entity-lifecycle timestamp. Nullable. |
| effective_date | date | Effective date of the institution's current structure/record (BankFind EFFDATE), parsed from 'YYYYMMDD'. Nullable on missing source. |
| end_effective_date | date | End of the effective-record period (BankFind ENDEFYMD), parsed from 'YYYYMMDD'; the source uses 99991231 (9999-12-31) as an open-ended sentinel. Nullable on missing source. |
| insured_date | date | Date the institution's FDIC insurance took effect (BankFind INSDATE), parsed from 'YYYYMMDD'. Nullable on missing source. |
| liabilities | double precision | Total liabilities for the quarter, in $ thousands (BankFind LIAB). Nullable on missing/non-numeric source data. |
| net_loans_leases | double precision | Net loans and leases for the quarter, in $ thousands (BankFind LNLSNET). Nullable on missing/non-numeric source data. |
| interest_income | double precision | Total interest income for the quarter, in $ thousands (BankFind INTINC). Nullable on missing/non-numeric source data. |
| interest_expense | double precision | Total interest expense for the quarter, in $ thousands (BankFind EINTEXP; the plain `INTEXP` key is not exposed by `/financials`). Nullable on missing/non-numeric source data. |
| noninterest_income | double precision | Total noninterest income for the quarter, in $ thousands (BankFind NONII). Nullable on missing/non-numeric source data. |
| noninterest_expense | double precision | Total noninterest expense for the quarter, in $ thousands (BankFind NONIX). Nullable on missing/non-numeric source data. |
| net_interest_margin | double precision | Net interest margin figure for the quarter (BankFind NIM), in $ thousands as emitted by the source. Nullable on missing/non-numeric source data. |
| core_deposits | double precision | Core deposits for the quarter, in $ thousands (BankFind COREDEP). Nullable on missing/non-numeric source data. |
| deposits_insured | double precision | Insured deposits for the quarter, in $ thousands (BankFind DEPINS). Nullable on missing/non-numeric source data. |
| deposits_uninsured | double precision | Uninsured deposits for the quarter, in $ thousands (BankFind DEPUNINS). Nullable on missing/non-numeric source data. |
| tier1_leverage_ratio | double precision | Tier-1 (core capital) leverage ratio, in percent (BankFind RBC1AAJ) -- a key regulatory capital-adequacy signal. Nullable on missing/non-numeric source data. |
| total_rbc_ratio | double precision | Total risk-based capital ratio, in percent (BankFind RBCRWAJ) -- a key regulatory capital-adequacy signal. Nullable on missing/non-numeric source data. |
| cblr_indicator | bigint | Community Bank Leverage Ratio framework indicator (BankFind CBLRIND): 1 = institution elected the CBLR framework, 0 = did not. A flag, not the ratio value itself. Nullable on missing source. |
| available_date | date · not null | PUBLIC-availability date = period_end + 55 calendar days, a STORED generated column implementing the release-calendar rule (FFIEC Call Report filing deadline + FDIC BankFind aggregation/publish lag). The point-in-time column to filter/join on -- NEVER `period_end` itself, which is only the reporting period, not when the numbers went public. |
Access fdic_financials
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="fdic_financials",
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the fdic_financials dataset?
Quarterly financials for every FDIC-insured bank: assets, deposits, income and capital. One FDIC-certified bank's (`cert`) key aggregated Call Report financial metrics -- total assets, deposits, equity, net income, ROA, ROE -- for a single quarterly reporting date, as exposed by FDIC BankFind's `/financials` endpoint (itself an aggregation of the institution's Consolidated Reports of Condition and Income / "Call Report" filed with the FFIEC).
How do I avoid look-ahead bias with fdic_financials?
Filter on fdic_financials.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — release_calendar: available_date = period_end (Call Report quarter-end / REPDTE) + 55 calendar days, a STORED generated column covering the ~30-35d FFIEC Call Report filing deadline plus FDIC BankFind aggregation/publish lag. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get fdic_financials?
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="fdic_financials". The column schema is public at https://api.obscura.trade/v1/catalog/fdic_financials.
How often is fdic_financials updated?
Obscura refreshes fdic_financials 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.