(443) 600-8990Get a free consultation
  1. Home
  2. Blog
  3. Landscaping
Landscaping

Why your mulch and plant markup keeps disappearing from your books

Learn why lumping mulch, stone and plant costs into one supplies account hides your real install markup, and how to track materials by job instead.

Why your mulch and plant markup keeps disappearing from your books

October 13, 2026 · Mitt Patel · 6 min read

It's the middle of the month and you're staring at a $4,200 supplies bill from the landscape yard. Mulch for three jobs, a pallet of sod for another, some stone for a walkway. You billed all four jobs separately, with markup built into each quote. But when the bill hits the books as one lump "materials" expense, there's no way to tell which job made money and which one barely broke even.

Why the markup disappears

Most landscaping owners buy materials in bulk runs. You hit the yard once or twice a week, load up mulch, stone, plants and soil for whatever jobs are active, and pay for it all on one receipt or one account statement at month's end.

The problem starts right there. If that receipt gets coded to a single "materials" or "supplies" expense account with no job attached, the cost is now floating free of the income it was supposed to offset. You know you marked up the mulch 40% on the quote. But once it's buried in a general expense line, nobody can check whether that markup actually showed up in what got billed.

Install and hardscape work often carries a materials markup intended to cover more than the product itself. It covers waste, loading time, delivery trips, breakage and the plants that die before they're even installed. If you can't see materials cost against materials billed, job by job, you can't tell whether that markup is covering those costs or whether you're quietly eating them.

The decisions that go wrong from this are predictable. You bid the next mulch job using the same price per yard you used last year, without checking whether that price still covers what the yard charges you now. You assume install work is your most profitable service line because it brings in big invoices, when in fact the materials markup has been shrinking for two seasons and nobody caught it. You keep running at the same margin on stone work while your supplier's delivery fees have crept up, because the fee is sitting in an overhead account instead of attached to the jobs it was spent on.

A worked example

Say you run three install jobs in a week: a mulch refresh, a small paver patio and a sod job. You spend $4,200 total on materials across the three, picked up from the yard on one receipt, matching the bill from the hook.

If that $4,200 lands in your books as one "materials" expense, your month-end report just shows a lump of cost next to a lump of install revenue. Say you billed $9,000 across those same three jobs, for an apparent margin of $4,800. On paper it looks like a comfortable margin. But you have no way to see that the sod job actually lost money because the supplier raised prices on you two weeks ago, while the mulch refresh carried a fat markup that's covering the loss.

Now say instead you split that $4,200 across the three jobs when you enter the bill: $1,500 to the mulch job, $1,500 to the patio, $1,200 to the sod job. You already know what you billed each one: $2,800 for mulch, $3,800 for the patio, $2,400 for sod.

Lay it out job by job:

  • Mulch: billed $2,800, materials $1,500, margin $1,300
  • Patio: billed $3,800, materials $1,500, margin $2,300
  • Sod: billed $2,400, materials $1,200, margin $1,200

Now the patio job stands out. The margin is thin compared to the other two, and you can go find out why. Maybe the supplier price went up. Maybe you underbid the yardage. Either way, you know where to look, instead of trusting a blended number that hides the problem.

How to set it up

  1. Create a materials or job cost account separate from general supplies. In QuickBooks Online this can be a dedicated expense account, or better, a cost of goods sold account if you want install work to show gross margin clearly.
  2. Turn on job or project tracking. QuickBooks Online's Projects feature lets you tag income and expenses to a specific job, so a single bill can be split across multiple jobs in one entry.
  3. Split every materials purchase at entry, not later. When you enter the yard bill, break it out by job right then, using the delivery ticket or your own job notes to divide the cost. Waiting until month-end means guessing from memory.
  4. Code materials to the job, not just the account. The expense account tells you it was mulch or stone. The job tag tells you which invoice it's supposed to offset. You need both.
  5. Run a job profitability report monthly. Compare materials cost against billed amount for each completed job, not just at the account level.
  6. Flag jobs where materials cost crept close to billed amount. That's your early signal that either pricing or supplier costs have shifted.

What undoes it

The most common failure is coding the whole month's yard bill to one account out of habit, especially during busy season when there's no time to split receipts. It takes thirty extra seconds per bill, and skipping it means the whole month's job cost data is useless.

Another common issue is loading materials for next week's jobs under this week's invoice because that's when you happened to buy them. If the purchase date and the job date drift apart by a lot, your month-to-month comparisons look noisy even when nothing's actually wrong.

Some owners also forget to include delivery fees, fuel surcharges or yard waste disposal in the job's materials cost, so the markup looks better than it really is. If the supplier charges a delivery fee, it belongs with the job it served, not buried in a separate "delivery" line that nobody checks against install margin.

Last, plants that die and get replaced sometimes get recorded as a second, unrelated purchase instead of being tied back to the original job. That makes the job look more profitable than it was and hides a real cost of doing plant installs.

Monthly checklist

  • Every materials bill from the yard or nursery is split by job at entry, not estimated later
  • Delivery fees and disposal costs are attached to the job they served
  • Replacement plants or materials are coded back to the original job
  • A job profitability report is run comparing materials cost to billed amount for completed jobs
  • Any job with a thin or negative margin gets a quick look at why, before the next bid goes out using the same pricing

Common questions

Do I need separate accounts for mulch, stone, sod and plants?

Not necessarily. Many landscaping businesses do fine with one materials or cost of goods sold account, as long as every purchase is tagged to the job. The job tracking is what matters most for seeing markup; splitting by material type is a nice-to-have on top of that, useful if you want to know which product category you mark up best.

What if I buy materials in bulk before I know which jobs they'll go to?

Record the purchase to a general materials account first, then move the cost to the specific job once it's used, through a bill credit and new job-coded bill or a similar adjustment in your books. This is more work, so it only makes sense if your bulk buying pattern is common. If you usually buy for a specific job within a day or two, it's simpler to just split the bill at entry.

How do I handle leftover materials that get used on a different job later?

Note the leftover amount and which job it eventually went to, then move that portion of the cost in your records when the actual job is known. Leaving leftovers uncoded is how materials costs quietly disappear from the job that used them.

Does this work differently for maintenance versus install work?

Generally yes. Routine maintenance mulch or small plant replacements are often folded into a flat maintenance rate rather than billed separately, so tracking by job matters most for install, hardscape and larger planting work where materials are a distinct line on the invoice. The right setup depends on how you structure your maintenance contracts.

Setting up job cost tracking correctly, and keeping it clean month after month, is exactly the kind of work North Hudson Bookkeeping handles for landscaping clients. The first call is free if you want help getting your materials and markup visible again.

Want this handled for you?

Monthly bookkeeping from $500 a month: every account reconciled, clear reports and a short summary each month. Book a free 20-minute call or call (443) 600-8990.

Get a free consultation

Talk to MittCall or text (443) 600-8990 · or book a free consultation
Free consultationFree callCallTextWritten quoteQuote