# FDIC Bank Mergers, Failures & Branch Changes Feed (`moment-data/fdic-bank-structure-changes-feed`) Actor

Daily feed of US bank structure events from the official FDIC BankFind API: mergers, failures, branch deals, new charters, name/charter/regulator changes, branch openings/closings/relocations. Acquirer, assets, deposits, RSSD, FDIC link. Filter by type, state, assets.

- **URL**: https://apify.com/moment-data/fdic-bank-structure-changes-feed.md
- **Developed by:** [Luke Miller](https://apify.com/moment-data) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Mergers, Failures & Branch Changes Feed

A daily **event feed** of every structural change to US banks, thrifts and credit unions, straight from the official **FDIC BankFind Suite API** (api.fdic.gov, public domain). Bank mergers, failures, branch purchase deals, de novo charters, name, charter and regulator changes, plus (optionally) branch openings, closings, relocations and sales. Each event comes **decoded and enriched**: acquirer, total assets and deposits, Federal Reserve RSSD ID, holding company and a link to the FDIC BankFind page.

Other FDIC Actors on the Store let you look up one bank. This one tells you **what changed this week** across all 4,000+ banks.

### Who uses it

- **Bank and fintech business development**: banking-as-a-service, core processors, card, payments and lending fintechs, and vendors selling to community banks. A merger means a core conversion and vendor reviews. A name or charter change means a rebrand. A de novo bank needs everything. A branch purchase means new markets.
- **M\&A watchers, investors and analysts**: completed deals with both sides' assets and deposits, and branch divestitures (who bought how many branches from whom).
- **Compliance, KYC and vendor risk**: keep bank counterparty lists, routing/correspondent files and approved-bank lists current. Catch failures, regulator changes and charter conversions as FDIC records them.
- **Commercial real estate and local market research**: branch openings and closings by city and state.

### What you get (one record per event)

| Field | Example |
|---|---|
| `eventType` | `merger`, `failure`, `branch-purchase-deal`, `new-institution`, `name-change`, `charter-change`, `regulator-change`, `branch-opening`, `branch-closing`, ... |
| `changeCode`, `changeDescription` | `223`, "Merger -Without Assistance" (FDIC's own code and text) |
| `changeSummary` | "First Seacoast Bank (Dover, NH) -> Cambridge Savings Bank" |
| `effectiveDate`, `processDate` | `2026-10-01`, `2026-10-29` |
| `institutionName`, `cert`, `rssdId`, `city`, `state` | The bank the event happened to (the target in a merger or failure, the seller in a branch deal) |
| `institutionClass`, `primaryRegulator`, `charterAgency`, `previousName`, `previousRegulator`, `previousClass` | Before and after, where relevant |
| `acquirerName`, `acquirerCert`, `acquirerCity`, `acquirerState`, `acquirerRssdId`, `acquirerTotalAssetsUsd`, `acquirerHoldingCompany` | For mergers, failures and branch deals |
| `branchesInDeal` | 138 (branch purchase deals) |
| `branchName`, `branchNumber`, `branchCity`, `branchState`, `branchCounty`, `branchServiceType`, `previousBranchCity` | Branch events only. City-level location; no street addresses |
| `totalAssetsUsd`, `totalDepositsUsd`, `financialsAsOf`, `holdingCompany`, `website`, `institutionActive` | Latest FDIC call report (in USD, not thousands) |
| `failureEstimatedLossUsd`, `failureResolutionType` | Failures (from FDIC's failed-bank list, when available) |
| `fdicUrl`, `acquirerFdicUrl` | BankFind pages |
| `isCreditUnion`, `ncuaCharterNumber` | Credit unions use NCUA numbers, so they are never linked or enriched as FDIC certs |
| `fdicTransactionNumber`, `fdicRecordId`, `firstSeenAt` | Traceability and dedupe |

See `sample-output.json` for full examples (merger, branch deal, failure, branch opening, name change).

### Quick start

- **Default run (`{}`)**: the 30 most recent institution-level events FDIC processed in the last 30 days, newest first, in about 2 seconds. No branch noise.
- **M\&A desk**: `{"eventTypes": ["merger", "branch-purchase-deal", "failure"], "minAssets": 1000, "daysBack": 90}`. Deals where either side has $1B+ in assets.
- **Local branch tracker**: `{"eventTypes": ["branch-opening", "branch-closing"], "states": ["TX", "CO"], "maxItems": 200}`
- **Daily schedule**: `{"mode": "sinceLastRun", "includeBranchEvents": true, "maxItems": 1000, "stateKey": "all-us"}`. Each event is delivered once.

### Input

| Field | Default | Notes |
|---|---|---|
| `mode` | `window` | `window` = stateless lookback. `sinceLastRun` = only events not delivered before (per `stateKey`), for schedules |
| `eventTypes` | all institution-level types | Slugs listed above, or raw FDIC change codes (`223`, `711`). Mirror records (`merger-participant`, `branch-sale-deal`, `branch-sold`) are opt-in because they duplicate the main event from the other side |
| `includeBranchEvents` | `false` | Adds branch openings, closings, relocations, name changes, purchases and merger take-overs (~500-700/month nationwide) |
| `states` | all | 2-letter codes. Matches institution, acquirer or branch state |
| `minAssets` | none | USD millions. The institution OR the acquirer must meet it |
| `daysBack` | `30` | By FDIC process date. An empty window is widened to 60, 120 and then 365 days (`autoExtend`) |
| `includeCreditUnions` | `true` | FDIC structure data also covers credit unions |
| `maxItems` | `30` | Hard cap on delivered events and on spend |

### Event types and FDIC change codes

| eventType | FDIC codes |
|---|---|
| merger | 221 absorption, 222 consolidation, 223 merger, 225 partial P\&A (all unassisted) |
| failure | 211 whole-bank failure, 213 assisted merger, 215, 216 bridge bank, 217, 230 payoff, 235, 260 |
| new-institution | 110 |
| voluntary-closing | 240 |
| corporate-reorganization | 224 affiliate merger, 820 interim (phantom) reorganization |
| name-change / relocation | 510 / 520 (institution level) |
| charter-change | 150, 420 charter agency, 430 class, 440 organization type |
| regulator-change | 310 / 320 / 340 Fed membership, 470 primary regulator |
| insurance-change, trust-powers, conservatorship | 410; 610; 350, 360, 830 |
| branch-purchase-deal (deal level) | 712 |
| branch-opening, branch-closing, branch-relocation, branch-name-change | 711, 721, 520, 510 (branch level) |
| branch-purchased, branch-acquired-in-merger, branch-sold | 712, 713, 722/724 (branch level) |

Codes and descriptions were checked against the live `/banks/history` index (`CHANGECODE` / `CHANGECODE_DESC`).

### How it works

1. Queries `api.fdic.gov/banks/history` by process date and change code (paged, 1,000 per call).
2. Decodes each record. For mergers and failures, FDIC puts the target in `OUT_*`, the buyer in `ACQ_*` and the survivor in `SUR_*`; the Actor maps these to institution and acquirer.
3. Enriches both sides from `/banks/institutions` (RSSD, assets, deposits, holding company, website) in batches of 100, and failures from `/banks/failures` (estimated loss, resolution type, last pre-failure assets and deposits).
4. Applies the state, asset and credit-union filters, then delivers results within your max run charge.

A run summary (window, filters, counts, API calls, why it stopped) is saved to the `OUTPUT` key-value record.

### Notes and limits

- **Process date vs effective date**: FDIC often records a change days or weeks after it takes effect, and sometimes years later for data clean-ups. The window uses process date, so you see each change when it becomes public in FDIC data.
- FDIC refreshes BankFind data about daily. The failed-bank list (`/banks/failures`) is updated less often, so a very recent failure may not have loss estimates yet.
- Credit unions have no FDIC financials, so `minAssets` drops them.
- Branch locations are city/state level only.
- Source: FDIC BankFind Suite API, US government public data. This Actor is not affiliated with or endorsed by the FDIC.

### Pricing

Pay per event: a small fee per run start, plus a fee per delivered event record. See the Pricing tab. The default run costs a few cents.

# Actor input Schema

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

window (default): events FDIC processed in the last N days, no saved state. sinceLastRun: only events not delivered before for this State key; use this for daily schedules.

## `eventTypes` (type: `array`):

Empty = all institution-level events (merger, failure, new-institution, voluntary-closing, corporate-reorganization, name-change, relocation, charter-change, regulator-change, insurance-change, trust-powers, conservatorship, branch-purchase-deal) plus branch events if 'Include branch events' is on. Branch types: branch-opening, branch-closing, branch-relocation, branch-name-change, branch-purchased, branch-acquired-in-merger. Opt-in mirror records: merger-participant, branch-sale-deal, branch-sold. Raw FDIC change codes (e.g. 223, 711) also work. Listing a branch type here includes it even if the checkbox is off.

## `includeBranchEvents` (type: `boolean`):

Adds branch openings, closings, relocations, name changes, purchases and merger take-overs (roughly 500-700 per month nationwide) when Event types is empty. Branch location is given at city/state level.

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

2-letter USPS codes, e.g. TX, CO, NY, PR. An event matches if the institution, the acquirer or the branch is in one of these states. Empty = all US.

## `minAssets` (type: `integer`):

Only events where the institution OR the acquirer has at least this much in total assets (latest FDIC call report), in USD millions. 1000 = $1B. Credit unions and brand-new banks have no FDIC financials and are dropped when this is set. Empty or 0 = no filter.

## `daysBack` (type: `integer`):

Window of days, by the date FDIC processed the change (the date it became public in FDIC data). Effective dates are often earlier. In window mode an empty window is widened to 60, 120 and then 365 days. Also the first-run window in sinceLastRun mode.

## `includeCreditUnions` (type: `boolean`):

FDIC structure data also covers NCUA-insured credit unions (mergers, name changes, branch deals). Turn off for banks and thrifts only.

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

Hard cap on delivered events (also caps your spend). Window mode returns the newest first.

## `autoExtend` (type: `boolean`):

If nothing matches in Days back, retry with 60, 120 and 365 days so you always see the latest matching events. Turn off to get exactly the Days back window.

## `stateKey` (type: `string`):

Name of the saved feed for sinceLastRun mode. Each key keeps its own history, so use one key per schedule or filter set.

## Actor input object example

```json
{
  "mode": "window",
  "eventTypes": [
    "merger",
    "failure",
    "branch-purchase-deal",
    "new-institution"
  ],
  "includeBranchEvents": false,
  "daysBack": 30,
  "includeCreditUnions": true,
  "maxItems": 30,
  "autoExtend": true,
  "stateKey": "default"
}
```

# Actor output Schema

## `events` (type: `string`):

One record per FDIC structure event.

## `summary` (type: `string`):

Window covered, resolved filters, counts, why the run stopped.

# 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 = {
    "eventTypes": [
        "merger",
        "failure",
        "branch-purchase-deal",
        "new-institution"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("moment-data/fdic-bank-structure-changes-feed").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 = { "eventTypes": [
        "merger",
        "failure",
        "branch-purchase-deal",
        "new-institution",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("moment-data/fdic-bank-structure-changes-feed").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 '{
  "eventTypes": [
    "merger",
    "failure",
    "branch-purchase-deal",
    "new-institution"
  ]
}' |
apify call moment-data/fdic-bank-structure-changes-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,moment-data/fdic-bank-structure-changes-feed"
        }
    }
}
```

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/lnAiyR5bswjoyX9bk/builds/lvYw8oYlxARhnqomt/openapi.json
