Snow Removal Invoice Example: Every Line on a Storm Bill
Short answer: A snow removal invoice example has to prove two things: that the trigger was met and that the salt was actually spread. The commercial lot below is 38,000 ft² on a 2-inch trigger, and one 9.5-inch storm billed as three pushes plus a drift re-open comes to $2,232.10, of which $472.10 is salt and ice melt priced by the pound and the bag rather than folded into the push price.
Snow is billed for work nobody watched. The property manager was asleep at 11:50 p.m. and arrives to a clear lot with no idea whether it took one pass or three. Every line below is a piece of evidence first and a charge second. The general checklist for any trade sits in what to include on an invoice, and the rate structures are in the snow removal pricing guide.
What does a per-event snow invoice look like after one storm?
INVOICE 2026-0091 · Event billing, storm of January 14–15
Site: 38,000 ft² asphalt lot, 61 stalls, 420 lf of sidewalk, three entries. Contract SC-2026-014, trigger 2.0 in, service window 24 hours.
| Visit | Start | End | Accumulation | Work performed |
|---|---|---|---|---|
| 1 | Jan 14, 11:50 p.m. | Jan 15, 1:20 a.m. | 3.4 in | Drive lanes, fire lane and stalls opened, walks cleared, lot salted |
| 2 | Jan 15, 7:15 a.m. | 9:40 a.m. | 4.6 in new | Full re-push, stalls reopened, walks cleared, lot salted |
| 3 | Jan 15, 5:40 p.m. | 7:05 p.m. | 1.5 in new | Storm-end cleanup, curb and stall lines widened, walks, salt |
| 4 | Jan 16, 5:40 a.m. | 6:25 a.m. | drifting | North row reopened after overnight wind |
| # | Description | Qty | Rate | Amount |
|---|---|---|---|---|
| 1 | Push, visit 1 — 3.4 in on the ground, 2.0–3.9 in tier | 1 | $340.00 | $340.00 |
| 2 | Push, visit 2 — 4.6 in new accumulation, 4.0–5.9 in tier | 1 | $455.00 | $455.00 |
| 3 | Storm-end cleanup pass, visit 3 — 1.5 in new, below the 2 in trigger, billed at the contract cleanup rate | 1 | $185.00 | $185.00 |
| 4 | Drift reopen, visit 4 — north row only, wind event after storm end | 0.75 hr | $130.00 | $97.50 |
| 5 | Walks and entries — 420 lf plus three sets of steps, blower and shovel | 3 visits | $145.00 | $435.00 |
| 6 | Bulk treated salt, lot — 640 lb, 900 lb, 400 lb by visit | 1,940 lb | $0.165 | $320.10 |
| 7 | Ice melt, walks and steps — calcium chloride blend | 4 × 50 lb | $38.00 | $152.00 |
| 8 | Pile relocation — loader, northeast piles moved off six stalls and clear of the hydrant | 1.5 hr | $165.00 | $247.50 |
| 9 | Timestamped before and after photos, all four visits | — | included | $0.00 |
| Balance due, net 15 | $2,232.10 |
Depth tiers on this contract: 2.0–3.9 in $340 · 4.0–5.9 in $455 · 6.0–7.9 in $595 · 8.0–9.9 in $740 · over 10 in quoted per event.
Those rates belong to one contractor in one market on one site. They are printed so the arithmetic is followable, not so anyone copies them.
Why is the depth tier printed on every push line?
Because a push is not a push. Moving 3 inches off 38,000 ft² and moving 5 inches off the same lot are different equipment hours, different stacking, and different odds of getting stuck.
Printing the tier next to the accumulation turns the price into arithmetic the customer can check. Line 2 does not say “second visit, $455.” It says 4.6 inches of new snow landed in the 4.0–5.9 tier, and the tier table is at the bottom of the invoice. There is nothing to negotiate, because the number was set months ago when the contract was signed.
The tiers also settle the argument this trade has every single winter: what counts as a new event. If your contract does not define it, one 30-hour storm becomes one push in the customer’s mind and three pushes in yours. Define it in the contract by new accumulation over the trigger since the last completed visit, then print the accumulation on every line. Line 3 is the same principle running the other direction: 1.5 inches did not hit the trigger, so it is not billed as a push, it is billed at the lower cleanup rate the contract already names.
Why does salt get its own line and its own unit?
Because consumption is unpredictable in a way that pushing is not, and pushing is the part you can price.
Two lots of identical size can burn wildly different tonnage across the same winter depending on freeze-thaw cycles, shade, drainage, and how much ice forms between storms. Bury salt in the push price and one bad ice season eats the year. Line 6 bills 1,940 lb of bulk treated salt at a per-pound rate, broken out by visit, and line 7 bills the walk product by the bag, because a calcium chloride blend on concrete steps is a different material at a different cost from what goes on asphalt.
| Material | Bill by | Record on the invoice |
|---|---|---|
| Bulk rock or treated salt, lot | Pound or ton | Quantity per visit, not just a storm total |
| Liquid brine, pre-treat | Gallon | Application time before the storm |
| Calcium or magnesium chloride blend, walks | 50 lb bag | Bag count and where it went |
| Sand or sand-salt mix | Ton | Note the spring sweep-up separately |
The other reason to break it out by visit: it is the only honest way to bill a pre-treatment. Brine laid down at 6 p.m. before a midnight storm is real work with a real material cost and no visible snow moved, which is the hardest thing in this trade to get paid for. A line with gallons and a timestamp gets paid. A vague “de-icing” line does not.
What changes when the same lot is on a seasonal contract?
The invoice gets shorter and the risk changes hands. That is the whole trade-off.
| Model | Who carries the risk | Invoice looks like | Fails when |
|---|---|---|---|
| Per event, tiered by depth | The customer | Every visit, every tier, every pound of salt | A heavy winter produces a bill the customer never budgeted |
| Seasonal flat | You | One monthly amount, plus salt if uncapped | One winter runs double the ten-year average |
| Hourly | The customer | Equipment hours and operator hours by machine | The customer shops you on rate and cannot forecast a total |
A seasonal invoice for this same lot would read: monthly installment, service level, trigger, and a line confirming events performed to date so the customer can see what the installment bought. Keep the event log even when the money does not change with it, because at renewal the event count is the entire negotiation.
Most experienced contractors sell a hybrid: seasonal for the pushing, per-unit for the salt, hourly for stacking and hauling. That way the customer gets a predictable budget for the part that is predictable, and you stop gambling on the part that is not.
Which lines get argued about, and how should they read?
| The line | What the customer is thinking | Write it like this |
|---|---|---|
| Three pushes, one storm | ”It snowed once. Why am I billed three times?” | Print accumulation since the last completed visit on each line, with start and end times |
| Salt, $320.10 | ”That is a lot for salt.” | Pounds per visit at a stated per-pound rate, with the treated-versus-plain distinction named |
| Cleanup pass, $185 | ”You said the trigger was two inches.” | Name it as the contract cleanup rate for sub-trigger snow, and cite the clause |
| Drift reopen, $97.50 | ”The storm ended yesterday.” | North row only, wind event, 45 minutes, photos at 5:40 a.m. |
| Pile relocation, $247.50 | ”You put the piles there.” | Six stalls and a hydrant recovered, 1.5 loader hours, before and after photos |
| Walks, $435 | ”Three visits for the sidewalk?“ | 420 lf plus three sets of steps, cleared by hand every time the lot was pushed |
The pattern is the same on all six: a time, a quantity, and a photograph. Snow disputes are never about the rate. They are about whether the work happened, and a lot with no snow on it is the worst possible evidence that anyone was ever there.
How do I explain the contract against this invoice?
The estimate in snow is the contract, and it did most of the arguing before the season started. Show the customer where each line comes from.
| In the contract | On this invoice | Why |
|---|---|---|
| Trigger 2.0 in, tiered push pricing | Lines 1–2, tier printed | Tiers were priced at signing |
| Cleanup rate for sub-trigger snow | Line 3, $185 | Storm ended below the trigger |
| Wind and drift events billed hourly | Line 4, 0.75 hr | Occurred after storm end |
| Walks and entries, per visit | Line 5, 3 visits | Tied to each push |
| Salt at cost per pound, no cap | Lines 6–7, actual quantities | Consumption is not forecastable |
| Stacking and hauling, hourly | Line 8, 1.5 hr | Piles reached six stalls |
| 24-hour readiness, no per-storm charge | Not itemized | Priced into the tiers |
A contract with these seven rows in it produces an invoice nobody has to explain. A contract that just says “snow removal as needed” produces a phone call after every storm. The follow-up ladder when a commercial account still sits unpaid at day 45 is in how to get paid for snow removal work.
How do I price a season without betting the winter?
Never off someone else’s per-push number. Build it from event counts at your own site.
- Count events, not inches. Pull ten or more seasons of daily snowfall for the station nearest your route from NOAA’s Climate Data Online and count how many days cleared your trigger. A season with twenty-two 2-inch events costs far more to service than a season with one 30-inch storm, even though the second one wins the headline.
- Cost one event on the actual site. Time a full cycle: drive time, lot, walks, salting, and the stacking that follows. Multiply by your machine hour cost plus operator cost, and add the salt separately.
- Model the bad year, not the average. Take the worst season in your ten, not the mean. A seasonal price built on the average loses money slightly more than half the time, because snowfall distributions have a long tail on the heavy side.
- Cap what you cannot forecast. Write the seasonal price to cover a stated number of events or seasonal inches, with per-event pricing resuming above that. Keep salt outside the cap or capped by tonnage.
- Price readiness as a real cost. Standing by for 24 hours from November to March means insurance, staged equipment, on-call operators and a phone that answers at 3 a.m. whether or not it snows. Those are also the biggest entries in snow removal business expenses.
- Add margin by division, not markup. A $118 loaded machine hour marked up 30% is $153.40, which is a 23% margin. For a 30% margin, divide: $118 ÷ 0.70 = $168.57. Markup multiplies cost; margin divides by one minus your target, and mixing them up costs about seven points on every hour you run.
What do I keep once the lot is clear?
The signed contract with the trigger and the tier table, the timestamped photos from every visit, the start and end times per machine, the accumulation readings you used, the salt delivery tickets and the pounds applied per visit, and the fuel and repair receipts from a season that destroys equipment.
Keel sits in the truck for this. The invoice goes out from the cab at 6 a.m. with your own numbering, your logo, your brand color, and a payment link the customer scans as a QR code. The salt ticket, the cutting-edge order, the hydraulic hose and the diesel fill get photographed and read on-device by Apple Intelligence, and the runs between sites log as trips all winter. Nothing leaves the device: no account, no login, no bank connection, no cloud, and an App Store privacy label that reads Data Not Collected. Free is $0 with unlimited invoices, receipts and mileage, and Keel Pro is a one-time $249.99 Lifetime purchase rather than a subscription. When the season ends, the Accountant Pack exports a CSV plus a one-page summary PDF, and the whole year leaves as a single file.
Frequently asked questions
What should a snow removal invoice include?
The site and its measured area, the contract number and trigger depth, a visit log with start and end times and accumulation for each visit, each push priced at its named depth tier, walks and entries as their own line, salt and ice melt with actual quantities and units, any hourly work such as stacking or hauling, and a reference to the timestamped photos.
How do you bill a storm that produces more than one push?
By defining an event in the contract as new accumulation over the trigger since the last completed visit, then printing that accumulation on each push line. A 9-inch storm over 19 hours legitimately produces several visits, because a lot cannot hold nine inches and stay open. Without the definition in writing, the customer will read the whole storm as one visit.
Should salt be included in the price of a push?
Not unless it is capped. Salt consumption swings with freeze-thaw cycles, drainage and shade in ways that snowfall alone does not predict, so folding it into a push or seasonal price transfers an unforecastable risk to you for free. Bill bulk product by the pound or ton and walk product by the bag, with quantities recorded per visit.
Is a seasonal snow contract better than per-event billing?
It is better for the customer’s budget and worse for your risk. A seasonal flat price is profitable in a light winter and painful in a heavy one, so it should be built from the worst season in ten years of local records rather than the average, and it should carry a cap on events or inches beyond which per-event pricing resumes.
What should the contract say about the trigger depth?
The exact depth that sends you out, how accumulation is measured, whether the customer can request service below the trigger and at what rate, and what happens with drifting after a storm has ended. Every sub-trigger dispute traces back to a contract that named a number without naming how it is measured or who decides.
How do I prove the work happened when the lot is already clear?
Timestamped photos at every visit, taken before the first pass and after the last, plus start and end times per machine and the salt quantity applied. Attach or reference them on the invoice. A clear lot proves nothing on its own, which is why photo evidence is the single most valuable habit in seasonal snow work.
This article is general information, not professional or tax advice.
How do I actually get paid?
The part that gets you paid
An invoice in under a minute, on your iPhone.
Pick a client, add a line, send a clean PDF — or say it in words and confirm the draft. Your own pay-me link goes on as a QR code. Free to start; unlimited invoices and your own branding are Pro.
On-device · No account · Data Not Collected