I ran a landscape company in Waukesha, Wisconsin for years before I sold it. For two of those seasons I was losing $22 a visit on my fert route and I had no idea. My quotes looked profitable on paper. The money was disappearing somewhere I wasn't looking.
Most contractors are in the same spot right now. You quote a job, you win it, you do the work, you cash the check, and at year-end your CPA tells you net was thinner than you expected. The visible numbers weren't lying. The invisible ones were.
Five costs run through every job in your book. Three are obvious (labor, materials, fuel). The other five are usually invisible until you sit down and run the actual math. Here they are, in order of how much margin they typically cost a small landscape contractor.
1. Labor burden (18-22% of your crew rate)
If you pay your crew $22 an hour, your real cost per labor hour is closer to $26-27. That gap is your labor burden: the employer-side line items that ride on top of gross wages.
What goes into burden:
- FICA: the employer half of Social Security and Medicare, 7.65% of gross wages
- State unemployment (SUTA): varies, typically 1.5-6% in most states for landscape companies
- Federal unemployment (FUTA): 0.6% on the first $7,000 per employee
- Workers comp premium: biggest piece, often 5-12% of wages for landscape work
- Any health stipends, retirement contributions, paid time off: varies, easy to add 3-5%
Add those up against gross wages and you get a percentage. For most US landscape contractors it lands between 18% and 22%.
How to fix it
Calculate your burden once a year. Take your full annual payroll cost (paychecks plus every employer-side line item) and divide by gross wages alone. The result minus 100% is your burden. Plug it into your pricing tool as a multiplier on every labor hour.
Real example: a $22/hr crew rate at 20% burden is $26.40 of true labor cost per hour. A two-person crew on a 90-minute job costs you 2 × 1.5 × $26.40 = $79.20 in labor alone. If your spreadsheet shows $66, you're under by $13 every visit. Across 200 visits a month that's $2,600 in monthly margin you're leaving on the table.
2. Drive time costed as labor time
A 30-minute drive to a 60-minute mowing job is a 90-minute paid job. Your crew is on the clock for the whole window. If you bill the customer for 60 minutes of mowing and absorb the 30 minutes of drive time as "cost of doing business," you're paying your crew to drive while charging the customer for the lawn only.
On a route of 6-8 daily mows that's an hour and a half of paid drive time you're eating every day. At $26.40 per labor hour with burden, that's $40/day, $200/week, $5,200/year of unrecovered cost on one truck.
How to fix it
Cost drive time at the same crew rate (with burden) as on-property time. Both directions. A 30-minute round trip at $26.40/hr effective rate is $13.20 of cost on every visit. Enter drive time on every quote and let your sheet update the per-visit cost.
Optimize routes for proximity when you can; route density is the single biggest lever you have on drive cost. But until that's perfect (it never will be), at least make sure the cost is in every quote.
3. Equipment recovery (per-visit amortization)
Your mower has a finite useful life. So does your trailer, your plow, your spreader, your trimmers, your blowers, your truck. Replacement is going to happen, and the money for it has to come from somewhere. Most contractors fund equipment replacement out of net profit at year-end, which means they're running a subsidy program for their own balance sheet.
The right way to think about it: every visit chips a small amount of useful life off your equipment. That depreciation per visit is a real cost, and it should be in your price.
How to fix it
Annual equipment depreciation divided by annual visit count = equipment recovery per visit. Quick example:
- Commercial mower: $7,000 useful life, 4-year replacement cycle = $1,750/yr
- Trimmer + edger + blower: $300/yr each, 3 of each across crews = $900/yr
- Trailer: $4,000 useful life, 6-year cycle = $667/yr
- Truck: 1/3 share of depreciation (mowing only, the rest is fert/snow): ~$2,000/yr
- Annual total: $5,317
Spread across 1,600 mow visits a year (200/month × 8 active months) that's $3.32 of equipment cost per visit. Small per-visit, big per-year. A pricing tool that bakes it in invisibly keeps you from forgetting.
4. Overhead allocation (the silent margin killer)
Insurance, software, office, vehicle payments, accounting, marketing, cell phone, the gym membership you bought at the start of the year and never used: your monthly overhead has to come out of the margin on every visit. Most contractors think about overhead in monthly terms ("my overhead is $5,000 a month") but never explicitly allocate it to individual jobs.
The result: you quote a job at $80 with $50 of cost and think you're making $30 of margin. You're not. You're making $30 of contribution toward overhead. Once your share of monthly overhead is allocated to that visit, your real margin might be $5. Or zero. Or negative.
How to fix it
Monthly overhead ÷ monthly visit count = overhead per visit. Plug it in as a fixed cost on every quote. Example:
- Monthly overhead: $5,000
- Monthly visit count: 200
- Overhead per visit: $25
Every quote needs to cover that $25 BEFORE you start counting margin. A job priced at $80 with $50 of direct cost contributes $30 toward overhead, leaving $5 of actual margin. That's the number that should drive whether you bid the job.
Margin under 10% means you're working for free if anything goes wrong. Margin under zero means you're paying the customer to do the work. Both happen way more often than contractors realize when overhead isn't in the quote.
5. Material markup (not just material cost)
Pass-through materials at cost are a hidden subsidy to your customer. Standard markup in the trades is 20-40% depending on category and competitive pressure. Mulch, fertilizer product, lighting fixtures, plant material, salt: all of it needs a markup that covers handling time, sourcing time, and the working capital you tied up buying the stuff in the first place.
Most contractors I've talked to charge cost-plus-zero on materials because they think the customer expects it. Customers in every other trade (plumbing, electrical, HVAC, general contracting) pay a contractor markup on materials. Landscape is the only category that habitually undersells itself here.
How to fix it
Set a default markup percentage. 30% is a reasonable starting point for most categories. Override on individual quotes when the math demands it: big-ticket items (a $4,000 paver order) might warrant a smaller percentage; small items (a single bag of fert) might warrant more.
Example math on a mulch install:
- 10 yards of mulch at $35/yd wholesale: $350
- 30% markup: $105
- Customer-facing material line: $455
That $105 isn't arbitrary profit. It covers the time you spent calling the supplier, the truck cost to pick it up, the working capital you fronted, and the risk you ate when you bought 10 yards on a job that might get rained out before install. Markup is how you turn pass-through materials into a margin line instead of a wash.
Add it all up
A typical residential mowing visit at $65 looks like this once the invisible costs are surfaced:
- Crew labor (1 hour, 1 person, $26.40 with burden): $26.40
- Drive time (30 min round trip): $13.20
- Equipment recovery: $3.32
- Overhead allocation: $25
- Fuel: $4
- Total cost: $71.92
- Customer price: $65
- Actual margin: -$6.92
That's a job you're losing money on. Every visit. 30 times a year on a weekly mow. $207 in unrecovered cost per account per season, and a typical contractor has 30-60 accounts they're running below profitability without knowing it.
The fix isn't to charge $200 a visit for residential mowing. It's to know your number. Once you know it, you can quote a fair price (in this case probably $85-95) that covers cost and gives you 20% margin. Customers who push back on that price weren't profitable customers anyway.
How to know your number on every quote
Build a spreadsheet that runs all five of these costs every time: drive time you enter per-job, labor burden + overhead + equipment recovery that you set up once, material markup at your per-product rate. Then keep it current. Mine kept getting stale and I missed inputs constantly.
It's the same math I should have been doing in my own company from year one. Took me two seasons of $22-a-visit losses to learn it. Hopefully this saves you that.
If you want to run the full math on your real numbers, read how to price landscape jobs for the step-by-step playbook.