Automating
PuroClean Kelowna

Fifteen processes already run themselves. Here is what they cost us to build, what they are worth, and the four parts of this company they do not touch yet.

Every figure from the PSA Job List export of 2026-08-25 · 2,199 jobs · and from the Control Tower run at 07:05 this morning.

The organization

Ten departments

This is how a restoration company divides its work. Every job we take touches most of them, in roughly this order.

Intake
Estimating
Documentation
Compliance
Sales
Marketing
Finance
Equipment
People
Intelligence

The Control Tower has been organized this way since the day it was built, on 14 August — before this meeting existed.

The organization

Six of them run themselves

15 automated processes, across 6 departments. Nobody starts them. Nobody watches them. They report for themselves.

Intakeno automation
Estimatingno automation
Documentation1
Compliance6
Salesno automation
Marketing1
Finance3
Equipment1
Peopleno automation
Intelligence3

Four departments have no automation at all. That is not an oversight in the drawing — it is the plan.

What already exists

99 days

From the first file to this morning. Nine projects, built alongside a full-time job.

  1. 2026-05-19Daily Notes ReviewDocumentationEncircle note coverage, audited weekly
  2. 2026-05-19Project ManagersFinancePM commission dashboard, daily at 05:10
  3. 2026-05-19Accounts ReceivableFinanceThe collections cockpit -- dark since June
  4. 2026-06-01Marketing PostMarketingPost generator
  5. 2026-06-03CoWorkPeopleScheduling experiment
  6. 2026-06-08Tracking SystemEquipmentSupplyTrack consumables and sign-out
  7. 2026-07-15Edmonton XactAnalysisComplianceThe big one -- nightly compliance chain
  8. 2026-07-30Project Manager 2.0IntelligenceOperations overview, daily at 05:25
  9. 2026-08-14Control TowerIntelligenceThe thing that watches all of it

The Control Tower came last, and deliberately. You do not build the thing that watches everything until there is something worth watching.

What already exists

A day that runs itself

Yesterday, today, and tomorrow, without anybody logging on.

  1. 05:00Edmonton master list + morning chainexport, scrape notes, build the board
  2. 05:10PM commission dashboardrebuilt from the overnight export
  3. 05:20Five digests land in five inboxesnobody pressed send
  4. 05:25PM operations overviewrebuilt
  5. 05:40PM dashboard health checka second process checks the first
  6. 06:00Accounts Receivable refreshsuperseded -- waiting on a QuickBooks feed
  7. 07:05Control Tower, morningreads all fifteen, publishes one verdict
  8. 19:00Edmonton nightly chain + reconcilewrites corrected dates into PSA
  9. 20:30Edmonton claims boardpublished
  10. 20:45Edmonton pipeline watchdogchecks the chain actually finished
  11. 21:30Control Tower, nightthe last look before the day closes

What already exists

It broke last night, and told us

19:46 Edmonton's write step could not reach PSA. Zero dates applied.
20:18 Retried on its own. Four dates written.
21:30 The Control Tower ran with nobody logged on — the first time it ever had.
tonight Eight more dates applied. Recovered.

10 of 15

rows the Control Tower grades as weak confidence — it can prove a step ran, not that its output was delivered. It volunteers that about itself.

A monitoring page that only ever showed green would be worth nothing. This one is built so that missing evidence is never reported as health.

That is the reason to trust every number that follows.

It takes us

135

days to get paid

The industry norm for a restoration contractor is 45 to 60.
Every extra day holds about $8,633 of our own money.

The accountants call it DSO — days sales outstanding. It is what we are owed, divided by what we bill in a day: $1,166,503 ÷ $8,633 = 135. It appears by that name later, so it is worth naming once here.

The problem

$1,166,503 is sitting out there

Across 101 jobs. $390,722 of it is over ninety days old — past the point where a carrier receivable stops being a payment and starts being an argument.

  • 0-30 days$175,55915 jobs
  • 31-60 days$66,82411 jobs
  • 61-90 days$120,2987 jobs
  • 91-180 days$122,0958 jobs
  • 181-365 days$230,3108 jobs
  • 365+ days$38,31717 jobs

And it concentrates: Definity alone is $413,094 across 25 jobs — 35% of everything we are owed.

The problem

The tail, not the average

31 days — median invoice Half of everything is paid this fast
70 days — the average Dragged up by a minority
159 days — the slowest tenth 90 invoices took over 90 days
  • K25-1412-WNTYTD Insurance263 days$85,117
  • K25-1635-FMDefinity201 days$50,551
  • K26-0004-FM-BCAA178 days$50,517
  • K26-1779-WRHUB International Insurance Brokers117 days$50,000
  • K25-1777-FMDefinity206 days$42,901

Collections are not broadly broken. A tail of files nobody owns is dragging the whole average — and that changes the fix. If everything were slow we would need more collectors. Because the tail is slow, we need something that never forgets a file.

The problem

We cannot see our own clock

Of our 548 open jobs, this is how many actually carry each date in PSA.

  • Loss93%
  • Contacted88%
  • Inspected74%
  • Estimate complete32%
  • Completed30%
  • Invoiced26%
  • Approved19%

The record collapses exactly where the money is. Our recorded time-to-first-contact is 90 hours. Nobody believes that, and they are right not to — the date simply does not get entered. The honest finding is worse than a slow number: we cannot prove our response times to a carrier who asks.

The problem

The $440,316 that wasn't

First answer

$440,316

“completed work never invoiced” — every job finished with no invoice date on it.

After checking one job

$113,416

The largest supposedly-unbilled job in the company was already paid in full last November. Only the date field was blank. 69 of the 79 had already settled.

I am showing you the wrong number on purpose. It is the same disease as the slide before — 88 jobs that have received money carry no invoice date at all — and it is why every figure in this deck traces back to a file you can open. $113,416 across 10 jobs is real, and we can collect it this month.

The plan

The four dark ones, in order of cash

Not in order of what is interesting to build.

IntakeStage 4
EstimatingStage 3
Documentation1
Compliance6
Saleslater
Marketing1
Finance3
Equipment1
Peoplelater
Intelligence3

Each stage ends with a new row in the Control Tower — so the system itself, not me, reports whether the stage landed.

The plan

Stage 1

Get the cash in

lands late September

DSO 135 days. $1,166,503 outstanding, $390,722 of it over 90 days.

  1. Reconnect the QuickBooks aging feed -- the collections cockpit already exists
  2. Reconcile PSA against QuickBooks, so there is one answer to “what are we owed”
  3. A daily chase list, ranked by amount × age, to a named owner
  4. Release the ten finished-but-unbilled jobs worth $113,416
TargetDSO 135 → 75 days
Worth≈ $517,980 of working capital

The arithmetic, so you can check it: 60 days × $8,633 a day = $517,980. Not new revenue — our own money, arriving sooner. The collections cockpit already exists; it lost its data feed on 25 June and has been dark since. This is a reconnection, not a build.

The plan

Then three more

Stage 2

Answer the adjusters

65 claims where an adjuster asked us something and nobody replied. The oldest has waited 60 days.

Zero adjusters waiting over 3 days

lands mid October · Documentation

Stage 3

Close the estimate gap

240 jobs inspected with no estimate written. Median 39 days since inspection.

Inspected → estimate: 380h → 72h

lands early November · Estimating

Stage 4

Control subcontractor cost

$331,315 of cost overrun, on the 39% of jobs where cost is recorded at all.

Realized margin 38.8% → 45%

lands early December · Intake

Stage 2 drafts adjuster replies but never sends them. On the first real run, twelve of thirteen auto-proposals would have answered a genuine question wrongly. The system drafts; a person sends. That is the design, not a limitation.

The plan

When this is finished

  1. 1Get the cash inlate Septemberfinance.collections, finance.uninvoiced
  2. 2Answer the adjustersmid Octoberkelowna.replies
  3. 3Close the estimate gapearly Novemberestimating.duelist
  4. 4Control subcontractor costearly Decemberintake.po

These dates are built on a rate we have already measured — nine projects and 15 unattended processes in 99 days, solo, alongside a full-time job. They are not a hope. They assume that same throughput, and they slip if a bad week at work takes one.

Not fewer people

The same people, pointed at the work that actually needs a person.

  • Chasing overdue invoices across PSA and QuickBooksA ranked list arrives every morning with a name on each line
  • Reading 65 adjuster notes to find who is waitingThe queue is built overnight, sorted by how long they have waited
  • Remembering to stamp a date in PSAThe date is written from the system that already knows it
  • Finding out a subtrade overran when the invoice landsThe purchase order caps it before the work starts

Every hour on the left is spent moving a number out of one system and into another. None of it is judgement. The judgement — what to tell an adjuster, whether to escalate a carrier, whether a scope is right — stays with people, and they get more time for it.

What I need from you

  1. 1Approve Stage 1Four weeks, starting Monday.
  2. 2Name an owner for collectionsOne person, not a shared inbox. This decides whether DSO moves more than any code does.
  3. 3A repeating QuickBooks aging exportEverything in Stage 1 depends on it.
  4. 4Raise the XactAnalysis back-dating limit with VeriskThe interface cannot back-date a milestone. Sixty-odd field instances are stuck behind it.
  5. 5Decide whether failure alerts start emailingToday the tower publishes. It does not phone.
  6. 6An hour to close two open dashboardsTwo Edmonton pages answer with no login. Found while preparing this. Detail on the panel.

Not asked for: headcount, new software licences, or a system replacement. Every stage builds on PSA, QuickBooks, XactAnalysis and Encircle — tools we already pay for.

Open the live Executive Panel →

← → to move · Esc for all slides 1 / 17

All slides