What this index is — and isn’t
The UK Consumer Complaint Index is a public, free aggregation of complaint data published by UK regulators and ombudsman schemes. Every figure is verbatim from the source. We do not collect our own complaint data; we do not estimate, model, or interpolate.
The index is a research tool. It tells you how a provider compares to its peers on the metrics the regulator publishes. It does not tell you whether a specific complaint will be upheld, how a regulator will rule on a case, or what compensation you are owed. For that, talk to the regulator directly or use one of NoReply’s free tools.
Data sources
Every metric on the index has a regulator at the bottom of it. Click through to the source — every figure should match.
| Regulator | Scope | Cadence | Licence |
|---|---|---|---|
| Ofcom | Telecoms — broadband, mobile, pay-TV, landline | Quarterly | OGL v3.0 |
| Ofgem | Energy supply (gas + electricity retailers) | Quarterly | OGL v3.0 |
| Financial Ombudsman Service | Per-firm uphold rates, case volumes (financial services) | Half-yearly | OGL v3.0 |
| Financial Conduct Authority | Per-firm complaints — banking, insurance, mortgages, investments, credit | Half-yearly | OGL v3.0 |
| Civil Aviation Authority | Airline passenger complaints, ADR uphold rates & awards | Annual (+ quarterly snapshots) | OGL v3.0 |
| Energy Ombudsman / TPO / CISAS | Private redress schemes — link-out only | Annual | Fair-dealing quote |
Composite scoring formula
Each provider gets a composite score between 0 and 1, where 1 is the best in the sector. We compute it in three steps.
Step 1
Normalise each metric within its sector
For every metric we collect, we find the best and worst values published in that sector & period. We then map every provider’s value to a 0-to-1 scale.
- Lower is better (complaints rates, uphold rate):
normalised = 1 − (value − sectorMin) ÷ (sectorMax − sectorMin) - Higher is better (resolution speed, next-day resolution):
normalised = (value − sectorMin) ÷ (sectorMax − sectorMin)
A note on uphold rate. The Financial Ombudsman publishes the % of complaints resolved in the consumer’s favour. A high uphold rate could mean “this firm gives consumers a fair shake” or “this firm originally rejected lots of valid complaints”. We treat a high uphold rate as a negative signal for the firm, because it means the firm originally rejected a complaint the regulator subsequently agreed with. The raw uphold rate is always shown alongside the composite so you can judge for yourself.
Step 2
Weighted average
Composite = the weighted average of the metrics that exist for this provider × period. Default weights:
- Complaints rate — 0.5. Direct signal of complaint volume relative to size. Heaviest weight.
- Uphold rate — 0.3. Complaint-handling quality signal. Capped because a firm with very few complaints can post an extreme uphold rate by chance.
- Resolution speed — 0.2. Customer-experience signal. Weighted lowest because regulator deadlines (the 8-week rule) compress the spread between firms.
When a metric is missing for a sector (CAA, for example, doesn’t publish a resolution-speed metric), we renormalise the active weights so they still sum to 1.
Step 3
Star rating & tier
Stars: compositeScore × 5, rounded to one decimal. A 0.84 composite renders as 4.2 stars.
Tier: based on rank within sector & period.
- Rank 1 → Gold
- Rank ≤ 3 → Silver (top 3)
- Rank ≤ ceil(rankOutOf × 0.25) → Bronze (top 25%)
- Score above sector mean → Standard
- Otherwise → Below average
Worked example
Imagine a four-airline aviation league for 2025 with two metrics: complaints per million passengers (lower is better) and uphold rate (lower is better).
| Airline | Complaints / M pax | Uphold % | Composite | Stars |
|---|---|---|---|---|
| Airline A | 100 (best) | 20% (best) | 1.00 | 5.0 |
| Airline B | 300 | 40% | 0.625 | 3.1 |
| Airline C | 500 | 60% | 0.375 | 1.9 |
| Airline D | 900 (worst) | 80% (worst) | 0.00 | 0.0 |
For this two-metric example with no resolution speed, the active weights renormalise to 0.5 / 0.5 + 0.3 / 0.5 = 0.625 / 0.375. Tiers: Airline A → Gold (rank 1), B → Silver (rank ≤ 3), C → Bronze (top 25% with rank ≤ ceil(4 × 0.25) = 1, so this would actually fall to Standard if its score is above the mean — tie-breaking falls to score against sector mean, 0.5 here). The real algorithm in lib/data/regulators/scoring.ts is the source of truth.
Refresh cadence
Each regulator publishes on its own schedule. Crons run after each publication window so figures update within a few days of release.
- Ofcom — quarterly, mid-week publication
- Ofgem — quarterly
- FOS — half-yearly (H1, H2)
- FCA — half-yearly (H1, H2)
- CAA — annual + quarterly snapshots from FY25 onwards
If a regulator hasn’t published a fresh dataset within 1.5× the expected cadence, the page shows a banner: “regulator hasn’t published since [date]”. We don’t guess.
Licensing
All Ofcom, Ofgem, FOS, FCA and CAA datasets are released under the Open Government Licence v3.0. That’s why we can republish them. Attribution: source name, URL and licence are surfaced on every metric and on every CSV/JSON download.
Private ombudsman schemes (Energy Ombudsman, The Property Ombudsman, CISAS) are not OGL. We quote headline figures only, link directly to the source, and never include those rows in downloadable datasets or the embed widget.
Spot an error?
Email index@usenoreply.com with the URL and a link to the source. We’ll fix it.