Bank health / Methodology
The FinWeave Composite: a public bank-health score
Version 1.0, computed 2026-07-10 by scripts/build_bank_scores.py.
Input: data/parquet/fdic_financials.parquet (FDIC BankFind Suite call-report
financials, 2015Q1-2026Q1, provenance in docs/data_provenance.md).
Output: data/parquet/bank_scores.parquet.
What this is (and what it is NOT)
The FinWeave Composite is a transparent, reproducible bank-health score computed entirely from public FDIC call-report data. For every FDIC-insured institution in every quarter it produces five component scores and one composite, each on a 0-100 scale where higher = financially stronger, expressed as a peer-percentile rank within an asset-size peer group.
It is NOT a CAMELS rating. CAMELS is the confidential supervisory rating assigned by US bank examiners (FDIC, OCC, Federal Reserve) using on-site examination and non-public information. CAMELS ratings are never disclosed. The FinWeave Composite borrows the five public analytical dimensions that the CAMELS letters name (Capital, Asset quality, Earnings, Liquidity, and a Sensitivity proxy) because those are the standard lenses for reading a call report, but it is a model-derived proxy built only from data any member of the public can download. Do not present it, cite it, or label it as CAMELS.
This is not investment advice and not deposit advice. A high score is not a solvency guarantee and a low score is not a prediction of failure. See the mandatory caveats at the end, and read the honest backtest note first: in the 2023 US bank failures, public call-report ratios rated the failing banks as strong on four of five components until the quarter they failed.
Design principles
- Public data only. Every input traces to a named FDIC field documented in
data/raw/fdic_financials/SOURCE.md. No proprietary, modeled, or market-implied inputs enter the composite. - Peer-relative, not absolute. A ratio is only informative against comparable institutions. Every metric is a percentile rank within an asset-size peer group in the same quarter (UBPR peer-group spirit), so a $80M rural bank is judged against other small banks and a $200B regional against its own tier.
- Higher = stronger, always. Metrics where a lower raw value is healthier (noncurrent loans, efficiency ratio, loans-to-deposits, brokered dependence, growth extremity) are oriented so that the 0-100 output still reads "higher = stronger" after inversion. There is exactly one reading direction.
- Honest missingness. A missing input yields a null metric and a reweighted component; a bank missing too many components gets a null composite rather than a fabricated one (rule below).
- No hidden numbers. Every ratio is either a native FDIC field (named) or computed from named FDIC dollar fields by a formula printed below.
Peer groups
Assigned per bank per quarter from that quarter's own total assets
(ASSET_THOUSANDS_USD), so a bank moves tiers as it grows. Five tiers, cut on
round-dollar thresholds in the UBPR tradition:
| Tier | Total assets | Count, 2022Q4 |
|---|---|---|
| 1 | < $100M | 796 |
| 2 | $100M - $1B | 2,978 |
| 3 | $1B - $10B | 837 |
| 4 | $10B - $250B | 149 |
| 5 | >= $250B | 13 |
Boundaries are half-open [lower, upper): exactly $100M falls in tier 2, exactly
$1B in tier 3, etc. (thresholds in thousands: 100000, 1000000, 10000000,
250000000). Percentiles are computed within (tier, quarter). The >= $250B tier
is small (13 banks in 2022Q4), so its percentiles are coarse by construction;
this is disclosed on any bank page in that tier rather than hidden.
Components and metrics
Each component score is the equal-weighted mean of its available metric
percentiles. Each metric is percentile-ranked within (peer group, quarter):
raw values are oriented so higher = stronger (inverted metrics negated first),
then ranked with pandas.rank(pct=True, method='average') * 100, giving a
roughly uniform 0-100 within each peer-quarter. Fields are the FDIC codes in
data/raw/fdic_financials/SOURCE.md.
Capital (weight 0.25)
| Metric | FDIC field / formula | Direction |
|---|---|---|
| Tier-1 leverage ratio | RBC1AAJ_PCT (Leverage Ratio - PCA) | higher = stronger |
| Total risk-based capital ratio | RBCRWAJ_PCT (Total RBC Ratio - PCA) | higher = stronger |
Both fields are populated for 100% of the 236,016 bank-quarters. The CET1 ratio
(RBCT1CER_PCT) and Tier-1 risk-based ratio (RBC1RWAJ_PCT) are deliberately
excluded from the primary composite: both are null for 18.8% of bank-quarters
because banks that elected the Community Bank Leverage Ratio (CBLR) framework
from 2020Q1 stop reporting risk-based ratios entirely (documented in
data/raw/fdic_financials/SOURCE.md). Including a metric that is structurally
absent for a fifth of small banks would make the capital component silently
non-comparable across the CBLR cutover, so the two universally-reported capital
ratios carry the component.
Asset quality (weight 0.25)
| Metric | FDIC field / formula | Direction |
|---|---|---|
| Noncurrent loan ratio | NCLNLSR_PCT (noncurrent loans / gross loans) | lower = stronger (inverted) |
| Nonperforming assets ratio | NPERFV_PCT (nonperforming assets / total assets) | lower = stronger (inverted) |
| Reserve coverage of noncurrent loans | LNATRES_THOUSANDS_USD / NCLNLS_THOUSANDS_USD * 100 | higher = stronger |
Reserve coverage is the classic allowance-to-noncurrent-loans coverage ratio. It
is undefined when a bank has zero noncurrent loans (NCLNLS = 0, 817 of 4,773
banks in 2022Q4). For those banks the coverage metric is null and the asset-quality
component is the mean of the remaining two metrics; this does not penalize them,
because a bank with zero noncurrent loans already sits at the top of the
noncurrent-ratio percentile. Net charge-off rate, a fourth natural asset-quality
metric, is not in this dataset's field set (the FDIC NTLNLSR net-charge-off
series was not fetched) and is therefore omitted, not approximated.
Earnings (weight 0.20)
| Metric | FDIC field / formula | Direction |
|---|---|---|
| Return on assets | ROA_PCT | higher = stronger |
| Net interest margin | NIMY_PCT | higher = stronger |
| Efficiency ratio | EEFFR_PCT (noninterest expense / revenue) | lower = stronger (inverted) |
All three are populated for 100% of bank-quarters.
Liquidity (weight 0.15)
| Metric | FDIC field / formula | Direction |
|---|---|---|
| Liquid-asset ratio | (SC_THOUSANDS_USD + CHBAL_THOUSANDS_USD) / ASSET_THOUSANDS_USD * 100 | higher = stronger |
| Loans-to-deposits | LNLSDEPR_PCT (net loans / deposits) | lower = stronger (inverted) |
| Brokered-deposit dependence | BRO_THOUSANDS_USD / DEP_THOUSANDS_USD * 100 | lower = stronger (inverted) |
Liquid assets are proxied by securities plus cash and balances due from
depository institutions, a standard public-data liquidity proxy; the true
liquidity-coverage-ratio inputs (high-quality-liquid-asset haircuts, 30-day net
outflows) are not in call-report summary data. Brokered-deposit dependence is
null for the 765 bank-quarters (17 foreign-branch / trust CERTs) that do not
report BRO; those banks' liquidity component uses the other two metrics.
Growth / Sensitivity proxy (weight 0.15)
| Metric | Formula | Direction |
|---|---|---|
| Asset-growth stability | -abs(asset_growth_yoy - peer_median_growth) | higher (nearer peer median) = stronger |
where asset_growth_yoy = (ASSET_t - ASSET_{t-4q}) / ASSET_{t-4q} * 100 and
peer_median_growth is the median YoY asset growth within the same (peer group,
quarter). Both unusually fast growth and unusually fast shrinkage land in the
weak tail; a bank growing near its peer median is scored stable.
Why this is a proxy and true rate-sensitivity is not computable here. The
"S" in CAMELS is sensitivity to market risk, principally interest-rate risk: the
duration gap between assets and liabilities, and unrealized losses on
available-for-sale and held-to-maturity securities relative to capital. That is
precisely what public FDIC summary fields in this dataset cannot see. The
call-report field for net unrealized gains/losses on securities that argus's
collector referenced (IDTRCK) does not exist in the current BankFind
financials dictionary and returns nothing (verified 2026-07-10, documented in
data/raw/fdic_financials/SOURCE.md). Absent that field, a duration gap or an
AFS/HTM unrealized-loss-to-capital ratio cannot be built from this dataset.
Rapid balance-sheet growth is the one interest-rate-risk-adjacent signal that
public data does expose (fast growth is frequently funded by rate-sensitive
liabilities and invested in longer-duration assets), so the Sensitivity slot is
filled by an asset-growth-extremity proxy and labeled honestly as such. A future
version that ingests the securities-detail call-report schedule (RC-B) could
replace this proxy with a real unrealized-loss ratio; until then, the S
component measures growth extremity, not market-risk sensitivity.
Composite
composite = ( 0.25*Capital + 0.25*AssetQuality + 0.20*Earnings
+ 0.15*Liquidity + 0.15*Sensitivity ) / (sum of weights present)
All five components are on the same 0-100 higher-is-stronger scale, so the composite is too. The weights follow the standard supervisory emphasis (solvency = Capital + Asset quality = 50%; operating performance and risk position the rest); they mirror the weights argus's internal proxy uses and are stated here so they can be contested. They are a modeling choice, not a regulatory constant.
Missing-component rule (documented and enforced): a component is "present"
if at least one of its metrics is non-null (for Sensitivity, if the year-ago
quarter exists so growth is computable). If >= 4 of 5 components are present,
the composite is the weighted mean over the present components with weights
renormalized to sum to 1. If fewer than 4 components are present, the composite
is null (no score is invented from too little data). The count of present
components is stored alongside every row (n_components).
Historical ratio trends (1992+) and why the composite starts 2015
The per-bank scorecard (/banks/[cert]) charts the raw call-report ratios back
to 1992Q1 where FDIC reports them, and the FinWeave Composite from 2015Q1
only. The two panels share one quarterly x-axis, so the composite panel shows a
gap over 1992-2014 rather than a fabricated pre-2015 score.
- Ratio history source. The ratios union two FDIC parquet files:
fdic_financials_hist(1992Q1-2014Q4) andfdic_financials(2015Q1-latest), insrc/lib/banks.ts(bankTrend). Both carry the identical 38-column BankFind-Suite schema; all six charted ratio fields (RBC1AAJ_PCTtier-1 leverage,RBCRWAJ_PCTtotal risk-based capital,NCLNLSR_PCTnoncurrent loans,ROA_PCT,NIMY_PCT,LNLSDEPR_PCTloans-to-deposits) areDOUBLEin each file, so the union needs no cast. - Seam continuity. The seam is continuous and non-overlapping: the historical
file ends exactly 2014-12-31, the current file starts exactly 2015-03-31, and
there are zero shared
(CERT, REPDTE)keys across the two files (verified globally, not just for large banks; the seam proof and the JPMorgan crossing are indocs/data_expansion_2026_07.md, deep-estate manifest). - Per-field, first-available honesty. Every ratio is passed through as-is. A field FDIC does not report for a given bank-quarter is rendered as a line-break gap, never a zero, and never carried forward. (For these six ratios FDIC in fact populates the full 1992+ window, so no pre-start gap arises within it; the no-coalesce rule still governs any future field or any bank-quarter FDIC leaves blank.)
- Why scores stay 2015+ (a deliberate limit, not a data gap). The FinWeave Composite is a peer-percentile score: each bank is ranked against its contemporaneous asset-size peer group each quarter. Extending it before 2015 is not a matter of re-running the formula on older rows: it requires rebuilding the peer-group percentile panel over 1992-2014 and confirming the peer cuts, the CBLR-era capital-field discontinuity, and the metric definitions are comparable across a period spanning Basel I, Basel II and Basel III. That peer-percentile comparability work is a future slot, not done here. Back-filling an incomparable score would be worse than an honest gap, so the composite is left null before 2015Q1 and the panel shows the gap.
- X-axis readability. With a 1992-2026 union the small-multiple panels span
~35 candidate year labels;
RatioTrendChartthins the year ticks by x-position (keep a year only when it clears the previous kept label by a fixed viewBox gap), the same approach asSystemicTimeChart, so labels never collide at any span.
Distribution note (expected shape, verified)
By construction each metric percentile is uniform on 0-100 within its
peer-quarter (it is a rank). A component score is the mean of two or three such
metrics, so it is already mildly central, not perfectly flat; the composite is a
weighted mean of up to five components (up to twelve metrics), so by the
central-limit effect it is not uniform: it is bell-shaped and concentrated
toward the middle, because a bank rarely sits in the same tail on all dimensions
at once. Verified on 2022Q4 (4,773 banks): the composite deciles run
[0, 11, 149, 709, 1417, 1533, 737, 189, 28, 0] (a clear central hump), with
composite standard deviation 11.4 against a single-component standard deviation of
20.2. Every peer group's median composite sits at ~50 in every quarter (the
10B-250B tier median is 49.8-50.9 across 2021Q1-2023Q1), the expected fixed point
of a percentile construction. This central shape is a mathematical consequence of
averaging, not a defect.
Honest backtest: the 2023 US bank failures
The sternest test of a public-data health score is whether it saw the 2023 failures coming. It largely did not, and saying so plainly is the point.
Three banks failed in spring 2023: Silicon Valley Bank (CERT 24735, failed 2023-03-10), Signature Bank (CERT 57053, failed 2023-03-12), and First Republic Bank (CERT 59017, failed 2023-05-01). Their last call reports before failure were 2022Q4 (SVB, Signature) and 2023Q1 (First Republic).
Every FinWeave Composite below is computed by scripts/build_bank_scores.py;
the peer-tier (10B-250B) median composite is ~50 in every quarter, so a score
above 50 means the model rated the bank above average for its size. The result
differs sharply by bank, and the differences are the honest lesson.
Silicon Valley Bank (the failure the composite missed). SVB's composite did not fall into failure, it rose: 47.7 (2021Q1) to 63.5 (2022Q4, its last report), ending well above its peer-tier median of 50.0. Its public solvency ratios looked strong and improving throughout: Tier-1 leverage rose 6.4% -> 8.0%, total risk-based capital 11.5% -> 16.1%, noncurrent loans a pristine 0.19%, ROA ~0.96%, efficiency improving 55 -> 46, and loans-to-deposits a deposit-rich 42% that scores as highly liquid (its liquidity component ran 86-95 out of 100). The one component that flagged SVB was the growth proxy: it grew assets +90% YoY through 2021 against a peer median near 10%, driving its Sensitivity score to 1-7 (deep weak tail) in 2021. But that signal faded exactly when the danger peaked: as growth decelerated to ~0% by late 2022, the Sensitivity score recovered to 57-74, and the composite climbed. On the eve of failure the public composite rated SVB an above-average bank for its tier. This is the central cautionary result: the growth flag fired a year early and then went quiet, while the actual killer (unrealized HTM-securities losses against an uninsured, concentrated deposit base) was never visible in these fields.
First Republic (the failure the composite did flag). First Republic's composite sat below its peer median in every quarter from 2021Q1 and deteriorated into failure: 42.1 -> 46.9 -> 42.3 (2022Q4) -> 36.7 (2023Q1). It was dragged down by a persistently weak liquidity component (28-38 out of 100: high loans-to-deposits, thin liquid assets) and weak earnings (11-34), and the 2023Q1 report shows the run in progress, loans-to-deposits exploding to 165% and brokered dependence to 6.8% as stable deposits were replaced by borrowing. Here public data did rate the bank a persistent laggard.
Signature (mixed). Signature's composite ran below to around its peer median (36.7-52.8), held down by a weak capital percentile (45.7 in 2021Q1, then 12-28 in every later quarter). The growth proxy caught both its 2021 expansion (+60-69% YoY) and its 2022Q4 contraction (-6.8% as deposits fled), and its brokered-deposit dependence climbed 1.2% -> 4.3% over 2022; its composite ended at 42.7, below the ~50 median.
The honest conclusion. The record is split, and honestly so: the composite flagged First Republic as a persistent below-median laggard, gave a mixed reading on Signature, and missed SVB entirely, rating it above average right up to failure. What sank all three, large unrealized losses on long-duration securities against a concentrated, uninsured, rate-sensitive deposit base, is exactly what public FDIC summary call-report fields in this dataset cannot see (the unrealized-securities-loss field is absent from the API; deposit-insurance concentration is not a summary field). The one public tell for SVB, explosive growth, is a leading signal that normalizes before the run, not a distress signal at the point of failure. The FinWeave Composite is therefore useful for peer-relative screening and for spotting growth and funding extremities, but it is not an early-warning system for duration-driven runs and must never be presented as one. That a transparent public score rates the most famous bank failure of the decade as above-average the quarter before it failed is the strongest possible argument for the "not CAMELS, not advice" framing this document insists on.
Mandatory caveats
- Not CAMELS. Computed from public FDIC data; it is not the confidential supervisory CAMELS rating and has no supervisory standing.
- Not investment or deposit advice. Not a solvency guarantee, not a failure prediction, not a recommendation to place or withdraw deposits or to buy, sell, or hold any security.
- What public data cannot see (and this score therefore omits): management quality and governance; examination findings and enforcement actions; interest-rate duration gaps and unrealized AFS/HTM securities losses relative to capital (the proximate cause of the 2023 failures); uninsured- and concentrated-deposit exposure beyond published totals; funding concentrations and contingent liquidity lines beyond the brokered-deposit total; off-balance- sheet and derivative risk detail; intra-quarter dynamics (all data is quarter-end snapshots); and fraud.
- Peer-relative, so composition-dependent. A bank's percentile can move because its peers changed, not because it did. The >= $250B tier is small, so its percentiles are coarse.
- Proxy components are labeled. The Sensitivity component measures asset- growth extremity, not market-risk sensitivity; the liquidity component uses public proxies, not the regulatory Liquidity Coverage Ratio.
- Reproducible. Every number is recomputable from
fdic_financials.parquetbyscripts/build_bank_scores.py; every input field is named indata/raw/fdic_financials/SOURCE.md.
EU banks: the EBA EU-wide Transparency Exercise (no FinWeave score)
The /banks/eu page is a separate, non-scored view. It reproduces bank-level
figures that the European Banking Authority (EBA) already publishes for
market-discipline purposes, exactly as published. It does not apply the
FinWeave Composite, or any other FinWeave-modelled score, to EU banks. Read the
two halves of this document accordingly: everything above is the US composite;
this section is a published-disclosure passthrough.
Exercise lineage
The source is the 2025 EU-wide Transparency Exercise, published by the EBA
on 2025-12-04. It is the most recent full bank-level publication: the EBA runs
its EU-wide stress test biennially in odd years, so there is no separate 2026
exercise, and no newer Transparency Exercise vintage had been published at build
time. The exercise carries four quarterly reference dates (2024-09-30,
2024-12-31, 2025-03-31, 2025-06-30); /banks/eu shows the latest, 2025-06-30,
discovered from the data rather than hardcoded. The universe is 119 banks across
25 EU and EEA countries. FinWeave's own country tally (25) and bank count (119)
were computed from the parquet first and then found to match the EBA's own
summary text, not copied from it. Full retrieval provenance, item and dimension
code tables, and the four-bank verification evidence live in
data/raw/eba/SOURCE.md and in docs/data_provenance.md.
What each displayed figure is (EBA dictionary definitions)
Every value resolves to an EBA data-dictionary item, looked up by its label text
against the exercise's SDD.xlsx item dictionary at build time (item codes are
never hardcoded as trusted numbers):
- CET1 ratio (transitional): "Common Equity Tier 1 capital ratio (transitional period)": CET1 capital over the total risk exposure amount, on the transitional basis.
- Leverage ratio (transitional): Tier 1 capital over the total leverage exposure, transitional basis.
- Total assets: FINREP total assets, EUR millions.
- Gross loans and advances, and the nonperforming subset: the FINREP NPE-template figures used to derive the NPL ratio.
- NPL ratio: nonperforming gross loans and advances over total gross loans and advances. This is a mechanical ratio of two EBA-published components, recomputed in the parquet build and re-verified against the EBA's own per-bank PDF (for Deutsche Bank: gross loans 749,836.12, nonperforming 15,923.31, ratio reproduced from scratch). It is not a FinWeave-modelled score.
- Total risk exposure amount (RWA): used only as the weight for the aggregate CET1 figures; not displayed per bank.
The EU-wide and per-country weighted CET1 shown on the page is the
RWA-weighted average of the banks' published transitional CET1 ratios,
sum(ratio * RWA) / sum(RWA), which is algebraically the aggregate of published
CET1 capital over aggregate RWA. The aggregate NPL is sum(nonperforming loans) / sum(gross loans). Both are transparent aggregations of published
components, disclosed as such, not composites.
Why the latest quarter is on the transitional basis
The EBA reports no fully-loaded CET1 or leverage ratio for the 2025 reference
dates in this vintage. Fully-loaded ratios are populated for 116-119 of the
119 banks through 2024-12-31 and then absent (0 of 119) for both 2025-03-31 and
2025-06-30, consistent with the Basel III / CRR2 transitional arrangements
having expired industry-wide by 2025 (confirmed against Deutsche Bank's own
factsheet, where the fully-phased-in column is greyed out for those quarters).
/banks/eu therefore shows the transitional ratio for 2025-06-30 and labels it
as such rather than presenting a fully-loaded figure the EBA did not publish. At
the last date where both bases exist (2024-12-31) they had largely converged:
across the 119 banks the transitional and fully-loaded CET1 ratios differ by
0.08 percentage points on average and 2.74 points at most, with 31 banks
differing at all.
Coverage caveats
- 12 of the 119 banks file capital and leverage only. Broker-dealer subsidiaries and specialised institutions without a conventional loan book (for example Goldman Sachs Bank Europe SE, J.P. Morgan SE, and several covered-bond, building-society and promotional banks) carry no total-assets or NPL figure; verified genuine by inspecting the raw CSV templates directly, not a filter artefact. They are counted in the bank universe but excluded from the total-assets and NPL columns, so those aggregates cover the 107 reporting banks.
- Some small holding entities show very high capital ratios against a tiny risk-weighted-asset base. These are reproduced exactly as the EBA reports them.
- Sovereign-exposure totals are FinWeave's own per-bank sum across the
country-by-country sovereign template (the EBA publishes no grand-total row);
they are documented in the provenance file and are not shown on
/banks/eu.
Why no composite score for EU banks (v1)
The US FinWeave Composite is a peer-percentile blend of five call-report
dimensions computed from a long quarterly time series of standardised FDIC
fields. The EBA Transparency Exercise provides point-in-time regulatory
disclosures on a different template, and the call-report-style time-series
inputs the composite needs are not yet ingested for these banks. Rather than
invent a partial or non-comparable score, this version shows published figures
only. A future version may add a comparable European score once the underlying
time series is ingested; until then, /banks/eu is deliberately score-free.
Official supervisory aggregates (ECB Supervisory Banking Statistics)
Alongside the EBA point-in-time bank-by-bank table, /banks/eu shows the
ECB’s own quarterly euro-area aggregate as a trend (2015-2026). This is
a different lens from the EBA sample:
- What it is. The euro-area SSM aggregate (
REF_AREA = B01, "significant institutions", changing composition) from the ECB Data Portal dataflowSUP(Supervisory Banking Statistics), compiled by ECB Banking Supervision from statutory prudential reporting (COREP/FINREP) under the SSM Regulation. Four metrics: CET1 ratio (I4008), non-performing-loans ratio (I7000), return on equity (I2003), cost-to-income ratio (I2100). All are ECB-published percentages, reproduced as released, no FinWeave transformation. - Why the numbers do not match the EBA table one-to-one. The universe (all SSM significant institutions, changing composition) and the reference dates differ from the fixed EBA transparency sample, so the headline ratios are the supervisor’s system-wide read, not the same banks aggregated. This is stated on the page.
- Honest absence. A metric the ECB does not disclose for a quarter is a gap,
never a zero. Bulgaria, Croatia and Slovakia carry no disclosed
significant-institution aggregate in this dataflow (confidentiality
suppression, or the aggregate does not exist), documented in
data/raw/ecb_sup/SOURCE.md; the euro-areaB01aggregate itself is complete through the latest quarter. - Source and license. ECB Data Portal, dataset
SUP, retrieved 2026-07-11; free to use with attribution ("Source: ECB"), same terms as the CISS source already in this repo. Every value is recomputable fromdata/parquet/ecb_sup.parquetbysrc/lib/ecbSup.ts; retrieval and the DSD code resolution are indata/raw/ecb_sup/SOURCE.md.
Mandatory caveats (EU view)
- Published figures, not a FinWeave rating. Nothing on
/banks/euis a FinWeave score, a solvency judgement, or a failure prediction. This applies to both the EBA transparency figures and the ECB supervisory aggregates. - Not investment or deposit advice.
- Point-in-time (EBA) vs quarterly aggregate (ECB). Each EBA figure is a quarter-end regulatory disclosure for the reference date shown; the ECB aggregate is a quarterly system-wide series. Neither speaks to risks outside the template (interest-rate duration, unrealised securities losses, deposit concentration, governance).
- Reproducible. Every displayed number is recomputable from
data/parquet/eba_banks.parquetandeba_banks_meta.parquet(viasrc/lib/ebaBanks.ts) ordata/parquet/ecb_sup.parquet(viasrc/lib/ecbSup.ts); every input item is named indata/raw/eba/SOURCE.mdanddata/raw/ecb_sup/SOURCE.md.
US bank stress tests: the Federal Reserve DFAST results (no FinWeave score)
The /banks/stress page reproduces the Board of Governors' Dodd-Frank Act
Stress Test (DFAST) supervisory results exactly as published. It applies no
FinWeave-modelled score. Everything shown is the Federal Reserve's own
supervisory projection, read from a single cumulative results file.
What DFAST is
DFAST is the Federal Reserve's annual supervisory stress test, run under section 165(i) of the Dodd-Frank Act and the Board's Regulation YY (12 CFR part 252). For each covered bank the Fed projects capital, losses, revenue and the resulting capital ratios over a nine-quarter planning horizon under a common, Fed-specified hypothetical scenario, starting from the firm's actual balance sheet at the exercise's as-of date. The results are the supervisor's own projections, not the banks' own numbers and not a forecast of what will happen.
Source and coverage
- Publisher and file. Board of Governors of the Federal Reserve System. The
Fed publishes one cumulative machine-readable results file per year; the latest
(
public_results_DFAST_2026.csv, released 2026-06-24) is a superset carrying every exercise from DFAST 2013 through the 2026 Stress Test in one tidy table, one row per firm-year-scenario plus one aggregate row per exercise-scenario. - Coverage. 15 supervisory cycles, 665 rows (643 named firm-scenario rows and 22 aggregates), 65 columns. Named firms per cycle range from 18 (DFAST 2013, DFAST 2019) to 35 (DFAST 2018).
- Scenarios in the file.
scenario_id2 = Supervisory Adverse (present 2014-2019 only), 3 = Supervisory Severely Adverse (every cycle), 30 = Supervisory Alternative Severe (the second scenario of the mid-cycle December 2020 test only)./banks/stressshows the severely adverse scenario throughout, the one scenario common to all 15 cycles. - Units. Capital ratios are in percent; every
*_amtloss, revenue and income line is in USD billion cumulative over the nine-quarter horizon. - License. Public domain (Board of Governors disclaimer), attribution
requested. Full retrieval, the file MD5, and the field dictionary are in
data/raw/dfast/SOURCE.md; the batch acceptance audit is indocs/data_provenance.md.
Scenario design (one-paragraph summary)
The severely adverse scenario is a hypothetical, not a forecast and not the Fed's most-likely outlook: it is deliberately constructed to be severe so the test probes resilience rather than predicting a recession. The Fed publishes a full paths document each year (for example "2026 Supervisory Scenarios") specifying about 28 domestic and international macro-financial variables, GDP, the unemployment rate, house and commercial-real-estate prices, equity prices, market volatility, and a term structure of interest rates and spreads. The severity is governed by the Board's standing Policy Statement on the Scenario Design Framework for Stress Testing (12 CFR part 252, appendix A): under it the severely adverse scenario is anchored to a recession in which the unemployment rate rises by between 3 and 5 percentage points to a level of at least 10 percent (a smaller increase is used when the starting unemployment rate is already high), with correspondingly severe declines in activity and asset prices. Firms with large trading operations are additionally subjected to a global market shock (an instantaneous repricing of trading positions) and, for the largest, a counterparty default component. Because the scenario is a fixed hypothetical, a deeper projected capital decline in one cycle reflects a harsher or differently-shaped scenario as much as any change in bank risk; cross-cycle comparisons are read with that in mind.
What each /banks/stress figure is
- Projected CET1 path by firm (severely adverse, latest cycle). For every
firm in the latest exercise:
common_equity_tier1_actual_rat(the starting, actual CET1 ratio at the as-of date),common_equity_tier1_min_rat(the low point of the projected CET1 path over the nine quarters), and the peak-to-trough decline in percentage points, sorted largest-decline first. A large decline is not a "fail": the supervisory pass condition is whether the projected minimum stays above the firm's regulatory minimum. The Basel III common equity tier 1 minimum is 4.5 percent of risk-weighted assets (12 CFR part 217, Regulation Q); every firm in the latest cycle's severely-adverse projection stays above it (the lowest projected minimum in the 2026 cycle is 6.7 percent). Firm-specific buffer requirements (the stress capital buffer, the G-SIB surcharge) sit above that floor and are not reproduced here. - Aggregate minimum capital across cycles. The aggregate projected-minimum
capital ratio for the tested group under the severely adverse scenario, one
point per cycle. Honest regime break: the headline capital measure changed
definition mid-series. DFAST 2013-2015 reported the Basel I tier 1 common
ratio (
tier1_common_min_rat); DFAST 2016 onward reports the Basel III common equity tier 1 (CET1) ratio (common_equity_tier1_min_rat). These are different ratios, so the chart draws the two eras as separate lines with a break at the 2015 -> 2016 seam and labels each regime; they are never spliced into one continuous line. The tested group also changes composition across cycles (the number of participants and the participation thresholds have changed), so the aggregate is a moving-membership series, stated as such. - Projected loss composition (latest cycle). The four top-level projected-loss
categories the Fed reports, in USD billion over the horizon: loan losses
(
loss_total_loan_amt), securities losses (loss_securities_amt, AFS/HTM), trading and counterparty losses (loss_trading_counterparty_amt), and other losses (loss_other_amt). The four sum to the Fed's total projected loss. Pre-provision net revenue (revenue_preprovision_net_amt) is shown alongside as the income the losses are absorbed against, not netted into the loss figure.
Verification anchors (recomputed raw-vs-parquet)
DFAST 2013 aggregate minimum tier 1 common ratio 7.4 percent (matches the Fed's
DFAST 2013 disclosure). 2026 aggregate CET1 declines 12.8 -> 11.2 percent, a 1.6
percentage-point drop (the 2026-06-24 press release states the aggregate CET1
ratio "declined by 1.6 percentage points"). 2026 aggregate total projected losses
$708 billion (the press release cites "more than $708 billion in total losses").
Full spot-check log in data/raw/dfast/SOURCE.md.
Mandatory caveats (stress-test view)
- Supervisory results, not a FinWeave rating. Nothing on
/banks/stressis a FinWeave score, a solvency judgement, or a failure prediction. - Hypothetical, not a forecast. The severely adverse scenario is a designed stress, not the Fed's expected path; projected minimums are conditional on that hypothetical.
- Not investment or deposit advice.
- Cross-cycle and cross-firm comparability is limited. The scenario changes each year, the capital-ratio definition changed at 2015-2016, the participating group changes composition, and firm-level pass conditions depend on firm-specific buffer requirements not reproduced here.
- Reproducible. Every displayed number is recomputable from
data/parquet/dfast_results.parquetbysrc/lib/stress.ts; every input field is named indata/raw/dfast/SOURCE.md.
Deposit market structure: FDIC Summary of Deposits (no FinWeave score)
The "Deposit market structure" section on /banks reproduces concentration
statistics computed directly from the FDIC's annual Summary of Deposits (SOD)
survey. It applies no FinWeave-modelled score; the figures are transparent
aggregations of a published branch-level deposit census.
Source and coverage
- Publisher and survey. Federal Deposit Insurance Corporation, Summary of
Deposits: the annual survey of branch-office deposits for every FDIC-insured
institution (commercial banks, savings institutions, and US branches of foreign
banks), reported as of June 30 each year. Retrieved via the BankFind Suite
sodAPI, 2018-2025 (2025 is the latest published survey). - Aggregation.
scripts/build_fdic_sod.pyrolls the branch-level census up to the institution level (summing each institution's deposits within each state and nationally) and then to per-state-year and national-year rows:data/parquet/sod_market_structure.parquet(478 rows). Fields: total deposits (thousands USD), branch count, institution (bank) count, the institution-share HHI, and the top-5 institution deposit share. - License. FDIC public data. Retrieval, the year-by-year branch counts, and
the raw-vs-parquet audit are in
data/raw/fdic_sod/SOURCE.md; the batch acceptance audit is indocs/data_provenance.md.
HHI formula and what it measures here
The Herfindahl-Hirschman Index is the sum of the squared market shares of the competitors in a market:
HHI = sum_i (s_i)^2
where s_i is institution i's deposit share expressed in percentage points
(0-100), so the index runs from near 0 (perfectly fragmented) to 10,000 (a
single institution holds 100 percent). On /banks the shares are each
institution's share of total deposits within the geography (a state, or the
nation): the national HHI squares each institution's share of all US
deposits, and each state HHI squares each institution's share of that
state's deposits. The top-5 share is the summed deposit share of the five largest
institutions in the geography.
Market-definition caveat (important)
This is a state-level (and national) institution-share HHI, not the HHI used in
bank-merger review. In competitive analysis of bank mergers the Federal Reserve
and the Department of Justice define local geographic banking markets (roughly
county- or metropolitan-area-based Federal Reserve banking markets), compute HHI
on deposit shares within those local markets, and screen against the
thresholds in the DOJ/FTC framework (broadly, concern above an HHI of about 1,800
with a change of at least 200 points, with banking-specific latitude). A
state-level or national HHI is a far coarser lens: it treats an entire state as
one market, so it understates the concentration a customer actually faces in
a given town and is not the number merger screening turns on. The /banks
figures are a descriptive read of how deposits are distributed across
institutions at the state and national level, disclosed as such, and are not a
merger-review market-concentration measure.
Concentration extremes: the 50-state restriction
The "most/least concentrated states" tables rank the 50 states by institution-share HHI in the latest survey year. DC and the US territories and freely-associated states (Guam, Puerto Rico, the US Virgin Islands, the Northern Mariana Islands, and the Pacific freely-associated states Palau, the Marshall Islands and the Federated States of Micronesia) are excluded from the ranking: several hold only one to three FDIC-insured institutions, which pins their HHI at or near the 10,000 single-institution ceiling and would crowd the "most concentrated" list with jurisdictions that are not comparable to a US state. They remain in the underlying parquet; only the extremes ranking excludes them, so the comparison is like-for-like across the 50 states. Delaware and South Dakota top the ranking, consistent with their role as national credit-card and trust charter homes.
Verification anchors (recomputed raw-vs-parquet)
South Dakota 2025 HHI 4,654.13 (recomputed end-to-end from the raw branch census
by the acceptance auditor, exact). National 2025 HHI 390.72, top-5 share 37.67
percent across 4,431 institutions and 76,120 branch offices; the live FDIC API
confirms the 2024 national branch total (76,727). Full log in
data/raw/fdic_sod/SOURCE.md.
Mandatory caveats (deposit-structure view)
- Descriptive statistics, not a FinWeave rating. Nothing in this section is a FinWeave score or a judgement about any institution.
- State/national HHI is not a merger-review HHI. See the market-definition caveat above; do not read these figures as the concentration measure used in bank-merger competitive analysis.
- Annual, June-30 snapshots. Each figure is a point-in-time census as of June 30; intra-year branch and deposit changes are not captured.
- Reproducible. Every displayed number is recomputable from
data/parquet/sod_market_structure.parquetbysrc/lib/sodStructure.ts; the survey retrieval is documented indata/raw/fdic_sod/SOURCE.md.
Euro-area credit conditions: the ECB Bank Lending Survey (no FinWeave score)
The "Bank lending survey" section on /banks/eu reproduces the euro area
Bank Lending Survey (BLS), the ECB's quarterly survey of bank loan officers
and the euro-area analog of the Federal Reserve's SLOOS (shown on
/conditions). Everything displayed is an ECB-published survey aggregate,
reproduced as released; no FinWeave transformation and no FinWeave score.
Survey design
The BLS has been conducted quarterly since the January 2003 round by the ECB
together with the euro-area national central banks. It asks senior loan
officers at a sample of euro-area banks (161 banks in the April 2026 round,
with a 100 percent response rate, per the ECB's April 2026 press release)
whether, over the past three months, the bank tightened or eased credit
standards (its internal loan-approval criteria) and whether loan demand
increased or decreased, separately for loans and credit lines to
enterprises, loans to households for house purchase, and consumer credit and
other lending to households, plus the same questions as expectations for the
next three months. Each country joins the survey with euro adoption, so
country series start at different rounds (Bulgaria appears for the first time
in the 2026-Q2 round); the page shows only the euro-area aggregate. Survey
homepage: ECB Bank Lending Survey;
data: ECB Data Portal, dataset BLS, retrieved 2026-07-10.
Net percentage (what every displayed value is)
Every figure in the section is a net percentage on a -100..100 scale: for credit standards, the percentage of banks reporting a tightening minus the percentage reporting an easing; for demand, the percentage reporting an increase minus the percentage reporting a decrease. The sign convention is the ECB's own and is not flipped: positive = net tightening of standards and positive = net increase in demand. These are balances of survey answers (counts of banks), not loan volumes or interest rates. The dataflow also publishes a diffusion index that half-weights "somewhat" answers; the page does not use it.
Euro-area aggregation (U2, WFNET)
The euro-area aggregate (REF_AREA = U2) is the country results weighted by
each country's share of the outstanding loan stock in the relevant
category (ECB aggregation method code WFNET), so larger banking systems
move the aggregate more than a simple average of countries would. Per-country
series carry the unweighted FNET net percentage instead (with a
bank-loan-share-weighted BFNET variant for the three countries that publish
only that form); the page uses U2/WFNET exclusively. The code resolution
against the ECB's own datastructure codelists is documented in
data/raw/ecb_bls/SOURCE.md.
Survey round vs reference quarter
The ECB labels each observation with the survey-round quarter, not the
quarter the answers describe: the April 2026 round is 2026-Q2, and its
backward-looking answers describe 2026 Q1. The parquet carries both labels
(quarter = round, ref_quarter = the quarter described, round minus one
for realized answers), and the page states the distinction wherever a round
is named. The convention was verified against the ECB press release "April
2026 euro area bank lending survey" (published 2026-04-28): the release's
realized Q1 2026 enterprise net tightening of 10 percent matches the parquet
value 10.09 at round 2026-Q2, and all six realized April-round net
percentages match the release after rounding. The magnitude anchor for the
full history is the global-financial-crisis record: a 65.06 net percentage of
banks tightening enterprise credit standards in the October 2008 round
(2008-Q4, describing 2008 Q3), consistent with the widely cited peak of
about 65 percent.
Mandatory caveats (BLS view)
- Survey balances, not volumes. A net percentage counts (weighted) banks, not euros of credit; a +10 says more banks tightened than eased, nothing about how much.
- Published aggregates, not a FinWeave rating. Nothing in the section scores, ranks, or judges any bank.
- Realized answers only. The page shows the backward-looking (B3)
questions. The expectations (F3) series are in the parquet but not
displayed; the SME/maturity breakdowns and the factor sub-questions are
not ingested (documented as out of scope in
data/raw/ecb_bls/SOURCE.md). - Reproducible. Every displayed number is recomputable from
data/parquet/ecb_bls.parquetbysrc/lib/bls.ts; retrieval, series-key decoding, and the raw-vs-parquet and press-release verification tables are indata/raw/ecb_bls/SOURCE.md. License: ECB data, free use with attribution ("Source: European Central Bank").