CFPB Consumer Complaints Monitor avatar

CFPB Consumer Complaints Monitor

Pricing

from $1.50 / 1,000 complaint returneds

Go to Apify Store
CFPB Consumer Complaints Monitor

CFPB Consumer Complaints Monitor

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.

Pricing

from $1.50 / 1,000 complaint returneds

Rating

0.0

(0)

Developer

Detroit Web Agent - Open Data

Detroit Web Agent - Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

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.

InputWhat it does
Modecomplaints lists matching complaints newest first. newSince does the same but skips complaints delivered in an earlier run. companySummary returns one summary row per company.
CompaniesCompany 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 nameMatch the name exactly as CFPB spells it, for example JPMORGAN CHASE & CO.
Products / IssuesCFPB product and issue names, for example Credit card, Debt collection, Mortgage, Fraud or scam. Several values are combined with OR.
Consumer statesTwo-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 dateYYYY-MM-DD, on the date CFPB received the complaint.
Company responsesKeep only outcomes such as Closed with monetary relief, Closed with explanation, In progress.
Timely responseAny, timely only, or late only.
Submitted viaChannel: Web, Phone, Referral, Postal mail and so on.
Search textFree text matched against the published complaint fields.
Max resultsCap 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 monthsMonths of history in each company summary (2 to 24).
Skip complaints already deliveredNew-since mode only; on by default.
Max API requests / Max run timeSafety caps. A run that reaches one stops cleanly, keeps every row it already delivered and tells you in the run log.
State store nameName 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:

{
"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:

{
"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:

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

Output fields

Complaint rows (type = complaint):

FieldMeaning
complaintIdCFPB complaint ID.
dateReceived, dateSentToCompanyDates as YYYY-MM-DD.
complaintAgeDaysDays from the date received to the run date.
companyCompany name as CFPB spells it.
product, subProduct, issue, subIssueCFPB categories.
stateThe consumer's two-letter state, as published.
zip3First 3 digits of the published ZIP code. The full ZIP is never output.
companyResponseHow the company closed the complaint, or In progress.
companyPublicResponseOptional public statement the company chose to publish.
timelyResponsetrue or false.
submittedViaWeb, Phone, Referral, Postal mail, Fax, Email.
tagsCFPB tags such as Older American or Servicemember, when published.
consumerDisputedWhether the consumer disputed the response (only older complaints carry this).
narrative, hasNarrativeThe consumer's narrative only when CFPB publishes one, passed through exactly as published.
complaintUrlPublic CFPB page for the complaint.
scrapedAtWhen 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):

{
"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):

{
"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

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}'
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 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.

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
{
"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 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.