Technical writing

CFPB Consumer Complaint Database: The Federal Record of 7 Million Financial Complaints

· 20 min read· AI Analytics
CFPBConsumer ComplaintsFinancial ServicesConsumer ProtectionFederal Data

Since July 2011, the Consumer Financial Protection Bureau has collected, screened, and forwarded every qualifying consumer dispute with a bank, mortgage servicer, credit card issuer, debt collector, student loan servicer, or payday lender to the named company — and published the record. That database now holds more than 7 million complaints, grows by roughly a million entries per year, and is publicly downloadable in full without registration. It is the most comprehensive federal record of retail financial consumer harm in existence: company names, product types, geographic codes, company response categories, consumer dispute flags, and — for roughly one complaint in five — the consumer's own narrative of what happened.

Background and legislative origin

The CFPB was created by Title X of the Dodd-Frank Wall Street Reform and Consumer Protection Act of 2010, signed into law on July 21, 2010. The bureau became operationally effective on July 21, 2011. Its statutory mandate includes supervising and enforcing federal consumer financial protection laws across banks, credit unions, securities firms, payday lenders, mortgage servicers, debt collectors, and other financial companies.

The Consumer Complaint Database launched publicly in March 2012, initially covering credit card complaints submitted since the bureau opened in mid-2011. Coverage expanded progressively through 2012 and 2013 to encompass mortgages, bank accounts, private student loans, and other product types. By 2014 the database covered the full set of product categories the CFPB currently publishes. Complaint narrative publication — the consumer's own text description, redacted for personal identifiers — was added in June 2015 over the objection of industry groups who argued it would mislead the public by presenting unverified consumer accounts.

The CFPB's complaint process works as follows. A consumer submits a complaint via the CFPB website, by phone, by mail, or through referral from a congressional office, state regulator, or other agency. The CFPB screens each submission to verify it describes a consumer financial product or service, is not a duplicate of a complaint already forwarded, and is not related to ongoing commercial litigation or arbitration. Complaints that pass screening are forwarded to the named company within approximately 24 to 48 hours. The company has 15 calendar days to respond and 60 calendar days to close the complaint. About 97 percent of forwarded complaints receive a timely company response within the 15-day window. After the company closes the complaint, the consumer has 60 days to dispute the company's response if they believe it was inadequate.

The public database is updated daily. As of 2024, it contains more than 7 million records spanning complaints received from July 2011 through the present. Complaint volume has grown from fewer than 100,000 annually in the early years to over 1 million per year in 2022 and 2023. The growth reflects both a genuine increase in consumer awareness of the CFPB's complaint mechanism and structural shifts in the complaint composition — most significantly, the extraordinary surge in credit reporting complaints that began around 2019 and accelerated through the pandemic years.

Complaint taxonomy: product, sub-product, issue

Each complaint record is classified using a three-level hierarchy: product at the top level, sub-product at the second level, and issue at the third level, with an optional sub-issue for further specificity. The taxonomy is defined by the CFPB and has evolved over the years as new product types entered CFPB jurisdiction and as complaint patterns revealed the need for more granular categories.

The top-level product categories as of 2024, with approximate share of total complaint volume, are:

ProductSharePrimary sub-products
Credit reporting, credit repair services, or other personal consumer reports~60%Credit reporting; Credit repair services; Other personal consumer report
Debt collection~10%Credit card debt; Medical debt; I do not know; Other debt; Auto debt; Mortgage debt
Credit card or prepaid card~8%General-purpose credit card or charge card; Store credit card; General-purpose prepaid card; Gift card
Mortgage~7%Conventional home mortgage; FHA mortgage; VA mortgage; Reverse mortgage; Home equity loan or line of credit (HELOC)
Checking or savings account~5%Checking account; Savings account; CD (Certificate of Deposit); Other banking product or service
Student loan~4%Federal student loan servicing; Private student loan
Vehicle loan or lease~2%Loan; Lease; Title loan
Money transfer, virtual currency, or money service~2%Domestic (US) money transfer; International money transfer; Mobile or digital wallet; Virtual currency; Traveler's check or cashier's check
Payday loan, title loan, personal loan, or advance loan~1%Payday loan; Personal line of credit; Installment loan; Title loan; Pawn loan

The credit reporting dominance — roughly 60 percent of all complaints received in recent years — has fundamentally reshaped what the database measures. The three major consumer reporting agencies (Equifax, Experian, TransUnion) collectively receive more than 50 percent of all complaints across all companies in the entire database. In any given month, the three bureaus occupy the top three positions in the company complaint count ranking, often by a factor of ten or more compared to the next-highest company. This concentration means that complaint volume statistics computed without filtering by product type are dominated by the structural dynamics of credit reporting disputes rather than reflecting the distribution of harm across the broader consumer financial system.

Within credit reporting, the most common issues are: incorrect information on a credit report (the single largest issue category, covering errors in account status, payment history, and personal information); problems with a credit investigation (the bureau's failure to adequately investigate a dispute); identity theft-related issues (fraudulent accounts appearing on the victim's report); and improper use of the consumer's credit report (unauthorized inquiries or inappropriate permissible purpose claims).

Within debt collection, the dominant issues are: attempts to collect debt not owed; communication tactics (excessive calls, calls at prohibited times, calls to workplace after request to stop); false representations about the debt; and failure to provide verification of the debt upon request. These issues map directly onto the prohibitions in the Fair Debt Collection Practices Act (FDCPA), and CFPB debt collection complaint data is a primary input for FDCPA enforcement prioritization.

Data fields

The public database contains the following fields for each complaint record:

FieldNotes
complaint_idUnique CFPB-assigned sequential identifier. Used to join records across data exports and API responses.
date_receivedDate the CFPB received the complaint. ISO 8601 format (YYYY-MM-DD) in CSV; millisecond epoch timestamp in API responses.
product / sub_productTop-level and second-level product classification. Values are controlled vocabulary strings. See taxonomy table above.
issue / sub_issueIssue and optional sub-issue describing the consumer's problem. Values are controlled vocabulary; the list has expanded significantly since 2011.
consumer_complaint_narrativeFree-text complaint description in the consumer's own words. Populated for approximately 20% of complaints where the consumer provided consent. CFPB redacts PII including names, account numbers, phone numbers, and Social Security numbers.
company_public_responseOptional public statement from the company in response to the consumer's narrative. Most companies do not provide public responses. Filed by a small fraction of institutions.
companyCompany name as submitted. Requires normalization: “BANK OF AMERICA, N.A.”, “Bank of America, National Association”, and “Bank of America” are distinct string values in the data despite referring to the same institution.
stateTwo-letter state abbreviation for the consumer's reported address. Includes DC, PR, VI, and AE/AP/AA for military addresses.
zip_codePartial ZIP code — 3-digit prefix for areas with small populations to prevent re-identification. 5-digit codes appear for larger ZIP areas. Not suitable for precise geocoding without crosswalk to county FIPS.
tags“Older American” (age 62+) and/or “Servicemember” (active duty, veteran, or dependent). Applied by CFPB based on consumer self-identification or referral source. Not populated for the majority of complaints.
consumer_consent_providedWhether the consumer consented to publish the narrative. Values: “Consent provided”, “Consent not provided”, “N/A”. Narrative is only public when consent is provided.
submitted_viaSubmission channel: Web, Phone, Postal mail, Email, Fax, Referral. The vast majority of complaints are submitted via Web.
date_sent_to_companyDate the CFPB forwarded the complaint to the company. The lag between date_received and date_sent_to_company is typically zero to two business days.
company_response_to_consumerCompany's reported resolution. Values: “Closed with explanation”, “Closed with monetary relief”, “Closed with non-monetary relief”, “In progress”, “Untimely response”. Self-reported by company; CFPB does not independently verify accuracy.
timely“Yes” or “No” — whether the company responded within 15 calendar days. Approximately 97% of complaints receive a timely response.
consumer_disputed“Yes”, “No”, or “N/A” — whether the consumer disputed the company's response as inadequate after receiving it. Note: this field has been deprecated as of 2017 for new complaints; older complaints in the database carry Yes/No values.

Company response mechanics

The company response field is the primary structured measure of how companies treat consumers who complain. The CFPB defines four outcome categories for closed complaints:

Closed with explanation means the company responded to the complaint and provided an explanation of its position or actions, but did not provide monetary or non-monetary relief. This is the most common response category for the credit reporting agencies, reflecting a response posture that disputes the consumer's account without conceding error and without providing a concrete remedy. For debt collectors, “closed with explanation” often means the collector provided documentation supporting the validity of the debt.

Closed with monetary relief means the company provided a concrete financial remedy — a refund, a fee waiver, a credit adjustment, a payment on the account, or a cancellation of an amount owed. Monetary relief rates are highest in the mortgage servicing and credit card product categories, where servicer error (misapplied payments, incorrect escrow calculations) and unauthorized charges (billing errors, unauthorized fee assessments) create remediable financial harm.

Closed with non-monetary relief means the company took corrective action without a direct financial payment — correcting a credit report tradeline, updating account records, changing an account designation, or removing an incorrect collection from a credit file. Non-monetary relief is the predominant positive outcome in the credit reporting and debt collection categories.

Company names in the data require normalization before any company-level analysis. The same institution may appear under multiple name variants because the CFPB records the company name as provided in the complaint routing process, and this has changed over time as institutions have been acquired, renamed, or restructured. A rigorous company-level analysis must construct a normalization mapping that resolves these variants to canonical institution identifiers. For the largest institutions — the three credit bureaus, the top-ten banks by asset size — the variant list is well-established, but for mid-size and smaller institutions the mapping requires manual review.

Consumer dispute rates — the fraction of complaints where the consumer disputed the company's response as inadequate — varied substantially across companies and product types in the years when this field was active (pre-2017). Debt collectors had among the highest dispute rates, with some third-party collectors seeing 40 to 50 percent of their responses disputed. The three major credit bureaus showed dispute rates of 15 to 25 percent, reflecting a substantial minority of consumers who received responses they considered inadequate but who still had to dispute them through the CFPB process rather than through successful bureau investigation.

Geographic and temporal patterns

Per-capita complaint rates (complaints per 100,000 residents) vary substantially by state, though the distribution is partly an artifact of credit reporting complaint concentration. States with higher complaint rates on a per-capita basis tend to include Florida, Nevada, Georgia, Delaware, Maryland, and Virginia — states with higher credit market participation rates, higher proportions of renters who are frequent targets of debt collection, and in some cases higher incidence of the identity-theft-driven credit reporting errors that generate complaint volume.

The ZIP code field, while providing only a 3-digit prefix for smaller population areas, is usable for county-level geographic analysis with a zip-to-county crosswalk. The HUD ZIP-to-CBSA crosswalk (updated quarterly) and the Census Bureau's ZIP Code Tabulation Area (ZCTA) to county relationship file provide the mapping needed to assign complaints to counties, metropolitan statistical areas, or census-designated place geographies.

The temporal distribution of the database reveals several distinct demand events that produced complaint spikes visible as inflection points in the time series:

2017 Equifax data breach. The September 2017 breach exposed the personal financial data of approximately 147 million Americans. The immediate consequence for the complaint database was a spike in credit reporting complaints as consumers discovered unauthorized accounts, sought to place security freezes, and found errors on their reports attributable to breach-related identity theft. The breach generated a multi-year tail of credit reporting complaint volume that extended through 2018 and 2019.

COVID-19 pandemic (2020–2021). The CARES Act's mortgage forbearance provisions and student loan payment pauses created two distinct complaint waves. The forbearance entry wave — servicers failing to process forbearance requests, misreporting forbearance accounts to the credit bureaus as delinquent — drove a surge in mortgage servicing and credit reporting complaints beginning in April 2020. The forbearance exit wave — servicers misapplying resumed payments, failing to correctly process pandemic-era loss mitigation options, placing accounts in incorrect post-forbearance status — generated a second complaint surge beginning in late 2021 as forbearance periods expired.

Biden loan forgiveness (2022–2024).The Biden administration's student debt cancellation announcements, beginning in August 2022 and extending through the SAVE plan and targeted cancellation programs in 2023 and 2024, produced a two-to-three-fold increase in federal student loan servicing complaints. The complaints reflected servicer processing errors, confusion about eligibility under different cancellation programs, payment count recalculations for income-driven repayment plans, and the operational failures that attended the transfer of loan servicing accounts between servicers during the policy transition period.

Buy Now Pay Later (2023–2024).BNPL products — offered by Affirm, Klarna, Afterpay, PayPal Pay Later, and others — began generating significant complaint volume in 2023 as the products scaled into mainstream consumer use. Dominant BNPL complaint issues include unauthorized charges, difficulty disputing transactions with merchants, and credit reporting of BNPL accounts in ways consumers did not anticipate when they agreed to the product terms.

Major company complaint profiles

The three major credit bureaus. Equifax, Experian, and TransUnion collectively account for the largest share of CFPB complaints of any company group in the database. Their combined complaint volume dwarfs every other company in the system. For each bureau, the dominant issues are credit report accuracy and dispute handling. The bureaus' response posture — predominantly “closed with explanation” rather than “closed with non-monetary relief” — is a persistent subject of CFPB supervisory attention and consumer advocacy concern.

Debt collectors. Midland Credit Management (a subsidiary of Encore Capital Group), Portfolio Recovery Associates (a subsidiary of PRA Group), and Convergent Outsourcing are among the highest-complaint third-party debt collectors. These companies purchase charged-off consumer debt portfolios and attempt collection on accounts that original creditors have given up on. The complaint issues for these companies track the FDCPA prohibitions: attempts to collect debt not owed (either the debt was discharged, already paid, subject to a statute of limitations, or belonged to a different consumer), communication harassment, and failure to validate debt upon request.

Wells Fargo. Wells Fargo carries one of the most prominent complaint profiles of any major bank in the database, reflecting the multiple enforcement actions the bank has faced across its consumer product lines. The fake accounts scandal that became public in 2016 (employees opening unauthorized accounts to meet sales quotas) produced a multi-year complaint spike. The CFPB's December 2022 consent order against Wells Fargo — the largest CFPB action ever taken, at $3.7 billion including $2 billion in consumer redress — covered failures across mortgage servicing, auto loan repossessions, checking account overdraft fees, and consumer deposit accounts. The complaint data reflects these failures across multiple product categories simultaneously.

Navient. Navient Corporation, the student loan servicer spun off from Sallie Mae in 2014, accumulated the highest student loan complaint rates of any servicer in the database across the 2015–2022 period. The CFPB filed suit against Navient in January 2017, alleging that Navient had systematically misallocated payments, steered borrowers into forbearance rather than income-driven repayment plans (increasing the total interest borrowers paid), and misrepresented the consequences of its advice. The lawsuit settled in January 2022, with Navient agreeing to cancel $1.7 billion in private student loan debt and pay $95 million in restitution to approximately 350,000 federal student loan borrowers. The complaint database traces the arc of this enforcement action: elevated Navient complaint rates beginning in 2015, sustained high volume through the lawsuit period, and a decline following the servicer's announcement that it would cease federal student loan servicing at the end of 2021.

CFPB enforcement actions

The complaint database is a distinct product from the CFPB's enforcement record, though the two are analytically related. The CFPB maintains a searchable catalog of every enforcement action taken since 2011 at cfpb.gov/enforcement/actions/, covering Civil Investigative Demands, Administrative Proceedings, and Federal court filings. The enforcement record includes the type of action, the named institution, the statutory violations alleged, and the terms of any resolution including civil money penalties and consumer restitution or relief.

Since its founding through 2024, the CFPB has ordered more than $20 billion in total consumer relief through enforcement actions. The largest individual actions include: Wells Fargo (2022, $3.7 billion — the largest single CFPB action, covering fake accounts, auto repossessions, and mortgage failures); Navient (2022, $1.85 billion in student loan relief and cash restitution); Citibank (2015, $700 million for deceptive credit card add-on products); PayPal/Bill Me Later (2015, $25 million for deceptive marketing); and Ocwen Financial (2017, $2.1 billion in relief for mortgage servicing failures). Complaint data for each of these institutions showed elevated volume and adverse response patterns in the years before the enforcement action was filed.

Data access: API and bulk download

The CFPB provides two primary access paths for the complaint database.

Elasticsearch API. The complaint search API is available at:

https://api.consumerfinance.gov/data-research/consumer-complaints/search

No API key is required. The API is Elasticsearch-based and supports the following key query parameters: search_term (full-text search across complaint fields), field (restrict full-text search to a specific field), date_received_min anddate_received_max (ISO date bounds on complaint receipt date),product (filter by top-level product type),sub_product, company (exact or partial company name match), state, zip_code, issue,submitted_via, sort (sort order, e.g. “created_date_desc”), size (records per page, maximum 10,000), and frm (offset for pagination). The API returns a JSON object with a hits key containing atotal count and a hits array of complaint records, each wrapped in an Elasticsearch _source object.

Rate limits are not formally published by the CFPB but are implemented. Queries that return large result sets should use 1-second delays between paginated requests to avoid triggering throttling. For large full-database extractions, the bulk download is significantly more efficient.

Bulk download. The complete complaint database is available as a single CSV or JSON file from:

https://www.consumerfinance.gov/data-research/consumer-complaints/download-complaints/

The full database in CSV format is approximately 1.5 GB or more when gzipped as of 2024, and larger uncompressed. It contains all structured fields for every complaint in the database including consumer narratives where consent was provided. The CFPB also maintains the complaint database on the Socrata open data platform (data.consumerfinance.gov), where it is accessible via the Socrata Open Data API (SODA) — though the direct CFPB API and bulk download are simpler for most analytical workflows.

Python: analyzing 2023 mortgage complaints by company

The script below queries the CFPB complaint API for all mortgage complaints received in calendar year 2023, paginates through the full result set, and produces three analytical outputs: (1) the top 20 mortgage servicers by complaint volume, (2) the company response breakdown (monetary relief, non-monetary relief, explanation) for those top-20 companies, and (3) the consumer dispute rate for each company, computed as the fraction of closed complaints where the consumer subsequently disputed the company's response. The script uses only the Python standard library — no third-party packages are required.

import json
import time
import urllib.request
import urllib.parse
from collections import defaultdict

# ---------------------------------------------------------------------------
# CFPB Consumer Complaint Database -- Mortgage Complaint Analysis (2023)
#
# API endpoint (Elasticsearch-based, no key required):
#   https://api.consumerfinance.gov/data-research/consumer-complaints/search
#
# Key parameters:
#   product           -- filter by product type (partial match supported)
#   date_received_min -- ISO date, inclusive lower bound
#   date_received_max -- ISO date, inclusive upper bound
#   size              -- records per page (max 10,000)
#   frm               -- offset for pagination
#   sort              -- sort order (e.g. "created_date_desc")
#
# The API returns JSON with structure:
#   { "hits": { "total": N, "hits": [ { "_source": { ...fields... } }, ... ] } }
# ---------------------------------------------------------------------------

BASE_URL = "https://api.consumerfinance.gov/data-research/consumer-complaints/search"
PAGE_SIZE = 10_000        # maximum allowed per request
REQUEST_DELAY = 1.0       # seconds between paginated requests


def fetch_complaints(params: dict) -> list[dict]:
    """Paginate through CFPB complaint API and return all matching records."""
    all_records: list[dict] = []
    offset = 0

    while True:
        params["size"] = PAGE_SIZE
        params["frm"] = offset
        qs = urllib.parse.urlencode(params)
        url = f"{BASE_URL}?{qs}"

        with urllib.request.urlopen(url, timeout=60) as resp:
            data = json.loads(resp.read().decode("utf-8"))

        hits = data.get("hits", {})
        records = [h["_source"] for h in hits.get("hits", [])]
        all_records.extend(records)

        total = hits.get("total", 0)
        offset += PAGE_SIZE
        print(f"  Fetched {len(all_records):,} / {total:,} records ...")

        if offset >= total or not records:
            break
        time.sleep(REQUEST_DELAY)

    return all_records


# ---------------------------------------------------------------------------
# Step 1: Pull all mortgage complaints received in 2023
# ---------------------------------------------------------------------------
print("Fetching 2023 mortgage complaints ...")
params = {
    "product": "Mortgage",
    "date_received_min": "2023-01-01",
    "date_received_max": "2023-12-31",
    "sort": "created_date_desc",
}
records = fetch_complaints(params)
print(f"Total mortgage complaints (2023): {len(records):,}\n")

# ---------------------------------------------------------------------------
# Step 2: Tally complaints by company -- top 20 mortgage servicers
# ---------------------------------------------------------------------------
company_counts: dict[str, int] = defaultdict(int)
for r in records:
    company = (r.get("company") or "Unknown").strip()
    company_counts[company] += 1

top20 = sorted(company_counts.items(), key=lambda x: x[1], reverse=True)[:20]

print("=== Top 20 Companies by 2023 Mortgage Complaint Volume ===")
print(f"{'Rank':<5} {'Company':<55} {'Complaints':>10}")
print("-" * 72)
for rank, (company, count) in enumerate(top20, 1):
    print(f"{rank:<5} {company:<55} {count:>10,}")

# Build set of top-20 company names for downstream filtering
top20_names = {company for company, _ in top20}

# ---------------------------------------------------------------------------
# Step 3: Company response breakdown for top-20 mortgage servicers
# ---------------------------------------------------------------------------
# Buckets: monetary relief / non-monetary relief / explanation / other
response_buckets = {
    "Closed with monetary relief": "monetary_relief",
    "Closed with non-monetary relief": "nonmonetary_relief",
    "Closed with explanation": "explanation",
    "In progress": "in_progress",
    "Untimely response": "untimely",
}

company_responses: dict[str, dict[str, int]] = {
    name: defaultdict(int) for name in top20_names
}

for r in records:
    company = (r.get("company") or "Unknown").strip()
    if company not in top20_names:
        continue
    response = r.get("company_response_to_consumer") or "Other"
    bucket = response_buckets.get(response, "other")
    company_responses[company][bucket] += 1

print("\n=== Company Response Breakdown (Top 20 Mortgage Servicers, 2023) ===")
header = f"{'Company':<55} {'Total':>7} {'Monetary%':>9} {'Non-Mon%':>9} {'Explan%':>8}"
print(header)
print("-" * 90)

for company, _ in top20:
    resp = company_responses[company]
    total = sum(resp.values()) or 1
    mon_pct  = resp["monetary_relief"]    / total * 100
    nmon_pct = resp["nonmonetary_relief"] / total * 100
    exp_pct  = resp["explanation"]        / total * 100
    print(
        f"{company:<55} {total:>7,} {mon_pct:>8.1f}% {nmon_pct:>8.1f}% {exp_pct:>7.1f}%"
    )

# ---------------------------------------------------------------------------
# Step 4: Consumer dispute rate -- companies with highest dispute rates
# ---------------------------------------------------------------------------
# consumer_disputed field: "Yes" / "No" / "N/A"
company_disputes: dict[str, dict[str, int]] = {
    name: {"disputed": 0, "not_disputed": 0, "na": 0}
    for name in top20_names
}

for r in records:
    company = (r.get("company") or "Unknown").strip()
    if company not in top20_names:
        continue
    disputed = (r.get("consumer_disputed") or "N/A").strip()
    if disputed == "Yes":
        company_disputes[company]["disputed"] += 1
    elif disputed == "No":
        company_disputes[company]["not_disputed"] += 1
    else:
        company_disputes[company]["na"] += 1

# Compute dispute rate (disputed / (disputed + not_disputed))
dispute_rates: list[tuple[str, float, int]] = []
for company in top20_names:
    d = company_disputes[company]
    adjudicated = d["disputed"] + d["not_disputed"]
    if adjudicated == 0:
        continue
    rate = d["disputed"] / adjudicated * 100
    dispute_rates.append((company, rate, adjudicated))

dispute_rates.sort(key=lambda x: x[1], reverse=True)

print("\n=== Consumer Dispute Rates (Top 20 Mortgage Servicers, 2023) ===")
print("Dispute rate = complaints disputed by consumer / complaints with Yes or No response")
print(f"{'Company':<55} {'Dispute Rate':>12} {'Adjudicated':>12}")
print("-" * 81)
for company, rate, adj in dispute_rates:
    print(f"{company:<55} {rate:>11.1f}% {adj:>12,}")

The company name normalization issue surfaces immediately when running this script: Wells Fargo, Bank of America, JPMorgan Chase, and other large servicers appear under multiple name variants in the raw API output. A production analysis would add a normalization step between Steps 1 and 2, applying a manually curated mapping of known variants to canonical institution names. For the top-20 mortgage servicers by complaint volume, the variants are well-documented: “BANK OF AMERICA, N.A.”, “Bank of America, National Association”, and “Bank of America” all refer to the same entity and should be combined before computing company-level statistics.

The consumer dispute rate output is most useful as a relative measure rather than an absolute one. Dispute rates are systematically higher for product categories where company responses are more likely to be perceived as inadequate — debt collection and credit reporting — and lower for mortgage servicing, where a “closed with monetary relief” response that refunds a misapplied payment is more concretely satisfying to the consumer than a credit bureau explanation that leaves the error on the report. Within a product category, a servicer whose dispute rate is significantly above the peer median is providing responses that consumers find less credible or adequate than those of their competitors — a signal worth investigating further.

Limitations

Four analytical constraints deserve explicit acknowledgment before working with the CFPB complaint database at scale.

Complaint volume is not a rate. Larger companies with more customers receive more complaints in absolute terms. A bank with 40 million customers will receive more complaints than a bank with 4 million customers even if the per-customer complaint rate is identical. Per-customer normalization requires external data on company customer counts, which are not publicly available at the granularity needed for precise comparisons.

A complaint is not a finding of violation.The CFPB forwards complaints without making a legal determination that the company did anything wrong. Companies close the majority of complaints with explanation or without relief after reviewing them and concluding (at least for the record) that their action was correct. The database captures what consumers reported; it does not adjudicate those reports.

Company response is self-reported. The response category — monetary relief, non-monetary relief, explanation — is filed by the company. There is no CFPB verification that a company reporting “closed with monetary relief” actually provided adequate relief, or that an explanation was accurate. CFPB examiners can verify these representations during supervisory examinations, but those findings are non-public and do not flow back into the complaint database.

Complaint filing has selection bias.Consumers who are aware of the CFPB, have internet access, and have time to navigate the complaint submission process are not representative of all consumers experiencing financial service problems. The database likely undercounts harm experienced by lower-income consumers, non-English-speaking consumers, elderly consumers who are unaware of the CFPB, and rural consumers with limited digital access. Military servicemember and older American tags provide some demographic breakout, but the database does not include race, income, or detailed demographic fields.

For the federal rulemaking context behind CFPB consumer protection regulations, including the notice-and-comment process and how CFPB rules are published in the Federal Register: Federal Register: The Official Rulemaking Journal Behind 90,000 Pages of Annual US Regulatory Activity →

For NOAA's Storm Events database — another federally maintained public complaint and event record that follows a similar bulk download structure: NOAA Storm Events: The Federal Database Behind 50 Years of US Weather Disaster Data →