All posts
ConstructionJuly 27, 2026

How to track materials costs by job in QuickBooks

When all materials invoices go into one QuickBooks account, every job looks equally profitable. Here is how job cost codes change that picture.

Construction site with framed structure and stacked lumber in the foreground
JZ
Jessica Zhao
CEO, Clear Books Advisory

A general contractor we work with had three active jobs in May. The materials line on his Profit and Loss report (P&L) showed $41,800 for the month, roughly $5,600 over the combined budget for all three projects. He called us to find out which job had the problem.

There was no way to tell. All $41,800 was sitting in a single “Job Materials” account in QuickBooks.

After we set up job cost codes, the same $41,800 told a different story. Job A, a bathroom remodel estimated at $8,000 in materials, had consumed $11,200. The overage was concentrated in one project that was still in progress and still fixable. The other two jobs were within budget.

Why supplier invoices don’t sort themselves by job

A materials invoice from a lumber yard does not include a job number. The vendor bills the contractor as the buyer, not the project. One delivery might supply two different sites in the same week. Without a step in the bookkeeping process to capture that assignment, every invoice goes into a general materials account and the job-level information disappears.

Most contractors start QuickBooks with a single “Materials” or “Job Materials” expense account. That account is accurate in total. It is not useful at the job level, and job-level is where materials problems actually live.

How job cost codes work in QuickBooks

QuickBooks Online handles job costing through its customer and class structure. Each active project is set up as a sub-customer under the relevant client. When a supplier invoice arrives, the bookkeeper assigns it to the correct job at the time of entry, not at month-end.

A more detailed setup adds cost categories within each job: Materials, Labor, Subcontractors, Equipment. Each invoice is tagged to both a job and a cost type. Reports then show, by job, how much was spent in each category against the original budget.

The initial setup takes an hour. After that, it is an entry discipline, not a software problem.

What the three jobs actually showed

Here is how May materials spending broke down once each supplier invoice was assigned to the correct job.

Job Materials budget May spending Variance
Job A: bathroom remodel $8,000 $11,200 $3,200 over
Job B: commercial fit-out $22,000 $22,400 $400 over
Job C: deck addition $6,200 $8,200 $2,000 over
Total $36,200 $41,800 $5,600 over

Job B was essentially on budget. Job C was over because the client had upgraded to composite decking mid-project. Job A’s variance narrowed to $1,100 after a tile invoice assigned to the wrong project was corrected. None of that was discoverable from the combined total.

Why per-job material tracking matters

Jobs close without accurate cost data. When the final invoice goes to the client, the contractor is working from recollection or a rough estimate of what was spent, not from the books. That estimate may be close. It may also be missing several thousand dollars in materials that posted late from a vendor with net-30 terms.

Over-budget patterns stay hidden. If one type of project, one crew, or one supplier consistently drives materials overruns, that will not appear in a combined materials total. It becomes visible only at the job level, compared against the original estimate for that specific job.

Future estimates rely on the wrong numbers. A contractor who bids a deck addition at $6,200 in materials because that is what the last deck cost is bidding from memory. With job-coded history, the estimate comes from actual recorded costs on similar completed jobs. Those are different numbers, and the gap between them shows up in profit margin.

What a clean materials workflow looks like

For construction clients we work with, every supplier invoice is assigned to a specific job and cost category before it is paid. When a purchase order was issued for the materials, the invoice is matched to the PO and the job coding carries over automatically. When there is no PO, the bookkeeper confirms the job number from the delivery receipt before posting.

A weekly job cost report flags any job where actual materials are running more than 10 percent over budget. That threshold gives the contractor enough time to investigate and act while the job is still open, before the final billing.

Best practices for tracking materials by job

  • Set up each active job in QuickBooks before the first invoice arrives. Backfilling job assignments at month-end is slower and introduces more errors than entering them at the time of purchase.
  • Use purchase orders where your process allows it. The job assignment happens at the order stage, and when the invoice matches the PO, the coding is already done.
  • Confirm the job number on every supplier invoice before payment. The right time to catch a missing or incorrect job assignment is before the check goes out, not after.
  • Run a job cost report weekly, not monthly. A materials line running 15 percent over budget mid-project is manageable. The same variance found at job close is not.

Three questions worth asking

  1. Can you currently pull a report in QuickBooks showing materials spending by active job, separate from the combined materials total on the P&L?
  2. What is the process for assigning a supplier invoice to a specific job when it arrives? Who handles that step, and at what point in the payment process does it happen?
  3. On your last three completed projects, what was the final materials cost compared to the estimate, and where did you find those numbers?

If those answers require manually sorting through invoices after the fact, the job cost setup is not capturing the information at the time of entry. That is a workflow change, not a software replacement.

If you want to see where your setup stands, send us a recent P&L alongside a job cost report for the same month. We will show you where the numbers connect and where the detail is missing.

ONE ACCOUNT
VS
JOB COST CODES
WHICH OF YOUR THREE ACTIVE JOBS IS RUNNING OVER ON MATERIALS?
You cannot answer that question from a single materials expense total.
WHAT ONE ACCOUNT SHOWS IN MAY
  • TOTAL MATERIALS
    $41,800 in supplier invoices, one expense account
  • NO JOB DETAIL
    No visibility into which job absorbed the overage
  • $5,600 OVER BUDGET
    Budget was $36,200, but the source is unidentifiable
  • LATE DISCOVERY
    Problem found only after the job is billed and closed
WHAT JOB COST CODES SHOW IN MAY
  • JOB A: BATHROOM
    $11,200 spent vs. $8,000 budget, $3,200 over
  • JOB B: FIT-OUT
    $22,400 spent vs. $22,000 budget, on track
  • JOB C: DECK
    $8,200 spent vs. $6,200 budget, $2,000 over
  • EARLY FLAG
    Jobs A and C identified while still active and fixable
Materials overage concentrated in Job A
$3,200, found in May while the job was open
JOB CODES = COST CONTROL WHILE ACTIVE
ONE ACCOUNT = PROBLEM FOUND AT CLOSE

Want a second set of eyes on your books?

30 minutes on Zoom. We'll look at your books and tell you what's working and what isn't.

This is the work we do every day. See bookkeeping for construction.

Book a call