FDIC Deposit Market Share & HHI Rollup — SOD Branch Data
Pricing
from $6.60 / 1,000 results
FDIC Deposit Market Share & HHI Rollup — SOD Branch Data
County, MSA & state deposit market share from FDIC Summary of Deposits branch data: per-bank share + rank, HHI concentration (DOJ thresholds), top-3 share, YoY branch openings/closures. Keyless official FDIC API. For bank M&A, deposit brokers, fintech partnerships, site selection.
Pricing
from $6.60 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Maloney
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Turns the FDIC Summary of Deposits branch file into per-market deposit share, ranks, HHI concentration (at both the charter and the bank holding-company level), and year-over-year branch and deposit movement — for any US county, MSA, or state.
This is a screening tool built on public FDIC data, not legal, antitrust, or investment advice. HHI bands are indicators used to decide where to look; a competitive determination is made by the DOJ and the banking agencies on a fuller record.
Who it's for
- Bank M&A and strategy teams sizing a market before an approach, and checking a deal against the DOJ deposit-concentration screen.
- Fintech and de novo bank founders hunting concentrated markets with an entry gap.
- CRE and commercial lenders mapping who actually holds the deposits where they lend.
- Antitrust, policy and research teams needing a reproducible HHI series.
- AI agents — every row carries its own provenance (
coverage_complete,filter_echo_verified,year_resolution), so an agent can tell a verified answer from a partial one.
What it does
- Resolves the newest published SOD survey year live (SOD is annual, as of
June 30, published the following December). You can pin
yearyourself. - Pages the whole branch universe for your scope, verifying on every page that the filter FDIC echoed back is byte-identical to the one sent and that every returned row actually satisfies it.
- Reconciles the retrieved count against FDIC's own
meta.totaland fails the run rather than publishing a ratio over a subset. - Rolls branches up to county / MSA / state, computing share, rank, HHI, top-1 and top-3 share, and the holding-company view.
- Optionally diffs against an earlier survey year for branch and deposit YoY.
Why the completeness gate matters here
Most datasets degrade gracefully when a fetch comes up short: you lose rows. A market share is a ratio. A partial fetch does not lose rows — it changes the denominator, so every share and every HHI in the output becomes a different number that still looks entirely plausible. So this actor treats completeness as a hard gate: if FDIC says there are 76,120 branches and 76,119 came back, the run fails and bills nothing.
The same reasoning applies to the filter. Verified live on 2026-08-01:
filters=YEAR:2025 AND STALPBR:CO -> meta.total = 1,350filters=YEAR:2025 and STALPBR:CO -> meta.total = 119,120
The lowercase form returns HTTP 200 and echoes the filter back byte for
byte while never applying the clause — 88x the rows, spanning other years and
states. Every run therefore checks the echo case-sensitively and
re-validates YEAR and STALPBR on every returned record.
Example input
{"state": "CO","rollupLevel": "county","mode": "banks","compareYear": 2024,"maxResults": 500}
Leave year empty to use the newest published survey. Leave state empty for
a national rollup.
Output fields
One row per bank x area (mode: "banks") or per area (mode: "areas").
Every declared field is listed.
Market / area
| Field | Description |
|---|---|
year | SOD survey year (deposits as of June 30) |
rollup_level | county, msa, or state |
area_name / area_code / state | The market |
area_county_fips | 5-digit state+county FIPS — the join key for Census/BLS/FFIEC |
area_cbsa_code | CBSA / MSA code, when the branches sit in one |
area_csa_code / area_csa_name | Combined Statistical Area, when applicable |
area_total_deposits_usd | Total deposits in the market (USD) |
area_bank_count / area_branch_count | Institutions and branches in the market |
area_holding_company_count | Distinct holding companies — lower than area_bank_count where one owns several charters |
area_hhi | HHI over per-charter shares (0–10000) |
area_hhi_holding_company | HHI over per-holding-company shares — the level the Fed/DOJ screen on. Always ≥ area_hhi |
area_top1_share_pct / area_top3_share_pct | Largest and top-3 combined share |
concentration_flag | General merger-guidelines band of area_hhi (1500 / 2500) |
doj_bank_screen | Banking-specific DOJ screen (1800 bar) |
market_gap | Top-3 share at or above marketGapThresholdPct |
area_main_office_count | Branches that are an institution main office |
area_branches_missing_deposits | Branches FDIC published no deposit figure for — excluded from the total, never counted as 0 |
area_branches_zero_deposits | Branches FDIC published exactly 0 for (distinct fact) |
area_branches_missing_cert | Branch records with no FDIC certificate — counted, never merged into a phantom bank |
Bank (banks mode)
| Field | Description |
|---|---|
bank_name / cert | Institution and FDIC certificate number |
branch_count / total_deposits_usd | This bank's branches and deposits in this market |
market_share_pct / rank | Share of market deposits, and rank |
bank_class / bank_class_description | Charter class (N, NM, SM, SA, SB, OI) |
bank_specialization | FDIC asset-concentration group |
bank_total_deposits_usd / bank_total_assets_usd | Institution-wide totals |
market_share_of_bank_pct | How much of the bank rides on this market |
is_community_bank | FDIC community-bank designation |
Holding company
| Field | Description |
|---|---|
holding_company_name / holding_company_rssd | Top-tier holding company and its Fed RSSD id |
holding_company_city / holding_company_state | Where it sits — compare with state for out-of-state ownership |
holding_company_deposits_usd / holding_company_share_pct / holding_company_rank | Its combined position in the market |
holding_company_charters_in_area | Charters it runs locally; > 1 is exactly where a charter-level HHI understates concentration |
Year over year (needs compareYear)
| Field | Description |
|---|---|
compare_year / compare_year_status | Which year, and whether it actually loaded |
yoy_branches_opened / yoy_branches_closed | Net branch movement |
yoy_deposit_growth_pct | Deposit growth |
yoy_share_shift_pts | Market-share shift, in percentage points |
Provenance (on every row)
| Field | Description |
|---|---|
sod_status | Always ok on an emitted row — anything else fails the run |
year_resolution | explicit or latest_published |
records_expected / records_retrieved / coverage_complete | The completeness reconciliation |
filter_sent / filter_echo_verified / filter_rows_validated | The filter gates |
results_truncated | maxResults cut the output (shares and HHI are still computed over the complete market) |
source_url | The FDIC request behind the row |
Use as an MCP tool
Available over mcp.apify.com. Because every row carries coverage_complete,
filter_echo_verified and year_resolution, an agent can distinguish a
verified market picture from a partial one without reading the log — and a run
that could not verify itself fails loudly rather than returning a plausible
number.
Source & verified behaviour
- FDIC BankFind Suite — Summary of Deposits,
https://api.fdic.gov/banks/sod(keyless).banks.data.fdic.gov302-redirects here; use the new host. - Annual, as of June 30, published the following December. Verified 2026-08-01: 2025 = 76,120 branches, 2024 = 76,727, 2023 = 77,770, 2015 = 93,272, 2010 = 98,520, 2026 = not yet published.
limitcaps at 10000 (limit=20000returns HTTP 400validate:too_big).DEPSUMBRis published in thousands of dollars and is converted to USD here. A units drift check runs on every run.DEPSUMis a zero-for-null trap. The institution-level total is stamped only on the main-office record and is literally0on every other branch row of the same bank.DEPDOMcarries it on every row and is what this actor reads.MSANAMBis empty for non-MSA branches (316 of the 1,350 Colorado 2025 rows), which fall into aNONMSA-<state>bucket.- An unrecognised state code returns 0 records, and the run fails loudly rather than emitting an empty success.
RSSDHCR= 0 is a no-holding-company sentinel, not an identifier. Keying on it merges every unaffiliated bank in a market into one phantom holding company. Verified live: Zions Bancorporation N.A. (CERT 2270) returnsRSSDHCR: 0. Treated as null here.BKCLASSis a broad vocabulary and unknown codes are reported, not fatal - measured from the live national file (N28,875,NM14,905,SM10,654,SB1,553,SL123,OI10). An unrecognised code setsbank_class_unknownand leaves the description null; it changes no share, rank or HHI, so it does not fail the run.
FAQ
Why did my run fail with "INCOMPLETE FETCH"? Because FDIC reported more branch records than came back. Market share and HHI are ratios, so a partial fetch would change every number in the answer while leaving it plausible. Nothing was emitted and nothing was billed — re-run.
Why is area_hhi_holding_company higher than area_hhi? Because one
holding company owns more than one bank charter in that market. The charter
view treats them as separate competitors; the Fed and DOJ do not.
Which concentration flag should I use? concentration_flag is the general
merger-guidelines banding (1500 / 2500). doj_bank_screen applies the
banking-specific DOJ Bank Merger Competitive Review bar of 1800, which is what
a bank M&A analyst reading SOD data is normally testing. Both ship; neither is
a determination.
Why is a share null instead of 0? Because that market has no published
deposits at all, so a share is undefined. null means not computable; 0
would be a claim.
Why did the year change from what I expected? Leave year empty and the
actor resolves the newest published survey live — year_resolution on every
row says whether you pinned it or it was resolved. Earlier versions defaulted
to a fixed year, which quietly answered a superseded survey.
Pricing
Pay per result: one billable result = one bank x area (or area) rollup row. Tiered discounts apply on paid Apify plans. A run that fails a completeness, filter or vocabulary gate emits nothing and bills nothing for results.
Related actors
- FDIC Structure-Change Delta Monitor and FDIC Branch Network Churn Rollup — the M&A and branch-movement side of the same FDIC data.
- FDIC + NCUA Institution Health Rollup — capital and stress screening.
- HMDA Fair-Lending Disparity Rollup — lending, at the same geography.