CFPB consumer complaints - search API, normalised avatar

CFPB consumer complaints - search API, normalised

Pricing

from $5.00 / 1,000 records

Go to Apify Store
CFPB consumer complaints - search API, normalised

CFPB consumer complaints - search API, normalised

Search the CFPB Consumer Complaint Database (public API, no key) and get one normalised row per complaint: product, issue, company, state, ZIP, company response, timeliness, tags, narrative and link. Filter by term, company, product, state, date range and narrative. Default: last 30 days.

Pricing

from $5.00 / 1,000 records

Rating

0.0

(0)

Developer

RetrainMap Team

RetrainMap Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

CFPB consumer complaints — search API, normalised

One row per complaint from the Consumer Financial Protection Bureau's Consumer Complaint Database (17.5 million complaints on 2026-09-04), read live through the CFPB's public search API — no key, no scraping. Filter by search term, company, product / sub-product, state, date received and whether a consumer narrative was published; get the complaint id, dates, product, issue, company, state, ZIP, company response, timeliness, channel, tags, the narrative (trimmed to 5,000 characters) and the link to the complaint's page — normalised, with the free-text product, sub_product and company inputs resolved against the database's own published names so you do not have to know the exact spelling.

Complaints are unverified. The CFPB publishes complaints as consumers submitted them after the company responds or after 15 days; neither the CFPB nor this Actor verifies the facts alleged.

Data source and status

PublisherConsumer Financial Protection Bureau (CFPB), Consumer Complaint Database
Sitehttps://www.consumerfinance.gov/data-research/consumer-complaints/
API read by this Actorhttps://www.consumerfinance.gov/data-research/consumer-complaints/search/api/v1/ — plain GET requests; docs at https://cfpb.github.io/api/ccdb/
How it readsOne request resolves product / company names from the API's aggregations, then pages of up to 500 complaints, newest first, keyset-paged with search_after (the API's offset paging stops at 10,000; this does not)
Refresh cadenceThe CFPB refreshes the database daily (the API's _meta.last_updated, also stored in the run summary). The Actor reads live on every run; fetched_at is the fetch time
CopyrightWorks of the United States Government are not subject to copyright in the U.S. (17 U.S.C. §105); the API additionally labels the data CC0. Please cite the CFPB as the source
Known caveatsComplaint narratives appear only when the consumer consented and after CFPB scrubbing of personal information; consumer_consent_provided and consumer_disputed are not returned by the search API and are therefore not in the rows (they are in the CFPB's CSV download). Company names must be the published ones — the Actor resolves your text against them and lists the names it used in the run summary

Identification: every request carries the User-Agent

RetrainMap data actor info@steelyardclinical.com
and the contact address again in the standard From: header. The CFPB publishes no rate limit; the Actor makes at most one request per 500 ms by default.

Input

FieldTypeMeaning
search_termstringOptional full-text search over all fields (phrases in double quotes)
companystringOptional. Word-matched, case-insensitive, against published company names; every match is filtered on exactly
productstringOptional. A published product name equal to, or starting with, your text. Credit reporting selects the current Credit reporting or other personal consumer reports plus the two older credit-reporting products
sub_productstringOptional. Same matching, within the matched products (or all products)
statestringOptional two-letter consumer state, e.g. NC
date_received_from / date_received_toYYYY-MM-DDOptional. Both empty = the last 30 days
has_narrativebooleanOn = only complaints with a published narrative
max_recordsintegerDefault 500. Stop after this many rows
request_interval_msintegerDefault 500 (floor 250)
contact_emailstringSent in the From: header

Example — Equifax complaints mentioning identity theft, with narratives, since June 2026:

{ "company": "Equifax", "search_term": "identity theft", "has_narrative": true,
"date_received_from": "2026-06-01", "max_records": 500 }

An unknown product or company fails the run with a message that lists the published names.

Output (dataset row)

complaint_id, date_received, product, sub_product, issue, sub_issue, company, state, zip (as published — the CFPB masks ZIPs to XXXXX / first three digits in some cases), company_response, company_public_response, timely, submitted_via, date_sent_to_company, tags (e.g. Older American, Servicemember), has_narrative, complaint_narrative (first 5,000 characters, null when none was published), narrative_truncated, cfpb_url, fetched_at.

Dates are YYYY-MM-DD as published. A run summary (the API's match count, the resolved product / company filters, the database's last_updated, request count) is stored as RUN_SUMMARY in the run's key-value store.

Pricing (pay per event)

EventPrice
run-start — once per run$0.10
record — per row written$0.005

A 500-row pull costs $2.60. Rows stop when your run's maximum charge is reached; the run summary says so.

Operator

Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.