The workings

If you want to check my working, it’s all here. I’ve left in the parts that don’t flatter me: a safety check that turned out to be contaminated, and two accounts I had to kill after they’d already passed.

Metric

share of all CFPB dispute complaints, per month. Window 2022-11 to 2026-08, 46 usable months; 2026-09 dropped as part-published. Three CFPB issue types across all products. I compare the first third of that window against the last third. Same length on both sides, so neither end gets an easier ride.

Issues counted: Problem with a purchase shown on your statement; Problem with a lender or other company charging your account; Problem with a purchase or transfer

Test

The main test is a seasonal Mann-Kendall. It only looks at the order the numbers come in, not how far apart they are, which matters here because these counts jump around far more than most tests assume. It also compares each January against other Januaries, so a busy December can’t fake a trend. I run the plain version alongside it. If the two disagree I go with the seasonal one and show you the disagreement.

Test 74 companies and one or two will look significant on luck alone, so I correct for that (Benjamini-Hochberg, q=0.05) across all of them rather than across a shortlist I’d already picked. The cutoff that applied was p < 0.01419.

Before trusting any of this I checked the test could clear its own bar: the smallest p it can produce is 1e-11, comfortably under the cutoff. I’ve been caught by that before, and a gate that can’t open looks exactly like a finding.

The twelve that got through the maths

Ranked by how big the move was, with what happened to each one afterwards. Getting through the maths is only the start. Two of these were killed later.

How to read it: share before / now is their slice of every US dispute complaint, then and lately. Extra a quarter turns that into real complaints at today’s volumes. Luck is the chance a pattern this clear turned up by accident, so smaller is better and anything above 0.01419 was thrown out.

CompanyShare beforeShare nowExtra a quarterLuckRecent windowReviewTier
Chime Financial Inc3.62%6.37%+2865e-06holdsWEAKENWarm
CAPITAL ONE FINANCIAL CORPORATION7.75%9.96%+2300.005holdsREFUTE_SUBSTANCEDQ
GOLDMAN SACHS BANK USA2.67%4.16%+1563e-04full window onlyHOLDICP
CITIBANK, N.A.9.38%10.55%+1210.003full window onlyREFUTE_SUBSTANCEICP
Paypal Holdings, Inc1.12%1.87%+785e-06holdsHOLDHot
Klarna AB0.09%0.66%+592e-09holdsHOLDWatchlist
ROBINHOOD MARKETS INC.0.08%0.59%+536e-07holdsHOLDHot
FinCo Services Inc DBA Current0.23%0.61%+403e-05holdsHOLDWatchlist
NAVY FEDERAL CREDIT UNION2.02%2.35%+350.003full window onlyREFUTE_SUBSTANCEICP
Affirm Holdings, Inc0.29%0.58%+303e-05holdsWEAKENWatchlist
CLGF Holdco 1, LLC0.21%0.35%+143e-04full window onlyREFUTE_SUBSTANCEDQ
Branch Messenger, Inc.0.05%0.16%+120.001full window onlyREFUTE_SUBSTANCEICP

“Recent window” asks whether it still holds if I throw away the oldest third of the data. For five of the twelve it doesn’t. I’ve marked which five rather than quoting you a percentage, because you need to know which company you’re about to email.

Everything I threw out, and why

CompanyReasonShare beforeShare now
CLGF Holdco 1, LLCCannot identify account0.21%0.35%
CAPITAL ONE FINANCIAL CORPORATIONData artifact - its step at 2026-04 is DISCOVER BANK ceasing to report separately, not a change at this company7.75%9.96%
DISCOVER BANKData artifact - stops reporting from 2026-04; its complaints are filed elsewhere3.98%2.18%
UPGRADE, INC.Signal reversed - share falling, not rising0.19%0.09%
PENTAGON FEDERAL CREDIT UNIONSignal reversed - share falling, not rising0.20%0.08%
FIRST NATIONAL BANK OF OMAHASignal reversed - share falling, not rising0.33%0.20%
Netspend CorporationSignal reversed - share falling, not rising0.59%0.40%
REGIONS FINANCIAL CORPORATIONSignal reversed - share falling, not rising0.50%0.24%
FIFTH THIRD FINANCIAL CORPORATIONSignal reversed - share falling, not rising0.65%0.36%
U.S. BANCORPSignal reversed - share falling, not rising2.07%1.74%
ALLY FINANCIAL INC.Signal reversed - share falling, not rising0.53%0.18%
CITIZENS FINANCIAL GROUP, INC.Signal reversed - share falling, not rising0.77%0.36%
Incomm Holdings Inc.Signal reversed - share falling, not rising0.79%0.32%
TRUIST FINANCIAL CORPORATIONSignal reversed - share falling, not rising1.33%0.79%
BARCLAYS BANK DELAWARESignal reversed - share falling, not rising3.14%2.29%
Bread Financial Holdings, Inc.Signal reversed - share falling, not rising2.57%1.28%
JPMORGAN CHASE & CO.Signal reversed - share falling, not rising11.03%8.58%
WELLS FARGO & COMPANYSignal reversed - share falling, not rising9.35%6.69%

Read those two rows together. Discover stops filing and Capital One jumps in the same month. Neither company changed; the complaints just moved from one name to the other. So don’t read Discover as a company that fixed its dispute problem. An earlier version of this page did exactly that, and it was wrong.

The confirming signal

Two measures of what happened to each complaint, from the same database: how often the customer got money back, and how often the company filed its reply late. A rate only counts if it went up on its own and went up faster than the market did. Beating the market can take credit away from a company; it can never hand credit to one that declined.

Market: refunds 24.02% → 21.55% (-2.47 pts) · late replies 0.86% → 1.24% (+0.37 pts). Both windows are 12 months; a company window needs 50 closed complaints for its rate to be used at all.

How to read it: refunds is how often the customer got money back, late is how often the company filed its reply late, each shown as then → now. The vs market column next to each is how that compares with everyone else over the same period. A plus means they moved worse than the market, which is the direction that counts here.

CompanyRefundsvs marketLatevs marketSignal
Chime Financial Inc9.3% → 6.8%-0.00.00% → 0.00%-0.4neutral
CAPITAL ONE FINANCIAL CORPORATION20.6% → 17.0%-1.20.00% → 0.02%-0.3neutral
GOLDMAN SACHS BANK USA49.0% → 30.9%-15.60.00% → 0.00%-0.4neutral
CITIBANK, N.A.45.2% → 41.9%-0.70.00% → 0.00%-0.4neutral
Paypal Holdings, Inc23.1% → 36.5%+15.80.00% → 0.12%-0.3confirms
Klarna AB5.7% → 17.8%+14.65.68% → 6.60%+0.5confirms
ROBINHOOD MARKETS INC.0.0% → 0.0%+2.51.72% → 2.77%+0.7confirms
FinCo Services Inc DBA Current7.6% → 5.2%+0.17.61% → 21.09%+13.1confirms
NAVY FEDERAL CREDIT UNION20.3% → 18.9%+1.00.00% → 0.00%-0.4neutral
Affirm Holdings, Inc0.0% → 0.0%+2.50.00% → 0.00%-0.4neutral
CLGF Holdco 1, LLC34.7% → 20.9%-11.30.00% → 0.00%-0.4neutral
Branch Messenger, Inc.0.0% → 0.0%+2.50.00% → 0.00%-0.4insufficient

A 0.00% rate in both windows means the field is empty, not that they’re coping. Plenty of large issuers never file a late response at all. Insisting on a real rise takes care of that, since zero to zero isn’t a rise. And be clear what this signal is: a second question asked of the same database, not a second source. Job listings would be properly independent, but I could only read 2 of 12 boards.

Kill conditions

I wrote these down before I’d written the scorer. If any one of them fired, the plan was to bin the method rather than patch around it.

Each one is a way the whole approach could have been fooling me. If any had fired, the list would not exist.

ConditionResultVerdict
K1 — is it secretly measuring size?rank correlation between the trend statistic and company volume is -0.245, limit 0.30. The superseded volume method scored +0.78 on this test and was refuted for it.pass
K2 — is it just the tide?a synthetic company growing at exactly the pool rate scores p=0.541 and is correctly invisible; one genuinely rising scores <1e-16.pass
K3 — does it reproduce what is known?Truist, ranked strongest by three earlier passes, is not a lead (-0.546 pts). Capital One ranks high (+2.209 pts). Both were later overturned by review, and that is recorded rather than hidden.pass
K4 — are there enough to be a list?12 leads against a pre-registered minimum of 5; 9 excluded as new entrants.pass
K5 — is the window doing the work?12 leads over the full window, 10 over the recent two thirds, 7 in common.pass

K3 has an asterisk and it deserves it. I set it up from an earlier probe that covered the same merger, so its Capital One half just confirmed the artifact a second time instead of testing the scorer. The Truist half is fine. I’d rather tell you a check was contaminated than quietly let it pass.

Did I move the goalposts?

Fair question, so here are both bars moved in both directions. The scorer prints this itself, which means you can check it rather than take my word for it.

The first bar is how small a company has to be before I stop testing it. The second is how strict I am about ruling out luck.

Smallest company tested
complaints a year
Companies testedCompanies that passed
142531
614936
1211027
247421
366116
604713
1203513

Look at the shape. Dropping the floor too far actually loses leads, because testing hundreds of near-empty companies makes the correction harsher for everyone. Past a point, loosening the rules just makes the list worse.

How strict the luck filter is
lower is stricter
Companies that passed
0.0115
0.0521
0.124
0.228

The adversarial review

One agent writes the strongest honest case it can for each account. Then a different model is told to find the hole in it. The second one never sees the first one’s own list of doubts, because if you hand someone a list of known flaws they check that list and stop looking. 181 tests across the twelve, all recorded.

OutcomeNMeaning
WEAKEN2stands, an element corrected
REFUTE_FIXABLE5one rewrite permitted, then final
REFUTE_SUBSTANCE5not a real buying signal — dropped

The five repairable accounts got one rewrite each, then went to a final reviewer who could only say hold or drop. 5 held, 0 dropped, but every one came back with specific wording it had to fix first. 24 corrections in all. They’re applied.

Things the reviewers caught that the analysts missed: a whole account whose rise was just a merger; another that only passed because it was big enough to make a tiny move look significant; a claim that had the sign backwards against its own source file; and a “recent” turning point that was really just the last date the search was able to return.

Thresholds that moved, and when

I wrote the rules down before I built the scorer. Four times I then changed one, and each change had to be recorded in that file with a date and a reason. Here they are, pulled straight out of it — the codes are my own filing, so ignore them and read the sentences. If I’d moved a bar without writing it down, it couldn’t appear in this list.

What this doesn’t tell you