How to Price a Landscaping Job (Materials, Labor, and Margin)
The short answer: Price a landscaping job by estimating the crew hours, costing the materials, adding an overhead slice and your profit margin, then sanity-checking the total against a per-hour floor. The formula is Price = (labor + materials + overhead) ÷ (1 − target margin). The trap is guessing the hours too low. Track what your crew actually spends on each job with CRMb and every future bid gets more accurate, because you are pricing from history instead of hope.
Landscaping is deceptively easy to underprice. A quote feels reasonable, the crew shows up, the ground is harder than it looked, a helper calls out, and a "half-day" install eats a full day. The margin you imagined is gone before lunch. Pricing from real numbers is how you stop that from happening.
Step 1: Estimate the labor hours (honestly)
Labor is the biggest and riskiest line in almost every landscaping bid. Break the job into tasks and estimate crew-hours for each, then pad for the things that always happen: travel between sites, loading and unloading, cleanup, and the customer conversation.
A worked estimate for a small planting install:
| Task | Crew-hours |
|---|---|
| Site prep and bed shaping | 5 |
| Planting (shrubs + perennials) | 6 |
| Mulch and edging | 4 |
| Cleanup + haul-off | 2 |
| Travel + load/unload | 3 |
| Total | 20 crew-hours |
Multiply crew-hours by your loaded labor rate, the wage plus payroll taxes, workers' comp, and benefits, typically 15% to 30% over the base wage. At a $40 loaded rate, 20 hours is $800 of labor.
The single best way to make these estimates accurate is to compare them to what really happened. When your crew punches in against each job through the Punch pairing, CRMb shows you the actual hours next to your estimate, so "I thought 20, it took 26" becomes a number you use to price the next one. See how to calculate labor cost per job.
Step 2: Cost the materials at what you pay
List every material: plants, mulch, soil, edging, fabric, hardware, and cost them at your actual purchase price, not the retail price you will charge the customer.
Say materials come to $650. If you buy in bulk and pull from stock, cost items at their average cost so a pallet bought at two different prices is blended correctly. CRMb's inventory does this automatically and pulls the right cost onto the job when you add materials, and purchasing ties it back to your supplier orders.
Add your material markup as a separate line the customer sees, that markup is legitimate margin for sourcing, hauling, and warranty, but keep it out of your cost bucket so your job costing stays honest.
Step 3: Add overhead and your profit margin
Two more layers turn cost into price.
Overhead is the cost of running the business that is not tied to this job, trucks, fuel, insurance, office, software. A common method: divide monthly overhead by the labor hours you bill in a month to get an overhead rate per hour. At $18/hour and 20 job hours, that is $360.
Profit margin is what is left for the business after everything. Do not just add a percentage on top of cost, that undercharges you. Divide by (1 − margin):
- Total cost = $800 labor + $650 materials + $360 overhead = $1,810
- Target margin 30% → Price = 1,810 ÷ (1 − 0.30) = $2,586
Round to a clean number the customer can say yes to, say $2,600.
Step 4: Check it against a per-hour floor
Before you send the bid, divide the price by your estimated crew-hours. $2,600 ÷ 20 = $130 per crew-hour. If that is below what your market and your costs require, the job is underpriced no matter how the line items look. Many landscaping operations set a per-hour floor (see how much to charge per hour) and refuse to bid under it. The floor is your safety net when an estimate is optimistic.
Pricing models: per-job, per-hour, and per-visit
- Per-job (fixed bid) is standard for installs and one-off projects. You carry the risk of an overrun, so your hour estimate has to be good, which is exactly why tracking actual hours matters.
- Per-hour (T&M) suits open-ended or unpredictable work; the customer carries the overrun risk. You still need real hours to bill accurately.
- Per-visit (recurring) is how maintenance and mowing routes are priced, a flat rate per service. Cost these by tracking the true minutes per property over a few visits; route density (how close your stops are) makes or breaks the margin. CRMb's scheduling and capacity views help you build tight routes and see whether a recurring account is still priced right.
The overrun problem, and how to catch it
The reason landscaping jobs lose money is almost never materials, it is hours. The fix is not to guess better, it is to measure, then feed the measurement back into your pricing.
With CRMb, each job carries your estimated hours and target margin. As the crew punches in, the reports view shows the projected margin trending against target and flags the job if it slips into the red, while it is still open, not at invoice time. After a season, you have your own numbers: bed prep really takes 20% longer than you bid, sloped sites eat an extra crew-hour, spring installs run hot. That history is what turns a good estimator into a great one.
Frequently Asked Questions
How much should I charge for a landscaping job?
Add your labor (crew-hours at a loaded rate), materials at cost, an overhead slice, then divide by (1 − your target margin) to get the price. A 20-hour install with $650 of materials and a 30% target lands around $2,500 to $2,700. Always check the result against a per-hour floor so an optimistic hour estimate does not sink the job.
What profit margin should a landscaping business target?
Many landscaping companies aim for 20% to 40% gross margin per job after labor, materials, and overhead, with maintenance routes often run tighter than installs. The exact number matters less than measuring it the same way every time so you can see which jobs beat target.
How do I estimate labor hours for landscaping?
Break the job into tasks (prep, planting, mulch, cleanup) and estimate crew-hours for each, then add time for travel, loading, and cleanup. Make the estimate accurate over time by comparing it to the hours your crew actually punched on similar past jobs.
Should I charge by the hour or a flat price for landscaping?
Flat (fixed-bid) pricing is standard for installs and wins more jobs, but you carry the overrun risk, so your hour estimate must be solid. Hourly (time-and-materials) suits unpredictable work and shifts the risk to the customer. Recurring maintenance is usually priced per visit at a flat rate.
How do I price recurring lawn maintenance?
Track the real time your crew spends per property across a few visits, then set a flat per-visit rate that covers labor, overhead, and margin at that time. Route density matters, tightly clustered stops let you serve more properties per day and protect the margin on each one.
Getting started
Price your next landscaping job with all four layers, honest hours, materials at cost, overhead, and a real margin, then check it against your per-hour floor. Then track what the job actually costs so your next bid is sharper.
CRMb runs your clients, schedule, inventory, and invoices on one system and shows the real margin on every job from your crew's actual punched hours. Start free and price your next job from data, not guesswork.