# FDIC Quarterly Bank Financials Data Monitor (`ledgerstar/bank-financials`) Actor

Check quarterly FDIC bank financials by report date or certificate. Review assets, deposits, equity, net income, ratios, units, and source provenance.

- **URL**: https://apify.com/ledgerstar/bank-financials.md
- **Developed by:** [Ledger Star](https://apify.com/ledgerstar) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 fdic results

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 Quarterly Bank Financials

![bank-financials by Ledgerstar](https://raw.githubusercontent.com/ledgerstar/assets/main/bank-financials/cover-v1.png)

Give bank-data analysts a weekly check for newly published quarterly statements, with source-reported FDIC figures, explicit report dates, units, and provenance. Weekly checks do not imply weekly financial statements.

### What you get

- Institution financial rows identified by FDIC certificate and exact calendar quarter.
- Assets, deposits, equity, net income, and published return ratios in clearly labeled units.
- Bounded quarter snapshots or retained content-version monitoring with row provenance and scan status.

### What data you get

One successful output row represents one institution for one report quarter. FDIC amounts are expressed in thousands of US dollars by the API; ratio fields are percentages. Missing or nonnumeric measures stay null and are never converted to zero. Invalid source rows create uncharged diagnostics without raw source payloads.

| Field | What it means |
|---|---|
| `bankCertificate` | FDIC certificate number identifying the institution. |
| `businessName` | Institution name reported by FDIC. |
| `reportDate` | Calendar quarter-end date in `YYYY-MM-DD` form. |
| `assetsThousandsUsd` | Total assets, thousands of US dollars. |
| `depositsThousandsUsd` | Deposits, thousands of US dollars. |
| `equityThousandsUsd` | Equity, thousands of US dollars. |
| `netIncomeThousandsUsd` | FDIC `NETINC`, thousands of US dollars; may be cumulative year-to-date, not a single-quarter amount. |
| `returnOnAssetsPercent` | FDIC return-on-assets percentage. |
| `returnOnEquityPercent` | FDIC return-on-equity percentage. |
| `status` | `ok` for a valid row or `source_error` for an uncharged diagnostic. |
| `error` | Plain diagnostic explanation; null for valid rows. |
| `source` | Source label identifying FDIC financials. |
| `sourceUrl` | Official API endpoint used to retrieve the row. |
| `retrievedAt` | UTC time the Actor retrieved and handled the row. |
| `scrapedAt` | UTC time the run began. |
| `sourceUpdatedAt` | Null; this endpoint has no verified row-level revision timestamp. |
| `indexUpdatedAt` | Source index creation time, not a financial statement revision date. |
| `freshnessDays` | Null because no meaningful row-level update timestamp is available. |
| `recordVersion` | Hash of normalized business values, excluding retrieval and index timestamps. |
| `dedupeId` | Certificate, report quarter, and content version for retained monitoring. |

### Quick start

1. Open the Actor in Apify Console and use `latest`, or select a calendar quarter end such as `2026-06-30`.
2. Optionally enter FDIC certificate strings to limit institutions; leave the list empty for the selected report quarter across institutions.
3. Start the Actor, confirm the report quarter and scan completion, then export JSON, CSV, or Excel.

A measured Apify run on September 29, 2026 resolved `latest` to the June 30, 2026 report quarter. It used 20 source rows in total: one metadata lookup plus 19 financial records, then stopped at the scan cap (`complete: false`). It saved 19 records and recorded exactly 19 result events in 10.776 seconds. The first saved record appears below. This capped output is not a complete quarter census. At the listed $0.005 per result, those 19 saved rows cost $0.095 for a paying customer; future runs depend on the records actually delivered.

### Who uses it

- **Banking analysts** assemble source-linked quarterly balance-sheet reference data.
- **Risk and compliance teams** compare published institution figures while verifying the underlying FDIC filing.
- **Data engineers** load stable quarter keys and null-safe measures into a scheduled warehouse process.

### Input

| Input | Purpose |
|---|---|
| `reportDate` | `latest` (default) or an actual quarter end in `YYYY-MM-DD` form. |
| `certificates` | Optional numeric FDIC certificate strings. |
| `newSince` | `off` repeats quarter snapshots; `lastRun` suppresses retained identical versions. |
| `maxItems` | Successfully delivered result cap, 1 to 10,000; default 20. |

#### Tips for good input

- Good: `"reportDate": "2026-06-30"`. Bad: `"reportDate": "2026-06-15"`; only quarter ends are supported.
- Good: `"certificates": ["3511"]`. Bad: a bank name; use the official numeric identifier.
- Good: `"reportDate": "latest"` to read the newest available quarter. Bad: assume a weekly schedule creates weekly financial statements.

<details><summary>Advanced options</summary>

`maxRowsScanned` caps source records examined from 1 to 10,000 (default 100). When `reportDate` is `latest`, the one-row latest-quarter lookup also consumes this budget, so the cap must be at least two and the subsequent source page is reduced accordingly. `maxPages` ranges from 1 to 500 (default 5); each source page requests at most 20 rows. Result, page, and scan caps are independent. Filters are fixed and allowlisted; arbitrary URLs and raw source expressions are not accepted. State filtering is not supported for this Actor.

</details>

### Sample output

![Quarterly financial sample table](https://raw.githubusercontent.com/ledgerstar/assets/main/bank-financials/table.png)

The JSON row below is the first saved result from Apify run `ehc2febYd4WEy5aq0`. Its 19 output rows do not represent all institutions for the quarter because the run stopped at its scan cap.

![Quarterly financial sample chart](https://raw.githubusercontent.com/ledgerstar/assets/main/bank-financials/chart.png)

The chart compares assets, deposits, and equity for five banks selected from the 19 records in the bounded Apify run completed September 29, 2026. It omits the sample's largest asset record so the other values share a readable scale. Values are in thousands of US dollars; this subset is not a complete quarter distribution.

<details><summary>Full JSON example</summary>

```json
{
  "bankCertificate": "14",
  "businessName": "STATE STREET BANK&TRUST CO",
  "reportDate": "2026-06-30",
  "assetsThousandsUsd": 412620000,
  "depositsThousandsUsd": 326247000,
  "equityThousandsUsd": 29172000,
  "netIncomeThousandsUsd": 1875000,
  "returnOnAssetsPercent": 0.9699555199953096,
  "returnOnEquityPercent": 12.96,
  "status": "ok",
  "error": null,
  "source": "FDIC financials",
  "sourceUrl": "https://api.fdic.gov/banks/financials",
  "retrievedAt": "2026-09-29T19:30:22.787Z",
  "scrapedAt": "2026-09-29T19:30:20.680Z",
  "sourceUpdatedAt": null,
  "indexUpdatedAt": "2026-08-19T18:58:33Z",
  "freshnessDays": null,
  "recordVersion": "513b65919148a2492b6a6416b436d7007b7da54ba4c62733234e7357f12ffa89",
  "dedupeId": "financial:14:2026-06-30:513b65919148a2492b6a6416b436d7007b7da54ba4c62733234e7357f12ffa89"
}
```

All values above are the actual saved platform record, including its calculated hash, dedupe ID, and runtime timestamps. Later runs produce different retrieval timestamps and may produce different content versions.

</details>

### Alert mode: only new records

The default `newSince: "off"` repeats the selected quarterly snapshot in every new run. Successfully saved rows are chargeable deliveries, including unchanged rows. Set `newSince: "lastRun"` to retain a baseline and suppress the same certificate, quarter, and normalized content version in subsequent scans. This option compares content; it is not a report-date watermark and does not imply weekly financial changes.

For `latest`, the current quarter is resolved from FDIC metadata, validated as a real quarter end, and included in the cursor identity. When a new quarter is published, it forms a different query scope. A source index rebuild between scheduled runs restarts from offset zero; a rebuild after pagination begins resets the cursor and fails the run for a later retry. Cursor progress occurs only after delivery, a diagnostic, or recognition of a duplicate.

The retained ledger is bounded to 200,000 versions and 3,650 days. Pruned records can be delivered again. Dataset and state writes are separate, and overlapping runs are unsupported, so there is no exactly-once guarantee. A weekly availability check does not make FDIC quarterly financial data weekly.

### Pricing

**$5.00 per 1,000 results**, or $0.005 per saved financial result event. Snapshot mode charges again for each row delivered on a later run; retained duplicates and diagnostics are not charged as results.

| Results | Cost |
|---|---|
| 100 | $0.50 |
| 1,000 | $5.00 |
| 10,000 | $50.00 |

These amounts are arithmetic estimates at the listed event price, not a guarantee of source coverage or processing time. `maxItems` sets an upper bound rather than promising a number of matching records. Check the Store price and use the Apify maximum charge control before a paid run.

### Use it through the API

Your Apify token authenticates with Apify. The Actor does not currently require a separate FDIC key under observed public API access conditions; upstream requirements can change.

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("ledgerstar/bank-financials").call(
    run_input={"certificates": ["3511"], "reportDate": "latest", "maxItems": 20}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["bankCertificate"], item["reportDate"], item["assetsThousandsUsd"])
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('ledgerstar/bank-financials').call({
  certificates: ['3511'], reportDate: 'latest', maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map(({ bankCertificate, reportDate, assetsThousandsUsd }) => ({ bankCertificate, reportDate, assetsThousandsUsd })));
```

### Integrations

Send completed dataset rows to **Google Sheets** for review, or use **Zapier** and **Make** to start downstream updates after a run. **Slack** can notify analysts when a new quarter becomes available or a retained version is delivered. The **Apify API** supports scheduling and retrieval. Preserve quarter, source link, units, and timestamps when copying figures into another system.

### Data source and compliance

The source is the official [FDIC Bank Data API](https://api.fdic.gov/banks/docs/) financials index. FDIC provides its [data downloads and update information](https://www.fdic.gov/bank-data-guide/data-downloads). Financial reports are quarterly. `REPDTE` identifies the quarter end. Numeric amounts are reported in thousands of dollars. FDIC `NETINC` is cumulative income as reported and should not be treated automatically as one-quarter profit. Return ratios are source-reported values.

This Actor returns institution-level business financial fields and provenance. It does not collect customer accounts, personal data, or officer details. Verify source reports before decisions involving lending, credit, investment, safety, or compliance. Public access requirements can change, and source errors are not represented as successful empty results. Ledgerstar is independent and is not endorsed by FDIC. This output is research data, not financial advice or a bank safety rating.

### FAQ

**Is it legal to use this data?**
The Actor reads public official business data. You are responsible for applicable terms and the legality of your downstream use.

**How often is the data updated?**
Financial reports are quarterly. A weekly run can check whether a new quarter is available but cannot produce weekly statements.

**How do I get only new records?**
Choose `lastRun` to suppress retained identical certificate-quarter content versions. It does not use a date watermark.

**What does `latest` mean?**
The Actor reads FDIC's most recent report date and verifies it is a calendar quarter end before requesting rows.

**Can I request any date?**
No. Use `latest` or a valid March 31, June 30, September 30, or December 31 quarter end.

**What units are used for amounts?**
Assets, deposits, equity, and net income are thousands of US dollars. Field names include the unit to avoid ambiguous scaling.

**Is net income a quarterly number?**
The FDIC `NETINC` field can be cumulative year-to-date. Interpret it using FDIC documentation and the reporting period.

**Why are values null?**
The source may omit or provide a nonnumeric value. Null remains unknown; it is never converted to zero.

**Why did the run return fewer rows than requested?**
The selected quarter may have fewer matches, or a page, scan, or result cap may have stopped the run. Check completion fields in the run summary.

**Will an unchanged quarterly snapshot cost again?**
Yes in default snapshot mode. Retained identical versions are suppressed only with `lastRun`.

**Does this Actor rate bank safety?**
No. It returns source-reported figures and ratios and does not provide a safety score or recommendation.

**Does monitoring guarantee exactly-once delivery?**
No. State and dataset writes are separate, retention is bounded, and overlapping runs are unsupported.

### More from Ledgerstar

Visit the [Ledgerstar Apify Store](https://apify.com/ledgerstar) for current Actor availability and related source-linked business data tools.

### Support

Support: open an issue on this Actor's Issues tab in Apify Console.

# Changelog

This Actor's version history is a separate document: https://apify.com/ledgerstar/bank-financials/changelog.md

# Actor input Schema

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

Maximum successfully delivered financial rows.

## `maxPages` (type: `integer`):

Maximum source pages, with at most 20 rows requested on each.

## `certificates` (type: `array`):

Optional numeric FDIC certificate strings.

## `newSince` (type: `string`):

off repeats snapshots; lastRun suppresses retained identical versions.

## `reportDate` (type: `string`):

latest or an actual calendar quarter end in YYYY-MM-DD form. Availability is quarterly.

## `maxRowsScanned` (type: `integer`):

Safety cap on source rows returned. Latest-quarter metadata also uses one row of this budget.

## Actor input object example

```json
{
  "maxItems": 20,
  "maxPages": 5,
  "newSince": "off",
  "reportDate": "latest",
  "maxRowsScanned": 100
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "maxItems": 20,
    "maxPages": 5,
    "newSince": "off",
    "reportDate": "latest",
    "maxRowsScanned": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("ledgerstar/bank-financials").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 = {
    "maxItems": 20,
    "maxPages": 5,
    "newSince": "off",
    "reportDate": "latest",
    "maxRowsScanned": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("ledgerstar/bank-financials").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 '{
  "maxItems": 20,
  "maxPages": 5,
  "newSince": "off",
  "reportDate": "latest",
  "maxRowsScanned": 100
}' |
apify call ledgerstar/bank-financials --silent --output-dataset

```

## MCP server setup

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

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/dvgcf3tvYTaK6E2Vs/builds/2nmbEVZxnLB2UHKnL/openapi.json
