Bank Failures Scraper & API - FDIC Failed Bank List avatar

Bank Failures Scraper & API - FDIC Failed Bank List

Pricing

from $5.60 / 1,000 bank failures

Go to Apify Store
Bank Failures Scraper & API - FDIC Failed Bank List

Bank Failures Scraper & API - FDIC Failed Bank List

Every US bank failure since 1934 from the official FDIC list: the date it failed, what happened to it, who acquired it, and its assets, deposits and estimated cost to the insurance fund - converted from FDIC thousands into US dollars. No API key. Filter by state, year or name.

Pricing

from $5.60 / 1,000 bank failures

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 hours ago

Last modified

Share

Every US bank failure since 1934 from the FDIC's own list - 4,117 of them - as structured rows. No API key, no scraping of a web page: this reads the official banks.data.fdic.gov service.

What one row carries

FieldExample
nameFIRST REPUBLIC BANK
certFDIC certificate number
city / stateSAN FRANCISCO / CA
failDate2023-05-01 (ISO; the FDIC returns 5/1/2023)
resolutionCode / resolutionPA / "Purchase and assumption - another bank took the deposits and some assets"
acquiringInstitutionJPMORGAN CHASE BANK, N.A.
totalAssetsUsd212638872000
totalDepositsUsd176436706000
estimatedLossToFundUsd15495761533
estimatedLossNotewhy the loss is null, when it is
sourceUrlthe FDIC page for this failure

Two things this gets right that are easy to get wrong

1. The FDIC reports money in thousands. QBFASSET for Silicon Valley Bank is 209026000. That is $209 billion, not $209 million. Every amount here is multiplied out to whole US dollars, and the conversion is checked against SVB and First Republic in the test suite.

2. A cost of 0 does not mean the failure was free. Signature Bank comes back with COST: 0 in this dataset, and the FDIC's own published estimate for it is around $2.4 billion. So 0 means "this table does not carry the number", not "no loss". Rows like that get estimatedLossToFundUsd: null and a one-line estimatedLossNote saying why. A scraper that prints $0 there is quietly wrong.

Input

{
"states": ["CA", "NY"],
"fromYear": 2008,
"toYear": 2012,
"nameContains": "First",
"maxRecords": 1000
}
FieldDefaultMeaning
states(all)Two-letter codes. Anything else is dropped, and the run says which
fromYear / toYear(none)Failure year range. The list starts in 1934
nameContains(none)Keep only banks whose name contains this text, in any letter case. BANK OF matches 666 of the 4,117
maxRecords1000Stop after this many rows (whole list ≈ 4,100)
maxRetries3Retries on timeout, 429 and 5xx only. A 4xx is the API's answer, not a hiccup

No result is still an answer

If nothing matches, you get one row with rowType: "no-match", the reason, and the query that was used - not an empty dataset that could equally mean "the API broke". Errors come back the same way, with rowType: "error", and neither is charged.

Typical uses

  • Bank risk and counterparty monitoring: which institutions failed in a state, and who absorbed them
  • Research on the 2008-2011 wave (over 400 failures) and on 2023
  • Teaching material and dashboards that need real, citable numbers
  • Enriching a bank list with "did this charter end in failure, and when"

Pricing

Charged per delivered row. Rows that carry no answer - no-match and error - are not charged.

Checks

36 automated checks, and a mutation run that breaks the source in 15 deliberate defects to confirm the checks actually fail when they should: wrong money unit, 0 printed as a loss, invalid dates accepted, filters silently dropped, 4xx retried, non-JSON responses passed through. All 15 are caught. Fixtures are real FDIC responses recorded on 2026-09-02, not hand-written.

Fixtures prove what the API answered, not that the query was right. So the name filter is checked separately against the live API: test/verify-name-filter.mjs counts all 4,117 names locally and compares that count with what the filter returns. Eight terms match exactly (First 772, BANK OF 666, FIRST NATIONAL 163, n.a. 89, and four more), and the recorded result ships in test/_name-filter-verified.json.

Other tools by NeverEmpty

Every NeverEmpty Actor follows the same rule: it never returns an empty result to mean two different things, and it only charges for rows that actually carry an answer.

Source

https://banks.data.fdic.gov/api/failures - FDIC BankFind Suite. Public data, no key.