CFPB Consumer Complaints API
Free Consumer Financial Protection Bureau complaint database API with no key: millions of US consumer complaints by product, company, state and issue, with narratives.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the CFPB Consumer Complaints API?
The Consumer Financial Protection Bureau publishes its consumer complaint database as a free search API with no key. It exposes millions of complaints about US financial products, filterable by company, product, issue, state and date.
This is one of the largest public datasets about how financial products actually behave in the field: every complaint the CFPB forwards to a company, with the product, the issue, the company's response and — where the consumer consented — their narrative in their own words. Because the underlying store is Elasticsearch, the response arrives in raw ES shape, with `hits.hits[]._source` holding each record and `hits.total.value` the match count.
Two things to know before you build on it. The API rejects any request carrying an `Origin` header outright, so a browser fetch fails at the edge and you must proxy through your own backend. And the dataset describes complaints, not verified findings — a high complaint count reflects volume, customer base size and reporting propensity as much as anything else. Present counts with that context or you will mislead people.
Quick facts
- Base URL
https://www.consumerfinance.gov/data-research/consumer-complaints/search/api/v1- Authentication
- No key or registration. Requests carrying an Origin header are blocked at the CDN, so calls must be server-side.
- Rate limit
- No published limit, but large aggregations are slow. Use `no_aggs=true` when you only need records.
- Pricing
- Free. Published as US open government data.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the CFPB Consumer Complaints API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Two most recent consumer complaints
GET https://www.consumerfinance.gov/data-research/consumer-complaints/search/api/v1/?size=2&no_aggs=true&field=complaint_what_happened
curl 'https://www.consumerfinance.gov/data-research/consumer-complaints/search/api/v1/?size=2&no_aggs=true&field=complaint_what_happened'const res = await fetch("https://www.consumerfinance.gov/data-research/consumer-complaints/search/api/v1/?size=2&no_aggs=true&field=complaint_what_happened");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://www.consumerfinance.gov/data-research/consumer-complaints/search/api/v1/?size=2&no_aggs=true&field=complaint_what_happened", timeout=20)
res.raise_for_status()
print(res.json()){
"took": 1406,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 17212724,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "complaint-public-v2",
"_id": "9999997",
"_score": 1.0,
"_source": {
"product": "Credit reporting or other personal consumer reports",
"complaint_what_happened": "",
"date_sent_to_company": "2024-09-03T22:42:56.000Z",
"issue": "Improper use of your report",
"sub_product": "Credit reporting",
"zip_code": "33060",
"tags": null,
"has_narrative": false,
"complaint_id": "9999997",
"timely": "Yes",
"company_response": "Closed with non-monetary relief",
"submitted_via": "Web",
"company": "TRANSUNION INTERMEDIATE HOLDINGS, INC.",
"date_received": "2024-09-03T22:42:53.000Z",
"state": "FL",
"company_public_response": "Company has responded to the consumer and the CFPB and chooses not to provide a public response",
"sub_issue": "Reporting company used your report improperly"
},
"sort": [
1.0,
"9999997"
]
},
{
"_index": "complaint-public-v2",
"_id": "9999996",
"_score": 1.0,
"_source": {
"product": "Credit reporting or other personal consumer reports",
"complaint_what_happened": "",
"date_sent_to_company": "2Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
size | query | Optional | Number of records to return. 2 |
no_aggs | query | Optional | `true` skips the aggregation buckets, which makes the request substantially faster. true |
search_term | query | Optional | Free-text search, usually combined with `field` to choose where to search. overdraft |
field | query | Optional | Which field `search_term` applies to, such as `complaint_what_happened` or `all`. complaint_what_happened |
company / product / state | query | Optional | Exact-match filters. Repeat the parameter for multiple values. TRANSUNION INTERMEDIATE HOLDINGS, INC. |
date_received_min / date_received_max | query | Optional | Date window in `YYYY-MM-DD`. 2026-01-01 |
has_narrative | query | Optional | `true` restricts to complaints where the consumer published a narrative. true |
Response fields
hits.total.valueinteger- Number of complaints matching the query, across the whole database.
hits.hits[]._source.complaint_idstring- Stable identifier for the complaint.
hits.hits[]._source.product / sub_productstring- Product taxonomy, such as credit reporting or mortgages.
hits.hits[]._source.issuestring- The issue category the consumer selected.
hits.hits[]._source.companystring- Company the complaint was sent to, in the CFPB's normalised naming.
hits.hits[]._source.company_responsestring- How the company closed it — with explanation, with monetary relief, and so on.
hits.hits[]._source.complaint_what_happenedstring- The consumer's narrative, present only where they consented to publication. Often an empty string.
hits.hits[]._source.state / zip_codestring- Location, with the ZIP partially redacted for privacy.
hits.hits[]._source.date_received / date_sent_to_companystring- Timeline dates as ISO timestamps.
hits.hits[]._source.timelystring- Whether the company responded within the required window.
What you can build with the CFPB Consumer Complaints API
- Search complaint narratives for a recurring product problem
- Compare complaint volumes across companies within a product category
- Track complaint trends in a state over time
- Build a research dataset on consumer financial product issues
Common errors and how to fix them
403 Access Denied
The request carried an `Origin` header.
Fix: The CDN blocks cross-origin requests outright. Call it server-side; a browser fetch cannot work even with a proxy header.
Very slow response
Aggregations are being computed.
Fix: Add `no_aggs=true` when you only need records. Aggregations over millions of documents are expensive.
Empty narratives
Most complaints have no published narrative.
Fix: Only complaints where the consumer opted in carry text. Filter with `has_narrative=true` if you need it.
CFPB Consumer Complaints API — frequently asked questions
Is the CFPB complaint database free to use?
Yes. It is US open government data with no key or registration. Requests must be made server-side because the CDN blocks anything carrying an Origin header.
Are complaints verified before publication?
No. The CFPB publishes complaints it forwards to companies, along with the company's response. A complaint is an allegation, not a finding, and volume reflects customer base size as much as product quality.
Why is complaint_what_happened usually empty?
The narrative is published only when the consumer explicitly consents. Most do not, so the field is an empty string on the majority of records. Use `has_narrative=true` to filter.
Can I call this from browser JavaScript?
No. The endpoint returns 403 to any request carrying an Origin header, so a direct fetch from front-end code always fails. Proxy it through your own server.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
CFPB Consumer Complaints is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.