How the Chesterfield Score Is Built
One line of arithmetic, three parameters, and a pull date. All of it is on this page so you can reproduce it, argue with the parameters, or throw the whole thing out. A ranking whose method you cannot audit is an opinion with a table around it.
The problem the formula is solving
Sort twenty one Chesterfield roofing listings by raw star rating and the top of the table fills with five star averages built on three, fourteen and twenty reviews, while a company with 4.7 stars from 378 reviews sits near the bottom. That ordering is not just unhelpful, it is backwards. Three hundred and seventy eight people agreeing that a company is a 4.7 is far stronger evidence than fourteen people agreeing it is a five.
The standard fix is to shrink each rating toward a common anchor by an amount that depends on how thin the sample is. A rating built on very few reviews barely moves the score away from the anchor. A rating built on hundreds of reviews almost entirely overrides it. This is old, ordinary statistics and nothing here is clever.
The formula
- Written out
- adjusted = (v × R + m × C) / (v + m)
- Where v is the listing's review count, R is its star rating, C is the anchor, and m is the weight given to that anchor, expressed in reviews.
- C, the anchor: 4.787
- The review weighted mean rating across all twenty three Chesterfield roofing listings. Review weighted, not a plain average of the star values, so that a listing with one review does not have the same pull on the anchor as one with 378. The plain average of the star values, for comparison, is 4.60. Using the plain average would have pushed several thin sample rows further down. That choice is arguable and it is stated here so you can argue with it.
- m, the anchor weight: 25
- At exactly twenty five reviews the score sits halfway between the listing's own rating and the town anchor. Below twenty five, the anchor is doing more than half the work. The median review count across the twenty three listings is 38, so most rows sit on the side where their own rating dominates. Twenty five is a judgement call, not a derived constant. Set it to 10 and the thin five star rows climb; set it to 100 and the table collapses toward the anchor and stops distinguishing anything.
- The floor: 10 reviews
- Below ten reviews a listing is not ranked at all. It is displayed separately, with its real numbers intact, on the list page. Two listings fall here.
Worked through on three real rows
Take the two extremes on the table and one in the middle, and run them by hand.
A five star rating on 89 reviews
v is 89, R is 5.0. The numerator is 89 × 5.0 plus 25 × 4.787, which is 445 plus 119.675, or 564.675. The denominator is 89 plus 25, which is 114. That gives 4.953. The rating loses less than five hundredths of a star because 89 reviews is already a reasonably solid sample, and the row holds first place.
A five star rating on 14 reviews
v is 14, R is 5.0. The numerator is 70 plus 119.675, or 189.675, over a denominator of 39. That gives 4.864, and the row falls to ninth. It lost nearly fourteen hundredths of a star, more than twice as much, because fourteen people is not much of a sample and the anchor is carrying nearly two thirds of the result. That is the mechanism working exactly as intended.
A 4.7 rating on 378 reviews
v is 378, R is 4.7. The numerator is 1,776.6 plus 119.675, or 1,896.275, over 403. That gives 4.705, essentially unchanged. With that many reviews the anchor is irrelevant and the listing's own number stands. It ranks sixteenth, which is a genuinely uncomfortable result: it is the best evidenced row on the whole table and the formula puts it below rows with a tenth of the data. See the next section.
Where this method is wrong
Two failure cases, both visible on the published table, both left visible on purpose.
Failure one: it cannot rescue a one review row
The board up listing carries a single one star review. Run it through the formula and the anchor drags it from 1.0 all the way to 4.64, which would have placed it above four other listings, one of them carrying 135 reviews. Shrinkage toward a mean is the correct tool for thin samples in general and produces an absurd answer here. That is why the ten review floor exists, and the floor is a patch on the method rather than a property of it.
Failure two: it undervalues volume at the top
A 4.7 from 378 reviews is, in any serious sense, better evidenced than a 5.0 from 20. The formula honours that only up to a point: it stops the thin row from being inflated, but it does not reward the thick row for being thick. A different design, ranking by the lower bound of a confidence interval, would have put the 378 review company much higher. That design was not used because it is harder to explain and impossible to check by hand. The tradeoff was made in favour of an auditable table.
There is a third limitation that no formula fixes. Every number in this table is a Google rating, and a Google rating is a measurement of the customer experience of buying a roof, not of the roof. It is influenced by whether the company asks for reviews, when it asks, how hard it asks, and what it does about bad ones. Two companies doing identical work can sit half a star apart purely on review collection practice. This is stated on the front page too, and it is the single most important caveat on the site.
None of that makes the table useless. It makes it a shortlisting tool with a stated error bar rather than a verdict. The difference between the first and eighth rows is around eight hundredths of a star, which is inside the noise. Treat the top group as ten names worth a phone call and then do the work that actually separates them, which is reading what they write down.
Where the numbers came from and how to get one changed
The underlying figures come from three Google Maps pulls run on 23 August 2026, covering St. Louis County, St. Charles County and Chesterfield specifically, deduplicated on the Google place identifier. Two hundred and sixty three rated businesses came back across the metro. Filtering to the exact category Roofing contractor with a Chesterfield address leaves the twenty three that this site works from.
Ratings and review counts are frozen at the pull date. They are not refreshed nightly and this page will not silently change under you. When it is rebuilt, the pull date at the top of every table changes with it.
If you own one of these listings and a figure is wrong, or a flag misdescribes your business, say so and it will be corrected or removed with a note saying it was corrected. Call (314) 220-2333 and say what is wrong and what it should say. None of the listed companies was contacted before this page was built, and none of them is under any obligation to engage with it now.
- Category filter: exactly Roofing contractor. Gutter cleaning listings excluded, because in this market they are pressure washing and window cleaning firms.
- Address filter: Chesterfield, Missouri, as recorded on the listing. No inference about service area.
- Deduplication: on Google place identifier, so one business with two categories cannot appear twice.
- Excluded from the ranking by rule: Keys Roofing, which is a competitor of every listed company and appears on this site only as a labelled paid placement.
Have Keys Roofing look at it instead
Keys Roofing is excluded by rule from the table this method produces. If you want a bid from Keys to sit alongside the ones you gather from the ranking, this is the form for it.
A look at the roof here means photographs, measurements and a written scope you keep on file whether or not you hire anybody. If an insurance claim is part of your situation, the claim stays in your name and in your hands: under RSMo 407.725 a Missouri roofing contractor may not represent or negotiate a homeowner's insurance claim, and Keys does not. Keys documents what is on the roof and meets the adjuster there as the contractor.
Straight through to the Keys Roofing office. Roofing, gutters and downspouts across greater St. Louis, and nothing else. Atlas and Malarkey shingles. Licensed and insured.
This goes to Keys Roofing. It does not go to anyone in the ranking. None of the ranked companies pay to appear here, and none of them receive anything you type into this form.