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 21 Aug 2026
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 21 Aug 2026, 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.
Alternatives to CFPB Consumer Complaints API
If CFPB Consumer Complaints does not fit, these finance & crypto apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.
| API | What it does | Auth | CORS | Last verified |
|---|---|---|---|---|
| CoinGecko | Free cryptocurrency price API covering 10,000+ coins. Live prices, market cap and volume in any currency, no API key on the public tier. Tested curl example. | No key | Yes | 19 Aug 2026 |
| Binance Public API | Binance public market data API needs no API key: live ticker prices, order books, klines and 24h stats for every trading pair. Tested curl example and response. | No key | Yes | 19 Aug 2026 |
| Coinbase Exchange Rates | Coinbase public exchange rates API with no key: convert any cryptocurrency to 100+ fiat currencies in a single request. Tested curl example and live JSON. | No key | Yes | 19 Aug 2026 |
| Frankfurter | Free currency exchange rate API with no key, built on European Central Bank data. Latest and historical rates, time series and conversion. Tested curl example. | No key | Yes | 19 Aug 2026 |
| CoinLore | Free cryptocurrency API with no key and no registration: prices, market cap, volume and supply for 10,000+ coins with generous limits. Tested curl example. | No key | Yes | 19 Aug 2026 |
| CoinPaprika | Free cryptocurrency API with no key: prices, market cap, volume, supply and developer activity for 2,500+ coins with generous limits. Tested example. | No key | No | 20 Aug 2026 |
CFPB Consumer Complaints is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 21 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.