Why Landscaping Companies Struggle to Price Seasonal Contracts, and How to Fix It

Pricing a seasonal landscaping contract means guessing in January what labor, fuel, and materials will cost in July, and then living with that guess for the rest of the year. Most owners are pretty good at it, but a few gaps show up over and over in the landscaping books I work on, and they’re all fixable.
The bigger the company gets, the harder this is, since you’re no longer pricing one service. You’re pricing lawn care, plants, hardscape, and irrigation, and each one has its own costs and its own margin.
What Goes Into the Price
Materials look different depending on the work. Softscape is mulch, soil, and sod. Plants are their own category with their own losses, since not everything that goes in the ground makes it. Hardscape brings in boulders, rock, and pavers, which have a way of turning one pallet into two once the job starts. Irrigation adds heads, pipe, valves, and controllers. If a contract covers several of these, each one needs to be priced off its own costs.
Equipment is the one that gets missed most. Landscaping runs hard on equipment, and mowers don’t retire gracefully. They tend to die in July. Let’s say a mower costs around $15k and lasts about five years. That’s roughly $3k a year the business has to earn back before it needs a new one, and if that cost isn’t built into the price, the replacement ends up coming out of cash you didn’t plan to spend.
The easiest way to get it into a bid is to turn it into an hourly number. If that mower runs about 1,000 hours a year, it costs around $3 an hour just to own, before fuel and repairs. Do the same for the trucks, trailers, and bigger machines, and you have an equipment cost per crew hour that can go into every estimate.
Getting Labor Into the Price
The first thing I’d check is whether all of the direct labor is in the margin. That means the crews doing the work, including drive time, loading and unloading, and the extra seasonal help you bring on in spring. If the seasonal hires are showing up somewhere other than the job costs, the margin looks better than it is.
It also means pricing off the loaded rate instead of the wage. Payroll taxes, workers’ comp, and any benefits push the real cost of an hour above what shows up on the paycheck, so a crew member making $18 an hour may cost the business closer to $23 or $24.
Drive time adds up faster than most people expect. Let’s say a three-person crew spends about an hour and a half a day driving between properties at around $25 an hour loaded. That’s about $110 a day, or roughly $2.2k a month per crew, and if the contract was priced only on time spent on the property, that money isn’t in the price anywhere.
Management labor is where it gets nuanced. A crew lead or field supervisor who spends most of the day on job sites can reasonably be counted in the job cost too. An operations manager who runs the schedule from the office usually isn’t. There isn’t one right answer for every company, but we do want to decide on purpose, so the margin means the same thing month to month and we’re comparing apples to apples when we price the next contract.
Know Your Margin by Service Line
This is the big one. A lot of landscaping companies look at one gross margin for the whole business, and that single number can hide a lot. Lawn care, softscape, hardscape, irrigation, and plants all have different labor, different materials, and different equipment needs, so they almost never earn the same margin.
In the landscaping books I work on, it’s not unusual to find one service line carrying another. Let’s say a company does about $2M a year, and the numbers break out like this:
| Service line | Revenue | Gross margin | Gross profit |
|---|---|---|---|
| Lawn care | $800k | 45% | $360k |
| Hardscape | $500k | 22% | $110k |
| Softscape and plants | $400k | 40% | $160k |
| Irrigation | $300k | 50% | $150k |
| Total | $2M | 39% | $780k |
A 39% blended margin looks fine, so nobody asks questions. But hardscape is bringing in a quarter of the revenue at about half the margin of everything else. Once we split it out like this, we can see which work to push, which to reprice, and which might not be worth selling at all. It also makes the next contract easier to price, since we’re working from what each service actually costs instead of an average.
Job Cost the Bigger Jobs
For larger installs and bigger commercial clients, I’d track each job against the estimate it was sold on. Let’s say we sell a $40k hardscape job with $26k in estimated costs, which is a 35% margin. The job takes three extra days and needs another $2k in pavers, so actual costs come in around $31k. The margin on that job just dropped to about 23%, and we only find out if someone compares the actuals to the estimate.
When a job runs over, the useful question is why, and the answer usually lands in one of a few places:
- The designer or estimator didn’t include enough materials or labor in the bid.
- Something went wrong during the install, and the crew had to redo work.
- The job took longer than planned because of weather, permits, or waiting on a delivery.
- Material prices went up between the day we sold it and the day we bought it.
Each of those has a different fix. The first one is an estimating problem, the second is a training or supervision problem, and the last two are usually something we can build into the contract terms or the timeline. If all we know is that the job lost money, we’re stuck guessing which one to work on, and the next bid probably goes the same way.
Change orders belong here too. When the customer adds a retaining wall halfway through, that work needs its own price and its own signature, since “while you’re out here” is how a lot of margin walks off the job site.
Seasonal Contracts and When the Cash Comes In
A lot of maintenance contracts get billed in 12 equal payments, which customers like. The catch is that most of the labor happens during the growing season. Let’s say a contract bills $1,200 a month, or about $14k a year, and the labor and materials to service it run around $10k a year. If most of that work happens over seven months, we’re spending roughly $1,400 a month on that account during the season while collecting $1,200. With 50 accounts like that, we’re short about $10k a month all summer, and then collecting for work we already did all winter.
That’s fine if we plan for it, but if nobody’s watching, June can feel like the business is losing money when it’s really just the timing. A simple cash flow forecast that lays the monthly payments next to the monthly labor makes that gap easy to see ahead of time, so we know how much cash to carry into spring.
For multi-year contracts, I’d also think about building in an annual price increase, since fuel, materials, and wages rarely go down, and a price locked in three years ago can slowly eat the margin on an otherwise good account. For installs, a material price clause and a deposit when the materials are ordered protect the job from the price swings in the list above.
Where to Start
If you want one thing to do this week, pull last year’s revenue and direct costs and split them by service line, even roughly. Most owners have a gut feel about which line makes the most money, and this shows whether the gut feel is right.
The good news is that most of this comes down to how the numbers are set up, and once margin is tracked by service line and the bigger jobs are costed against their estimates, pricing the next season gets a lot less stressful. If you’d like help seeing where your contracts are making or losing money, a free Cash Clarity Call is an easy place to start, and we can look at your numbers together.