CFPB Consumer Complaint Search avatar

CFPB Consumer Complaint Search

Pricing

from $2.00 / 1,000 complaint fetcheds

Go to Apify Store
CFPB Consumer Complaint Search

CFPB Consumer Complaint Search

Search the CFPB consumer complaint database with 5M+ complaints. Filter by company, product, state, date range, and keyword. Extract complaint details, company responses, and consumer narratives. Free US government data, no API key required.

Pricing

from $2.00 / 1,000 complaint fetcheds

Rating

0.0

(0)

Developer

ryan clinton

ryan clinton

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Search and extract consumer complaint data from the Consumer Financial Protection Bureau (CFPB) database. Access over 5 million complaints filed against financial companies in the United States since 2011, with filtering by keyword, company, product type, state, and date range.

The CFPB complaint database is the largest publicly available source of consumer grievances related to financial products and services in the US, maintained by a federal government agency. This actor connects to the official CFPB public API and transforms raw Elasticsearch-style responses into clean, structured JSON records -- ready for analysis, monitoring, compliance workflows, or integration into data pipelines.

Whether you are a compliance officer tracking complaints against a specific bank, a data journalist investigating patterns in consumer harm, or a fintech company benchmarking competitor reputation, this actor gives you programmatic access to CFPB data without managing API pagination, rate limiting, or data normalization yourself.


  • No API key required -- The CFPB API is a free US government data source. No authentication, no signup, no usage limits.
  • Clean structured output -- Raw CFPB responses use nested Elasticsearch formatting with inconsistent field names. This actor normalizes every record into a flat, consistent 17-field JSON schema.
  • Automatic pagination -- The CFPB API caps responses at 25 records per request. This actor handles all pagination transparently, fetching up to 500 complaints per run.
  • Cloud scheduling -- Run searches on a recurring schedule using Apify's built-in scheduler to monitor new complaints daily, weekly, or at any interval.
  • No infrastructure needed -- Runs entirely on Apify's cloud. No servers, no Docker setup, no dependencies to install.
  • Direct complaint links -- Every result includes a generated URL linking directly to the complaint detail page on the CFPB website.

Key features

  • Search by keyword across complaint narratives and all indexed fields
  • Filter by company name (exact match -- e.g., "Bank of America", "Equifax")
  • Filter by financial product type: credit reporting, debt collection, mortgages, credit cards, student loans, and 5 more categories
  • Filter by US state using standard two-letter codes (CA, NY, TX, etc.)
  • Filter by date range to isolate complaints within a specific time window
  • Sort results by newest first, oldest first, most relevant, or least relevant
  • Retrieve up to 500 complaints per run with built-in pagination
  • Consumer narratives included when the consumer opted in to public disclosure
  • Direct CFPB URL generated for each complaint record
  • 200ms delay between API pages to respect the government server

How to use

Apify Console

  1. Go to the CFPB Consumer Complaint Search actor page on Apify.
  2. Click Start to open the input configuration.
  3. Enter a search term, company name, or select a product type. You can combine multiple filters.
  4. Optionally set a date range and state to narrow results.
  5. Choose your sort order and maximum number of results.
  6. Click Start to run the actor.
  7. When finished, download results from the Dataset tab in JSON, CSV, Excel, or other formats.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/cfpb-consumer-complaints").call(run_input={
"searchTerm": "unauthorized charges",
"company": "Wells Fargo",
"product": "Checking or savings account",
"state": "CA",
"dateFrom": "2024-01-01",
"dateTo": "2024-12-31",
"sortBy": "created_date_desc",
"maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['complaintId']} | {item['company']} | {item['issue']}")

JavaScript

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("ryanclinton/cfpb-consumer-complaints").call({
searchTerm: "identity theft",
company: "EQUIFAX, INC.",
sortBy: "created_date_desc",
maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} complaints`);
items.forEach((item) => console.log(`${item.complaintId}: ${item.issue}`));

Input parameters

ParameterTypeRequiredDefaultDescription
searchTermStringNo--Keyword search across complaint narratives and fields (e.g., "credit report", "late fee", "identity theft")
companyStringNo--Filter by company name (e.g., "Bank of America", "Wells Fargo", "Equifax")
productSelectNoAnyFinancial product type: credit reporting, debt collection, mortgage, credit card, checking/savings, student loan, vehicle loan, money transfer, payday loan, personal loan
stateStringNo--US state code, automatically uppercased (e.g., "CA", "NY", "TX")
dateFromStringNo--Start date for complaints received (YYYY-MM-DD format)
dateToStringNo--End date for complaints received (YYYY-MM-DD format)
sortBySelectNocreated_date_descSort order: Newest first, Oldest first, Most relevant, Least relevant
maxResultsIntegerNo50Maximum complaints to return (1--500)

Example input (JSON)

{
"searchTerm": "credit report",
"company": "EQUIFAX, INC.",
"product": "Credit reporting, credit repair services, or other personal consumer reports",
"state": "FL",
"dateFrom": "2024-06-01",
"dateTo": "2024-12-31",
"sortBy": "created_date_desc",
"maxResults": 100
}

Tips: Combine multiple filters for precise results. Use date ranges for trend analysis. When using a keyword search, try sorting by "Most relevant first" for best matches. If no filters are set, the actor returns the most recent complaints across all categories.


Output

Example output (JSON)

{
"complaintId": "8234561",
"dateReceived": "2024-11-15",
"dateSentToCompany": "2024-11-15",
"product": "Credit reporting, credit repair services, or other personal consumer reports",
"subProduct": "Credit reporting",
"issue": "Incorrect information on your report",
"subIssue": "Information belongs to someone else",
"company": "EQUIFAX, INC.",
"companyResponse": "Closed with explanation",
"companyPublicResponse": "Company has responded to the consumer and the CFPB and chooses not to provide a public response",
"state": "FL",
"zipCode": "331XX",
"narrative": "I discovered several accounts on my Equifax credit report that do not belong to me. I have filed disputes multiple times but the inaccurate information remains.",
"consumerDisputed": "N/A",
"timely": "Yes",
"submittedVia": "Web",
"cfpbUrl": "https://www.consumerfinance.gov/data-research/consumer-complaints/search/detail/8234561",
"extractedAt": "2025-06-10T14:32:08.123Z"
}

Output fields

FieldTypeDescription
complaintIdStringUnique CFPB complaint identifier
dateReceivedStringDate the CFPB received the complaint (YYYY-MM-DD)
dateSentToCompanyStringDate the complaint was forwarded to the company
productStringFinancial product or service category
subProductStringMore specific product subcategory
issueStringPrimary issue described in the complaint
subIssueStringMore specific issue detail
companyStringName of the company the complaint is against
companyResponseStringHow the company responded (e.g., "Closed with explanation", "Closed with monetary relief")
companyPublicResponseStringThe company's optional public-facing response text
stateStringTwo-letter US state code where the consumer is located
zipCodeStringConsumer's ZIP code (may be partially redacted)
narrativeString/nullConsumer's written description of the complaint, or null if not provided or consent not given
consumerDisputedStringWhether the consumer disputed the company's response
timelyStringWhether the company responded in a timely manner ("Yes" or "No")
submittedViaStringSubmission channel (Web, Phone, Referral, Postal mail, Fax, Email)
cfpbUrlStringDirect link to the complaint on the CFPB website
extractedAtStringISO 8601 timestamp of when the data was extracted

Use cases

  • Compliance monitoring -- Track complaints filed against your own institution or competitors on a daily or weekly schedule to catch emerging issues early.
  • Due diligence -- Before partnering with, acquiring, or investing in a financial company, review their complaint history for red flags.
  • Investigative journalism -- Analyze complaint trends by product type, geography, or time period to uncover systemic consumer harm patterns.
  • Legal research -- Find complaints related to specific issues like identity theft, unauthorized charges, predatory lending, or discriminatory practices.
  • Market intelligence -- Identify where consumers are most dissatisfied to spot product improvement or market entry opportunities.
  • Regulatory risk assessment -- Monitor complaint volumes and company response patterns as leading indicators of potential regulatory action.
  • Academic research -- Build datasets for studying consumer finance behavior, complaint resolution effectiveness, or financial inclusion topics.
  • Brand reputation tracking -- Track how a company's complaint volume and resolution quality changes over time relative to industry peers.
  • Geographic analysis -- Compare complaint patterns across states to identify regional concentrations of specific financial product issues.
  • Customer experience benchmarking -- Compare timeliness and resolution types across companies in the same product category.

API & integration

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("OuMDkYU3IROUS0AEj").call(run_input={
"company": "Bank of America",
"product": "Mortgage",
"dateFrom": "2024-01-01",
"maxResults": 200,
})
dataset = client.dataset(run["defaultDatasetId"])
for item in dataset.iterate_items():
print(f"{item['dateReceived']} - {item['issue']} ({item['companyResponse']})")

JavaScript

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("OuMDkYU3IROUS0AEj").call({
searchTerm: "late fee",
product: "Credit card or prepaid card",
state: "NY",
maxResults: 75,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(JSON.stringify(items, null, 2));

cURL

# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/OuMDkYU3IROUS0AEj/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerm": "debt collection harassment",
"state": "TX",
"sortBy": "created_date_desc",
"maxResults": 50
}'
# Fetch results from the dataset (use defaultDatasetId from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"

Platform integrations

  • Zapier -- Trigger workflows when new complaint data is collected. Push to Google Sheets, Slack, email, or CRMs.
  • Make (Integromat) -- Build multi-step automations combining CFPB data with other sources.
  • Google Sheets -- Export results directly to a spreadsheet for collaborative analysis.
  • Webhooks -- Receive HTTP callbacks when actor runs complete to trigger downstream processing.
  • Apify Dataset API -- Access results in JSON, CSV, XML, Excel, HTML, or RSS formats.

How it works

  1. The actor reads your input configuration (search term, company, product, state, date range, sort order, max results).
  2. It constructs a query URL for the CFPB Consumer Complaint API with pagination parameters (size=25, frm=0, no_aggs=true).
  3. The actor sends an HTTP GET request to the CFPB API endpoint.
  4. The Elasticsearch-style response (hits.hits) is parsed and each complaint record is transformed from the raw _source format into a clean 17-field JSON object.
  5. Transformed records are pushed to the Apify dataset.
  6. If more results are needed, the actor increments the offset and fetches the next page after a 200ms delay.
  7. Steps 3--6 repeat until the requested number of complaints is collected or no more results are available.
  8. The actor logs the total count and exits.
CFPB Consumer Complaint Search Pipeline
Input Config CFPB API Transform Apify Dataset
+------------+ +--------------+ +------------------+ +---------------+
| searchTerm | | /search/api/ | | Elasticsearch | | complaintId |
| company |--->| v1/?search_ |--->| _source fields |--->| dateReceived |
| product | | term=...& | | --> flat JSON | | company |
| state | | size=25& | | + cfpbUrl | | issue |
| dateFrom | | frm=offset | | + extractedAt | | narrative |
| dateTo | | &no_aggs= | | | | ...17 fields |
| maxResults | | true | | | | JSON/CSV/XLSX |
+------------+ +--------------+ +------------------+ +---------------+
^ |
| 200ms delay between pages |
+------- pagination loop (25 per page) ----+

Performance & cost

ScenarioResultsApprox. Run TimeMemoryEst. Cost (Apify credits)
Quick lookup253--5 seconds256 MB~$0.001
Default run505--10 seconds256 MB~$0.002
Medium batch20015--20 seconds256 MB~$0.005
Maximum run50025--30 seconds256 MB~$0.010

There are no external API costs. The CFPB database is a free US government resource. Apify's free tier provides $5 of monthly credits, which is enough for hundreds of runs of this actor.


Limitations

  • 500 results per run -- The actor caps output at 500 complaints per execution. For larger datasets, run multiple times with different date ranges and combine results.
  • No ZIP code filtering -- The CFPB API does not support filtering by ZIP code directly. Filter by state, then post-process using the zipCode field in the output.
  • Narrative availability -- The narrative field is only populated when the consumer opted in to public disclosure. Many complaints will have null for this field.
  • 15-day publication delay -- Complaints typically appear in the CFPB database approximately 15 days after being sent to the company, to allow time for the company to respond.
  • Company name matching -- Company names must match the CFPB's canonical name format (e.g., "EQUIFAX, INC." not just "Equifax"). Partial matches may not return expected results.
  • No real-time data -- The database is updated daily by the CFPB, not in real time. There may be a short lag between updates.
  • US complaints only -- The CFPB database covers only complaints filed by US consumers against financial companies operating in the United States.

Responsible use

  • Public data only -- This actor accesses a publicly available US government database. All complaint records are published by the CFPB with consumer consent considerations already applied.
  • Respectful access -- The actor includes a 200ms delay between API pages and uses no_aggs=true to minimize server load on the government endpoint.
  • No personal identification -- While complaints include state and partial ZIP codes, they do not contain personally identifiable information about the consumers who filed them.
  • Fair interpretation -- A high volume of complaints does not necessarily indicate wrongdoing. Larger companies naturally receive more complaints. Always normalize by company size or customer base when drawing conclusions.
  • Comply with terms -- Users should review the CFPB data terms and ensure their use aligns with applicable regulations and ethical standards.

FAQ

Do I need a CFPB API key to use this actor? No. The CFPB consumer complaint database is a free, public US government resource. This actor accesses it without any authentication or API key.

How current is the complaint data? The CFPB updates its database daily. Complaints typically appear approximately 15 days after being sent to the company, giving the company time to respond before publication.

Can I get more than 500 results per run? The actor is capped at 500 results per run to keep execution times reasonable. For larger datasets, run the actor multiple times with different date ranges or filters, then combine the output datasets.

What does the narrative field contain? When consumers submit complaints, they can include a written description of what happened. If the consumer consents to public disclosure, this text appears in the narrative field. Otherwise it will be null.

Can I search for complaints from a specific ZIP code? The CFPB API does not support direct ZIP code filtering. Filter by state using the state parameter, then filter the output by zipCode in your post-processing.

How far back does the data go? The CFPB complaint database includes records from 2011 to the present, covering over 5 million complaints across all financial product categories.

What product categories are available? The actor supports 10 product filters: Credit reporting/repair, Debt collection, Mortgage, Credit card/prepaid card, Checking/savings account, Student loan, Vehicle loan/lease, Money transfer/virtual currency, Payday/title/personal loan, and Personal loan.

How are company names matched? The company parameter filters by the CFPB's canonical company name. For best results, use the official name as it appears in CFPB records (e.g., "EQUIFAX, INC." rather than "Equifax"). You can also try the searchTerm field for more flexible matching.

Can I schedule this actor to run automatically? Yes. Use Apify's built-in scheduler to run the actor on any cadence -- daily, weekly, or custom cron expressions. Combine with webhooks or integrations to get notified when new data is available.

What does the timely field mean? The timely field indicates whether the company responded to the complaint within the CFPB's expected timeframe (typically 15 days). A value of "Yes" means the response was on time.

Can I export results as CSV or Excel? Yes. Apify datasets support export in JSON, CSV, Excel (XLSX), XML, HTML, and RSS formats. Use the Dataset tab in the console or the Dataset API endpoint with a format parameter.

Is this actor suitable for large-scale research? For datasets under 500 records, a single run is sufficient. For larger research projects, schedule multiple runs with segmented date ranges or state filters, then merge the datasets. The actor's low cost makes high-volume data collection very affordable.


ActorDescription
FDIC Bank Data SearchLook up detailed information about FDIC-insured banks and financial institutions. Correlate complaint volumes with bank size, assets, or regulatory status.
SEC EDGAR Filing AnalyzerAnalyze SEC filings for publicly traded financial companies. Cross-reference CFPB complaint trends with financial disclosures and risk factors.
OFAC Sanctions SearchCheck whether companies or individuals appearing in complaints are on the OFAC sanctions list for enhanced due diligence.
SEC Insider TradingTrack insider trading activity at financial companies. Compare insider selling patterns with spikes in consumer complaints.
EDGAR Filing SearchSearch SEC EDGAR filings by company, form type, or date range. Build a complete regulatory picture alongside CFPB complaint data.
Congressional Stock Trade TrackerMonitor stock trades by members of Congress. Investigate whether legislative activity correlates with changes in complaint patterns for regulated industries.