Termco
Termco

It Snowed More Than You Billed

02 October 2026

The email arrives in March, after the plows are parked and the lot stakes are pulled. The property manager at a 14-acre retail plaza has finished her winter reconciliation, and her gate camera plus her own log show 13 service events between December and the thaw. Your invoices billed 19. She's holding about $3,400 and asking you to verify six dates. What you have is a stack of route sheets that say "plowed and salted" in handwriting that had been awake for thirty hours, and a foreman who half remembers February. You credit four of the six, because arguing from memory against a camera is a fight you lose twice: once on the money, once on the relationship.

The credit stings, but it's the small loss, because a spring audit only ever counts in one direction. She checked your invoices against her log and flagged the extras. Nobody on either side went looking for the visits that never reached an invoice at all. Nobody can, which is the point, and those visits trace to the same missing paper.

A storm is not a billable event. A visit is.

One ticket, one billable event. Snow work bends that rule at the definition stage, before anyone keys anything. A per-push contract bills each visit as its own event. The weather doesn't cooperate with the paperwork, though. A long storm is a shift, not a visit.

Take January 11. Snow starts at 6pm and runs 14 hours, 9.4 inches by the airport gauge. The plaza's contract triggers at 2 inches, and the lot has to stay passable overnight because the anchor grocery takes its trucks at 4am. So your operator clears it three times: 11:40pm, 4:15am, and 7:50am, when the storm finally quits. Salt goes down twice.

The route sheet, filled in the cab at the end of the run, reads: "Cedar Plaza. Plowed and salted."

The clerk keys what the sheet says. One push, one application. At $495 a push and $260 an application, the night's work at that one site was $2,005. The invoice line says $755. The second and third passes burned the same diesel as the first. They just never became events; the paper collapsed a shift into a line.

Depth tiers leak the same way. Plenty of per-push contracts price 2 to 6 inches at one rate and 6 to 10 at another. "Plowed" carries no depth, so every ambiguous line keys at the tier the clerk can defend, the base one, every time.

Melted by morning

A scale ticket's subject sits in the truck, weighable, the whole transaction. A push is different: it starts disappearing the moment the blade lifts. By the 9am walkthrough, the lot your driver cleared at 4:15 looks like a lot the sun handled. Salt never looked like anything to begin with. The only durable record of the night is whatever got written in the cab, and the cab writes short. It's dark, it's 2 degrees, there are four sites left on the loop, and "plowed and salted" is what honest exhaustion writes.

So the error runs one way. Bill a visit that didn't happen and the camera catches it, the audit flags it, the credit goes out. Skip a visit that did happen and there is no camera for that, no gap in a serial run, no pile that shrank. Silence, permanently.

Run route math on it, with your own rates swapped in. A 38-site route sees five storms a winter long enough to need second passes. Suppose only the dozen sites on the overnight loop get revisited, and one visit per site per storm goes unwritten, at an average $430. That's $5,160 a storm and roughly $26,000 a winter, performed in full, invoiced never. Add the base-tier habit on the deep storms and the number isn't done growing.

flowchart TD
  A["Storm: 9.4 inches over 14 hours"] --> B["Visit 1: 11:40pm, push and salt"]
  A --> C["Visit 2: 4:15am, push"]
  A --> D["Visit 3: 7:50am, push and salt"]
  B --> E["Route sheet: plowed and salted"]
  C --> E
  D --> E
  E --> F["Invoice: one push, one salt, base tier"]

Sell per-push, or sell seasonal, but don't sell both

Here's the claim that will start an argument in the shop: a contractor who can't produce a same-night record of every visit shouldn't offer per-push pricing at all, and should take the seasonal contract at the lower sticker instead. Per-push without per-visit paper isn't per-push. It's billing at whatever count survives two memories, the customer's and yours, and you've just read which direction both of them round.

The pushback is fair. Seasonal contracts put the weather risk on you, a brutal winter eats the margin, and per-push is exactly where a heavy winter pays. Keep per-push, then. But notice what you signed up for: you priced by the event, so every event is a line of evidence you've promised to produce in March. The customer holding a camera and a log isn't being difficult. She's auditing a per-event bill the only way one can be audited. The contractor who shows up to that audit with "plowed and salted" brought a handshake to a records fight.

Ticket the night

The fix isn't asking drivers to write essays at 3am. Nobody has fixed that and nobody will. The fix is making each visit a ticket with a handful of fields, site, time in, time out, services performed, depth since last clear, turned in at shift end and digitized that morning, while the operator still remembers which pass was the bad one.

The rest is structure. Your site list, and which contract each site runs on, seasonal, per-push, or per-inch, is reference data, along with the storm log itself: one row per event, the date and the gauge reading, entered once by the office. The tiers, the trigger depths, the salting rates, and what counts as a separate visit are billing rules with effective dates. Then a visit ticket with no depth can't price, and gets flagged as non-compliant that day instead of keying at the base tier by default. And when totals assemble against the storm log, a per-push site with no ticket for an event on the log shows up as a hole that week, while the driver can still answer "did we salt Cedar after the second pass?" from memory instead of from loyalty. Invoice totals assemble only from tickets that cleared. That slice is what Termco builds: digitizing the tickets, flagging the ones that break a rule, structuring the billing rules, managing the reference data, assembling the totals. What a second pass costs, and whether you'd rather carry seasonal risk than paperwork, stays entirely your call.

Count last winter before this one starts

The test costs one evening, and October is when to run it. Pull last winter's longest storm from the weather record, then pull the route sheets and invoices for your ten best per-push sites. Count three numbers: the visits the sheets support, the visits a 14-hour storm with a 2-inch trigger had to require, and the visits you billed. The spread between them, priced at your own rates, is what the route sheet cost you per storm. The first trigger event of this season writes the same sheet unless something changes first.

If you'd rather have a second reader on it, send 10-20 sample tickets to hi@termco.ai, route sheets from a long storm especially, and we'll send back what we find within 48 hours.