# FDIC Bank Financials Scraper: Health and Branches (`parselab/fdic-bank-financials-scraper`) Actor

Scrape FDIC data on every insured US bank. Get assets, deposits, income, capital ratios and loan quality with a health score, risk flags and yearly growth, plus quarterly history, branch offices with deposits and failed banks. Filter by name, state, size or holding company. Export to CSV or Excel.

- **URL**: https://apify.com/parselab/fdic-bank-financials-scraper.md
- **Developed by:** [ParseLab](https://apify.com/parselab) (community)
- **Categories:** Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $18.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## FDIC Bank Financials Scraper: Health and Branches

This FDIC bank data scraper reads the public records of every FDIC insured bank and savings institution in the United States. Look up a bank, a holding company, a state or the whole market and get assets, deposits, income, capital ratios and loan quality for any quarter, together with a health check that flags weak banks. Switch modes to get the quarterly history of a bank, its branch offices with deposits, or the list of failed banks.

A bank row carries much more than the name and the assets. You get the profile (address, charter, regulator, holding company, number of branches, founding date, website), total assets and size bucket, deposits split into insured, uninsured and core, loans, equity, net interest margin, return on assets and equity, efficiency ratio, noncurrent loans, net charge-offs, reserve coverage, the three capital ratios, loans to deposits, yearly growth of assets, deposits and loans, a capital category, risk flags written in words and a health score from 0 to 100.

Bank analysts, fintech teams, journalists, risk managers, investors and sales teams that sell to banks use it to screen banks and to watch for trouble early.

### What can you do with this FDIC scraper?

- Screen all US banks by size, state, charter, regulator or holding company
- Find weak banks with losses, thin capital, many bad loans or loans above deposits
- Compare banks on return on assets, net interest margin, efficiency and capital
- Track a bank quarter by quarter, with growth against the last quarter and the same quarter last year
- Check how much of the deposits of a bank are uninsured
- List all branches of a bank in a state, or every branch in a ZIP code, with coordinates
- See the deposits of each branch from the annual deposit survey, to measure local market share
- Study bank failures since 1934 with assets, estimated cost to the insurance fund and the buyer
- Build lead lists of community banks in a region, with website and holding company
- Export bank data to CSV or Excel, or send it to a dashboard

### What data can you extract from FDIC records?

| Mode | One row is | Highlights |
|---|---|---|
| Banks | One bank, latest or chosen quarter | Name, FDIC certificate, address, county, metro area, website, founding and insurance dates, charter class, regulator, holding company and type, branch count, specialization, FDIC region, minority depository status, trust powers, coordinates, assets and size bucket, deposits (total, domestic, insured, uninsured, core) and shares, net loans, securities, equity, year to date income lines, return on assets and equity, net interest margin, efficiency ratio, noncurrent loans, net charge-offs, reserves, Tier 1 leverage, Tier 1 and total risk-based ratios, loans to deposits, employees, capital category, risk flags, health score, growth over a year |
| History | One bank and quarter | The same financial fields for every quarter in the range, with growth against the last quarter and the same quarter of the year before |
| Branches | One branch office | Bank, branch name and number, main office flag, service type, address, city, state, ZIP, county, metro area, latitude and longitude, opening and acquisition dates, deposits of the branch and the survey year |
| Failed banks | One failure | Bank, city, state, failure date, assets and deposits at failure, estimated cost to the insurance fund and as percent of assets, resolution type, buyer name and location |

### How to scrape FDIC bank data

1. Choose **Banks**, **Quarterly history**, **Branch offices** or **Failed banks**.
2. Enter bank names, holding companies, states, cities or ZIP codes, or leave them empty for the whole market.
3. Optionally set a size range, a charter class, a regulator or the quarter.
4. Turn on **Only banks with risk flags** and sort by health score to see the weakest banks first.
5. Set **Max Items** and click **Start**.
6. Export the dataset as CSV, Excel or from the Apify console.

### Input example

```json
{
  "mode": "banks",
  "states": ["CA"],
  "maxAssetsUsd": 2000000000,
  "onlyWithRiskFlags": true,
  "sortBy": "healthScore",
  "maxItems": 50
}
```

### Bank output example

```json
{
  "bankName": "Wells Fargo Bank, National Association",
  "cert": "3511",
  "city": "Sioux Falls",
  "state": "SD",
  "charterClass": "National bank (OCC)",
  "regulator": "OCC",
  "holdingCompany": "Wells Fargo & Company",
  "branchOffices": 4182,
  "quarter": "2026Q2",
  "totalAssetsUsd": 1907928000000,
  "sizeBucket": "Mega ($100B or more)",
  "totalDepositsUsd": 1563534000000,
  "uninsuredDepositSharePct": 48.3,
  "equityToAssetsPct": 8.885,
  "returnOnAssetsPct": 1.376,
  "returnOnEquityPct": 14.88,
  "netInterestMarginPct": 3.129,
  "efficiencyRatioPct": 54.773,
  "noncurrentLoansPct": 1.042,
  "tier1LeverageRatioPct": 8.018,
  "totalRiskBasedRatioPct": 13.503,
  "loansToDepositsPct": 62.927,
  "capitalCategory": "Well capitalized",
  "riskFlags": [],
  "healthScore": 100,
  "assetGrowthYoYPct": 9.25
}
```

### Bank with risk flags example

```json
{
  "bankName": "NANO BANC",
  "city": "Irvine",
  "state": "CA",
  "totalAssetsUsd": 736172000,
  "capitalCategory": "Adequately capitalized",
  "riskFlags": [
    "Loss: negative return on assets",
    "Total risk-based capital ratio under 10%",
    "Noncurrent loans above 3% of loans",
    "Net charge-offs above 1% of loans",
    "Uninsured deposits above 55% of deposits"
  ],
  "healthScore": 14
}
```

### Branch output example

```json
{
  "bankName": "Bank of America, National Association",
  "branchName": "MARKET-NEW MONTGOMERY BRANCH",
  "isMainOffice": false,
  "address": "33 New Montgomery St",
  "zip": "94105",
  "latitude": 37.789,
  "branchDepositsUsd": 690404000,
  "depositsYear": 2026
}
```

### Failed bank output example

```json
{
  "bankName": "Small Business Bank",
  "city": "Lenexa",
  "state": "KS",
  "failureDate": "2026-07-17",
  "totalAssetsUsd": 72947000,
  "estimatedCostToFdicUsd": 5671000,
  "costPercentOfAssets": 7.77,
  "resolutionType": "Purchase and assumption of all deposits",
  "acquirerName": "The Farmers State Bank Of Oakley, Kansas"
}
```

### How much does it cost to scrape FDIC bank data?

You pay per result: $24 per 1,000 rows plus a tiny start fee. The free plan returns up to 10 rows per run. The whole market is about 4,300 banks, so a full screen of all banks costs around a hundred dollars at the base price, and a state or a size range costs a fraction of that.

### Tips for better results

- Amounts are in US dollars. The FDIC publishes them in thousands, and the Actor converts them.
- Income lines such as net income, interest income and provision are year to date, as in the call report. Compare the same quarter of different years, or use the return ratios.
- The health score and the risk flags are a screen built from public ratios, with simple thresholds. They are not a rating and not a prediction of failure. Read the ratios of a bank before you rely on a flag.
- The capital category uses the leverage ratio and the two risk-based ratios. Banks also have to meet a common equity ratio that is not part of this check.
- Quarters are published about two months after they end, so the latest quarter is always a little old.
- Branch deposits come from the annual deposit survey of the FDIC, which covers the year to the end of June.
- Search by part of a name. The word "bank" alone matches thousands of institutions, so add a place or another word.
- For a state or city in the branches mode, the place is where the branch is, not the head office.

### Who uses bank data?

- **Bank analysts and investors** screen for strong and weak banks.
- **Risk teams** watch counterparties and depositors keep an eye on uninsured balances.
- **Fintech and software vendors** build lead lists of community banks.
- **Journalists** report on failures and on stress in the banking system.
- **Researchers and consultants** study local banking markets and deposit shares.

### Automate and connect

Schedule the Actor after each quarter is published and send the results to Google Sheets, Slack, Zapier, Make or n8n, or trigger a webhook when a run ends.

### FAQ

**Do I need an FDIC account?**
No. The Actor works without any login.

**Does it include credit unions?**
No. Credit unions are insured by the NCUA. This Actor covers banks and savings institutions insured by the FDIC.

**Is the health score an official rating?**
No. It is a simple screen built by the Actor from public ratios. The FDIC does not publish a score.

**Why is the net income so different from the quarterly figure?**
The FDIC reports income for the year to date. The figure for the second quarter includes the first quarter.

**How far back does the history go?**
Back to the 1980s for many banks. Use the quarter fields to choose the range.

**Which banks are in the failed banks list?**
Every FDIC insured bank that failed or was assisted since 1934.

**Is this financial advice?**
No. Bank data is public information. Use it as one input among many.

### Legal note

This Actor collects information that is publicly visible on the website. Check the source site's terms and your local rules before using the data. Nothing here is financial advice.

### Support

Missing a field or found a bug? Open an issue from the Actor page.

# Actor input Schema

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000.

## `mode` (type: `string`):

Banks returns one row per bank with its profile, the latest quarter and a health check. History returns one row per bank and quarter. Branches returns one row per branch office with location and deposits. Failed banks returns one row per bank failure.

## `bankNames` (type: `array`):

Part of a bank name, for example Wells Fargo, Silicon Valley or Community. Any bank whose name contains the text is kept.

## `certs` (type: `array`):

FDIC certificate numbers of banks, for example 3511 for Wells Fargo Bank. Use them when you know the exact bank.

## `holdingCompanies` (type: `array`):

Part of the name of the parent company, for example JPMorgan or Truist. All banks of that company are kept.

## `states` (type: `array`):

Two letter state codes, for example CA, TX, NY. For banks and history it is the state of the head office, for branches it is the state of the branch.

## `cities` (type: `array`):

Part of a city name, for example Austin. For banks and history it is the head office city, for branches it is the branch city.

## `zipCodes` (type: `array`):

Five digit ZIP codes, for example 94105. For branches it is the ZIP code of the branch.

## `charterClasses` (type: `array`):

N for national banks, SM for state banks that are Federal Reserve members, NM for state banks that are not, SB for savings banks, SA for savings associations, OI for foreign bank branches.

## `regulators` (type: `array`):

OCC for national banks, FDIC for state non-member banks, FRS for Federal Reserve member state banks.

## `minAssetsUsd` (type: `integer`):

Keep only banks with at least this much in assets, for example 1000000000 for one billion dollars.

## `maxAssetsUsd` (type: `integer`):

Keep only banks with at most this much in assets.

## `onlyWithRiskFlags` (type: `boolean`):

Banks mode only. Keep banks that trip at least one warning, such as a loss, thin capital, many noncurrent loans or loans above deposits. The flags are a screen built from public ratios, not a rating.

## `sortBy` (type: `string`):

Banks mode only. Order of the results. Health score puts the weakest banks first.

## `quarter` (type: `string`):

Banks mode. Quarter of the call report, for example 2026Q2 or 2026-06-30. Leave empty for the latest quarter.

## `quarterFrom` (type: `string`):

History mode. First quarter, for example 2024Q1. The default is 8 quarters before the last one.

## `quarterTo` (type: `string`):

History mode. Last quarter, for example 2026Q2. The default is the latest quarter.

## `includeDeposits` (type: `boolean`):

Branches mode. Adds the deposits of each branch from the annual deposit survey of the FDIC.

## `yearFrom` (type: `integer`):

Failed banks mode. First year of failure, for example 2008.

## `yearTo` (type: `integer`):

Failed banks mode. Last year of failure.

## `includeInactive` (type: `boolean`):

Also match banks that no longer operate when you search by name or place.

## Actor input object example

```json
{
  "maxItems": 10,
  "mode": "banks",
  "onlyWithRiskFlags": false,
  "sortBy": "assets",
  "includeDeposits": true,
  "includeInactive": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parselab/fdic-bank-financials-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parselab/fdic-bank-financials-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 10
}' |
apify call parselab/fdic-bank-financials-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parselab/fdic-bank-financials-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/r8m9tEr4e0N11x6AV/builds/3IYRRIFK5grrJzvWt/openapi.json
