Context
MaidThis runs on EOS. Each week my business manager and I review a scorecard of the numbers that run the business. That data lives in eight places: our booking system, Operto, Quo for calls and texts, GoHighLevel, Stripe, our main inbox, TidyCal and Gusto.
The problem
- Some numbers were missing. Speed to lead, cancellations by cleaner and the real reasons customers cancelled weren’t tracked at all. Those numbers have a big effect on whether customers stay with us.
- Some numbers weren’t reliable. Cancellation reasons were typed in by whoever took the call, and “schedule change” covered about half of them.
- The sales review was too small. I reviewed two random calls a week, which wasn’t enough to coach from.
What I built

- Definitions first. Before building anything, I wrote down the rules. The KPI week runs Sunday to Saturday, revenue counts when the job is invoiced, a recurring customer has at least two cleans, and test bookings are left out.
- One workflow for all the data. n8n pulls the week from every source and writes it to a new Google Sheet. I kept the old scorecard untouched while I tested. n8n runs in Docker on my laptop with no per-task fees, and I run it by hand before the meeting so I know the numbers are fresh.
- New numbers. Speed to lead against a two-minute target, cancellations per cleaner, cancellation reasons read from the actual calls, texts and emails, and the recruiting funnel from application to onboarding.
- A dashboard. Looker Studio shows every number next to its goal with a green, yellow or red status. Anyone on the team can open it.
- Sales call review. The Claude API reviews every call from a new lead that week. It checks the call against our scripts, notes whether the customer booked and ends with one practice drill. The review posts to Slack. I tried a free local model first, but it wasn’t good enough to coach from.
- Two numbers stay manual. Contractor pay and operations discounts have no clean data source, and they only take a minute to enter.
Results
- The weekly scorecard fills in with one click instead of a pass through eight tools
- Every new-lead sales call gets reviewed, instead of two random ones
- Speed to lead, cancellations by cleaner and real cancellation reasons are tracked for the first time
- The only running cost is API usage for the call review
What I’d do differently
- Get every lead source into the CRM automatically before building reporting on top of it. Thumbtack leads were the biggest source of bad counts until they started syncing through our booking system.
- Only track numbers that lead to a decision. Every metric on the scorecard has someone who acts on it.