# FDIC Deposit Market Share & HHI Rollup — SOD Branch Data (`malonestar/fdic-sod-deposit-market-share-rollup`) Actor

County, MSA & state deposit market share from FDIC Summary of Deposits branch data: per-bank share + rank, HHI concentration (DOJ thresholds), top-3 share, YoY branch openings/closures. Keyless official FDIC API. For bank M\&A, deposit brokers, fintech partnerships, site selection.

- **URL**: https://apify.com/malonestar/fdic-sod-deposit-market-share-rollup.md
- **Developed by:** [Kyle Maloney](https://apify.com/malonestar) (community)
- **Categories:** Developer tools, Agents, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.60 / 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/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## FDIC Deposit Market Share & HHI Rollup — SOD Branch Data

Turn the official **FDIC Summary of Deposits (SOD)** branch-level survey into an instant
**deposit market-share, concentration (HHI), and branch-network-change report** for any US
county, metro area (MSA), or state. One run answers: *who holds the deposits in this market,
how concentrated is it under DOJ thresholds, and who is opening or closing branches?*

- **Source:** FDIC BankFind Suite API, SOD endpoint (`api.fdic.gov/banks/sod`) — official, keyless, no scraping.
- **Coverage:** every FDIC-insured branch in the US (~77,000 branches; annual survey, deposits as of June 30).
- **The analytics layer (what raw SOD doesn't give you):** per-bank market share and rank per area,
  area HHI with DOJ concentration flags, top-3 share, market-gap screening, and year-over-year
  branch openings/closures, deposit growth, and share shift.

### Who it's for

- **Bank M&A / corporate development teams** — pre-screen deal markets: pro-forma HHI context, overlap, and the DOJ/Fed concentration picture per county before an application.
- **Deposit brokers & treasury/funding desks** — find where deposits pool and which institutions dominate or are gaining share.
- **Fintech & banking-as-a-service partnership teams** — spot concentrated markets (`market_gap=true`) where the top 3 banks hold most deposits and challengers have room.
- **CRE site selection & retail-network planners** — branch density, openings, and closures by county/MSA.
- **Analysts, journalists, researchers** — clean, ranked deposit-share tables without wrestling the raw SOD download.

### Example input

```json
{
  "state": "CO",
  "year": 2024,
  "compareYear": 2023,
  "rollupLevel": "county",
  "mode": "banks",
  "maxResults": 500
}
````

- `mode: "banks"` (default) → one row per **bank × area** with share, rank, and the area's stats.
- `mode: "areas"` → one compact summary row per area (a concentration screen).
- Omit `state` to roll up the **full national file** (slower; ~77k branches fetched).
- `compareYear` triggers a second fetch and fills all `yoy_*` fields.

### Output fields (one row per bank×area, or per area)

`year`, `rollup_level`, `area_name`, `area_code`, `state`, `bank_name`, `cert` (FDIC certificate —
join key to FDIC Financials/BankFind), `branch_count`, `total_deposits_usd`, `market_share_pct`,
`rank`, `area_total_deposits_usd`, `area_bank_count`, `area_branch_count`, `area_hhi`,
`area_top3_share_pct`, `concentration_flag`, `market_gap`, `compare_year`,
`yoy_branches_opened`, `yoy_branches_closed`, `yoy_deposit_growth_pct`, `yoy_share_shift_pts`,
`source_url`.

Notes:

- SOD reports deposits in **thousands of dollars** (`DEPSUMBR`); this actor converts to plain USD.
- **HHI** is the Herfindahl–Hirschman Index: the sum of squared market shares (0–10,000).
  `concentration_flag` follows the **DOJ/FTC Horizontal Merger Guidelines (2010)** screening
  thresholds: **> 2,500 = highly concentrated, 1,500–2,500 = moderately concentrated** — the
  bands long used in bank-merger competitive review (the DOJ 2023 banking addendum and the
  Fed/DOJ 1800/200 bank screen are stricter; use `area_hhi` directly for those).
- YoY branch "opened/closed" counts are net changes in branch counts per bank per area
  (area-level closures include banks that exited the market entirely).

### Use as an MCP tool

This actor is callable by AI agents (Claude, Cursor, etc.) through [mcp.apify.com](https://mcp.apify.com).
Field-level input and output descriptions make it a clean, chainable tool: e.g. *"get the deposit
market share and HHI for every county in Colorado, then compare 2023 vs 2024 branch closures."*

### FAQ

**What is the FDIC Summary of Deposits?** An annual FDIC survey (as of June 30) of deposits for
every branch of every FDIC-insured institution — the standard dataset for deposit market-share
and bank-merger competitive analysis.

**How is deposit market share HHI calculated for bank mergers?** Sum the squared deposit shares of
every bank in the geographic market (county/MSA here). This actor computes it per area and flags
DOJ concentration bands automatically.

**Which banks are closing branches in my county?** Set `compareYear` and read
`yoy_branches_closed` per bank per county.

**Do I need an API key?** No — the FDIC BankFind Suite API is public and keyless.

**How current is the data?** SOD is annual; the 2024 survey (June 30, 2024) is the latest fully
published as of mid-2026. Set `year` accordingly.

**Is this the same as the FDIC market-share (Deposit Market Share Report) tool?** Same underlying
data, but delivered as a structured dataset with HHI, ranks, YoY deltas, and market-gap flags —
ready for pipelines, spreadsheets, and AI agents.

### Related actor

Pair with **[FDIC + NCUA Bank & Credit Union Health Rollup](https://apify.com/malonestar/fdic-ncua-health-rollup)**
(same keyless FDIC API family) to overlay institution financial-health metrics on the deposit
share leaders you find here — `cert` is the join key.

### Pricing

Pay-per-event: you pay only per result row. Bounded by `maxResults`, so a county-level state
screen costs cents.

# Actor input Schema

## `state` (type: `string`):

Two-letter US state/territory code of the BRANCH location (SOD field STALPBR), e.g. CO, TX, NY. Leave empty to roll up the full national SOD file (~77k branches — slower). Prefilled with CO.

## `year` (type: `integer`):

FDIC Summary of Deposits survey year (deposits as of June 30 of that year). SOD is annual; 2024 is the latest fully published survey as of mid-2026.

## `compareYear` (type: `integer`):

Optional earlier survey year to compare against (e.g. 2023). When set, each row gets year-over-year deltas: branches opened/closed, deposit growth %, and market-share shift in points. Leave empty to skip the second fetch.

## `rollupLevel` (type: `string`):

Geographic grouping for market-share math: 'county' (branch county), 'msa' (metropolitan statistical area; non-MSA branches grouped per state), or 'state'.

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

'banks' (default) emits one row per bank per area with that bank's share, rank, and the area's HHI. 'areas' emits one summary row per area (bank fields null) — a compact concentration screen.

## `maxResults` (type: `integer`):

Maximum number of dataset rows to emit (caps your cost). Areas are processed largest-deposits-first, so the cap keeps the biggest markets.

## `marketGapThresholdPct` (type: `integer`):

An area is flagged market\_gap=true when its top-3 banks hold at least this percentage of deposits — a screen for concentrated markets open to challenger/fintech entry. Default 75.

## Actor input object example

```json
{
  "state": "CO",
  "year": 2024,
  "rollupLevel": "county",
  "mode": "banks",
  "maxResults": 500,
  "marketGapThresholdPct": 75
}
```

# Actor output Schema

## `results` (type: `string`):

The default dataset (overview view).

# 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 = {
    "state": "CO",
    "year": 2024,
    "rollupLevel": "county",
    "mode": "banks",
    "maxResults": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("malonestar/fdic-sod-deposit-market-share-rollup").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 = {
    "state": "CO",
    "year": 2024,
    "rollupLevel": "county",
    "mode": "banks",
    "maxResults": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("malonestar/fdic-sod-deposit-market-share-rollup").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "state": "CO",
  "year": 2024,
  "rollupLevel": "county",
  "mode": "banks",
  "maxResults": 500
}' |
apify call malonestar/fdic-sod-deposit-market-share-rollup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=malonestar/fdic-sod-deposit-market-share-rollup",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FDIC Deposit Market Share & HHI Rollup — SOD Branch Data",
        "description": "County, MSA & state deposit market share from FDIC Summary of Deposits branch data: per-bank share + rank, HHI concentration (DOJ thresholds), top-3 share, YoY branch openings/closures. Keyless official FDIC API. For bank M&A, deposit brokers, fintech partnerships, site selection.",
        "version": "1.0",
        "x-build-id": "ve4mPbUVHJ5Uj0g8K"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/malonestar~fdic-sod-deposit-market-share-rollup/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-malonestar-fdic-sod-deposit-market-share-rollup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/malonestar~fdic-sod-deposit-market-share-rollup/runs": {
            "post": {
                "operationId": "runs-sync-malonestar-fdic-sod-deposit-market-share-rollup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/malonestar~fdic-sod-deposit-market-share-rollup/run-sync": {
            "post": {
                "operationId": "run-sync-malonestar-fdic-sod-deposit-market-share-rollup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "state": {
                        "title": "State (2-letter, branch location)",
                        "type": "string",
                        "description": "Two-letter US state/territory code of the BRANCH location (SOD field STALPBR), e.g. CO, TX, NY. Leave empty to roll up the full national SOD file (~77k branches — slower). Prefilled with CO."
                    },
                    "year": {
                        "title": "SOD survey year",
                        "minimum": 1994,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "FDIC Summary of Deposits survey year (deposits as of June 30 of that year). SOD is annual; 2024 is the latest fully published survey as of mid-2026.",
                        "default": 2024
                    },
                    "compareYear": {
                        "title": "Compare year (optional, enables YoY deltas)",
                        "minimum": 1994,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Optional earlier survey year to compare against (e.g. 2023). When set, each row gets year-over-year deltas: branches opened/closed, deposit growth %, and market-share shift in points. Leave empty to skip the second fetch."
                    },
                    "rollupLevel": {
                        "title": "Rollup level",
                        "enum": [
                            "county",
                            "msa",
                            "state"
                        ],
                        "type": "string",
                        "description": "Geographic grouping for market-share math: 'county' (branch county), 'msa' (metropolitan statistical area; non-MSA branches grouped per state), or 'state'.",
                        "default": "county"
                    },
                    "mode": {
                        "title": "Output mode",
                        "enum": [
                            "banks",
                            "areas"
                        ],
                        "type": "string",
                        "description": "'banks' (default) emits one row per bank per area with that bank's share, rank, and the area's HHI. 'areas' emits one summary row per area (bank fields null) — a compact concentration screen.",
                        "default": "banks"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of dataset rows to emit (caps your cost). Areas are processed largest-deposits-first, so the cap keeps the biggest markets.",
                        "default": 500
                    },
                    "marketGapThresholdPct": {
                        "title": "Market-gap top-3 share threshold (%)",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "An area is flagged market_gap=true when its top-3 banks hold at least this percentage of deposits — a screen for concentrated markets open to challenger/fintech entry. Default 75.",
                        "default": 75
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
