Running snow and ice operations by contract instead of by panic: seasonal, per push, and per event accounts kept in separate billing logic, storm trigger depths set per site, route order fixed before the storm with priority sites first, per visit documentation with time and photos that holds up in a slip and fall claim, salt inventory tracked against what contracts promise, and post storm invoicing that matches each contract type. Use when setting up a snow contract, building a site sheet or route order, dispatching a storm run, documenting a visit, checking salt stock, or invoicing after a storm.
name: snow_removal_route_operations description: "Running snow and ice operations by contract instead of by panic: seasonal, per push, and per event accounts kept in separate billing logic, storm trigger depths set per site, route order fixed before the storm with priority sites first, per visit documentation with time and photos that holds up in a slip and fall claim, salt inventory tracked against what contracts promise, and post storm invoicing that matches each contract type. Use when setting up a snow contract, building a site sheet or route order, dispatching a storm run, documenting a visit, checking salt stock, or invoicing after a storm."
Snow Removal Route Operations
Purpose
Run snow work as a contract system, not as a scramble that starts when the phone rings. The contract says when you go, the site sheet says what done means at that site, the route order is fixed before the storm, every visit leaves a record that would hold up months later, and the invoice follows the contract type the customer actually signed. Dispatch software can hold a map. This skill holds the contract logic, the documentation method, and a path a solo operator can run alone.
Workflow
1. Set up each contract in its own billing logic
Never let one billing habit leak across contract types. A charge that is right on a per push account is a double bill on a seasonal account.
- Seasonal: one flat price for the season term, billed in equal monthly installments if the contract says so. Storms create visits, not charges. If the contract has an inch cap, name the cap, the season measurement source, and the per inch or per push rate past the cap, all before the season starts.
- Per push: a set price each time the site is cleared at its trigger. Salt is a separate line only if the contract says so, at its own price. Nothing bills until a documented visit happens.
- Per event: a set price per storm event. Define an event in the contract in plain words, for example one continuous storm system, or snowfall inside a stated hour window, and state how many pushes one event includes and what an extra push costs. Without that definition, a two day storm becomes an argument, not an invoice.
- Tiered or hybrid seasonal: a seasonal price tied to snowfall tiers, adjusted once at the end of the season. Write the tiers, the total for each tier, and the measurement method before the season.
- For every type, write the same core terms: service term dates, trigger (section 2), scope by area (lots, drive lanes, walks, entrances, stairs, fire exits, loading dock), what is excluded, response timing, where snow gets stacked, who can order extra work, and how a customer instruction that cuts service gets confirmed in writing.
- Price each type from fixed and variable costs split apart. Fixed costs run all season: equipment, insurance, storage, standby labor. Variable costs run per visit: hours, fuel, salt, wear. SIMA guidance is direct on this point: per visit pricing that ignores fixed costs loses money in a light winter.
- Sign early. SIMA ops planning targets Sept. 1 to finalize contracts, and warns against taking a new site with under 60 working days to prepare unless the level of service can still be met. A site signed late still gets a site sheet and a walk before the first storm, or it does not go on the route.
Run the billing math with the calculator, using the operator's own contract prices:
python3 scripts/snow_ops.py seasonal --season-price 4800 --months 5
monthly_installment: $960.00 over 5 months
per_storm_charge: $0.00 while the season stays inside the contract terms
2. Write a site sheet and a trigger for every site
One sheet per site, built on a dry weather walk, not from a satellite photo alone.
- Address, site contact, hours the site must be open and clear, and the areas in scope, in service order: fire exits and main entrances first, then walks and crossings, then drive lanes and lot, then dock and dumpster access.
- Plow trigger in inches, measured where and by what source. Most commercial triggers run 1 to 3 inches, with 2 inches the most common for lots. Do not copy that range onto a site that needs a different standard. A 24 hour or early open site may need a 1 inch trigger or a bare pavement standard written in testable words.
- Ice trigger, separate from the plow trigger: freezing rain, freezing drizzle, refreeze after daytime melt, or moisture on pavement at or below freezing starts a patrol or salt visit if the contract covers ice. Snow depth alone misses every one of those, which is where many slip claims come from.
- Salt plan per site: product, target rate in lb per 1,000 square feet, salted area in square feet, and any no salt or reduced salt zones such as new concrete or a sensitive entrance.
- Snow stacking spots that keep meltwater off walks, keep sight lines open, and keep fire exits, hydrants, and accessible spaces clear. Mark spots to never stack.
- Hazards and notes: drains that refreeze, roof drip lines, slopes, speed bumps, wheel stops, bollards, damage already on site with photos taken before the season, and any area the customer has told you not to service, confirmed by follow up email.
3. Fix the route order before the storm
- Order by obligation, not by habit: first, sites with a hard open time or life safety access, in the order they must be clear. Second, high traffic commercial sites due before their open time. Third, the rest in a tight geographic loop that cuts backtracking. Residential driveways go in cluster order inside the loop, not as single trips across town.
- Work backward from the earliest open time. Add service minutes and drive minutes honestly, then set the dispatch time. Check the total before the storm, not during it:
python3 scripts/snow_ops.py route-time --sites 9 --avg-service-min 25 --drive-min-between 8
total: 289 min (4.8 hours)
- If the route cannot finish before the earliest open times in a mid size storm, the route is too long. Split it, add a truck or a subcontractor with agreed pay terms in writing, or renegotiate the open times. Finding this out at 4 in the morning helps nobody.
- Long storms change the plan in one stated way: loop the priority sites again for a mid storm push, then finish the full route, rather than clearing low priority sites once while a clinic lot fills back in. Write the loop rule on the route sheet.
- Load salt and gear in route order, fuel and check the truck, plow, spreader, lights, and backup shovels and bagged salt before dispatch. Note the spreader gate setting for each site's rate.
4. Run the storm in order
- Watch and log the forecast. Save a screenshot or printout of the forecast you acted on, with the source and the time you checked it. That forecast will not be retrievable later in the same form.
- Send the pre storm note to customers: the forecast in plain words, your plan, expected start, and a reminder to use care and proper footwear. This note sets expectations and becomes part of the claim record.
- Make the trigger call from the contract, not from a customer's phone call: measured depth at the site or the named source against that site's trigger, plus the ice trigger check. Log the time of the call, who made it, and what was measured.
- Anti ice where the contract covers it: salt or brine before snow bonds to pavement makes the push faster and uses less salt after. Record it as its own visit, because it is one.
- Run the route in the fixed order. At each site, clear in the site sheet order, salt at the site rate, and complete the visit record (section 5) before driving to the next site.
- Patrol after the push when conditions keep changing: refreeze checks, drift checks after wind, and a return salt visit where meltwater crosses a walk. Log patrol visits separately from active storm visits.
- Close the storm: final pass on priority sites, storm totals logged per site, truck restocked and checked, damage or incidents reported to the customer the same day.
Worker safety runs through the whole storm. OSHA guidance for this work: clear walking surfaces and spread deicer as soon as possible after a storm, warm up before shoveling, scoop small amounts, push snow instead of lifting where possible, lift with the legs and a straight back without twisting, take frequent breaks in a warm area, stay hydrated, and watch each other for cold stress signs such as confusion, slurred speech, pale or waxy skin, and numb hands or feet. Stop and get help for chest pain, severe shortness of breath, or signs of hypothermia. No route time target beats those rules.
5. Document every visit so the record holds up
One record per site per visit, filled in on site, never rebuilt at the end of the night. SIMA's claim guidance is blunt: defense in a slip and fall claim starts and stops at documentation. Fields:
- Site, date, operator, and visit type: anti ice, active storm push, patrol, return salt, or final pass
- Arrival and departure times, from a time stamped source
- Weather and pavement conditions on arrival, air temperature if known, and measured snow depth against the site trigger
- Areas cleared and areas salted, stated plainly, plus any in scope area not serviced and why
- Salt used, as an actual amount: product, rate setting, and lb applied or bags used. Estimate is a weak word in a claim. Record a number that came from the truck.
- Before and after photos, time stamped, from the same two or three spots per site each visit: main entrance, main walk, and the known refreeze spot
- Hazards found, damage seen or caused, customer instructions given on site, and follow up promised
- GPS track or route log for the truck, if the truck carries it, filed with the storm records
Keep with the storm file: the forecast screenshot, the pre storm customer note, follow up emails for any customer direction that limits service, equipment maintenance records, spreader calibration records (done at least once a year), and the visit records. If an incident or injury at a site is reported to you, pull that site's full file the same day, add a written note of what you were told and when, and send the file to your insurer promptly. Do not edit earlier records after an incident report. Add a dated note instead.
Salt math for the record, checked against the Minnesota handbook worked example:
python3 scripts/snow_ops.py salt --area 54000 --rate 2.0
salt: 108.0 lb
bags_50lb: 3 (whole bags to have on the truck)
Rates and temperature limits live in references/rates-contracts-and-sources.md. Working rule: 1 to 4 lb of rock salt per 1,000 square feet, rock salt loses power below about 15F, and below that a blend or sand for traction is the honest service.
6. Track salt inventory against what contracts promise
- Keep one inventory count that matters: lb or tons on hand, by product, updated every time a truck loads and every time a delivery lands. Bagged and bulk tracked apart.
- Know the route's burn rate before the season: total salted area times rate times expected salt visits. Run it:
python3 scripts/snow_ops.py season-salt --total-area 124000 --rate 1.5 --expected-visits 20 --on-hand-lb 2000
per_visit: 186.0 lb across the whole route
season_need: 3720.0 lb (1.86 tons) for 20 salt visits
still_to_buy: 1720.0 lb (0.86 tons)
- Set a reorder point in visits, not in feelings: when stock falls below the amount for a stated number of full route salt visits, reorder that day. Storm weeks can burn several visits back to back, and mid season supply gets tight across a whole market at once.
- Reconcile after each storm: inventory drop against the visit records' salt amounts. A gap means a record is wrong, a spreader is out of calibration, or salt is leaving another way. Fix the cause while the storm is still recent.
- Never promise a seasonal or zero tolerance site a salt program your stock cannot run. If supply runs short, tell affected customers in writing before the next event and log what was agreed, rather than quietly salting less.
7. Invoice after the storm, by contract type
Invoice from the visit records, and attach the service log to commercial invoices: every visit, times in and out, depth measured, work done, and salt applied. The invoice echoes the trigger and scope from the contract so the customer can check it without calling.
- Per push account: pushes times price, plus salt visits times salt price, each tied to a dated visit record.
python3 scripts/snow_ops.py per-push --pushes 3 --price-per-push 185 --salt-visits 2 --salt-price 95
pushes: 3 x $185.00 = $555.00
salt_visits: 2 x $95.00 = $190.00
total: $745.00
- Per event account: events times event price, plus extra pushes past the included count only.
python3 scripts/snow_ops.py per-event --events 1 --price-per-event 420 --included-pushes 2 --total-pushes 3 --extra-push-price 150
total: $570.00
- Seasonal account: no storm invoice at all. The monthly installment stands, and the storm appears only in the service log. With an inch cap, track the season total from the named source after each storm and bill the over cap amount only once the cap has actually passed, with the running total shown.
- Close the storm file within a set number of days while times and photos still match memory: records filed, invoice sent or log attached, inventory reconciled, damage and customer notes cleared, and one line in the post storm review on what to change on the route, the site sheet, or the truck before the next storm.
Solo operator path
One person, one truck, no crew to absorb a mistake.
- Cap the route by the route time check, with margin for fuel, a stuck vehicle, and one return visit. A solo route that only works in a perfect storm does not work.
- Take sites in a tighter cluster than a multi truck operation would, and turn down a distant priority site that breaks the loop, or price in a subcontractor for that site alone.
- Do the record on site with a phone: timer or time stamped photos at arrival and departure, visit fields filled in before the truck moves, voice note for hazards transcribed the same day. Skipped records do not get reconstructed later from memory.
- Build rest into long storms as stated stops. Fatigue plus a plow at night is a safety problem, not a toughness test.
- Keep a short backup plan in writing: who gets called if the truck breaks mid route, which priority sites they cover first, and how customers get told.
Output Contract
- A contract setup returns: contract type, term dates, trigger and ice trigger, scope and exclusions, stacking spots, billing lines that match the type, and the fixed and variable cost basis for the price.
- A route plan returns: dispatch time worked back from the earliest open time, site order with priority sites first, loop rule for long storms, salt load per site, and any site that does not fit the route, named with the reason.
- A visit record returns every field in section 5, completed on site, with salt as a measured amount and photos marked taken or not taken.
- A storm closeout returns: per site visit log, invoice or seasonal log entry per account in its own billing logic, inventory reconciliation, and the post storm review line.
- A salt check returns: per visit need, season need, stock on hand, and the reorder point in full route visits.
Operating Rules
- The contract governs service. Work outside the contract gets a written customer okay first, and a service cut ordered by a customer gets a follow up email the same day.
- Never bill a seasonal account per storm, never bill a per push account for a visit with no record, and never stretch one event into two on a per event account. The billing logic is the trust in this business.
- Never state a depth, a time, or a salt amount you did not measure or record. A plain gap in a record beats a filled in guess, in a claim and with a customer.
- The product label, the contract, and local snow and premises rules beat this skill. Ordinances, clear by times, and liability duties vary by city and state. Send legal questions to a lawyer or the insurer, not to habit.
- Do not use a national weather warning threshold as a site trigger. Warning criteria vary by weather service office and region. Triggers come from the contract and the named measurement source on the site sheet.
- Photos stay factual and stay with the site file: no reused photos from an earlier visit, no stock images, no edited timestamps.
- Customer details, gate codes, and site records live in the operator's own files. This skill is the method, not a place to store a customer list.
Worked storm, trigger call to final invoice
One night storm, three accounts on one route, each billed its own way. Prices below are this operator's own contract prices for the example, not market rates.
Forecast at 18:00 calls for snow starting near midnight, 5 to 7 inches by morning, temperature falling into the low 20s. The forecast screenshot goes in the storm file and the pre storm note goes out to all three customers.
A grocery plaza, per push, 54,000 square feet of salted pavement, trigger 2 inches, open 07:00, price $185 per push and $95 per salt visit. An office park, seasonal with a 60 inch cap, $4,800 for the season over 5 months at $960 a month, season total before this storm 54 inches. A clinic, per event, trigger 1 inch, must be clear by 06:00, price $420 per event including 2 pushes, extra pushes $150.
Dispatch works back from the clinic: route order is clinic first, plaza second, office third, then the clinic and plaza again on the long storm loop. At 02:10 the clinic measures over its 1 inch trigger, the trigger call is logged, and the route starts. The storm takes 3 pushes at the plaza, 2 pushes plus a return salt visit at the office, and 3 pushes at the clinic. Every visit gets a full record. Plaza salt at 2.0 lb per 1,000 square feet is 108 lb per salt visit, logged from bags loaded.
Closeout the next day: the plaza invoices at $745 (3 pushes and 2 salt visits). The clinic invoices at $570 (1 event plus 1 extra push). The office gets no storm invoice: its season total reaches exactly 60 inches, the cap, so no over cap charge applies yet, and the service log with all visits goes to the customer with the monthly installment. Inventory reconciliation shows the salt drop within a bag of the visit records, the storm file closes, and the post storm review adds one change: the office park drain refroze on two visits running, so it moves onto the patrol list for every storm, not just this one.
No ratings yet — be the first to rate it.