The numbers a pool service business runs on

Last updated September 5, 2026

Track five numbers monthly: revenue per pool, stops per technician per day, chemical cost per pool, days from invoice to payment, and accounts lost per month. Each one has an action attached - a price correction, a route change, a collection step. A number nobody acts on is not worth pulling.

Most operators can tell you their pool count and their bank balance and almost nothing in between. That gap is not laziness. Most published lists of pool service business KPIs are imported from field-service software built for HVAC and plumbing, where first-time fix rate and technician utilization genuinely mean something. On a 60-pool route those metrics are either uncomputable or unactionable, so the list gets ignored and the business runs on feel until a bad quarter arrives without warning.

What follows is the short set that survives contact with a route: five numbers you can pull monthly from records you already keep, a realistic range for each, and the specific decision each one triggers. This is the dashboard, not the margin math - the arithmetic of what a route nets lives in its own guide.

Key takeaways

  • Track five numbers monthly: revenue per pool, stops per technician per day, chemical cost per pool, days from invoice to payment, and accounts lost per month.
  • Drop any metric you cannot attach a decision to - first-time fix rate and technician utilization are borrowed from trades that do not run recurring routes.
  • Revenue per pool moves before total revenue does; a route can add accounts, grow its billing, and be getting quietly cheaper at the same time.
  • Aim for $150-$225 per pool per month on weekly residential and 12-20 stops per technician per day; falling short on stops is a drive-time problem, not an effort problem.
  • Inspect any pool whose chemical cost runs about twice the route average - uncovered, oversized, leaking, or chronically green - then re-price it or fix it.
  • Compare the same month against the same month last year; weekly readings on a seasonal route are mostly weather.
  • Watch collection lag and cancellations together - both move about a quarter before the damage shows up in the bank balance.

What numbers should I track in a pool service business?

Five, and you can pull all of them from records you already keep. Revenue per pool tells you whether your pricing is holding. Stops per technician per day tells you whether the route is dense enough to sell more capacity. Chemical cost per pool tells you which accounts are quietly expensive. Days from invoice to payment tells you whether the money you earned is actually arriving. Accounts lost per month tells you whether customers are staying. On a route under a few hundred pools, that is the entire dashboard.

The list stops at five because each one ends in a decision. The twelve-metric versions you find online carry numbers a route cannot use: first-time fix rate is close to meaningless on a recurring weekly service where nothing was broken, and technician utilization measures wrench time on a day that is capped by driving, not by time in the water. A number with no trigger attached is a report, and reports do not change anything.

  • Revenue per pool per month - your total recurring billing divided by active pools. This is the headline number, and it moves before anything else does when your pricing drifts.
  • Stops per technician per day - completed visits divided by technician-days worked. It is a density measure, not a speed measure: it tells you whether you can add customers without adding a truck.
  • Chemical cost per pool per month - what each pool actually consumed, not what the route spent in total. The route average hides the accounts eating your margin.
  • Days from invoice to payment - the average lag between billing and money landing. Revenue you have invoiced and revenue you have collected are two different numbers, and only one pays for fuel.
  • Accounts lost per month - cancellations as a share of active accounts. Growth is net, and a route adding four and losing four every month feels busy while standing still.

Every number needs an action attached, or it is just a report

The test for whether a metric belongs on your list is simple: can you name the specific thing you would do if it moved the wrong way? If not, drop it. Each of the five below has a defined trigger and a defined response, which is what separates a dashboard from a spreadsheet nobody opens after February.

The five numbers, how to calculate them, and what each one should trigger
NumberHow to calculate itTypical rangeWhat it should trigger
Revenue per poolTotal recurring monthly billing divided by active pools$150-$225/mo for weekly residentialFalling while the pool count rises means new accounts are underpriced. Fix the rate sheet first, then schedule an annual increase.
Stops per technician per dayCompleted visits divided by technician-days worked12-20 poolsBelow the range is a drive-time problem, not an effort problem. Re-sequence or re-district the route before you hire.
Chemical cost per poolChemical spend attributed to each pool, per month$10-$30/mo, with outliers past $50Any pool at roughly twice the route average gets inspected: uncovered, oversized, leaking, or chronically green - then re-priced or fixed.
Days from invoice to paymentAverage days between invoice date and payment dateUnder 30 days on a healthy routeCreeping up two months running means autopay adoption and a written reminder step, not more phone calls.
Accounts lost per monthCancellations divided by active accounts1-2% a monthAbove the range points at consistency and proof of service, not price. Check whether those customers saw a report.

Revenue per pool is the number that moves first when you drift

Total revenue is the number every operator watches and the one most likely to lie to you, because it moves for two completely different reasons - you added pools, or you are being paid better - and it cannot tell you which. Revenue per pool separates them. It is the first number to move when your pricing slips, and it moves while total revenue is still climbing, which is exactly when nobody is looking for a problem.

A two-truck operator running 145 pools across Bakersfield watched total billing rise from $22,532 to $24,212 across the winter and spring and read that as a good season. It was not. The route had 131 pools in December at an average of $172 each; it finished June with 145 pools averaging $167. Fourteen accounts had come on over the winter at around $120, quoted off a rate sheet that had not been updated in two years. Those fourteen pools bill $770 a month less than the same pools would at the current rate - $9,240 a year - and total revenue hid it for two quarters. The per-pool number showed it the first month it was pulled.

The fix once you can see it is unglamorous: correct the rate sheet so the next account comes on at the right number, then decide separately whether the fourteen get a scheduled increase. Both are decisions you can only make if the number is in front of you monthly, which is the whole argument for pulling it. If the same records also give you what a pool route actually nets after chemicals, fuel, and labour, the pricing conversation stops being a guess.

$0$50$100$150$200DecJanFebMarAprMayJun
Revenue per pool on the 145-pool Bakersfield route, December to June
Revenue per pool on the 145-pool Bakersfield route, December to June
CategoryRevenue per pool per month
Dec$172
Jan$172
Feb$171
Mar$170
Apr$169
May$168
Jun$167

Check them monthly, not weekly, because a route is seasonal

Monthly is the right cadence, and the reason is seasonality rather than discipline. A pool in Phoenix in July consumes several times the chlorine it consumes in January, and a route in a cold-weather market may bill half the accounts it bills in August. Read any of these numbers week to week and you are mostly reading weather: a single hot week moves chemical cost per pool, one rained-out day moves stops per technician, and a holiday moves collection lag. None of those are business signals, but all of them will have you making changes.

The comparison that carries information is the same month against the same month last year, with the current month against the previous one as a secondary read. That is also why tracking chemical cost pool by pool only becomes useful after a full season: you need a summer and a winter figure for the same pool before you know whether $54 a month is that pool's normal or a problem that started in May.

Getting the numbers should take minutes, not an evening with a spreadsheet, or it will not happen past the second month. Every figure here comes out of records a route already generates - completed visits, logged doses, invoices, payments, cancellations - so the job is rolling them up rather than collecting them. Software that keeps the route and the billing in one place can produce the reports that produce these numbers directly: PoolBoss reports chemical cost per pool per month, invoiced against collected revenue with an outstanding-balance list, visits per technician per week with an average stops per day, and revenue against chemical cost per route - and it compares the current period to the last one so the trend is visible without building the comparison yourself.

Collection lag and cancellations are the two that predict a bad quarter

Read together, days-to-payment and accounts-lost are the closest thing a route has to an early warning system, because both of them measure the same underlying thing before it reaches your bank account: whether customers still feel good about what they are paying for. A customer who is quietly unhappy pays late for a month or two before they cancel. On its own, a stretched collection lag looks like an administrative annoyance; sitting next to a cancellation rate that has moved from one account a month to four, it is a trend with about a quarter of lead time on it.

Treat the collection number as the more urgent of the two, because age is what actually determines whether you get paid. Collection-industry figures have long put recovery at roughly 90% on balances under 30 days past due and closer to 70% once one passes 90 days, so a lag that stretches is money leaving rather than money waiting. The levers are mechanical - autopay on as many accounts as will take it, a consistent reminder before the due date, and a written step at 30 days - and shortening the time from invoice to payment is a process fix rather than a collections personality.

Cancellations need a different response, because the number tells you almost nothing until you know why. Most healthy residential routes lose somewhere around 1-2% of accounts a month through moves, pool removals, and genuine dissatisfaction. Above that, the cause is usually consistency and visible proof of service rather than price - a customer who cannot tell whether you came is a customer deciding whether to keep paying. Before you touch pricing, check whether the accounts that left were getting service reports, and read what a cancellation actually costs against what an increase would have earned you.

Frequently asked questions

How often should I actually look at these numbers?

Once a month, on a fixed day, in about 20 minutes. Pick the same day each month - the first Monday, or whenever you close out billing - and pull all five at once so you see them in relation to each other rather than one at a time. Monthly is frequent enough to catch a pricing drift within a quarter and infrequent enough that seasonal noise does not have you reacting to weather. Quarterly is too slow: the Bakersfield-style problem, where new accounts come on underpriced, runs for two quarters before anyone notices. Weekly is worse than useless, because a single hot week or one rained-out day moves several of these numbers enough to look like a trend. The exception is collection lag during a stretch when money feels tight - checking what is outstanding weekly costs nothing and the aging buckets change fast enough to matter.

What is a normal revenue per pool for a residential route?

Weekly residential service commonly runs $150-$225 per pool per month, so a route where most accounts are weekly should land somewhere in that band. Mixed routes read lower, and legitimately so: biweekly accounts, chemical-only stops, and seasonal customers in cold-weather markets all pull the average down without anything being wrong. That is why the trend matters more than the absolute figure. Your own number from six months ago is a far better benchmark than any published range, because it accounts for your market, your service mix, and what your customers actually agreed to pay. The signal to act on is direction: a number falling while the pool count rises almost always means new accounts are coming on below your current rate, which is a rate sheet problem you can fix this week rather than a market problem you cannot.

How do I track chemical cost per pool without weighing every dose?

Record the unit cost of each chemical once, then log the dose you add at each stop - the multiplication is arithmetic, not measurement. A technician noting 3 lbs of cal hypo and 32 oz of acid takes about ten seconds at the pool, and it is a record most routes half-keep anyway on a service report. What you do not need is a scale on the truck or precision to the ounce; you need a consistent unit, because the point is comparing pools against each other rather than costing a dose to the penny. If you buy a $95 bucket of tablets and it covers roughly 40 pool-weeks, that is a defensible per-dose figure. The value shows up after a season: the account running $54 a month next to one running $14 three stops away is either uncovered, oversized, leaking, or chronically green, and each of those has a different fix.

Should I track technician utilization like other trades do?

No, use stops per technician per day instead. Utilization - billable hours divided by paid hours - was designed for trades where the job length varies enormously and the technician is idle between calls. On a pool route the work is the opposite shape: highly repeatable, 15-30 minutes at most stops, and the binding constraint is driving rather than idle time. A route can show excellent utilization on paper while a technician spends two hours a day in the truck, which is the actual problem and the one utilization hides. Stops per technician per day captures it directly, because drive time is the difference between 12 stops and 20 stops on the same eight-hour shift. If you want a second angle, look at stops per day by day of week - a Wednesday that consistently runs four stops short of your Tuesday is a geography problem sitting in one day's stop list.

What number tells me it is time to raise prices?

Chemical cost per pool rising while revenue per pool stays flat, held for two or three months. That is the margin compressing in the only place a route can feel it early, and it is the most defensible reason to give a customer because it is external and verifiable. A second trigger is a revenue per pool that has not moved in over a year: costs move annually whether or not your rate sheet does, so a flat number is a real-terms decrease. What should not trigger an increase is a single expensive month or one difficult account - the first is seasonal and the second is a re-pricing conversation with that one customer. Keep increases modest and scheduled rather than reactive: $5-$10 a month or 3-5% a year, with 30 days' written notice and a reason attached, keeps most routes ahead of costs without a wave of cancellations.

Can I track any of this from a spreadsheet?

Yes, and plenty of operators do, but two of the five get expensive to maintain by hand. Revenue per pool, stops per technician per day, and accounts lost per month are all simple division on numbers you already have, and a spreadsheet handles them fine on a route of any size. Chemical cost per pool and days from invoice to payment are the ones that break down, because both need per-visit or per-invoice data entered as it happens - a dose logged at the pool, a payment dated when it landed. Reconstructing either at the end of the month from memory and receipts produces a number too rough to act on, which is how per-pool chemical cost quietly becomes a route average nobody can use. The practical split: start in a spreadsheet, and move when you notice you are skipping the two that need field data.

Run your pool routes on PoolBoss

Join the waitlist and start when PoolBoss opens. Flat-rate pricing by pool count, every feature on every plan.