Automated Lawn & Pest — production, comp plans, and commission by salesperson

30,000 ft

The eight that matter

Jeff’s KPI list, each tied to its Service Autopilot report. Computed live where the data is already here; the grey ones say exactly which report to bring in — nothing is made up.

A/R aging

from Invoices with Balances · balance incl. tax

Revenue by service

Where the money is

Twelve months

net booked (sales) vs billed (invoice audit, pre-tax) vs collected (payments)

People & pipeline

Can the numbers be trusted right now?

the Data Hawk’s live verdict

Invoices

The register 0

one row per invoice, assembled from the audit, paid, and balances feeds — billed money is pre-tax, totals include tax

Billed by salesperson

pre-tax, from the register’s attribution — production credit lives on the Sales tab, not here

Needs a decision

nothing here is guessed — each row waits for a person

🦅 Data Hawk

The tracker’s discrepancy hunter — 25+ checks over every sale, invoice, payment, balance, payout and reversal. Detection here, decisions by you. 🚮🗑️ garbage in, garbage out.

Team roll-up

Production & cost by salesperson

Each person measured against their own plan, from their own start date through today.
What "pay as % of booked" means

Full cost of the seat — base pay plus commission plus any team override — divided by the contract value that person booked over the same stretch of time. It's the number that answers whether the seat pays for itself.

Base pay is the guaranteed-hours projection from the comp plan (hourly × guaranteed hours × 52/12, in-season and off-season split out), not actual timecards. If you want it exact, enter real hours per month on the person's plan and it will use those instead.

Early in someone's ramp this number is ugly and that's expected — a seat that starts in October carries three months of winter base pay against a book that hasn't been built yet.

New clients by week — everyone

Stacked by salesperson. Dashed line is the combined weekly standard across active plans.

My team

My sales

Client desk

Billing

My page

Current rolling window

New clients by week

Bars = clients closed that week. Line = rolling average. Dashed = the standard.

Every rolling window

Pace & earnings

Season-adjusted pace uses the seasonality curve from the 2027 Simulator, so a slow January doesn't read as failure.

30-day reviews

People

Click a card to edit that plan.

Comp plan

Every change on this page saves itself instantly — there is no Save button to press. The ✓ lights up each time it writes.

Identity

Hourly & guaranteed hours

Commission

Team override pays on contract value booked by anyone whose Reports to points at this person. Leave it at 0 until a team actually exists.
Renewal is set to match upsell, which is a placeholder. The Sales Manager offer covers new clients and upsells; it says nothing about work a customer already had and signed again. Re-signing an existing mowing customer is not the same job as winning one, and paying both at 5% is a decision rather than a default. Set it deliberately before the first commission run.

Production standard

The Sales Manager offer sets the standard as 10 new clients a week plus $36,000 booked per four-week window, but doesn't say whether upsell dollars count toward that $36,000. Upsells never count toward the client number either way. Commission always pays on both. Decide it per plan here.
What this plan costs at each level of production
Base pay never moves between these rows — that's the fixed exposure on the seat no matter how the year goes. Only commission and the percentage move. Where someone splits time with the field, only their sales share of payroll shows up here.
Projected sales hours by month
What this plan projects, month by month — guaranteed hours × the sales share. Actual hours get logged on the Hours tab, and any month with entries there uses those instead.

Logged sales 0

Or press A from anywhere. The button sits in the bottom corner of every tab.
Bulk actions
Reassign applies to whatever the filters above are currently showing — useful when a whole import landed on the wrong person.

Team

Roster health & sync

What we do & when

Green = in season. Hover a month for the field note. Pulled from the company Services & Seasonality sheet; the Data Hawk flags work completed outside its window.

Client roster

Client KPIs — VIPs & watchlist

Top 3 and bottom 3 on each measure, last 12 months of billing. Click a name to open their page.

Roster 0

Where the work comes from

What "converted" means here, and what it does not

A lead that converts leaves the leads export and reappears in the clients export. So for any source, the clients are the ones that landed and the open leads are the ones that have not — yet. Converted = clients ÷ (clients + open leads).

Two things pull it around, both in the same direction. Leads that were deleted rather than converted vanish from both files, and clients from before lead tracking existed have no lead record to sit against — so a long-standing source reads higher than it truly converts. Compare sources against each other rather than reading any single figure as gospel.

Booked value counts only sales logged in this tracker, so it stays near zero until reps have been logging for a while. It is not historical revenue.

Lead ownership

Who is sitting on the pipeline, and how old it is.
How conversion is worked out

Service Autopilot issues a converted lead a new UserName, so the leads and clients exports share no keys — checked against your files, the overlap is zero. There is no way to match the two lists after the fact with any confidence.

So it is caught in the act instead. When a leads sync shows a lead has left the file, it is held as pending for a fortnight. When a clients sync then brings in a new client with the same email (or failing that, the same name), the two are recorded as a conversion with the days between.

That means conversion only accumulates from the first sync onward — it cannot be back-filled for leads that converted before the tracker started watching. Sync both files in the same sitting and it stays accurate.

End of day sync

Drop today's Service Autopilot client export. It compares against what's here and shows you what changed.
Service Autopilot exports as .xls, which a browser cannot read. In SA choose CSV if the export offers it; otherwise open the .xls in Excel once and Save As → CSV. Then drop it here.
Sync history

Former team members — account takeover

Accounts still assigned to people who left, and who inherits them.
Taking over moves account ownership on this roster and keeps moving it on every future sync, because SA exports the old name until it is fixed there too — so fix it in Service Autopilot as well. Billing history is never rewritten: invoice lines keep the name of whoever actually did the work, and each moved account remembers its original owner.

Property vs what we sell

Service Autopilot's custom fields, against the sales logged here.

What we actually know

A field is only worth analysing if it is filled in.
Anything thin here is a data-collection problem before it is an analysis problem — the tracker can only compare price to size where somebody recorded the size.

Price against size

Logged sales joined to the property measurement that should drive them.
Median is what the book actually charges. Anything flagged is more than double or less than half that — worth checking before it becomes the going rate.

Irrigation without irrigation work

This list is only as good as what has been logged here. The Service Autopilot client export says what a property is, not what it already buys. Until a services-per-client export is synced, a client already on a blowout route will still show up below. Treat it as a call list to verify, not a list of certain gaps.

Where everybody is

Click any point to see who is around it.
Nothing selected.
Why this is a scatter and not a street map

The tracker is a single file that has to keep working with no internet and no outside requests, so it cannot pull map tiles. What you get instead is every located property plotted on true latitude and longitude — the shape of Spokane comes through clearly once you filter to a zip, and the distances and rings are calculated on the real coordinates, not on the picture.

Distance uses an equirectangular approximation, which at neighbourhood range is accurate to within a few feet of the great-circle figure.

Cloverleaf

A crew has just finished a high-value job. These are the four nearest properties — the ones that watched the work happen. Knock them, hang a door tag, or run them a targeted ad.
What counts as high value, and how the four are chosen
This is revenue per hour, not margin. Service Autopilot gives a rate and the budgeted hours for each service, and dividing one by the other is the closest thing to profitability in the export. Materials are not taken out — a chemical application carries product cost that a mow does not, so the spray work at the top of the list is flattered. If you track true PMM anywhere, that beats this.

Knock while the truck is still there

A job that just sold puts a crew on that street. These are the sold jobs whose neighbours are worth canvassing right now, with a deadline of when the work gets invoiced and the truck leaves.
Timing and settings
days after it sold
days after it sold
A prompt appears once a job is past the opening day and disappears when it is either past the closing day or invoiced — whichever comes first, because an invoiced job is a finished job and the crew has moved on.

What actually got billed

Weekly invoice import

Service Autopilot → Invoice Audit Summary, exported to CSV.
Same as the client list: SA hands you an .xls, so open it in Excel once and Save As → CSV before dropping it here. Lines merge by invoice number: an invoice named in the file gets its lines refreshed, every invoice the file does not name is untouched — so overlapping, partial, or filtered exports can neither double anything up nor delete history.
Import history

Weekly payments import

What money actually arrived, matched to invoices wherever the export names one.
Two SA exports work here, as CSV: the Daily Payment Audit Summary Report (one row per day, split by payment method — recognised automatically, feeds the collected-vs-billed picture but has no client detail) or any per-client payment report with client or invoice #, date, and amount — which also lets the assistant answer "has this client paid". Like the invoice import, everything held for the dates the file covers is replaced, so overlapping exports never double up.
Import history

Payment info

By payment method

Latest payments

Paid invoices import

Service Autopilot → Paid Invoices — every settled invoice, with who paid, when, and whose sale it was.
This is the one export that puts a name and a salesperson on collected money — the payments import above only knows days and tender types. SA hands you a real .xls, so open it in Excel once and Save As → CSV first. Records match by invoice number: re-importing updates what the file names and never deletes anything, so partial or overlapping exports are always safe.
Import history

Collected — with names on it

Collected by salesperson

whose sold work the settled invoices trace back to

Weekly balances import

Service Autopilot → Invoices with Balances — every invoice still owed, exported to CSV.
This one is a snapshot, not a range: each import replaces the whole open-invoice list with what the file says is owed right now. It is what lets the assistant answer "has this client paid" — an invoice that was billed but is not on this list has been settled.
Import history

Receivables

Aging

by invoice date

Biggest balances

By income category

By month

By sales rep

Billed revenue against what the tracker has logged.
Billed is what went out on invoices with that rep's name on the line. Logged is what has been entered here as a sale. They measure different things — a rep can be credited on an invoice for recurring work they sold years ago — so treat a gap as a question, not an error.

Biggest accounts

By billed revenue in the imported period.
🔒

Admin

Pay, cost, data quality and the imports live in here. Reps do not need to see it.

Log sales hours

Just the total for the day — "worked 7.5 hours on sales." No clocking in and out.
Only count time actually spent selling — prospecting, estimating, follow-up, closing. Field work, training and admin stay out of it. That's what makes the variance below mean something.

Projected vs actual

Hours by week

Bars are hours logged. Dashed line is the projected sales hours for that week.

Weekly variance

Projected = guaranteed hours × sales share. Over is fine; well under means the seat isn't being used for selling.

Monthly variance & cost

Where a month has logged hours, base pay charged to sales comes from those hours instead of the projection.

Logged entries 0

Import hours from a spreadsheet
Whatever the reps send you — a shared sheet, a text of their week, a CSV — as long as it has a date, a name and an hours column, paste it here. Same column matching as the sales import.
How the projection is built

Projected sales hours = guaranteed hours for that month × the sales share on the plan, spread evenly across the days. Zach at 40 guaranteed hours and 100% sales projects 40 hours a week. Josh at 40 and 75% projects 30. In a zero-guarantee winter month the projection is zero, so anything logged shows as a positive variance.

Actual is whatever gets logged above. Nothing is assumed — a week with no entries reads as zero logged, not as "probably worked the guarantee."

Cost follows the actuals. Once a month has any logged hours, the base pay charged against sales for that month becomes logged hours × hourly rate, and the sales-share estimate steps aside. Months with nothing logged keep using the projection. That means the team cost numbers sharpen up as reps get in the habit.

Booked per sales hour is contract value booked divided by hours logged — the cleanest read on whether selling time is producing.

Sold → invoiced → paid

On-site estimates

Book the visit here and it opens Google Calendar with everything already filled in — client, address, and what the property record says about the place. The tracker keeps its own record so you can see which visits turned into work.
How this talks to Google Calendar

The tracker is a single file with no server behind it, so it cannot hold a Google login. What it does instead is build the event for you: Add to Google Calendar opens Google with the title, time, location and notes already filled in — you press save. Download .ics does the same for anything that reads calendar files.

That means the booking is one click, but Google does not send anything back. The tracker keeps its own record of the visit and you mark how it went, which is what feeds the numbers below.

To put these on Josh's or Zach's calendar, add their address in the attendee box on the Google screen before saving — the invitation lands on their calendar without either of them needing to share anything first.

All sales

Fill in a date and the sale moves to the next stage on its own.
Stamp today's date on everything showing
Applies to every row currently visible above — useful after a batch of invoices goes out. It only fills blanks, so a date already entered is never overwritten.
How the timing works

Commission is payable 30 days after the invoice goes out. Enter the invoice date and the tracker works out the payable date and moves the sale to Due when it arrives.

A sale with no invoice date has no payable date, so it will never appear in a commission run. That's the point of this tab — anything sitting in Sold or Completed for too long is money nobody has billed for.

Service completed is optional. Skip it if you only care about billing; it's there so you can see work that's been done but not yet invoiced.

Change the waiting period
Applies to sales invoiced from now on. Already-invoiced sales keep the waiting period they were invoiced under, so changing this never moves a sale between closed commission months.

Disputes & chargebacks

Anything that moves a commission figure after it was calculated.

Open a dispute

Log it when a rep questions a figure — the clock starts here.

Payout corrections

Paid sales whose commission has since changed, and legacy payouts waiting to be confirmed.
A payout on the ledger is never rewritten. If a sale’s value, rate or split changed after the money went out, the difference is recorded here as a separate correction (+ owed to them, − to recover).

Chargebacks

Commission already paid on work that later reversed.
Mark a sale cancelled, refunded or written off on the Pipeline tab. If commission had already gone out, the overpayment shows here and lands on the next commission report as a deduction.

The process

Prints at the end of every commission report.
These three numbers are placeholders, not policy. I picked 30 / 10 / 180 as a starting point — they are business terms only you can set. Change them here and the wording below and on every report follows.
Write your own wording instead
Replace the standard wording with your own. Leave it empty to go back to the generated version above. Plain text — blank lines start a new paragraph.
🚮🗑️ “Garbage in, garbage out.” Every number on this report is only as good as the data behind it — if something looks off, fix the record, not the report. The 🦅 Data Hawk on the Admin tab shows what needs fixing. All values are pre-tax; commission is never paid on sales tax.

Monthly commission report

Pick a month, check it over, then Save as PDF.
Save as PDF opens your print dialog — choose "Save as PDF" (or "Microsoft Print to PDF") as the destination. Each person starts on their own page, so it prints as a packet you can hand out.
🚮🗑️ “Garbage in, garbage out.” Everything downstream — production, commissions, receivables — is built from what gets imported here. Clean files in, clean numbers out. Values are always pre-tax.

Import from Service Autopilot or Elevation Advisor

Export a report to CSV, drop it here, match the columns once. Mappings are remembered per source.
Where these numbers come from in each system

Every value in this tracker is PRE-TAX. Sales tax is never commissionable and never counts as production. If an export only offers with-tax totals, fix the export — the 🦅 Data Hawk compares sales against invoice tax data and flags values that look tax-inclusive.

Service Autopilot — the recurring book: mowing, pest, fert/weed, vegetation management, aeration, power rake, and upsells to existing clients. Run a report with one row per service sold — date sold, client, and annual/contract value (pre-tax). Export to CSV.

Elevation Advisor — where landscape projects and revamps get priced and proposed. Export accepted proposals only, with the accepted date and proposal total. Filter to accepted/won before exporting or you'll be counting work nobody closed.

Watch for double-counting. A project written in Elevation and then billed through Service Autopilot lands in both exports. Exact duplicates are skipped automatically, and the Data checks tab flags a same-client, same-value sale showing up under both systems — but the same job entered two different ways won't always be caught. Spot-check after importing both.

Include the record ID column when you can. Every imported sale keeps the row exactly as the export sent it, when it was imported, and the source system's own ID. With the ID mapped, a re-import recognises records it has seen before: unchanged ones are skipped, changed ones are updated in place with the change logged — except sales already paid or reversed, which are never touched by a sync.

Reading PDFs with Claude — setup
Dropping a PDF on the quick-add sheet sends it to Claude, which pulls out the client, the date and the line items and fills the form. Nothing is ever saved without you looking at it first.
The key is stored in this browser, not in the file. Sending the tracker to somebody does not send your key with it. But anyone who can use this browser profile can read it, so treat it like a password: don't put it on a shared machine, and rotate it in the Anthropic console if you think it has leaked. Get a key at console.anthropic.com → API keys. Reading one PDF costs a fraction of a cent to a few cents depending on the model.
Restore from a backup file
Merges a backup into what's already here — people are matched by name, sales by date + client + value, so restoring twice won't double anything up.
Seasonality & shared settings
Share of annual new clients landing in each month, from the 2027 Simulator. Used for season-adjusted pace and the season-expected numbers. Applies to everyone.
How each number is calculated

Weeks run Monday–Sunday. A sale counts in the week its close date falls in, and against the person credited with it.

Rolling window. Consecutive complete weeks. It passes when it holds at least (standard × weeks) new clients and the booked-value minimum. The in-progress week is shown but left out of the pass-rate math until it closes.

Pass rate. Share of completed windows that met both halves. The Sales Manager plan asks for 75%.

Season-adjusted pace. Clients closed in the current window, divided by the slice of the year those weeks represent per the seasonality curve, annualized. Answers "if he sells at this rate through the seasons, where does he land?"

Base pay. Guaranteed hours × hourly × 52/12, split between in-season and off-season months, prorated by day. Overridden by actual hours where you've entered them.

Commission. New-client rate on new-client value, upsell rate on upsell value, plus any team override on direct reports' booked value. Booked-value estimates for tracking — not a payroll calculation.