Add an Employee (1:31 video). Open on its own page
Pay the way your shop actually pays
Every technician has a pay model. The Payroll page uses it, together with tracked hours, completed stops, and serviced revenue, to work out base pay, variable pay, and gross pay for the period. Every technician also has a scorecard: its score is their average stop rating over the last 30 days (every completed stop is rated out of 100; see Stop ratings below), next to targets you choose for what a stop rating can't see, like skip rate. An optional company-wide quality bonus scales the variable part of pay by that score, and every payroll row expands into the scorecard behind it.
Pool Founder builds the pay summaries and the CSV; it does not run payroll or handle tax withholding. Key the numbers into ADP, Gusto, or whatever you use today. See employees, time tracking, and payroll for hours, mileage, and the other payroll settings.
The four pay models
- Hourly — tracked hours × hourly rate, with overtime at the OT multiplier from payroll settings. This is the default for every employee.
- Per stop — a flat amount for each stop completed in the period. A service (on the Services page) can carry its own Pay per stop ($); otherwise maintenance stops use the technician's Per-stop rate and work orders use their Work order stop rate when you set one (blank means "same as per stop"). See "Pay per stop on a template" below for the exact order.
- Hourly + per stop — hourly wages (with overtime) plus the per-stop amount on top. Both rates apply.
- Commission — a percentage of the revenue on the stops they complete (the price of the maintenance service or work order they serviced). Hours are still tracked but do not affect pay.
Base pay is the hourly part. Variable pay is the per-stop or commission part. A technician on Hourly has no variable pay; one on Per stop or Commission has no base pay; Hourly + per stop has both.
Set a technician's pay model
- 1In the sidebar, go to Team → Employees and click the technician to open their page.
- 2Find the Pay card ("How this technician is paid on the Payroll page"). It only appears for team members whose role includes payroll access.
- 3Pick a Pay model: Hourly, Per stop, Hourly + per stop, or Commission.
- 4Fill in the fields for that model — Per-stop rate ($) and the optional Work order stop rate ($) for the stop models, or Commission (%) for commission. The hourly rate itself still lives on the employee edit form (the Pay card shows it with an Edit link).
- 5Check the live example line ("e.g. 40 stops → $1,000.00 before bonus") and click Save pay model.
Changing a pay model is not retroactive in the sense of rewriting history — the Payroll page always recalculates the period you are looking at with the rates in effect right now. Set the new model before you run the next period.
Pay per stop on a service
When some visit types are worth more to a technician than others (a filter clean versus a quick weekly service, say), put the rate on the service instead of on the person. Every service, ongoing (formerly a service plan) or one visit / several visits (formerly a one-time service), has a Pay per stop ($) field: "What a technician on per-stop pay earns for one visit of this type. Blank = their default rate." It only appears for roles with payroll access, and saving it needs payroll access too.
- 1In the sidebar, open Services, then the Services tab.
- 2Click a card to edit it (or click New service and pick how it runs).
- 3On an ongoing service the field is in the Pricing & frequency card, under the rate. On a one visit or several visits service it is in the Basics card, under Time at stop (minutes).
- 4Enter dollars (for example 22) and save. Clear the field and save to go back to the technician's default.
The service's card on the Services page shows a muted "Pays $22/stop" line when a rate is set. Jobs created from the service remember it, so every completed visit of that job pays the service's rate to a technician on Per stop or Hourly + per stop. Hourly and commission technicians are not affected.
For each completed stop, payroll resolves the rate in this order: the template's Pay per stop → (work orders only) the technician's Work order stop rate → the technician's Per-stop rate → nothing. A stop that reaches "nothing" pays $0.00 and is flagged: the Payroll page shows an amber banner above the table ("1 stop type is unpaid") naming the technician and the template, and the technician's name in it links to their employee page so you can set a default rate. In the expanded row the rate reads "no rate" in amber.
Expanding any payroll row for a per-stop technician shows a Stops by type list above the scorecard: one line per service (plus "Maintenance (no service)" or "Work order (no service)" for jobs not built from a service) with the stop count, the rate that applied, and what it paid. The Pay card on the employee page says the same thing under the per-stop fields: "Templates can set their own pay per stop; this is the fallback."
What the scorecard measures
The score is the technician's average stop rating over the last 30 days: every rated stop in that window, averaged. So the scorecard and the day-by-day stop ratings always agree, and you change what counts toward the score (where they start and finish, tasks, required photos, time on site, callbacks, customer thumbs up / down) under Settings → Stop Ratings, not here. A thumbs-up can push a stop past 100, but the score itself tops out at 100.
Next to the score you set targets. Open Payroll (sidebar → Team → Payroll) and click Scorecard & bonus (top right, next to Settings). The Score and targets section always starts with Average stop rating (default target 80), followed by the target lines you added. Click Add target to add one, or the × on a row to remove it; the average stop rating line can't be removed. Click Save scorecard when you are done; the next nightly scoring run uses the new setup. The target lines you can add, for what a stop rating can't see:
- Skip rate (on by default): stops the tech skipped, as a share of completed plus tech-skipped stops. Skipped stops have no rating, so this is the only place they count. Office skips are not counted against the tech. Lower is better; the default target is 2% or less.
- On-time starts: work days where the route started before its scheduled start time. Default target 90%.
- Issues reported: equipment or site issues the tech flagged from the field during the window. Default target 1.
- Stops completed: visits completed during the window. Default target 100.
Target lines show hit or miss under the score and decide the All targets hit bonus, but they never change the score: a tech who skips too much keeps their average stop rating and misses the skip-rate target. There are no weights. Task completion, photos on required tasks, time on site and positive customer feedback are no longer separate scorecard lines, because every stop rating already checks them.
A line with too little to measure shows "Not enough data" and is left out rather than counted against the tech: the average stop rating needs at least 5 rated stops in the 30 days, skip rate 5 scheduled stops, on-time starts 3 work days. Until a technician has 5 rated stops they have no score.
The quality bonus
The quality bonus is a company-wide multiplier on variable pay only (per-stop and commission earnings). It never scales hourly wages, so a technician on plain Hourly is unaffected even when the bonus is on.
- 1In the sidebar, go to Team → Payroll and click Scorecard & bonus.
- 2In the Quality bonus section, turn on the switch.
- 3Pick how the bonus is earned: Tiers on the average stop rating or All targets hit (below).
- 4Click Save scorecard.
- Tiers on the average stop rating — each tier has a Min average rating (0–100) and a Multiplier (0.5–3). The starter tiers are 90+ → ×1.10, 80+ → ×1.05, and 0+ → ×1.00. Use Add tier for more, or the trash icon to remove one. For each technician, the highest minimum at or below their average stop rating wins.
- All targets hit — one Multiplier (default ×1.10) applied when the average stop rating and every target line are at or past their targets; otherwise ×1.00. Lines with not enough data are ignored, so a tech is not penalized for a line that cannot be measured yet.
A technician with no score yet (fewer than 5 rated stops), or a company with the bonus off, always gets ×1.00. The multiplier applied and the resulting bonus show in the payroll table's Multiplier and Bonus columns; hovering the multiplier says why (for example which targets were missed). The summary line under the period selector reads something like "Scorecard: Average stop rating, Skip rate · Bonus: all targets hit → ×1.10", "Bonus: 90+ → ×1.10, 80+ → ×1.05", or "Bonus: off".
Mileage, overtime, labor burden, and the work-week start day still live under the separate Settings button on the Payroll page.
Reading the payroll table
Each row on the Payroll page shows the technician's pay-model badge and rates under their name, then:
- Hours — total tracked hours, with regular and overtime hours underneath.
- Stops — stops completed in the period, split as maintenance (M) and work orders (WO).
- Miles — miles driven in the period.
- Stop rating — their score (average stop rating over 30 days) as a colored pill, "—" when they have no score yet, and an "Onboarding" tag while they have fewer than 30 completed visits all-time (the score is still settling, and alerts are softened).
- Multiplier — the quality multiplier applied to variable pay (×1.00 shows muted; hover it for the reason).
- Base — hourly wages including overtime.
- Variable — per-stop or commission pay before the bonus.
- Bonus — Variable × (Multiplier − 1). Positive in green, negative in red.
- Mileage $ — miles × the mileage rate.
- Gross — Base + Variable + Bonus + Mileage $. Shows "No rate" when the technician has no rate set for their model.
Click a row to expand it. Per-stop technicians get a Stops by type list first (each template's stop count, rate, and pay), then Every stop, then the scorecard behind the row.
Every stop lists each stop the technician completed in the period, oldest first. The period comes from the selector at the top of the Payroll page; for teams paid twice a month pick This Half-Month or Last Half-Month (1st–15th, or 16th–end of month), or pick Custom Dates, click Choose dates, and click the first and last day in the calendar. Each line shows the date, the customer (click it to open that completed visit), the service address, the type it was paid as (the template name, marked M for maintenance or WO for a work order), and the Pay it earned before the quality bonus. Per-stop technicians get a Total before bonus line that matches their Variable pay. For commission technicians, Pay is that stop's revenue × their commission %. Hourly technicians still get the list, but with — in the Pay column, because stops do not change hourly pay. Download stops in the list's corner saves that technician's stops as a CSV.
Export CSV includes all of these plus the raw rates: Employee Name, Pay Model, Hourly Rate, Per-Stop Rate, Work Order Stop Rate, Commission %, Regular Hours, Overtime Hours, Total Hours, Stops, Maintenance Stops, Work Order Stops, Serviced Revenue, Average Stop Rating, Quality Multiplier, Base Pay, Variable Pay, Quality Bonus, Miles Driven, Mileage Reimbursement, Gross Pay, and a Stop breakdown column that lists each stop type as label×count@rate (for example "Weekly service×12@22.00; Filter clean×3@35.00"), separated by semicolons.
Export stops CSV, next to Export CSV, downloads every stop by every technician in the period, one row per stop: Employee Name, Date, Customer, Address, Job, Type, Maintenance / Work Order, Revenue, and Pay (before bonus). Use it to check per-pool and per-repair pay line by line, or to hand the detail to whoever runs payroll.
The scorecard behind each row
Click any payroll row to expand the technician's scorecard. It leads with the Targets list: the Average stop rating line first, then one line per target you added, each showing the actual value against the target (for example "86 · target 80" or "5% · target 2% or less"), a green check when the target is hit, a red × when it is missed, a dashed circle with "Not enough data" when it cannot be measured yet, and a thin bar for the credit that line earned. An All targets hit pill appears when every measured line is on target.
- Beside the lines: the Avg. stop rating gauge (the score), their rank on the team, an "Onboarding" tag when applicable, the change vs. 7 and 30 days ago, and stops this pay period (maintenance and work orders).
- Tips — one coaching note per missed target, worded for the technician.
Scores are computed nightly: each night the last 30 days of stops are rated and averaged. A brand-new technician has no score until their first scored day; the row then reads "No score yet — computed nightly from completed visits." The scorecard catches up with a change to Stop Ratings settings at the next nightly run, while the Stop ratings card updates right away.
The same lines also appear on the technician's employee page (Employees → click the technician) in a read-only Scorecard card, subtitled Average stop rating over the last 30 days, next to the Pay card, with a link to Payroll. That card shows to roles with payroll access or employee read access and contains no pay amounts.
Stop ratings: how every stop went
Every completed stop gets its own rating out of 100, so a technician sees how each visit went the same day; the scorecard's score is the 30-day average of these ratings. Once an owner or admin turns them on for technicians (see below), technicians see their own under the mobile app's Account tab → How My Stops Went. Stop ratings are off for technicians until you turn them on: until then techs don't see the How My Stops Went row or any rating, while owners and managers already see them on employee pages and in Settings, so you can tune the numbers on your past weeks before your team sees anything. Managers see any technician's on their employee page (Team → Employees → click the technician) in the Stop ratings card, next to the Scorecard card.
Out of the box each stop is checked on these things, worth these points (each company can change them, see below):
- Started at the pool (20): the phone's GPS when they tapped Start Job was within 500 ft of the pool's location on the map.
- Finished at the pool (20): they marked the stop done at the pool, not after driving away (a stop completed more than 2 minutes after GPS saw them leave counts as a miss).
- Tasks checked off (25): partial credit for each task checked.
- Required photos (20): photos on every photo-required task.
- Time on site (15): pools only. Full credit at 60% or more of the time that pool usually takes, none at 30% or less. Going long is never marked down, and repairs (work orders) are not timed.
- No callback (10): no water-quality request from the customer (customer portal or text, category Water quality) and no courtesy-visit unplanned stop to that pool in the 7 days after the stop. Until those 7 days pass it shows as not counted yet.
- Chlorine held until next visit (15, off by default): free chlorine at the pool's next reading, 3 to 10 days later, was at or above the low end of the company's Free Chlorine range (Technician Alerts → Alert Settings → Water chemistry ranges; 0.5 ppm if not set). Pools whose sanitizer is bromine or none are skipped, as are repairs. Turn it on only if your techs record real readings: a tech who logs 0 as a placeholder would miss it every week.
Points are relative: the rating is always out of 100, so a check worth 40 when the rest add up to 60 counts for 40% of it. A check that can't be judged is left out instead of counted as a miss: no GPS reading, a pool with no location on the map, a visit with no photo-required tasks, or a pool whose usual time isn't learned yet. By default a customer thumbs up on the service report adds 10 points of extra credit on top (so a perfect stop with a thumbs up counts as 110), and a thumbs down shows on the stop without lowering the rating. The two after-the-visit checks fill in on their own: a complaint or return visit days later lowers that visit's rating on the day it happened, not the day it was noticed. Ratings read 90+ Great, 75+ Good, 50+ Fair, under 50 Poor.
Both screens show a strip of the last 7 days with each day's average, the selected day's average and how many stops were rated great, and every stop on the route. Tap or click a stop to see each check with what happened ("Started the job 0.4 mi from the pool", "3 of 4 tasks checked off") and the points it earned. Skipped stops and stops not done yet are listed without a rating; a stop skipped by the office says so and never counts. Under the stops, the app spells out the company's current rules in one sentence.
Turn ratings on for technicians. At the top of Settings → Stop Ratings, the Technicians see their ratings switch is off by default. Turning it on shows each technician their own stops in the app right away; turning it off hides them again. It saves on its own (no Save changes needed) and needs the employees:update permission. Change how stops are rated. Go to Settings (sidebar) → Team access → Stop Ratings (or search "Stop Ratings" with ⌘K). It needs the employees:update permission (owners and admins by default). You can:
- Turn any check on or off with its switch, and set its points (1 to 100). Each row shows its share of the score. At least one check must stay on.
- Set the "At the pool" distance (100 to 5,280 ft, default 500) for big lots, gated communities or rural properties.
- Set Rushed visits: Full credit at (default 60%) and No credit at (default 30%) of the time that pool usually takes. No credit must be lower than full credit.
- Set Thumbs up adds extra credit (0 to 50 points, default 10) and Thumbs down takes off (0 to 50 points, default 0). 0 turns either off. A rating never goes below 0.
Changes are a draft until you click Save changes (Discard changes and Use the defaults are next to it). While you edit, the Rated your way panel re-rates your real stops from the last 1 week, 2 weeks or 4 weeks (pick with the buttons at its top) both ways: the overall average saved vs. with your changes, Where points are lost, per stop (how many points each check costs the average stop under your changes), and the stops whose rating would change the most. Below the settings, Day by day shows every technician's average for each day in that range, with how many stops they did and the check they lose the most points on. Switch it between With changes, Saved and Change (how many points each day moves, green up, red down) to see who a setting helps or hurts before you save. Days nobody worked show as thin gaps, and the grid opens on the most recent days (scroll left for older ones). Click a day to open that technician's page on that day in the Stop ratings card. Ratings are worked out when someone looks at them, so saving re-rates every day, past ones included. For a week afterwards technicians see a note in the app: "Your company changed how stops are rated on Oct 6." George can change these settings too ("stop counting where they start the job"), with the usual approval card.
Stop ratings show no pay. They only affect pay through the quality bonus, when it is on: its tiers look up the average stop rating. There is no way yet for a technician to dispute a rating or for a manager to override one; if the pool shows in the wrong place on the map, fix the service location's address so future visits rate correctly.
What technicians see: My Scorecard in the mobile app
Technicians can see their own scorecard in the mobile app under the Account tab → My Scorecard. It shows their Average stop rating with a See how each stop went link, the same lines an admin sees (actual vs. target, hit or missed), stops this pay period, the 7- and 30-day trend, and the same tips, so a tech always knows exactly which target they are missing. Until you turn on Technicians see their ratings (Settings → Stop Ratings), My Scorecard shows no score or stop rating, only "Your score isn't on yet" and the other target lines such as skip rate.
My Scorecard shows NO pay amounts — no rates, no per-stop totals, no commission, no bonus, and no multiplier. Pay stays on the web Payroll page, visible only to roles with payroll access.
Frequently asked questions
Can I pay my techs per pool instead of hourly?
Yes. Set the technician's pay model to Per stop on the Pay card of their employee page and enter the per-stop rate; every completed maintenance stop (each pool visit) pays that amount, and work orders can have their own rate. Hours are still tracked but do not change pay. Use Hourly + per stop if you want both.
Does the quality bonus change hourly pay?
No. The multiplier only ever applies to variable pay (per-stop and commission earnings). Hourly wages, overtime, and mileage reimbursement are never scaled, so a technician on the Hourly model is unaffected even when the bonus is on.
Where do I set a per-stop rate or commission?
On the technician's page under Employees, in the Pay card. Pick the pay model, enter the Per-stop rate ($) and optional Work order stop rate ($), or the Commission (%), then click Save pay model. The Pay card is only shown to roles with payroll access.
Can different kinds of visits pay a technician different amounts?
Yes. Open Services → Services, edit the service, and fill in Pay per stop ($) (Pricing & frequency card on an ongoing service; Basics card on a one visit or several visits service). Completed visits of jobs made from that service pay that amount to per-stop technicians; templates without one fall back to the technician's Work order stop rate (work orders) or Per-stop rate. If neither exists the stop pays $0.00 and the Payroll page shows an amber warning banner naming the technician and template.
What counts as a stop?
A stop is a completed visit in the pay period — a maintenance stop from a route, or a completed work order. The payroll table splits them as M (maintenance) and WO (work orders), and the two can have different per-stop rates.
Can I change what the scorecard measures?
The score is always the technician's average stop rating over 30 days; change what a stop rating checks (and its points) under Settings → Stop Ratings. On the Payroll page, Scorecard & bonus sets the average stop rating's target and the extra target lines: skip rate (on by default), on-time starts, issues reported, and stops completed. Target lines show hit or miss and decide the All targets hit bonus; they don't change the score, and there are no weights. Click Save scorecard; the next nightly run uses the new setup.
What is the difference between the two bonus rules?
Tiers on the average stop rating looks the technician's 30-day average stop rating up in your tier table (for example 90+ → ×1.10, 80+ → ×1.05). All targets hit pays one multiplier (default ×1.10) only when the average stop rating and every target line are at or past their targets, and ×1.00 otherwise. Either way the multiplier only scales per-stop and commission pay.
Why does a metric say "Not enough data"?
The technician has not had enough rated stops, scheduled stops, or work days in the last 30 days for that line to be meaningful (5 rated stops for the average stop rating, 5 scheduled stops for skip rate, 3 work days for on-time starts). It is left out of the all-targets check rather than counted as a miss, and without 5 rated stops there is no score.
Why does the Stop rating column show a dash?
The technician has no score yet: fewer than 5 rated stops in the last 30 days. Scores are computed nightly, so a brand-new technician (or a company that has not run routes yet) shows "—" and always gets a ×1.00 multiplier.
Can technicians see how much they are paid in the app?
No. The mobile app's My Scorecard screen (Account tab → My Scorecard) shows the average stop rating, target lines, stops, trend, and tips only. There are no pay amounts anywhere in the technician app.
How is each stop rated?
Every completed stop gets a rating out of 100. By default: started at the pool (20 points), finished at the pool without driving off first (20), tasks checked off (25), required photos (20), time on site for pools (15; repairs are not timed), and no callback (10: no water-quality request or courtesy visit to that pool in the 7 days after). An optional check, off by default, looks at whether chlorine held until the next visit to that pool. Checks that cannot be judged are left out. A customer thumbs up adds 10 extra points. Each company can turn checks on or off, change their points, the "at the pool" distance, the rushed-visit thresholds, and the thumbs up / thumbs down points under Settings → Stop Ratings. Managers see it in the Stop ratings card on the employee page. Technicians see it under Account → How My Stops Went in the app only after an owner or admin turns on Technicians see their ratings at the top of Settings → Stop Ratings (off by default).