← Back

How the fairness score works

QuoteChecker turns a quote or invoice into a score by comparing its readable charges with available reference ranges, local context, and anonymized data that users explicitly chose to share. Here is how the comparison works and where its limits are.

1. Extract the invoice

Your photo or PDF goes through vision-OCR to pull out the business, the line items, labour hours, labour rate, taxes, and the total. Every extracted number is stored with a per-field confidence so we can flag anything the OCR wasn't sure about.

2. Match each line to a reference price

For every recognisable job (brakes, water heater, panel swap, etc.) we look up two sources:
  • Community medians: anonymized prices users explicitly shared for the same kind of job. They are used only when the sample meets the minimum threshold.
  • Reference ranges: Canadian low, median, and high estimates for supported job types, each stored with its effective date. Older ranges are adjusted using their configured annual rate.

3. Localise the range

The base range is then adjusted three ways:
  • Local labour rate: we keep a per-city labour-rate table (auto/plumbing/electrical/HVAC/roofing) and check the invoice's rate against the local low/high. A GTA-dealer $195/hr reads very differently from a small-town indie $135/hr.
  • Vehicle class: for auto invoices, parts scale by class (compact 1.0 → luxury 1.5, EV 1.4). The AI detects class from the invoice header when possible.
  • Emergency / after-hours: surcharges are legitimate when the invoice discloses them. We surface, not punish.

4. Score it two ways, keep the lower

We compute the score twice: once by pure math against the priors and once by the model on the whole invoice. We headline the lower of the two. The model can be optimistic; the reference math can be too rigid. Taking the lower result is the more cautious choice. When the two disagree by more than 20 points, the "Why this score" panel shows both scores and which side won.

5. Verify against real outcomes

Every time a user marks an invoice as "paid $X", we compare the paid amount to the range we quoted. That gives us a live accuracy stat: (we need a few more verified paid invoices before publishing a headline number).

What we don't do

  • Businesses cannot pay to change a score, estimate, or factual analysis. Any future sponsored placement will be clearly labelled.
  • We don't call an invoice a "scam" or a "rip-off." A high score means "ask questions before you approve," not "you were cheated."
  • When the evidence is thin, the confidence label drops to low and the report says so.
  • Reports are private by default. Only anonymized data from reports a user explicitly chooses to share can contribute to community medians.

Something look wrong?

Every quote page has a "Think this range is wrong?" link. Corrections go to a small review queue so questionable ranges can be investigated.

Priors last refreshed not available. Version 2026-Q3.