# FDIC & NCUA Peer Financial Trend Report (`taroyamada/fdic-ncua-peer-financial-trend-report`) Actor

Compare bounded same-source bank or credit-union peer watches across explicit quarterly metrics and periods. Receive source-linked changes, descriptive peer percentiles, reports, and exports from the keyless official FDIC BankFind API and NCUA quarterly call-report ZIPs. No financial health score, f

- **URL**: https://apify.com/taroyamada/fdic-ncua-peer-financial-trend-report.md
- **Developed by:** [naoki anzai](https://apify.com/taroyamada) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 institution financial rows

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/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.

- **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

## FDIC & NCUA Peer Financial Trend Report

Bank and credit-union research teams provide bounded same-source FDIC certificate or NCUA charter-number watches, explicit metrics, and quarter-end periods.\
The actor reads the official keyless FDIC BankFind endpoints or NCUA quarterly call-report ZIPs.\
It returns descriptive period changes, watchlist peer percentiles, source-linked alerts, reports, and JSON evidence exports.

### Store Quickstart

```json
{
  "watches": [
    {
      "id": "regional-peer-watch",
      "source": "fdic",
      "institutions": [
        {
          "cert": "14"
        },
        {
          "cert": "35"
        },
        {
          "cert": "39"
        }
      ],
      "metrics": [
        "totalAssets",
        "totalDeposits"
      ],
      "periods": [
        "2024-12-31",
        "2025-03-31",
        "2025-06-30",
        "2025-09-30",
        "2025-12-31"
      ]
    }
  ],
  "monitorKey": "regional-peer-watch",
  "initialRunMode": "baseline_only",
  "generateReport": true,
  "emitRawRows": false,
  "emitExport": false,
  "dryRun": false
}
```

1. Run `store-input.example.json` once with `initialRunMode: "baseline_only"`. The first snapshot is stored with **zero rows and zero charge**.
2. Run the same input again after an official quarterly update. Only new or changed observations produce billable rows.
3. For an intentional initial backfill, use `store-input.charged-canary.json`. It emits alerts, one report, and one export, subject to `maxChargeUsd`.

The actor does not require an API key, login, or user credential. Keep each watch on one source so units and peer percentiles remain comparable.

### Input Examples

#### 1. Baseline then recurring trend check

```json
{
  "watches": [{
    "id": "regional-peer-watch",
    "source": "fdic",
    "institutions": [{ "cert": "14" }, { "cert": "35" }, { "cert": "39" }],
    "metrics": ["totalAssets", "totalDeposits"],
    "periods": ["2024-12-31", "2025-03-31", "2025-06-30", "2025-09-30", "2025-12-31"]
  }],
  "monitorKey": "regional-peer-watch",
  "initialRunMode": "baseline_only",
  "generateReport": true,
  "emitRawRows": false,
  "emitExport": false,
  "dryRun": false
}
```

#### 2. NCUA credit-union report and export backfill

```json
{
  "watches": [{
    "id": "credit-union-peers",
    "source": "ncua",
    "institutions": [
      { "charterNumber": "1", "label": "Peer A" },
      { "charterNumber": "6", "label": "Peer B" }
    ],
    "metrics": ["totalAssets", "totalDeposits", "netIncome", "totalEquity"],
    "periods": ["2025-12-31", "2026-03-31"]
  }],
  "monitorKey": "ncua-2026-q1-peer-report",
  "initialRunMode": "emit_backfill",
  "generateReport": true,
  "emitRawRows": false,
  "emitExport": true,
  "maxChargeUsd": 50,
  "dryRun": false
}
```

#### 3. Deterministic local check

```json
{
  "watches": [{
    "id": "local-canary",
    "source": "fdic",
    "institutions": [{ "cert": "14" }, { "cert": "35" }],
    "metrics": ["totalAssets", "totalEquity"],
    "periods": ["2024-12-31", "2025-12-31"]
  }],
  "dryRun": true
}
```

Dry run returns representative rows for all four configured event types without contacting FDIC or NCUA, reading state, or charging.

### Output

Rows are source-linked and include the FDIC certificate or NCUA charter number, metric ID and official field, report period, value and source-specific unit, period change, and source URL. The report row groups the latest selected period by watch and metric and includes a descriptive mid-rank percentile within that same-source watchlist. A percentile is a relative distribution measure only; it is not a score about an institution.

The default value path is:

- `institution-peer-change-alert` for new or changed observations
- `financial-peer-trend-report` for one aggregate descriptive report
- optional `institution-financial-row` for raw-ish compact observations
- optional `financial-peer-export` for a compact JSON evidence package

### Pricing

| Event | Price |
| --- | ---: |
| `institution-financial-row` | `$0.01` |
| `institution-peer-change-alert` | `$0.50` |
| `financial-peer-trend-report` | `$18.00` |
| `financial-peer-export` | `$10.00` |

There is no start charge. `maxChargeUsd` is checked before delivery. First `baseline_only` runs and unchanged runs emit 0 rows and 0 charge. A failed source fetch, state save, delivery receipt, or unknown billing event fails closed.

### Official Sources

- FDIC BankFind documentation: https://api.fdic.gov/banks/docs
- FDIC financials endpoint: https://api.fdic.gov/banks/financials
- FDIC institutions endpoint: https://api.fdic.gov/banks/institutions
- NCUA quarterly data page: https://ncua.gov/analysis/credit-union-corporate-call-report-data/quarterly-data

NCUA support uses only the official quarterly `call-report-data-YYYY-MM.zip` resource for each explicit quarter. Every archive must be on `ncua.gov`, have a valid ZIP signature, stay within the response limit, and contain `FOICU.txt`, `FS220.txt`, and `FS220A.txt`. The actor does not use CUOnline or scrape the custom-query UI.

### Compliance Guardrails

- Official public FDIC and NCUA data only; no API key, login, private data, or bypass behavior.
- Values are descriptive public observations in the stated period and unit.
- The actor never produces a financial health score, risk score, credit score, failure prediction, investment advice, lending advice, underwriting decision, guarantee, or agency endorsement.
- Do not infer solvency, safety, future performance, causality, or approval from a percentile or change.
- Verify the linked official source, report period, metric field, and revisions before using output in a business process.

### Bounded Operation

Each watch is limited to 20 institutions, 8 metrics, and 8 explicit quarter-end periods. A run accepts at most 10 watches and 50 source requests. Response size, timeout, pacing, and total charge are bounded. State is committed only after all billable delivery receipts are positive.

### See Also

Use this actor for descriptive same-source FDIC bank or NCUA credit-union trends. It is not a replacement for official reports, supervisory processes, filings, or professional financial advice.

# Actor input Schema

## `watches` (type: `array`):

Each watch is a bounded peer group from one source. Use at least two FDIC certificate numbers or NCUA charter numbers so peer percentiles are meaningful.

## `monitorKey` (type: `string`):

Stable isolated state namespace for recurring checks. Use a new key for a separate portfolio.

## `initialRunMode` (type: `string`):

baseline\_only saves the first snapshot with zero rows; emit\_backfill emits the current bounded observations for a deliberate paid backfill.

## `generateReport` (type: `boolean`):

Emit one descriptive peer trend report when selected observations are new or changed.

## `emitRawRows` (type: `boolean`):

Add one low-priced descriptive institution metric row per selected observation. Off by default.

## `emitExport` (type: `boolean`):

Emit one compact JSON evidence export when selected observations are new or changed.

## `includeInstitutionDirectory` (type: `boolean`):

For FDIC, fetch the bounded institutions endpoint. NCUA labels come from FOICU.txt in the selected official ZIP.

## `emitUnchanged` (type: `boolean`):

Accepted for compatibility. Unchanged checks always remain zero rows and zero charge.

## `maxChargeUsd` (type: `number`):

Fail closed before any push if the planned event total exceeds this cap.

## `maxRequests` (type: `integer`):

Hard upper bound for this run, including directory and financial requests.

## `requestIntervalMs` (type: `integer`):

Minimum interval between official source requests. Keep at least 100ms.

## `dryRun` (type: `boolean`):

Return deterministic representative rows without contacting FDIC or NCUA, reading or saving state, or charging events.

## Actor input object example

```json
{
  "watches": [
    {
      "id": "sample-peer-group",
      "source": "fdic",
      "institutions": [
        {
          "cert": "14",
          "label": "Example institution A"
        },
        {
          "cert": "35",
          "label": "Example institution B"
        }
      ],
      "metrics": [
        "totalAssets",
        "totalDeposits",
        "netIncome"
      ],
      "periods": [
        "2024-12-31",
        "2025-12-31"
      ]
    }
  ],
  "monitorKey": "fdic-ncua-peer-financial-trend-watch",
  "initialRunMode": "baseline_only",
  "generateReport": true,
  "emitRawRows": false,
  "emitExport": false,
  "includeInstitutionDirectory": true,
  "emitUnchanged": false,
  "maxChargeUsd": 50,
  "maxRequests": 20,
  "requestIntervalMs": 250,
  "dryRun": false
}
```

# 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 = {
    "watches": [
        {
            "id": "sample-peer-group",
            "source": "fdic",
            "institutions": [
                {
                    "cert": "14",
                    "label": "Example institution A"
                },
                {
                    "cert": "35",
                    "label": "Example institution B"
                }
            ],
            "metrics": [
                "totalAssets",
                "totalDeposits",
                "netIncome"
            ],
            "periods": [
                "2024-12-31",
                "2025-12-31"
            ]
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/fdic-ncua-peer-financial-trend-report").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 = { "watches": [{
            "id": "sample-peer-group",
            "source": "fdic",
            "institutions": [
                {
                    "cert": "14",
                    "label": "Example institution A",
                },
                {
                    "cert": "35",
                    "label": "Example institution B",
                },
            ],
            "metrics": [
                "totalAssets",
                "totalDeposits",
                "netIncome",
            ],
            "periods": [
                "2024-12-31",
                "2025-12-31",
            ],
        }] }

# Run the Actor and wait for it to finish
run = client.actor("taroyamada/fdic-ncua-peer-financial-trend-report").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 '{
  "watches": [
    {
      "id": "sample-peer-group",
      "source": "fdic",
      "institutions": [
        {
          "cert": "14",
          "label": "Example institution A"
        },
        {
          "cert": "35",
          "label": "Example institution B"
        }
      ],
      "metrics": [
        "totalAssets",
        "totalDeposits",
        "netIncome"
      ],
      "periods": [
        "2024-12-31",
        "2025-12-31"
      ]
    }
  ]
}' |
apify call taroyamada/fdic-ncua-peer-financial-trend-report --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=taroyamada/fdic-ncua-peer-financial-trend-report",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/hSNqpfLfzBvd4AVs4/builds/CD9v0SrV74PiWGzX8/openapi.json
