Skip to main content
Validate

The Complaint Check API tells you how many complaints the CFPB has published naming a company and how that count changed over the year

Send a company name and get the complaints the CFPB has published about it: the total, the last 12 months against the 12 before, the share answered on time and the products and issues named most often. 2 credits, charged only when the database holds complaints for the name.

2 credits per lookupOnly charged on a matchSame credits as every other product
1Lookup Complaint Check API showing the counts the CFPB database holds for a fictional lender, SAMPLE LENDING CO.: 12,840 complaints published, 1,960 in the last 12 months against 1,580 the year before, and 98.1 percent answered on time

2

Credits per company

about $0.01 on Starter, $9.90 per 1,000

0

Credits when none are published

no complaints, no charge

12 vs 12

Months compared

the last year against the year before

Top 5

Products and issues listed

each with its count

Two windows of published complaints and the products named most often come back in one call

The response counts the last 12 months against the 12 before, so the change is a field, and ranks the five products named most often with their counts. The company and every number here are invented.

Two bars compare the complaints the CFPB published about a fictional lender in the 12 months before, 1,580, with the last 12 months, 1,960, up 24.1 percent, beside the five products named most often, led by mortgage at 5,200

A company comes back as the CFPB's published counts in one flat payload

The counts come from the CFPB's own public database

Every count is read from the Consumer Complaint Database that the CFPB publishes. The CFPB publishes a complaint after the company responds or after 15 days and says the database generally updates daily. Each result carries the day it was read and the date of the newest complaint.

  • Total complaints published
  • Date of the newest complaint
  • The day the counts were read
  • The CFPB's own spelling of the name

The last 12 months are set against the 12 before

The response counts the complaints received in the last 12 months and in the 12 months before, and gives the change in percent, so a trend is one field instead of two queries you write yourself. The change is empty when nothing was published for the earlier year.

  • Complaints in the last 12 months
  • Complaints in the 12 before
  • The change in percent
  • A flag when the count is up 25% or more

Response times and outcomes come as shares

The share of responses the CFPB records as sent on time, and the share of finished complaints that ended in monetary or non-monetary relief, arrive beside the count still in progress and every way the company responded, each with its count.

  • Share answered on time
  • Share closed with relief
  • Complaints still in progress
  • Every company response, counted

Products and issues are ranked with their counts

The five products and the five issues named most often come back with their counts, with the channels the complaints came in through, so you can see what a company's complaints are about without reading them.

  • Top five products
  • Top five issues
  • Channels, such as web, referral and phone
  • The top product and issue as flat fields

Similar names are listed so a parent is not mistaken for a subsidiary

The best match is returned in full and up to five other matching names are listed in other_matches, because a parent and its subsidiaries are often listed separately in the CFPB's database. Look up the exact name you want when the first match is not the right one.

  • Best match returned in full
  • Up to five other names listed
  • A count of every name that matched
  • Letter case ignored, legal endings tried both ways

A name with no published complaints costs nothing

You are charged 2 credits only when the database holds complaints for the name. A name it holds none for, a name that is too short or too long and a lookup the CFPB could not answer cost 0, and that holds for bulk CSV jobs as well as the API.

  • Zero credits when none are published
  • Bulk CSV with a company column
  • The same credits as every other product
  • One API key for all of it

A company name goes in and the published complaint counts come out

01

Send a company name to the endpoint

POST the name as people write it. Letter case is ignored, and punctuation and endings such as Inc or LLC are tried with and without. A name that is under 2 or over 100 characters is refused with a clear error and costs nothing.

request

$ POST /api/v1/complaint-check

"company": "Sample Lending"

> 2 to 100 characters

02

We match it to the CFPB's list and count

The name is matched against the CFPB's own company list, and the best match is counted: the total, the last 12 months against the 12 before, how the company responded and what the complaints were about. Other names that match are listed, so a parent is not mistaken for a subsidiary.

processing

Name matched to the CFPB's list

Complaints counted

Last 12 months set against the 12 before

Products, issues and channels ranked

03

Get the summary, flat and structured

Totals, shares and breakdowns arrive in one JSON payload. A name with published complaints bills 2 credits, and one the database holds none for bills nothing.

200 OK

companySAMPLE LENDING CO.

published12,840

last 12 months1,960

top five products and issues2 credits, 0 if none

One endpoint checks a company name and works like every other 1Lookup call

Same authentication, same credit balance, and the same response envelope as every other 1Lookup product. If you have already integrated one endpoint, this one is a URL change.

POST /v1/complaint-check
curl -X POST https://app.1lookup.io/api/v1/complaint-check \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "company": "Sample Lending" }'
200 OK
{
  "classification": {
    "found": true,
    "name": "SAMPLE LENDING CO.",
    "total_complaints": 12840,
    "complaints_last_12_months": 1960,
    "complaints_previous_12_months": 1580,
    "change_pct": 24.1,
    "newest_complaint_date": "2026-10-19",
    "timely_response_pct": 98.1,
    "relief_pct": 23.6,
    "in_progress": 130,
    "top_product": "Mortgage",
    "top_issue": "Managing an account",
    "checked_at": "2026-10-23",
    "name_search": true,
    "match_count": 2
  },
  "insights": {
    "complaint_check_result": {
      "company": "SAMPLE LENDING CO.",
      "summary": {
        "total": 12840,
        "last_12_months": 1960,
        "previous_12_months": 1580,
        "change_pct": 24.1,
        "newest_complaint_date": "2026-10-19",
        "checked_at": "2026-10-23",
        "timely": { "on_time": 12600, "late": 240, "pct": 98.1 },
        "relief": { "count": 3000, "pct": 23.6 },
        "in_progress": 130
      },
      "company_responses": [
        { "label": "Closed with explanation", "count": 9400 },
        { "label": "Closed with non-monetary relief", "count": 1900 },
        { "label": "Closed with monetary relief", "count": 1100 },
        { "label": "Closed without relief", "count": 310 },
        { "label": "In progress", "count": 130 }
      ],
      "products": [
        { "label": "Mortgage", "count": 5200 },
        { "label": "Checking or savings account", "count": 3900 },
        { "label": "Credit card", "count": 2100 },
        { "label": "Student loan", "count": 900 },
        { "label": "Vehicle loan or lease", "count": 700 }
      ],
      "issues": [
        { "label": "Managing an account", "count": 3300 },
        { "label": "Trouble during payment process", "count": 2250 },
        { "label": "Loan modification, collection, foreclosure", "count": 1800 },
        { "label": "Struggling to pay your loan", "count": 1200 },
        { "label": "Problem with a purchase shown on your statement", "count": 900 }
      ],
      "channels": [
        { "label": "Web", "count": 10100 },
        { "label": "Referral", "count": 1800 },
        { "label": "Phone", "count": 940 }
      ],
      "other_matches": ["SAMPLE LENDING SERVICES, LLC"],
      "data_source": "cfpb"
    }
  },
  "recommendations": {
    "primary_action": "REVIEW",
    "secondary_actions": ["check_other_matches"],
    "user_message": "SAMPLE LENDING CO. has 12,840 consumer complaints in the CFPB database, 1,960 of them in the last 12 months, up 24.1% on the year before.",
    "business_rules": { "billable": true, "found": true, "other_matches": 1 }
  },
  "metadata": { "credits_used": 2, "cache_hit": false }
}

A column of company names goes in and one row per company comes out

Upload a CSV with a company column and download a result file with each company's name as the CFPB spells it, its totals and its change over the year. The three companies here are invented.

lenders.csvYou upload
  1. 1company
  2. 2Sample Lending
  3. 3Example Servicing
  4. 4Sample Holdings Group
complaint-check-results.csvYou download
companyFoundCompanyTotal ComplaintsLast 12 MonthsChange (%)Credits Used
Sample LendingYesSAMPLE LENDING CO.12840196024.12
Example ServicingYesEXAMPLE SERVICING, INC.3120410-8.92
Sample Holdings GroupNo0

Eight more columns in the file, among them Previous 12 Months, Newest Complaint, Timely Response (%), Relief (%), Top Product and Top Issue.

One row in, one row out

Every company name becomes one row, so a list of 500 lenders is a spreadsheet of 500 rows you can sort by total or by change.

A name with no published complaints is a free row

A company the database holds none for comes back as a row that says No and costs 0 credits, so cleaning a list never bills for the misses.

The CFPB's own spelling comes back beside your name

The Company column shows the name the CFPB lists, so you can see which entry a name matched and fix the ones that matched the wrong one.

One call returns the complaint counts the CFPB has published for a company

One call turns a company name from a partner list, an application or a vendor file into the counts the CFPB database holds for it: how many complaints it has published, how the last year compares with the year before, how fast the company answered and what the complaints were about, with the raw JSON your code receives beside it. The company name comes back in the CFPB's own spelling, in capital letters.

app.1lookup.io/api/v1Found: 12,840 published
  • CompanySAMPLE LENDING CO.
  • Complaints published12,840
  • Last 12 months1,960
  • The 12 months before1,580
  • Changeup 24.1%
  • Newest complaint2026-10-19
  • Answered on time98.1%
  • Closed with relief23.6%
  • Still in progress130
  • Most common productMortgage (5,200)
  • Most common issueManaging an account (3,300)
  • Other matching namesSAMPLE LENDING SERVICES, LLC
200 OK, 2 credits
{
  "classification": {
    "found": true,
    "name": "SAMPLE LENDING CO.",
    "total_complaints": 12840,
    "complaints_last_12_months": 1960,
    "complaints_previous_12_months": 1580,
    "change_pct": 24.1,
    "timely_response_pct": 98.1,
    "relief_pct": 23.6,
    "top_product": "Mortgage",
    "top_issue": "Managing an account",
    "match_count": 2
  },
  "insights": {
    "complaint_check_result": {
      "other_matches": ["SAMPLE LENDING SERVICES, LLC"],
      "data_source": "cfpb"
    }
  },
  "metadata": { "credits_used": 2 }
}

Every complaint check returns the same fields at one flat price

A figure that cannot be worked out, such as the change when nothing was published a year earlier, comes back as null and never as a guess, and every company with published complaints costs the same 2 credits.

Company and match

  • found
  • name
  • company
  • match_count
  • other_matches[]
  • name_search

Counts and dates

  • total_complaints
  • complaints_last_12_months
  • complaints_previous_12_months
  • change_pct
  • newest_complaint_date
  • checked_at

Response and outcome

  • timely_response_pct
  • timely.on_time
  • timely.late
  • relief_pct
  • relief.count
  • in_progress
  • company_responses[]

What the complaints are about

  • top_product
  • top_issue
  • products[]
  • issues[]
  • channels[]

Flags and billing

  • primary_action
  • secondary_actions[]
  • user_message
  • business_rules
  • data_source
  • credits_used

Banks, marketplaces and risk teams read published complaint counts instead of running CFPB queries by hand

Banks and fintechs reviewing a partner or a vendor

Look up a lender, servicer or collector before a partnership or a referral deal, and read how many complaints the CFPB has published naming it, how that count moved over the year and what the complaints were about.

Marketplaces that send consumers to lenders

Run every lender on your list and keep the published counts beside its record, so the 12-month change is a column you can sort and a flag you can filter on.

Compliance and risk teams screening counterparties

Add the CFPB's published complaint counts to a counterparty file next to its registration and filings, with the day the counts were read on every row.

Investors and analysts researching consumer finance

Pull the published counts for a company and its competitors and set their 12-month changes, response shares and top products side by side.

Journalists and researchers

Run a list of companies through a bulk job to get each one's total, its last 12 months and its most common product and issue, then sort the list by change.

Only a company with published complaints is billed, and every other answer is free

A company with published complaints returns its counts. A name the database holds none for, or one that is too short to look up, comes back as a clear answer at no charge.

Three results of a complaint check: a company with published complaints returns the counts for 2 credits, a name the database holds no complaints for returns none found for 0 credits, and a name that is too short is refused before any lookup for 0 credits

These are the questions people ask before they check their first company

What does the Complaint Check API return?

Send a company name and it returns the consumer complaints the CFPB has published naming the best match: the total, the count for the last 12 months against the 12 before with the change in percent, the date of the newest complaint, the share answered on time, the share closed with relief and the count still in progress. It also returns every way the company responded, the five products and five issues named most often and the channels the complaints came in through, each with its count, and up to five other names that match. Each result carries the day it was read.

Where do the complaint counts come from?

From the Consumer Complaint Database that the Consumer Financial Protection Bureau (CFPB) publishes. The CFPB publishes a complaint after the company responds or after 15 days, whichever comes first, and says the database generally updates daily. 1Lookup reads the database when you ask, matches your name against the CFPB's own company list and counts the complaints published under the name it finds.

How current are the counts, and can I ask again?

Each result shows the day the counts were read in checked_at and the date of the newest complaint in newest_complaint_date, and the last 12 months are counted back from that day. The newest weeks run short, because a complaint appears only after the company responds or 15 days pass. A repeat lookup of the same company by the same user within one day is answered from the saved result at no charge.

What do the complaint counts measure, and what do they not measure?

They are counts of the complaints the CFPB has published naming a company, and nothing more. The CFPB's database page says these complaints are not a statistical sample of consumers' experiences in the marketplace and are not representative of all consumers' experiences with a financial product or company. Only complaints sent to companies for a response are eligible to be published, after the company responds, confirming a commercial relationship, or after 15 days, whichever comes first, and the CFPB does not publish complaints it refers to other regulators. The API returns the counts as published, with no rate per customer.

How much does a complaint check cost?

2 credits per company, about $0.01 on the Starter plan, or $9.90 per 1,000 companies on Starter and $7.04 per 1,000 on Growth. You are charged only when the database holds complaints for the name. A name it holds none for, a name that is too short or too long and a lookup the CFPB could not answer all cost 0 credits, in the API, the dashboard and bulk jobs.

Why does a company come back with no complaints?

The CFPB's database lists only companies that have at least one published complaint, so a name it holds none for comes back as not found and costs nothing. That covers a company with no published complaints, a company the CFPB does not take complaints about, such as most retailers, and a name spelled differently from the CFPB's own. The answer cannot tell the first two apart, so try a shorter name before you read a miss as none.

How are parent companies and subsidiaries handled?

The name is matched against the CFPB's own company list and the best match is returned in full. Up to five other matching names are listed in other_matches, and match_count says how many names matched in all. A parent and its subsidiaries are often listed separately, so look up the exact name you want when the first match is not the one.

What does the change in percent mean, and when is it empty?

It compares the complaints received in the last 365 days with the 365 days before them, so 1,960 against 1,580 reads up 24.1%. It is null when nothing was published for the earlier year. When the change is 25% or more, the response adds complaints_are_rising to secondary_actions, a flag your code can act on without reading the numbers.

What do the on-time and relief shares mean?

Answered on time is the share of responses the CFPB records as sent on time, worked out from the on-time and late counts in timely. Closed with relief is the share of finished complaints that ended in monetary or non-monetary relief, so complaints still in progress are left out of that share and counted on their own in in_progress.

Does it return the complaints themselves or what consumers wrote?

No. It returns counts and categories: totals, responses, products, issues and channels. It never returns an individual complaint, a consumer's narrative or a consumer's location. The CFPB announced on 14 August 2026 that it will cease discretionary publication of consumers' complaint narratives and visualizations in its database, and none of the counts here depend on narratives. For individual complaint records, the CFPB's own search tool and Open Data API are free.

Can I check a list of companies at once?

Yes. Upload a CSV with a company column and you get a row per company with the CFPB's spelling of its name, the total, the last 12 months, the change, the share answered on time and the top product and issue. A name the database holds none for comes back as a free row, and the price stays at the same credits per company found, however long the list is.

Can I filter by state, ZIP code, product or date?

Not today: the lookup takes a company name and returns that company's totals, with no filter by state, ZIP code or date range. The CFPB's own search tool and Open Data API are free and filter by company, date received, product, issue, state, ZIP code and more.

How is this different from BBB complaints?

Complaint Check counts complaints in the CFPB's database only. BBB complaints are a different dataset: the BBB developer page defines a BBB complaint as a formal dispute filed against a business, and BBB sells that data through its own API.

To check a single company before you write any code, run its name through the free CFPB complaint lookup.

Check a few companies from your own list and see what comes back

Start a free trial, and your credits work across every product in the catalog.