# CFPB Consumer Complaints Monitor (`transparent_meteorite/cfpb-consumer-complaints-monitor`) Actor

Search and monitor the official CFPB Consumer Complaint Database by company, product, issue, state and date. New-since-last-run alerts or per-company trend summaries with response stats. Published fields only, 3-digit ZIP. No API key.

- **URL**: https://apify.com/transparent_meteorite/cfpb-consumer-complaints-monitor.md
- **Developed by:** [Detroit Web Agent - Open Data](https://apify.com/transparent_meteorite) (community)
- **Categories:** Lead generation, Business, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 complaint returneds

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

## CFPB Consumer Complaints Monitor: Search, New-Since Alerts and Company Trends

Use this to search, export and monitor complaints from the official CFPB Consumer Complaint Database by company, product, issue, state and date, or to get a per-company trend summary in one row.

**One clean row per consumer complaint, straight from the Consumer Financial Protection Bureau's public database, ready for a spreadsheet, a BI dashboard, a compliance tracker or a weekly alert.** The CFPB publishes every complaint consumers file about banks, credit card issuers, mortgage servicers, debt collectors, credit bureaus, lenders, money transfer apps and other financial companies, once the company has responded or 15 days have passed. More than 18 million complaints are in the database today, and thousands are added every week. This actor turns that public database into a filtered list you can schedule: only the complaints you care about, only the ones you have not seen before, and, if you want the big picture, a single summary row per company with counts, change versus the previous period, a month-by-month trend, top products, top issues, top states and response statistics.

- **What you get:** complaint ID, date received, date sent to the company, complaint age in days, company name, product, sub-product, issue, sub-issue, consumer state, 3-digit ZIP prefix, company response, the company's optional public response, timely-response flag, submission channel, CFPB tags (such as Older American or Servicemember), the published consumer narrative when CFPB publishes one, and a link to the official complaint page.
- **Company summary mode:** one row per company with the complaint count in your window, the count in the previous window of the same length, percent change, a rising / falling / flat label, monthly counts, top 5 products, issues and states, timely-response percentage, the share of closed complaints that ended with relief, and a full response breakdown.
- **Who it is for:** compliance and risk teams at banks, credit unions and fintechs, competitive-intelligence and product teams, consumer-finance journalists and researchers, plaintiff and defense law firms tracking complaint patterns, investors watching consumer-facing lenders, and vendor-risk teams that monitor their partners.
- **No login, no API key, no browser.** The actor calls the CFPB's own public search API directly, so runs are fast and cheap.
- **Monitor mode:** schedule it daily or weekly and it returns only complaints that were not delivered in an earlier run.

### What this CFPB complaint monitor does

The CFPB Consumer Complaint Database is one of the richest public signals about how financial companies treat their customers. It is also awkward to use at scale. The website is built for browsing one search at a time, the full CSV download is several gigabytes, and the search API returns deeply nested Elasticsearch responses with paging tokens that you have to manage yourself.

This actor does that plumbing for you:

1. It builds the right query from plain inputs: company names, products, issues, states, a date range, company responses, submission channels, a timely-response filter and free text.
2. It pages through the results newest first with the API's own `search_after` tokens, so large result sets are read in order and without gaps.
3. It shapes each complaint into a flat row with consistent field names, real booleans and dates, and `null` (never an empty string) where CFPB has no value.
4. In **new since last run** mode it remembers which complaint IDs it already delivered (in a named key-value store) and skips them next time, so a scheduled run returns only new complaints.
5. In **company summary** mode it asks the API for counts and aggregations instead of rows, and returns one compact, chart-ready row per company.
6. Every run is protected by hard limits on requests, bytes, run time and compute cost, so a mistyped filter can never turn into a large bill.

### Use cases

- **Compliance monitoring for your own institution:** a bank, credit union or fintech schedules a daily new-since run for its own legal entity name and routes every new complaint about its products to the complaint-management or UDAAP review queue, with the CFPB link attached.
- **Competitive benchmarking:** a product or strategy team runs company summary mode for itself and five peers every month and charts complaint volume, change versus last period, top issues and relief rates side by side in Looker Studio, Power BI or a spreadsheet.
- **Vendor and partner risk:** a sponsor bank or a BaaS platform monitors complaints about its fintech partners, debt collectors and servicers, and flags any partner whose complaint count rises more than 10% month over month.
- **Journalism and research:** a reporter or academic exports every complaint about a product (for example "Money transfer, virtual currency, or money service" with the issue "Fraud or scam") in a state and date range for analysis.
- **Legal research:** a law firm pulls complaints about a specific company, product and issue to understand the pattern behind a potential class action or to prepare a defense, without downloading the multi-gigabyte national file.
- **Investor and analyst signals:** an analyst tracks the monthly complaint trend for consumer lenders and card issuers as an early indicator of servicing problems.
- **Automation:** pipe new complaints into Slack, email, a CRM, Airtable or a ticketing system with n8n, Make or Zapier, or let an AI agent call the actor as a tool.

### Quick start: your first run in 30 seconds

1. Open the actor and keep the prefilled input (company Wells Fargo, state MI, last 60 days, 25 results).
2. Click **Start**. The run finishes in a few seconds.
3. Open the **Complaints** tab of the dataset, or download it as CSV, JSON or Excel.

To monitor, switch **Mode** to **New since last run**, enter your companies and filters, and add a daily or weekly schedule. The first run returns the current backlog for your window (up to your max results); later runs return only complaints that are new.

### Input options

All inputs are optional; the defaults give a small, fast test run.

| Input | What it does |
|---|---|
| **Mode** | `complaints` lists matching complaints newest first. `newSince` does the same but skips complaints delivered in an earlier run. `companySummary` returns one summary row per company. |
| **Companies** | Company names such as `Wells Fargo`, `Capital One`, `Navy Federal`. Matched by words, so `Wells Fargo` finds `WELLS FARGO & COMPANY`. Empty means all companies (in summary mode: the top companies by complaint volume in the window). |
| **Exact company name** | Match the name exactly as CFPB spells it, for example `JPMORGAN CHASE & CO.` |
| **Products / Issues** | CFPB product and issue names, for example `Credit card`, `Debt collection`, `Mortgage`, `Fraud or scam`. Several values are combined with OR. |
| **Consumer states** | Two-letter codes of the consumer's state, for example `MI`, `TX`. |
| **Look back (days)** | Start of the window, counted back from today. Ignored when you set a start date. |
| **Start date / End date** | `YYYY-MM-DD`, on the date CFPB received the complaint. |
| **Company responses** | Keep only outcomes such as `Closed with monetary relief`, `Closed with explanation`, `In progress`. |
| **Timely response** | Any, timely only, or late only. |
| **Submitted via** | Channel: `Web`, `Phone`, `Referral`, `Postal mail` and so on. |
| **Search text** | Free text matched against the published complaint fields. |
| **Max results** | Cap on rows delivered and charged this run, default 25, up to 5,000. In summary mode it is the number of companies, up to 100. |
| **Trend months** | Months of history in each company summary (2 to 24). |
| **Skip complaints already delivered** | New-since mode only; on by default. |
| **Max API requests / Max run time** | Safety caps. A run that reaches one stops cleanly, keeps every row it already delivered and tells you in the run log. |
| **State store name** | Name of the key-value store that remembers delivered complaints. Use a different name for each separate monitor. |

#### Example input

Complaints about Wells Fargo from Michigan consumers in the last 60 days:

```json
{
  "mode": "complaints",
  "companies": ["Wells Fargo"],
  "states": ["MI"],
  "lookbackDays": 60,
  "maxResults": 25
}
```

A daily monitor for credit card and checking account fraud complaints about two issuers:

```json
{
  "mode": "newSince",
  "companies": ["Capital One", "Discover"],
  "products": ["Credit card", "Checking or savings account"],
  "issues": ["Fraud or scam"],
  "lookbackDays": 30,
  "maxResults": 500
}
```

A monthly benchmark of three banks with a 12-month trend:

```json
{
  "mode": "companySummary",
  "companies": ["Wells Fargo", "Bank of America", "JPMorgan Chase"],
  "lookbackDays": 30,
  "trendMonths": 12
}
```

### Output fields

Complaint rows (`type` = `complaint`):

| Field | Meaning |
|---|---|
| `complaintId` | CFPB complaint ID. |
| `dateReceived`, `dateSentToCompany` | Dates as `YYYY-MM-DD`. |
| `complaintAgeDays` | Days from the date received to the run date. |
| `company` | Company name as CFPB spells it. |
| `product`, `subProduct`, `issue`, `subIssue` | CFPB categories. |
| `state` | The consumer's two-letter state, as published. |
| `zip3` | First 3 digits of the published ZIP code. The full ZIP is never output. |
| `companyResponse` | How the company closed the complaint, or `In progress`. |
| `companyPublicResponse` | Optional public statement the company chose to publish. |
| `timelyResponse` | `true` or `false`. |
| `submittedVia` | Web, Phone, Referral, Postal mail, Fax, Email. |
| `tags` | CFPB tags such as `Older American` or `Servicemember`, when published. |
| `consumerDisputed` | Whether the consumer disputed the response (only older complaints carry this). |
| `narrative`, `hasNarrative` | The consumer's narrative only when CFPB publishes one, passed through exactly as published. |
| `complaintUrl` | Public CFPB page for the complaint. |
| `scrapedAt` | When the row was produced. |

Company summary rows (`type` = `company_summary`): `company`, `matchedCompanyNames`, `windowFrom`, `windowTo`, `complaints`, `previousWindowComplaints`, `changePercent`, `trend`, `monthlyTrend` (list of `{month, complaints}`), `topProducts`, `topIssues`, `topStates` (lists of `{name, count}`), `timelyResponsePercent`, `reliefPercentOfClosed`, `responseBreakdown` and `scrapedAt`.

Any value CFPB does not publish for a record is `null`, so CSV columns and n8n / Make mappings stay stable.

### Sample output

A real complaint row from the example input above (CFPB data, retrieved November 4, 2026):

```json
{
  "type": "complaint",
  "complaintId": "30258838",
  "dateReceived": "2026-10-17",
  "dateSentToCompany": "2026-10-17",
  "complaintAgeDays": 18,
  "company": "WELLS FARGO & COMPANY",
  "product": "Credit card",
  "subProduct": "General-purpose credit card or charge card",
  "issue": "Other features, terms, or problems",
  "subIssue": "Other problem",
  "state": "MI",
  "zip3": "481",
  "companyResponse": "Closed with explanation",
  "companyPublicResponse": "Company has responded to the consumer and the CFPB and chooses not to provide a public response",
  "timelyResponse": true,
  "submittedVia": "Web",
  "tags": null,
  "consumerDisputed": null,
  "narrative": null,
  "hasNarrative": false,
  "complaintUrl": "https://www.consumerfinance.gov/data-research/consumer-complaints/search/detail/30258838",
  "scrapedAt": "2026-11-04T20:56:43.988Z"
}
```

A company summary row (trimmed):

```json
{
  "type": "company_summary",
  "company": "WELLS FARGO & COMPANY",
  "windowFrom": "2026-10-05",
  "windowTo": "2026-11-04",
  "complaints": 1185,
  "previousWindowComplaints": 1708,
  "changePercent": -30.6,
  "trend": "falling",
  "monthlyTrend": [{ "month": "2026-09", "complaints": 1739 }, { "month": "2026-10", "complaints": 1373 }],
  "topProducts": [{ "name": "Checking or savings account", "count": 553 }, { "name": "Credit card", "count": 206 }]
}
```

Recent windows always look lower than older ones, because CFPB publishes a complaint only after the company responds or 15 days pass. Compare windows that both end at least 30 days ago when you need a fair month-over-month comparison.

### Pricing

Pay per event, no monthly rental:

- **$1.50 per 1,000 complaints** delivered ($0.0015 per row), event `complaint-returned`.
- **$0.02 per company summary** row, event `company-summary` (each summary needs about 3 + trend-months API calls).
- **$0.00005 per run start**, event `apify-actor-start`.

You are charged only for rows written to your dataset. Invalid rows and complaints already delivered in an earlier new-since run are never charged. A run that finds nothing new costs only the start event.

**Worst case per run:** $0.00005 + max results x $0.0015 (for example $0.0375 for the default 25 complaints, $7.50 for the 5,000-row maximum), or $0.00005 + companies x $0.02 in summary mode. You can also set **Maximum cost per run** in the run options; the actor stops cleanly at that limit.

Typical compute is a few seconds at 256 MB, because the CFPB API returns up to 500 complaints per request.

### How to run it

#### In Apify Console

Fill in the input form, click **Start**, then open the dataset. The **Complaints** view shows the key columns; the **Company summaries** view shows the summary columns.

#### From the API or a client library

```bash
curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~cfpb-consumer-complaints-monitor/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"complaints","companies":["Wells Fargo"],"states":["MI"],"lookbackDays":60,"maxResults":25}'
```

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('transparent_meteorite/cfpb-consumer-complaints-monitor').call({
  mode: 'newSince', companies: ['Capital One'], lookbackDays: 30, maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'new complaints');
```

#### On a schedule

Create a schedule (daily at 7:00 AM, for example) with mode **New since last run**. Keep the same **State store name** between runs so the actor remembers what it already sent. Use a separate store name for each separate monitor.

#### With n8n, Make, Zapier or AI agents

Use the Apify integration in n8n, Make or Zapier: run the actor, then map dataset fields (`company`, `product`, `issue`, `dateReceived`, `complaintUrl`) into Slack, email, Google Sheets, Airtable or your ticketing tool. Field names never change between runs and missing values are `null`. AI agents can call the actor through the Apify MCP server.

### Monitor mode: only new complaints

In new-since mode the actor stores each delivered complaint ID in a named key-value store, and only marks a complaint as delivered after it has been written to the dataset and charged. A crash or abort in the middle of a run therefore never hides a complaint you did not receive, and never charges twice. Entries older than your current window are pruned automatically, so the store stays small. Turn **Skip complaints already delivered** off to re-deliver everything in the window.

### Why use this instead of the CFPB website or the CSV download

- **Filtered, not national:** you download only the complaints you need, not the full multi-gigabyte file.
- **Scheduled and de-duplicated:** new-since mode does the "what changed since last time" work for you.
- **Flat rows:** no nested Elasticsearch JSON, consistent types, `null` for missing values.
- **Summaries in one row:** counts, change, trend and response stats per company without building pivot tables.
- **Safe to automate:** hard caps on requests, bytes, time and cost; a failed API call ends the run cleanly with a clear message instead of a crash.

### Privacy and data scope

- The actor returns **only fields the CFPB itself publishes** in its public database. CFPB removes consumer names, addresses, account numbers and other direct identifiers before publication.
- **ZIP code is reduced to its first 3 digits** (`zip3`), an area-level value, even though CFPB publishes more. The full ZIP is never output.
- **Narratives:** CFPB publishes a consumer's narrative only with the consumer's consent and after its own scrubbing, which replaces personal details with `XXXX`. When the API serves a narrative, this actor passes it through verbatim. The `XXXX` redaction is kept exactly as published and the actor never tries to fill in, infer or reverse it. At the time of writing (November 2026) the public search API does not return narrative text, so `narrative` is `null` and `hasNarrative` is `false`.
- A built-in gate rejects any row that carries an unexpected or personal-looking field before it is written or charged.
- Please do not use the data to try to identify individual consumers.

### Limits and honest caveats

- **Publication lag:** CFPB publishes a complaint after the company responds or after 15 days, so the newest complaints in the database are usually one to three weeks old. Month-to-date counts in summaries are always incomplete.
- **Not a statistical sample:** complaint counts reflect who chose to complain, and larger companies have more customers. Compare rates over time for the same company rather than raw counts across very different companies.
- **Company names** are matched by words unless you tick **Exact company name**. A word search can match more than one legal entity; the summary row lists every matched name in `matchedCompanyNames`.
- **Run caps:** up to 5,000 complaints or 100 company summaries per run. For larger exports, split by date range or product.
- **API availability:** if the CFPB API is down or slow, the run retries with backoff, then ends cleanly with an explanation and charges nothing for rows it could not deliver.

### Data source and license

Data comes from the [CFPB Consumer Complaint Database](https://www.consumerfinance.gov/data-research/consumer-complaints/) public search API, published by the U.S. Consumer Financial Protection Bureau. The database is a U.S. government work and is published as open data (public domain / CC0). CFPB notes that complaints are not verified and that the database is not a statistical sample. This actor is independent and is not affiliated with or endorsed by the CFPB.

### Related actors

- [SEC Company Financials from XBRL (10-K, 10-Q)](https://apify.com/transparent_meteorite/sec-company-financials-xbrl): revenue, net income, assets and other reported financials for public companies, to put complaint trends next to company size and results.
- [Federal Register Rules and Notices Monitor](https://apify.com/transparent_meteorite/federal-register-rules-notices-monitor): new CFPB rules, proposed rules and notices as they are published in the Federal Register.
- [SAM.gov Contract Opportunities: Federal Bids and RFPs](https://apify.com/transparent_meteorite/sam-gov-opportunities): federal contract opportunities, including financial-services and compliance work.

### FAQ

**Do I need a CFPB account or API key?**
No. The CFPB search API is public and keyless.

**How fresh is the data?**
As fresh as the CFPB database. Each run queries the live API, so a complaint appears in your results as soon as CFPB publishes it.

**Can I get every complaint about a company, not just recent ones?**
Yes. Set a start date (the database goes back to 2011) and a max results value. For very large companies split the export by year or product, since one run delivers up to 5,000 rows.

**Why are there no consumer names, addresses or full ZIP codes?**
CFPB does not publish names or addresses, and this actor deliberately reduces ZIP codes to their 3-digit prefix. See Privacy and data scope.

**Why is the narrative empty?**
CFPB publishes narratives only with consent, and the public search API currently does not return narrative text. If CFPB serves it again, the actor passes it through exactly as published, with the `XXXX` redaction kept.

**How does new-since mode decide what is new?**
By complaint ID. Every delivered ID is remembered in the named state store and skipped next time.

**Why do recent months look lower?**
Publication lag. See Limits and honest caveats.

**What is `reliefPercentOfClosed`?**
The share of closed complaints in the window that were closed with monetary or non-monetary relief, a common proxy for how often the consumer got something back.

**Can I filter by more than one product or state?**
Yes. Values within a filter are combined with OR; different filters are combined with AND.

**What happens if a run hits a limit?**
It stops cleanly, keeps every row already delivered, ends as SUCCEEDED and explains which limit was reached in the run log and the `OUTPUT` record.

**Is this legal to use?**
The data is public U.S. government open data. You are responsible for how you use it; please follow the CFPB's own guidance that complaints are not verified.

### Troubleshooting

- **0 results:** widen the look-back, remove a filter, or check the company spelling on the CFPB website. In new-since mode, 0 results usually means nothing new was published since the last run.
- **Wrong company matched:** tick **Exact company name** and use the name exactly as CFPB spells it (shown in `company` and `matchedCompanyNames`).
- **Run stopped early:** the log names the limit (`maxApiRequests`, run time or cost). Raise the cap or narrow the filters.

### Terms and responsible use

Use the data for compliance, research, journalism, benchmarking and similar purposes. Do not use it to contact, profile or identify individual consumers. Complaint data is not verified by the CFPB; treat it as a signal, not a finding.

### Alternatives to CFPB Consumer Complaints Monitor

You can browse the CFPB website one search at a time, download the full national CSV and filter it yourself, or call the search API directly and handle paging and nested JSON. Other complaint scrapers exist on Apify; this one focuses on scheduled new-since monitoring, one-row company summaries, `null`-safe flat rows, a 3-digit ZIP privacy rule and hard cost guards.

### Use it from AI assistants (MCP)

CFPB Consumer Complaints Monitor works as a tool for AI assistants through the official Apify MCP server. Add this URL to any MCP client (Claude Desktop, Claude Code, Cursor, ChatGPT connectors, VS Code):

```
https://mcp.apify.com/?actors=transparent_meteorite/cfpb-consumer-complaints-monitor
```

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?actors=transparent_meteorite/cfpb-consumer-complaints-monitor",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

Then ask, for example: "Show this week's new CFPB complaints about credit card companies, grouped by issue."

### Changelog

- **0.2** (November 2026): run cost guard and wall-clock deadline, row validation gate before every push and charge, `null` for missing values, `zip3` instead of the full ZIP, `complaintAgeDays`, narrative pass-through (verbatim, `XXXX` kept), lower start price, max results capped at 5,000, memory up to 1 GB, a company summaries dataset view, and a full offline test suite.
- **0.1** (November 2026): first version with complaints, new-since and company summary modes.

### Support

Found a bug or need a field? Open an issue on the actor's Issues tab with the run ID, and we will look at it.

**Did this actor do the job?** If it saved you time, a short honest review on the [Reviews tab](https://apify.com/transparent_meteorite/cfpb-consumer-complaints-monitor/reviews) helps other people judge it. If something was off, open an Issue on this page with the input you used. I read every one and fix real bugs, usually the same day.

# Actor input Schema

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

Complaints = list matching complaints, newest first. New since last run = same, but never returns a complaint you already received (schedule it for monitoring). Company summary = one row per company with counts, change vs the previous period, monthly trend, top products/issues/states and response stats.

## `companies` (type: `array`):

Company names, for example Wells Fargo, Chase, Navy Federal. Matched by words, so Wells Fargo finds WELLS FARGO & COMPANY. Leave empty for all companies (in summary mode: the top companies by complaint volume).

## `exactCompanyName` (type: `boolean`):

Match the company name exactly as CFPB spells it (for example WELLS FARGO & COMPANY) instead of by words.

## `products` (type: `array`):

CFPB product names, for example Credit card, Debt collection, Mortgage, Checking or savings account. Empty = all.

## `issues` (type: `array`):

CFPB issue names, for example Fraud or scam. Empty = all.

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

Two-letter state codes of the consumer, for example MI, TX. Empty = all.

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

Date range start = today minus this many days. Ignored when you set a start date.

## `dateFrom` (type: `string`):

YYYY-MM-DD, date the complaint was received. Overrides the look-back.

## `dateTo` (type: `string`):

YYYY-MM-DD. Empty = up to the latest data.

## `companyResponses` (type: `array`):

Keep only these outcomes, for example Closed with monetary relief, Closed with explanation, In progress. Empty = all.

## `timelyResponse` (type: `string`):

Filter on whether the company answered on time.

## `submittedVia` (type: `array`):

Channel the complaint came in, for example Web, Phone, Referral, Postal mail. Empty = all.

## `searchText` (type: `string`):

Free text matched against the published complaint fields. Ignored for a company when a company name is set.

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

Cap on rows delivered (and charged) this run, up to 5,000. In summary mode: the number of companies, up to 100. Start with 25.

## `trendMonths` (type: `integer`):

How many calendar months of history to include in each company summary.

## `skipSeen` (type: `boolean`):

In new-since mode, never return a complaint delivered in an earlier run. Turn off to return everything again.

## `maxApiRequests` (type: `integer`):

Safety cap on calls to the CFPB API for this run. A run that hits it returns what it found and says so.

## `maxRunSeconds` (type: `integer`):

The run stops after this long and delivers what it found.

## `stateStoreName` (type: `string`):

Name of the key-value store remembering delivered complaints. Change it to keep separate monitors.

## Actor input object example

```json
{
  "mode": "complaints",
  "companies": [
    "Wells Fargo"
  ],
  "exactCompanyName": false,
  "products": [],
  "issues": [],
  "states": [
    "MI"
  ],
  "lookbackDays": 60,
  "dateFrom": "",
  "dateTo": "",
  "companyResponses": [],
  "timelyResponse": "any",
  "submittedVia": [],
  "searchText": "",
  "maxResults": 25,
  "trendMonths": 6,
  "skipSeen": true,
  "maxApiRequests": 200,
  "maxRunSeconds": 600,
  "stateStoreName": "cfpb-consumer-complaints-monitor-seen"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `summaries` (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 = {
    "companies": [
        "Wells Fargo"
    ],
    "states": [
        "MI"
    ],
    "lookbackDays": 60,
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("transparent_meteorite/cfpb-consumer-complaints-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 = {
    "companies": ["Wells Fargo"],
    "states": ["MI"],
    "lookbackDays": 60,
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("transparent_meteorite/cfpb-consumer-complaints-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 '{
  "companies": [
    "Wells Fargo"
  ],
  "states": [
    "MI"
  ],
  "lookbackDays": 60,
  "maxResults": 25
}' |
apify call transparent_meteorite/cfpb-consumer-complaints-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,transparent_meteorite/cfpb-consumer-complaints-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/8iRzjkWmck1fOPXbu/builds/OCguqN2ZpCjq7ncQ9/openapi.json
