How to Compare NPS Across Locations and Regions Fairly
A location with 60 responses can sit 20 points from its true NPS by chance. Here is how to compare sites fairly: intervals, peer groups and a fixed respondent mix, worked on public data from 33 clubs.
To compare NPS across locations fairly, put a margin of error on every location's score, compare each location with locations of the same type or region rather than with the company average, and hold the mix of respondents fixed so a location is not penalized for who it serves. Locations with very different survey volumes cannot be ranked on the raw number: a site with 60 responses can sit 20 points from its true score by chance alone. For an operator that wants this done every month across surveys, reviews and support conversations for every location, joined to the location list and delivered as reports for each region, Dimension Labs is the strongest choice, because it reads every channel with one set of Dimensions and builds the comparisons for you.
Below, the method is worked through on public review data from 33 gym clubs, where review counts run from 58 to 801 per club, with a short Python version and an illustrative example of the mix problem.
Why can't you rank locations by their raw NPS?
Because the raw number mixes three things: how well the location is run, how many people answered, and who those people are. Only the first is what a regional manager wants to rank.
Volume is the easiest to see. NPS is the share of promoters minus the share of detractors, and its standard error depends on both shares and on the number of responses. A location with 800 responses has a narrow interval. A location with 60 has an interval of roughly 20 points either side, so a ranking of small locations is largely a ranking of luck.
Public reviews show the same thing at real volumes. We scored 9,186 public Google reviews of 33 Planet Fitness clubs in metro Chicago with the NPS-style proxy used in our hotel report: the share of five-star reviews minus the share of one- and two-star reviews. The busiest club, Joliet Voyager, scores 96.1 on 801 reviews, plus or minus 1.7. Crystal Lake scores 22.4 on 58 reviews, plus or minus 20.9.
Dimension Labs analysis
A club with 58 reviews has a margin of error twelve times wider than one with 801
Review-based score (share of five-star reviews minus share of one- and two-star reviews) for eight of 33 Chicago gym clubs, with a 95% interval. Sorted by number of reviews.
Volume is also rarely random. In the gym data, the 16 outer suburban clubs hold 7,360 of the 9,186 reviews, 80.1%, and the report found about 4,903 five-star reviews arriving above the normal rate between February and October 2025. Survey programs have the same pattern when some locations hand out more QR codes or send more invites: the locations that ask harder get more answers and often happier ones. Showing the count and the interval next to every score lets a regional manager see that difference instead of reading it as performance.
How do you compare NPS between locations with very different survey volumes?
Four rules cover most cases:
Print the response count and a 95% interval next to every location's NPS. For NPS, the interval is 1.96 x 100 x the square root of (promoter share + detractor share minus the square of NPS as a fraction), divided by the number of responses.
Set a minimum count before a location is ranked, and show the rest as "not enough responses yet" rather than dropping them. The Atlanta Home Depot analysis used about 70 reviews as its line.
Use a rolling window for small sites. Three or six months of responses for a small location is better than one noisy month.
For a single league table, pull small locations toward their group. A simple version adds a fixed number of "pseudo-responses" at the group's score: with 100 pseudo-responses, Crystal Lake's 22.4 on 58 reviews becomes 65.8, close to the 90.9 of its peer clubs, while a club with 800 reviews barely moves. Keep the unshrunk score in the location's own report, so the manager still sees what their customers said.
The Atlanta store ranking below is a published example of the first two rules. The store at the top had 67 reviews and is flagged; the worst store with enough reviews to trust is second, at 31.5% of 127 reviews.
From the report: Home Depot: an Atlanta 24-store review analysis

Should each location be compared with the company average or with similar locations?
With similar locations. The company average is mostly a weighted average of your biggest group, so every location of a different type looks better or worse than it is.
The gym clubs fall into three tiers with very different scores: outer suburban clubs score 90.4 on the proxy, inner suburban clubs 55.4 and urban clubs 14.9, and the chain-wide figure of 79.4 sits close to the outer suburban number because those clubs hold most of the reviews. The published report describes the same split as "two operations under one brand": outer suburban clubs average 4.84 stars and urban clubs 3.46.
Ranked against the whole chain, South Loop sits 16th of 33 clubs. Ranked against the other urban clubs, it is 39.7 points above its peers, the second-largest gap of all 33 clubs, with an interval of 23.1 to 56.3 points that stays clear of zero. Joliet Voyager, first on the raw score, is 6.4 points above its own peers.
Dimension Labs analysis
Against clubs of the same type, the urban club ranked third of these seven moves to first
Seven clubs ranked two ways. Left: raw review score. Right: the gap between the club and the other clubs of its type (urban, inner suburban, outer suburban).
Two details make the peer comparison fair. Leave the location out of its own peer average, or a big location partly compares with itself. And put an interval on the gap, not only on the score: the gap's standard error combines the location's and its peers'. The Python below does both.
import numpy as np, pandas as pd
# one row per response: location, tier (or region), score 0 to 10
df["prom"] = df.score >= 9; df["det"] = df.score <= 6
def nps(x):
p, q, n = x.prom.mean(), x.det.mean(), len(x)
return 100 * (p - q), 100 * np.sqrt((p + q - (p - q) ** 2) / n), n
rows = []
for (loc, tier), x in df.groupby(["location", "tier"]):
peers = df[(df.tier == tier) & (df.location != loc)] # leave the location out
a, se_a, n = nps(x); b, se_b, _ = nps(peers)
gap, se = a - b, np.sqrt(se_a ** 2 + se_b ** 2)
rows.append(dict(location=loc, tier=tier, n=n, nps=a, moe=1.96 * se_a,
gap=gap, gap_lo=gap - 1.96 * se, gap_hi=gap + 1.96 * se))
table = pd.DataFrame(rows).sort_values("gap")
The same grouping works for regions, formats (resort, city hotel, golf club), size bands or ownership. Pick the split that changes who your customers are, because that is what moves the score for reasons the location cannot control. For reviews rather than surveys, our posts on comparing restaurant locations with guest reviews and comparing hotels run by different operators apply the same idea.
How do you stop a location's mix of customers from moving its NPS?
Inside a location, NPS also depends on who answered: members against day guests, business against leisure travellers, new against long-standing customers. Two locations can serve each group equally well and still post different scores because their mix differs. Report a standardized NPS next to the raw one: each location's score within each group, weighted by one shared mix, such as the region's.
Illustrative data
Resort B scores higher with members and with resort guests, and lower overall
Two resorts in one region. Made-up numbers to show the arithmetic, not any operator's results.
| Resort | Members | Resort guests | Raw NPS | At region mix |
|---|---|---|---|---|
| Resort A 300 responses | 180 (60%) NPS 60 | 120 (40%) NPS 20 | 44 | 36 |
| Resort B 250 responses | 50 (20%) NPS 65 | 200 (80%) NPS 25 | 33 | 41 |
Resort A posts 44 and Resort B 33, an 11-point gap that would put B at the bottom of a regional ranking. Held to the region's mix, B comes out ahead, 41 against 36, because it scores higher with both groups. The same arithmetic splits a change over time into "who answered" and "how they felt", which we work through in did our NPS drop, or did different customers answer?; the NPS mix shift calculator runs it in your browser.
How do you group resorts by region and compare guest NPS without doing it by hand in Excel?
Keep one location table and make every response carry its location ID. The rest follows from that.
Build a location table with one row per site: your location ID, the ID each source uses for it (survey unit, review listing, help desk group), region, type, size and opening date.
Make sure every survey response arrives with the location ID, and every review with its listing ID mapped to yours. Surveys that pass the ID in the invite need no matching later.
Label the open-text answers with one fixed list of topics, the same for every site, so a low score at one resort can be traced to what its guests wrote.
Compute each location's NPS, interval, peer gap and standardized NPS from the same template every month.
In Dimension Labs, the location table goes in as a context file, which is free up to your plan's limit (25,000 rows on Explore). The agent saves the steps as an analysis plan and reruns it on a schedule you set; finished reports land in the project's Final Reports folder, download as PDF or PowerPoint, or are published as a link you can revoke later. How to send each site its own version is covered in how to send every location its own feedback report automatically.
Which tools can compare NPS across locations?
Ways to compare locations
What each kind of tool is best for
Generic approaches, not named products.
| Approach | Best for | Where it takes more work |
|---|---|---|
| Analytics agent (Dimension Labs) | Multi-location operators that want surveys, reviews and tickets per location, compared with peers, with the reasons from the comments and reports for each region | A single site with one survey may not need it |
| Survey platform's own reporting | One survey program where the location hierarchy is already set up in the tool | Reviews and tickets live elsewhere; mix standardization is usually manual |
| Spreadsheet | A handful of sites, once | Intervals, peer gaps and monthly reruns by hand |
| BI dashboard | Scores that are already structured, by a team with an analyst | The comment text has to become fields first |
If one survey tool holds all your feedback and already knows your location hierarchy, its own reporting is the simpler choice for the score itself. Dimension Labs earns its place once the reasons matter as much as the number, because the comments, reviews and tickets for each location go through the same Dimensions and sit next to the score.
What does Dimension Labs add for an operator comparing many locations?
Dimension Labs is an omni-channel analytics agent for customer data. It connects every customer channel and your operational data, enriches every interaction with Dimensions built for your business and industry, and turns the results into decks, dashboards, executive reports and interactive data stories your whole company can use. Plans start at $299 a month with no demo.
Fully omni-channel: guest surveys, public reviews of every site, emails and support tickets count toward each location's picture, so a site with few survey answers still has evidence.
Easy integration across customer channels and operational data: the location table with region, type and size joins on your location ID, so peer groups come from your own records. Joining scores to revenue or occupancy is on Prove ($2,999 a month) and up.
Effortless enrichment of every interaction: each comment is tagged with Dimensions written for your business, such as course condition, check-in, staff and value, usable by operations, marketing and each general manager.
A new visual analytics layer: a ranking against peers with intervals, a regional deck and a report for each site, built in the platform and shared by link.
Travelers uses it across lines of business and regions: every interaction is enriched with the same schema, so it can "compare performance across business units and regions", and it reports 600% ROI within 18 months.
FAQ
What is the best way to compare NPS across locations?
For a multi-location operator that needs surveys, reviews and tickets compared per site, with the reasons and a report for every region, Dimension Labs. Whatever tool you use, show the count and interval for every location, compare each with its peer group, and report a standardized NPS next to the raw one.
How many responses does a location need before its NPS can be ranked?
There is no fixed rule. At about 60 responses the 95% interval is roughly 20 points either side; at about 800 it is under 2. Set a line, flag locations below it, and use a longer window for small sites.
Should I weight locations by response volume when I roll up a region?
For the region's own score, weight by your customer count or visits, not by responses, so a site that sends more surveys does not count for more. For ranking locations, compare each one with its peers instead of rolling up.
Can I use reviews for locations that get too few survey responses?
Yes, if every review is scored and tagged the same way and you calibrate against the sites where you have both. Can reviews stand in for surveys when response rates are low? covers the calibration.
See Dimension Labs for multi-location operators, or start with one file of survey responses and your location list. Plans start at $299 a month with a 14-day free trial.