# Bank M\&A, Charter & Branch Monitor (Unofficial) (`saiberops/fdic-bank-change-monitor`) Actor

Feed of U.S. bank structure changes from FDIC data: mergers and acquisitions, new charters, failures, name changes, branch openings, closings, sales and relocations. FDIC cert, RSSD, charter class, total assets. New-since-last-run mode; no API key.

- **URL**: https://apify.com/saiberops/fdic-bank-change-monitor.md
- **Developed by:** [Saiber Operations](https://apify.com/saiberops) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 bank event returneds

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

## Bank M\&A, Charter & Branch Monitor (Unofficial): FDIC Structure-Change Feed

Know the week a U.S. bank merges, opens, closes or changes. This Actor returns **bank structure changes** recorded by the FDIC, one row per event: **mergers and acquisitions**, **new charters**, **bank failures**, **name changes**, and **branch openings, closings, sales and relocations**. Each row names the institution with its **FDIC certificate number**, **Federal Reserve RSSD ID**, **charter class** and **latest total assets**, plus the acquirer and target for deals. Run it on a schedule with **New since last run** and each run returns only events you haven't seen.

**Built for:**

- **Bank-technology vendors** (core processors, digital banking, compliance and fintech partnership teams): a merger means a core conversion; a new charter needs every system; a name change means rebranding work.
- **M\&A advisors and bank-focused investors** tracking consolidation by state and size.
- **Branch real-estate brokers and facility vendors** following openings, closings and relocations.
- **AI agents and data teams.** Clean JSON with no API key and no login.

### Sample output

```json
{
  "eventId": "h-880003_223_500300_2026-10-01_90003_",
  "eventType": "merger",
  "eventLabel": "Merger or acquisition",
  "changeCode": 223,
  "changeDescription": "Merger - Without Assistance",
  "effectiveDate": "2026-10-01",
  "processedDate": "2026-10-03",
  "institutionName": "Old River Bank",
  "fdicCert": 90003,
  "rssdId": "1000003",
  "charterClass": "SM",
  "charterClassDescription": "State-chartered bank, Federal Reserve member",
  "institutionState": "SC",
  "totalAssetsUsd": 410000000,
  "assetsReportDate": "2026-03-31",
  "city": "Greenville",
  "state": "SC",
  "acquirerName": "Harbor National Bank",
  "acquirerCert": 90004,
  "acquirerRssdId": "1000004",
  "acquirerTotalAssetsUsd": 5600000000,
  "targetName": "Old River Bank",
  "targetCert": 90003,
  "source": "FDIC BankFind Suite (unofficial)"
}
```

(Illustrative example with made-up banks; field list abbreviated.) Every row also carries `sourceUrl`, the bank's FDIC BankFind page. Branch events add the branch name, number, office type, and the branch's city, state and ZIP; relocations add where the office moved from; failures add the resolution type, assets and deposits at failure, the estimated loss and the winning bidder.

Results appear in four tabs: **Bank events**, **Mergers & failures**, **Branch changes** and **Institution details**, newest first.

### Inputs

- **What to fetch:** the last N days (default 90), **New since last run** for a schedule, or a fixed date range.
- **Event types:** new charters, mergers and acquisitions, failures, name changes, branch openings, branch closings, office relocations and branch sales or purchases (all on by default), plus charter/class/regulator changes and other structure changes if you want them.
- **Date used for the window:** when the change took effect (default) or when FDIC recorded it.
- **States:** events in, or involving a bank, acquirer or target based in, these states.
- **FDIC certificate numbers:** a watchlist of up to 200 banks (as institution, acquirer or target). Lists over 40 are matched after download, so a wide window may need a higher "Max pages to scan".
- **Minimum total assets ($ millions):** skip small banks.
- **Max events**, a **cursor name** for separate scheduled feeds, **max pages to scan**, and an optional **FDIC API key** (not needed today).

**Quick start:** keep the defaults (all main event types in the last 90 days, 50 events) or add the states you cover, then click **Start**. For a recurring feed, choose **New since last run**, keep **Days to look back** at 30 or more, and schedule the Actor daily or weekly.

### Pricing

Pay per event: you pay only for events returned.

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Bank event returned | $0.0048 | $0.004 | $0.0036 | $0.0032 |

That's $3.20–$4.80 per 1,000 events, plus Apify's standard Actor start fee. Records removed by your filters, events already returned (in "New since last run"), duplicate merger records, the second record of a branch sale and runs that fail are **not charged**. The RSSD, charter-class and asset lookups are free. Set **Max cost per run** to cap spending; the Actor stops cleanly at the cap.

### Integrations and API

Schedule it in Apify and send new events to Google Sheets, Slack, HubSpot, Salesforce, Make, Zapier or n8n through Apify's integrations, or call it from the Apify API. AI agents can use it through Apify's MCP server.

### Limits

- **Recording lag.** FDIC records some changes days or weeks after they take effect. Use **New since last run** with a 30-day or longer look-back to catch late records once, or set **Date used for the window** to the processed date.
- **Total assets are the latest reported figure** for the institution (FDIC reports them quarterly, in thousands of dollars; this Actor converts to dollars). For a bank that merged away or failed, it is the last figure FDIC holds. Brand-new charters usually have none yet.
- **Event types come from FDIC's change codes and descriptions.** FDIC doesn't publish a code table, so the Actor maps the codes it knows and reads FDIC's description for the rest; every row keeps FDIC's original code and description. Mirror records FDIC books on the acquirer's side of a merger are skipped so each merger appears once.
- A run reads at most **Max pages to scan** pages of 1,000 FDIC records. Branch records are the most numerous; if the status message says the run stopped at the page limit, narrow the window, states or event types.
- Branch rows give city, state and ZIP only, not street addresses.
- FDIC doesn't currently require an API key. If that changes, add a free FDIC key under **FDIC API key**.

### FAQ

**Which row is "the institution" for a merger?** FDIC books the merger on the bank that merged away, so `institutionName` is usually the target; `acquirerName` and `targetName` spell out both sides, each with its FDIC cert, RSSD ID and total assets.

**Is a branch sale one row or two?** One. FDIC can book a sale on both banks ("branch purchased" on the buyer, "branch sold" on the seller) under the same transaction; the Actor returns it once, with the buyer in `acquirerName` and the seller in `targetName`, and charges once. If only one side has been recorded so far, the other side is empty and the later record is not returned again in **New since last run**.

**What is an RSSD ID?** The Federal Reserve's ID for every bank and holding company. Use it with the FDIC cert to match banks to your CRM or to Federal Reserve data.

**Does "New since last run" miss anything?** It remembers every event it returned under the cursor name for the length of your look-back window, so late-recorded events still come through once.

**Are people's names included?** No. The Actor outputs institution facts only: names, IDs, charter, assets and city, state and ZIP. It never outputs officer or director names, street addresses, phone numbers or email addresses.

### Data source and responsible use

Data comes from the FDIC BankFind Suite public API (institution history, institutions and failures), which needs no key. It is U.S. government data and in the public domain. The Actor identifies itself with a company name and contact email, keeps to two requests per second, and stops if the API signals throttling or refuses access. Output is limited to business-entity facts. This is an **unofficial** tool, **not affiliated with** or endorsed by the Federal Deposit Insurance Corporation (FDIC) or any other agency. Records are maintained by the FDIC and can contain errors or arrive late; check the FDIC's own BankFind page linked in each row before acting on an event.

### Support

Found a bug or need a field? Open an issue on this Actor's **Issues** tab and we'll respond there.

*Maintained by Saiber Operations LLC.*

# Changelog

This Actor's version history is a separate document: https://apify.com/saiberops/fdic-bank-change-monitor/changelog.md

# Actor input Schema

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

latest: events from the last N days. newSinceLastRun: only events your previous runs didn't return (use it on a schedule). dateRange: a fixed start and end date.

## `lookbackDays` (type: `integer`):

For 'latest' and 'newSinceLastRun'. Calendar days including today, up to 365. FDIC records some changes days or weeks after they take effect, so keep 30 or more with 'newSinceLastRun'.

## `startDate` (type: `string`):

First date to include, YYYY-MM-DD.

## `endDate` (type: `string`):

Last date to include, YYYY-MM-DD. Defaults to today.

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

Which structure changes to return. 'Other' covers branches moved in a merger and minor attribute changes such as trust powers.

## `dateBasis` (type: `string`):

effective: when the change took effect (usual). processed: when FDIC recorded it, which catches late filings first.

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

Two-letter codes, for example GA, FL. An event matches if it happens in, or involves a bank, acquirer or target based in, one of these states. Leave empty for all.

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

Only events involving these banks, as institution, acquirer or target. Numbers only, for example 628. Up to 200; lists over 40 are matched after download, so they may need more pages.

## `minAssetsMillions` (type: `integer`):

Skip events at banks below this size, using the bank's latest reported total assets (or assets at failure). Events at banks with no reported assets, such as brand-new charters, are skipped when this is set.

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

The run stops after this many events. Each returned event is one charged event.

## `cursorName` (type: `string`):

Keeps a separate 'new since last run' position per name, so different scheduled feeds (for example Southeast branches vs. national M\&A) don't share one. Letters, numbers and dashes.

## `maxPagesToScan` (type: `integer`):

Upper limit on 1,000-record FDIC pages read per run. Raise it for long date ranges with narrow filters.

## `apiKey` (type: `string`):

Not needed today: FDIC does not require a key. If FDIC starts requiring one, paste your free FDIC API key here.

## Actor input object example

```json
{
  "mode": "latest",
  "lookbackDays": 90,
  "eventTypes": [
    "new-charter",
    "merger",
    "failure",
    "name-change",
    "branch-opening",
    "branch-closing",
    "relocation",
    "branch-sale"
  ],
  "dateBasis": "effective",
  "states": [],
  "certs": [],
  "maxItems": 50,
  "cursorName": "",
  "maxPagesToScan": 20
}
```

# Actor output Schema

## `results` (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 = {
    "lookbackDays": 90,
    "states": [],
    "certs": [],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("saiberops/fdic-bank-change-monitor").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 = {
    "lookbackDays": 90,
    "states": [],
    "certs": [],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("saiberops/fdic-bank-change-monitor").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 '{
  "lookbackDays": 90,
  "states": [],
  "certs": [],
  "maxItems": 50
}' |
apify call saiberops/fdic-bank-change-monitor --silent --output-dataset

```

## MCP server setup

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

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/TgP3xMh76rFbladf5/builds/AXp1bnJQVx5CjZbFn/openapi.json
