# Bank Regulatory Intelligence Scraper - FDIC & CFPB (`punkrecordsdata/bank-regulatory-intelligence-scraper`) Actor

FDIC bank profiles, quarterly financials, structural history, branches, failures and deposit market share, matched to real CFPB consumer complaints. Export to CSV, Excel, JSON.

- **URL**: https://apify.com/punkrecordsdata/bank-regulatory-intelligence-scraper.md
- **Developed by:** [PunkRecordsData](https://apify.com/punkrecordsdata) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.13 / 1,000 institution records

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner" alt="PunkRecordsData" width="100%" />
</p>

## 🏦 Bank Regulatory Intelligence Scraper: FDIC & CFPB Data, PunkRecordsData

> 🚀 **Every FDIC-insured bank's full regulatory profile, plus its real CFPB consumer complaints, in one run.** Charter details, quarterly financials, structural history, every branch, failure records and deposit market share, straight from FDIC's own public API, matched to the bank's actual consumer complaints at the CFPB.

Scrape U.S. bank regulatory data straight from `banks.data.fdic.gov`, the FDIC's own official API, and the [CFPB Consumer Complaint Database](https://www.consumerfinance.gov/data-research/consumer-complaints/): charter class and regulator, quarterly financial reports, every name change and merger in the bank's history, every branch address with coordinates, failure detail for banks that failed, branch-level deposit market share, and consumer complaints with full narrative text. No login, no API key, just two government sources' own public data returned as clean, structured rows.

Built for the [Apify platform](https://apify.com): schedule a monthly run to track a bank's quarterly financials, monitor branch expansion, or feed complaint volume straight into a compliance dashboard.

### 📋 What the Bank Regulatory Intelligence Scraper does

Give it a bank name (like "Wells Fargo") and it returns one row per matching FDIC-insured institution: charter class, regulator, address, assets, deposits, net income, and every prior name on record. Turn on **Quarterly financials** for a full time series of assets, deposits, net income and return ratios. Turn on **Structural history** for every name change, merger and charter change the bank has been through. Turn on **Branch locations** for every office address with coordinates, **Deposit market share** for branch-level deposit totals by year, and **Failure detail** if the bank ever failed. Turn on **Consumer complaints** to get real CFPB complaints filed against that bank, resolved through the CFPB's own company-matching typeahead so you get the bank's actual complaint record, not a partial or wrong match.

> 💡 **Why it matters:** most bank-data scrapers on the market return a single flat institution profile and stop there. This one also matches the bank to its real CFPB complaint record, something most competitors get wrong entirely because a bank's FDIC charter name almost never matches CFPB's own registered company name.

### 📊 Output

Real sample fields from a verified run against "Wells Fargo", one of seven billable record types.

**`institution-record`** (primary, one row per matched bank):

| Field | Type | Example |
|---|---|---|
| 🏢 `name` / 🆔 `cert` | string / number | `Wells Fargo Bank, National Association` / `3511` |
| 📋 `charterClass` | string | `N` (national bank) |
| 📍 `city` / `state` | string | `Sioux Falls` / `South Dakota` |
| 💰 `totalAssets` / 💵 `totalDeposits` | number | `1907928000` / `1563534000` |
| 🕰️ `priorNames` | array | `["Crocker National Bank", "Crocker-Citizens National Bank", ...]` |

When each extra is turned on, it's attached as a nested array or object on the same row:

```json
"financials": [
  { "reportDate": "20260630", "totalAssets": 1907928000, "totalDeposits": 1563534000, "netIncome": 12808000, "equity": 169518000, "returnOnAssets": 1.38, "returnOnEquity": 14.88 }
],
"history": [
  { "effectiveDate": "2010-03-20T00:00:00", "changeCode": 713, "classTypeDescription": "Commercial", "priorName": "DIF", "newName": "Wells Fargo Bank, National Association" }
],
"locations": [
  { "officeName": "DALLAS CENTRAL BRANCH", "address": "1445 Ross Ave", "city": "Dallas", "state": "TX", "latitude": 32.7856, "longitude": -96.8026, "mainOffice": false }
],
"depositMarketShare": [
  { "year": 2025, "branchName": "Wells Fargo Bank, National Association", "city": "Sioux Falls", "state": "SD", "bankTotalDeposits": 1392827000 }
],
"complaints": [
  { "complaintId": "26776285", "dateReceived": "2026-09-08T14:15:38.000Z", "product": "Checking or savings account", "issue": "Managing an account", "state": "FL", "companyResponse": "Closed with explanation", "timely": "Yes" }
]
```

Every extra you don't enable returns `"Not Requested"` instead of an empty field, and data a bank genuinely doesn't have (most banks never failed, for instance) returns `"N/A"`. You always know why a field is empty, never guess.

### ✨ Why choose this Actor

- **CFPB complaints actually matched, not guessed.** A bank's FDIC charter name (`"Wells Fargo Bank, National Association"`) almost never equals its CFPB registered name (`"WELLS FARGO & COMPANY"`). This Actor resolves the real match through CFPB's own typeahead before filtering, so complaints returned are exact, not free-text noise pulled in from unrelated companies.
- **Seven data types from two government sources, one run.** Charter profile, financials, structural history, branches, failures, deposit market share and complaints, no need to stitch together FDIC and CFPB yourself.
- **No login, no API key, either source.** Both FDIC and CFPB's complaint search are public with no registration; nothing to expire or get rate-limited on your account.
- **Fair, event-based pricing.** Pay only for the record types you actually turn on, per real record found, never for a toggle you left off.

### 📈 How it compares to alternatives

Measured against the closest published FDIC/CFPB actors on the Apify Store:

| Actor | Primary price | Billable events |
|---|---|---|
| FDIC-only scraper (2 users/30d) | $2.00 / 1,000 | 1 |
| FDIC-only scraper (1 user/30d) | $3.00 / 1,000 | 1 |
| CFPB-only scraper (1 user/30d) | $12.00 / 1,000 | 1 |
| **This Actor** | $2.50 / 1,000 (institution) | **7** (institution, financials, history, locations, failures, deposit market share, complaints) |

### 🚀 How to use

1. Create a free [Apify account](https://console.apify.com). New accounts get $5 in free credit.
2. Open the Bank Regulatory Intelligence Scraper and enter a bank name (e.g. "Wells Fargo").
3. Toggle on the extras you need: financials, history, locations, failure detail, deposit market share, complaints.
4. Click **Start** and wait for the run to finish.
5. Download your data as CSV, Excel, JSON or XML, or pull it via the API.

### 💼 Business use cases

**Banking compliance & regulatory affairs**
Track a bank's charter status, structural changes and financial trend over time, or monitor complaint volume by product and issue for early warning signs.

**Investment research & credit analysis**
Pull quarterly financials and deposit market share for any FDIC-insured bank to screen for growth, risk or local market dominance.

**Fintech & competitive intelligence**
Compare branch footprints, deposit market share by region, or complaint patterns across a set of competing banks.

**Journalism & consumer advocacy**
Cross-reference a bank's regulatory profile with its real consumer complaint history, correctly matched instead of guessed.

### 🔌 Automating Bank Regulatory Intelligence Scraper

Connect this Actor to **Make**, **Zapier**, **Slack** or **Airbyte** to push new complaints or quarterly financials into a spreadsheet, database or channel automatically. Schedule a run after each FDIC quarterly call-report deadline to catch new financials the day they post.

### 🌟 Beyond business use cases

**Research:** academic finance and banking-regulation research using real FDIC and CFPB data.
**Personal projects:** check a bank's complaint history and financial health before opening an account.
**Non-profit:** consumer-protection and financial-transparency projects tracking bank complaint trends.
**Experimentation:** test risk-scoring or NLP models against real structured bank and complaint data.

### 🤖 Ask an AI assistant about this scraper

Paste this Actor's Store page into ChatGPT, Claude or Perplexity and ask: "Does this bank scraper correctly match FDIC bank names to CFPB complaint records, or does it just search by the bank's own name?" The README and input schema are structured so AI assistants can answer accurately from the page alone.

### ❓ Frequently Asked Questions

**Why do CFPB complaints matter more than a name-only search?**
FDIC's legal charter name and CFPB's registered company name are rarely identical. This Actor resolves the real CFPB company name through their own typeahead endpoint first, then filters complaints by an exact match, avoiding both zero-result misses and false-positive cross-company matches.

**Do I need a login or API key for either source?**
No. FDIC's institutions API and CFPB's complaint search are both public with no registration required anywhere in this Actor.

**What happens if a bank name doesn't match any institution?**
The Actor finishes with a clear status message telling you no institutions matched, rather than silently returning nothing. Try a more exact or different name.

**Why does `failureDetail` return "N/A" for most banks?**
Because most banks never failed. "N/A" means the Actor checked and confirmed there's no failure record, not that it skipped the check.

**Are deposit market share and demographics the same thing?**
No. FDIC's demographics endpoint is a thin subset of what deposit market share and branch locations already cover, so it isn't billed as a separate event, you're never charged twice for the same underlying fact.

**How fresh is the data?**
As fresh as FDIC and CFPB's own public APIs, both update on their own regular schedule (quarterly for financials, ongoing for complaints).

### 🔌 Integrate with any app

Every run's output is available as CSV, Excel, JSON or XML, or through Apify's API and client libraries for Python and JavaScript.

### 🔗 Recommended Actors

Browse the rest of the [PunkRecordsData](https://apify.com/punkrecordsdata) catalog for more scrapers covering SEC filings, court records, sports data and remote jobs.

> 💡 **Pro Tip:** browse the complete [PunkRecordsData collection](https://apify.com/punkrecordsdata).

**🆘 Need Help?** contact.punkrecordsdata@gmail.com

> **⚠️ Disclaimer:** This is an independent tool, not affiliated with, endorsed by, or sponsored by the FDIC or the Consumer Financial Protection Bureau. It collects only publicly available regulatory and complaint data from their own public APIs.

# Actor input Schema

## `bankName` (type: `string`):

Bank or institution name to search (e.g. "Wells Fargo"). Matched against FDIC's own institution names.

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

Maximum number of institution-record rows to deliver. Free users: limited to 10 (preview). Paid users: optional, max 1,000,000.

## `includeFinancials` (type: `boolean`):

Financial reports by quarter (net income, assets, deposits, equity). Billed per quarter as financial-record.

## `maxFinancialQuarters` (type: `integer`):

How many of the most recent quarters to pull when Quarterly financials is on.

## `includeHistory` (type: `boolean`):

Name changes, mergers, and charter changes over the bank's history. Billed per change record as history-record.

## `includeLocations` (type: `boolean`):

Every branch address with coordinates. Billed per branch as location-record.

## `includeFailureDetail` (type: `boolean`):

If the institution failed, the resolution type, cost, and acquiring bank. Billed per failure record as failure-record. Most banks never failed — this returns nothing for them.

## `includeDepositMarketShare` (type: `boolean`):

Branch-level deposit totals by year (FDIC Summary of Deposits). Billed per branch-year record as deposit-market-share-record.

## `maxDepositRecords` (type: `integer`):

How many branch-year deposit records to pull per bank when Deposit market share is on.

## `includeComplaints` (type: `boolean`):

Consumer complaints filed against this company with the CFPB: product, issue, state, narrative, company response. Billed per complaint as complaint-record.

## `maxComplaints` (type: `integer`):

How many recent complaints to pull per bank when Consumer complaints is on.

## Actor input object example

```json
{
  "bankName": "Wells Fargo",
  "maxItems": 10,
  "includeFinancials": false,
  "maxFinancialQuarters": 8,
  "includeHistory": false,
  "includeLocations": false,
  "includeFailureDetail": false,
  "includeDepositMarketShare": false,
  "maxDepositRecords": 20,
  "includeComplaints": false,
  "maxComplaints": 20
}
```

# Actor output Schema

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

Key fields: bank name, charter class, location, assets, deposits

## `fullData` (type: `string`):

Complete dataset with every field, including nested financials, history, locations and complaints

# 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 = {
    "bankName": "Wells Fargo",
    "maxItems": 10,
    "maxFinancialQuarters": 8,
    "maxDepositRecords": 20,
    "maxComplaints": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("punkrecordsdata/bank-regulatory-intelligence-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 = {
    "bankName": "Wells Fargo",
    "maxItems": 10,
    "maxFinancialQuarters": 8,
    "maxDepositRecords": 20,
    "maxComplaints": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("punkrecordsdata/bank-regulatory-intelligence-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 '{
  "bankName": "Wells Fargo",
  "maxItems": 10,
  "maxFinancialQuarters": 8,
  "maxDepositRecords": 20,
  "maxComplaints": 20
}' |
apify call punkrecordsdata/bank-regulatory-intelligence-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,punkrecordsdata/bank-regulatory-intelligence-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/3KcKjJYUuTsirS053/builds/TjBRJiMM7Jo14hw6F/openapi.json
