Construction

The Jobs You Think Are Profitable but Aren't: Real-Time Job Costing for Contractors

The average contractor operates on a 5-6% net margin. A 2% costing error on a single $500K project wipes out every dollar of profit. And most contractors don't know a job's true profitability until 30-60 days after the last truck leaves the site.

JW

James Wright

Construction Technology Consultant

December 21, 2025 10 min read

I sat across the table from a residential contractor in Scottsdale last March. He runs about $3 million a year — custom homes, high-end remodels, the kind of work where the clients have opinions about everything and the finishes cost more than most people’s cars. Good reputation. Busy schedule. Crews that show up on time.

He brought me in because his accountant had just delivered the year-end financials and the number did not make sense. He had done $3.1 million in revenue. He had been busy all year. He had raised his prices twice. And his net profit was $47,000.

That is 1.5% net margin on $3.1 million in revenue. He could have made more money managing a retail store.

The worst part was not the number. The worst part was that he genuinely believed his two largest projects — a $680K custom home and a $420K whole-house remodel — were his most profitable jobs of the year. They were high-dollar, high-visibility projects that kept his crews busy for months. In his mind, big revenue meant big profit.

His accountant showed him otherwise. The custom home had come in at 2.1% net. The remodel had actually lost money — negative 1.8% when all the costs were properly allocated. His most profitable project of the year was a $95,000 kitchen renovation that he almost turned down because it seemed too small.

He did not have a revenue problem. He had a job costing problem. And he is not unusual.

The Margin Illusion

Average contractor net margin is 5-6%; Best-in-Class achieve 10-12%

CFMA Annual Financial Survey

Construction professionals spend 11.5 hours per week searching for project data

FMI/PlanGrid Construction Disconnected Report

Most contractors don't know true job profitability until 30-60 days after project completion

Sage Construction Industry Benchmarks

83.7% of construction bankruptcies are caused by financial factors, not lack of work

BizMiner Industry Financial Profiles

Here is the fundamental problem with job costing in construction: the costs are generated in a dozen different places by a dozen different people, and none of them are talking to each other.

Labor costs live in timesheets — paper timesheets, a time clock app, or the foreman’s memory. Material costs live in purchase orders that were emailed to suppliers, invoices that arrived in the mail or as PDF attachments, and credit card receipts in someone’s wallet. Subcontractor costs live in contracts that were signed months ago, invoices that arrive monthly, and change orders that may or may not have been formally documented. Equipment costs live in rental invoices and internal allocation rates that nobody updates.

For a contractor running eight active projects, the cost data for any single job is scattered across:

  • Timesheets (daily, from each foreman or crew lead)
  • Material purchase orders (from the PM, superintendent, or foreman)
  • Supplier invoices (mailed, emailed, or uploaded to a portal)
  • Subcontractor invoices (monthly pay applications)
  • Equipment rental invoices (from one or more rental companies)
  • Credit card receipts (from field purchases at Home Depot, lumber yards, specialty suppliers)
  • Change orders (some approved, some pending, some verbal)

Getting all of that into a single job cost report requires someone to manually collect, code, and enter every line item. In most small to mid-size firms, that someone is either the owner, a bookkeeper working part-time, or a project manager who would rather be managing projects.

The result is predictable: job cost data is always behind. Always incomplete. Always a little bit wrong. And by the time you have a clear picture of what a job actually cost, the job is over and there is nothing you can do about it.

$90,000-$186,000

per year

Estimated annual cost of poor job costing for a $3M contractor: 3-6% of revenue lost to untracked costs, unbilled change orders, and labor overruns discovered too late to correct

Real-Time Job Costing Automation

Build with

Walking Through the Math

Let me make this concrete. Take our Scottsdale contractor and his $680,000 custom home.

The original estimate broke down roughly like this:

CategoryEstimated CostEstimated %
Labor (own crews)$170,00025%
Materials$204,00030%
Subcontractors$176,80026%
Equipment$20,4003%
Overhead allocation$40,8006%
Total estimated cost$612,00090%
Estimated profit$68,00010%

A 10% margin on a $680K project. Reasonable for custom residential. Here is what actually happened.

Labor came in at $198,000. That is $28,000 over estimate — a 16% overrun. The framing took two weeks longer than planned because the architect’s details on the roof structure were, in the superintendent’s words, “drawn by someone who has never held a framing square.” The crew spent extra days working through complex intersections that should have been flagged during preconstruction. But the daily timesheets did not get coded back to the estimate line items until the bookkeeper processed them at month-end. By then, the framing was done and the money was spent.

Materials came in at $221,000. Lumber prices had increased 8% between the estimate date and procurement. The allowances for tile and fixtures were blown when the homeowner upgraded selections — technically change order territory, but the upgrades happened in conversations between the homeowner and the superintendent on site, and nobody wrote a change order until the PM discovered the invoices two months later.

Subcontractors came in at $189,000. The HVAC sub had a legitimate extra for ductwork redesign caused by a beam relocation. The landscaping sub billed for irrigation work that was arguably in the original scope. Both were handled informally and settled in the sub’s favor because there was no contemporaneous documentation to dispute.

Total actual cost: $666,200. Actual profit: $13,800. Actual margin: 2.0%.

The contractor did not know any of this until his accountant reconciled the books four months after the certificate of occupancy.

If he had been reviewing job costs weekly — with labor actuals compared against estimated hours by cost code, materials tracked against purchase orders, and sub invoices matched against committed costs — he would have seen the labor overrun in week three of framing. He would have caught the material allowance blow-out when the tile invoices came in. He would have had documentation to properly handle the sub extras.

He could not have eliminated every overrun. But he could have caught $20,000-$30,000 of it in time to do something about it. On a project with $68,000 of estimated profit, that is the difference between a good job and a disaster.

Why the Spreadsheet Stops Working

AspectManual ProcessWith Neudash
Data entryBookkeeper manually codes invoices and timesheets to job cost codes weekly or monthlyInvoices and timesheets auto-coded to jobs and cost codes as they arrive
TimelinessJob cost data is 2-6 weeks behind actual costsCosts reflected within 24-48 hours of being incurred
Change ordersCOs tracked separately, manually reconciled with job budgetApproved COs automatically adjust job budget and projected final cost
ReportingPM manually builds job cost report in Excel before project meetingsWeekly automated report with cost-to-date, projected final cost, and margin by cost code
AlertsOverruns discovered during monthly review or at project closeoutReal-time alerts when any cost code exceeds 80% of budget or projected margin drops below target

Most contractors I work with start with some version of a job costing spreadsheet. It is usually an Excel file or a Google Sheet with a tab for each project, cost codes running down the left side, and columns for budget, committed, actual, and projected final cost.

The spreadsheet itself is fine. The structure is correct. The problem is that keeping it current requires someone to manually enter every cost transaction, and that someone is always behind.

Here is the typical cycle:

  1. Week 1: Project starts. Spreadsheet is up to date because it only has the estimate.
  2. Week 3: Foreman timesheets are piling up but have not been entered. A few material invoices arrived but are sitting in the AP inbox.
  3. Week 6: PM realizes the spreadsheet has not been updated in three weeks. Spends a Saturday morning entering data. Discovers two cost codes are already over budget.
  4. Week 10: Spreadsheet abandoned. PM is too busy running the project to maintain the spreadsheet. Job costing becomes “we’ll figure it out at the end.”

This is not a discipline problem. This is a capacity problem. The PM who is supposed to maintain the spreadsheet is also managing submittals, coordinating subs, handling owner communications, and solving problems on site. Manual data entry loses every time.

Sage 300 CRE and QuickBooks both have job costing modules that are more robust than a spreadsheet. Sage in particular is the industry standard for mid-size commercial contractors. But the data entry bottleneck is the same — someone has to get the costs into the system, coded to the right job and cost code, in a timely manner.

Pro Tip

The single most impactful automation for job costing is not the report — it is the data capture. If you can automate the process of getting costs into your system (timesheets coded to jobs, invoices matched to POs and coded to cost codes, sub pay apps matched against committed costs), the reporting becomes trivial. Most contractors who “can’t do job costing” actually mean “can’t keep up with the data entry.” Solve the entry problem and the costing problem solves itself.

The Real-Time Difference

Let me contrast two scenarios. Same contractor, same $500,000 project, same cost structure.

Scenario A: Monthly review. The PM reviews job costs at the end of each month. In month two, he discovers that the concrete subcontractor submitted a pay application that includes $18,000 for footings that were deeper than specified — a legitimate extra, but one that was never formally documented as a change order. The sub did the work, billed for it, and the contractor has to either eat the cost or try to recover it from the owner after the fact with no contemporaneous documentation. At 5% net margin, that $18,000 is more than half the profit on the entire project.

Scenario B: Automated weekly tracking. When the concrete sub submits the pay application, the automated system flags it: the billed amount exceeds the committed cost by $18,000. The PM gets an alert within 48 hours. He reviews the pay app, identifies the footing overage, and issues a change order request to the owner before the concrete sub’s next mobilization. The extra is documented, priced with proper markup, and incorporated into the next pay application to the owner.

Same situation. One version costs you $18,000. The other version makes you $2,700 in markup on a legitimate extra. The $20,700 swing happened because one contractor had real-time visibility and the other was looking in the rearview mirror.

Building Automated Job Cost Tracking

The tools most contractors already use contain the data needed to automate job cost tracking. The problem is that the data lives in silos — invoices in email, budgets in spreadsheets, timesheets in a separate system — and nobody is synthesizing it into a real-time cost picture.

The Numbers That Matter

Let me run the ROI calculation on automating job costing for a $3 million contractor.

Current state costs:

Cost CategoryAnnual Impact
Unbilled change orders (estimated 1-2% of revenue)$30,000-$60,000
Labor overruns caught too late to correct$15,000-$45,000
Administrative time for manual cost tracking (8-12 hrs/week at $45/hr)$18,700-$28,000
Material cost variances not caught at procurement$10,000-$20,000
Underbilling from inaccurate WIP (cost of carrying)$5,000-$15,000
Total annual cost of poor job costing$78,700-$168,000

What automation addresses:

You are not going to eliminate every overrun. Construction has legitimate cost variability — weather delays, design errors, unforeseen conditions. But you can eliminate the overruns caused by late information, poor documentation, and the inability to see what is happening on your jobs in real time.

Conservative estimates from contractors who have implemented real-time job costing suggest a 40-60% reduction in the preventable losses above. On a $3 million contractor, that is $31,000-$101,000 in recovered margin annually.

The administrative time savings alone are substantial. If your PM or bookkeeper is spending 10 hours a week on manual job cost data entry and reporting, and automation reduces that to 2 hours of review and exception handling, you have freed up 400 hours per year. At a fully loaded PM rate of $55/hour, that is $22,000 in capacity returned to productive work.

The margin multiplier effect. Here is the math that most contractors miss: on a 5% net margin, every dollar you save in costs drops straight to the bottom line. Recovering $50,000 in job cost leakage is equivalent to winning $1,000,000 in new revenue at a 5% margin. You do not need more work. You need more visibility into the work you already have.

What Best-in-Class Contractors Do Differently

CFMA data consistently shows that contractors in the top quartile of profitability — the ones achieving 10-12% net margins instead of 5-6% — share several job costing practices:

They review costs weekly, not monthly. The data is current enough to act on. A cost overrun identified in week two of a four-month project can be managed. A cost overrun identified at project closeout is just an autopsy.

They track committed costs, not just actual costs. When a subcontract is signed or a purchase order is issued, that cost is immediately reflected in the job cost projection. Most contractors only recognize costs when the invoice arrives, which means their projections are always understated.

They project final cost, not just cost-to-date. Cost-to-date tells you what has happened. Projected final cost tells you what is going to happen. The calculation is straightforward — take cost-to-date, divide by percent complete, and you have a projected final cost. But it requires current data to be meaningful.

They separate production efficiency from cost variance. A cost code can be over budget for two different reasons: the work cost more per unit than estimated (a rate problem) or there was more work than estimated (a quantity problem). The fix for each is different, and you cannot tell the difference without tracking both.

They close out job costs within 30 days of substantial completion. Not 90 days. Not “when we get around to it.” Thirty days. Because every open job with unreconciled costs is a margin surprise waiting to happen.

These are not exotic practices. They are not technologically complex. They are basic financial management applied to project-based work. The reason most contractors do not do them is not that they do not know they should — it is that the manual effort to maintain current, accurate job cost data across multiple active projects exceeds their administrative capacity.

That is what automation solves. Not the analysis. Not the decision-making. The relentless, tedious, time-consuming process of getting the right numbers into the right place fast enough to matter.

The Year-End Surprise Nobody Needs

My Scottsdale contractor has changed his approach. He still uses QuickBooks. He still estimates in spreadsheets. But now his costs flow into his job cost tracking automatically — invoices are captured and coded when they arrive, timesheets are matched against estimated labor hours by cost code, and every Friday morning he gets a one-page summary of every active project showing projected margin versus estimated margin.

The first month he ran the automated reports, he discovered that a $280,000 remodel project was tracking 4% below estimated margin — three weeks into the job. The cause was a framing crew working at about 70% of estimated production rates because the existing structure had conditions that were not visible during preconstruction. He brought in a second carpenter for two weeks, spent $4,800 in extra labor, and got the project back on track. Without the early warning, that 4% margin erosion would have continued for the remaining ten weeks of the project and cost him roughly $11,200.

He caught a $6,400 problem three weeks in instead of discovering an $11,200 problem three months later. That is not sophisticated financial management. It is just having current information.

The jobs you think are profitable might not be. The only way to know for certain is to look — and to look often enough that you can still do something about what you find.

Tools Referenced

SageQuickBooksProcoreGoogle SheetsGmail

Ready to automate?

Stop doing this manually. Describe your workflow and we'll build it for you.

JW

About James Wright

Construction Technology Consultant

Licensed builder turned technology consultant. Spent 15 years on job sites before helping trades businesses adopt better systems. Understands why contractors resist software — and how to make it work for them.