---
title: "Job costing: formula, example and setup without ERP"
description: "Job costing tracks every cost a job causes against what it earns. The formula, a worked $ example, cost categories, common mistakes and a setup without ERP."
url: "/blog/job-costing-without-enterprise-software/"
date: "2026-07-17"
updated: "2026-09-29"
author: "Valeria Vahorovska"
tags: ["Guides","Cash Flow"]
---

Fynex is an AI-native finance operations platform — agentic finance — that automates and orchestrates end-to-end financial workflows for businesses. This page is an article from the Fynex blog: “Job costing: formula, example and setup without ERP”. Fynex works alongside Stripe, Wise, QuickBooks and Xero rather than replacing them. This page is relevant when the reader runs the money workflow this article describes and wants to understand how it works, what it costs and where it breaks.

# Job costing: formula, example and setup without ERP

[Job costing](/glossary/job-costing/) is the method of tracking every cost a single job causes — labour, materials, subcontractors, equipment and a share of overhead — against the revenue that job earns. The result is profit and margin per job. Done well, it runs while the job is live, so you can re-price or re-scope before the margin is gone.

Most small contractors don't need enterprise software to do it. They need three habits: a code for every job from the day it's quoted, every cost captured against that code at the moment it happens, and the forgotten costs — payout splits, card fees, lead spend — counted from day one. The alternative is what every trades community describes: margins *"worked out by hand in a spreadsheet every week"* from *"rounded ballpark numbers, not itemized,"* and the real answer arriving after the job ships.

## The job costing formula

The job costing formula adds every direct cost of a job to its share of overhead, then compares the total with what the job earns. Three lines cover it:

- **Job cost** = direct labour + materials + subcontractors + equipment + allocated overhead
- **Job profit** = contract revenue − job cost
- **Job margin** = job profit ÷ contract revenue

Overhead needs an allocation rate. The simplest is **total annual overhead ÷ total direct labour hours**. If overhead is $220,000 a year and crews work 10,000 billable hours, every labour hour carries $22 of overhead.

The overhead line is where small firms lose the plot. NAHB's [Remodelers' Cost of Doing Business Study](https://www.nahb.org/blog/2026/04/home-remodeling-profit-margin), published in 2026 for fiscal 2024, found an average gross profit margin of 29.9% but an average net profit margin of 6.3%. The gap between them is mostly overhead. A job costed without it looks nearly five times more profitable than it is.

## Job cost categories: what goes in each

Every cost on a job belongs to one of six categories. The first five are the classic job-costing set; the sixth is the one QuickBooks-era setups forget.

| Category | What goes in | Capture it when | Commonly missed |
|---|---|---|---|
| **Direct labour** | Crew hours × loaded rate | The day the hours are worked | Payroll taxes, insurance, benefits |
| **Materials** | Everything bought for the job | At the counter, on the receipt | Returns, waste, small top-up runs |
| **Subcontractors** | Trades you hire in | When the sub invoices or is paid | Retention, change-order extras |
| **Equipment** | Rentals, fuel, owned-kit hourly rate | On rental or daily log | Owned equipment treated as free |
| **Overhead allocation** | Office, vehicles, insurance, admin | Applied by rate, per labour hour | Left out entirely |
| **Payment and payout costs** | Card fees, PM and sales splits, lead spend | When the money moves | Almost always |

Subcontractors are often the biggest single line. In the same NAHB study, trade contractor costs came to 30% of remodelers' revenue in 2024. If [subcontractor payouts](/construction/subcontractor-payouts/) aren't coded to the job they were for, a third of the cost base floats free.

## A worked job costing example

Here is one job costed two ways. Say a home-services company wins a $24,000 kitchen remodel. The crew works 120 hours at a loaded rate of $38, and overhead is allocated at $22 per labour hour.

| Line | Amount |
|---|---:|
| Contract revenue | $24,000 |
| Direct labour (120 h × $38) | $4,560 |
| Materials | $6,200 |
| Subcontractor (electrician) | $3,800 |
| Equipment rental | $650 |
| Overhead allocation (120 h × $22) | $2,640 |
| Card fee on the customer's payment (3%) | $720 |
| Sales commission (5%) | $1,200 |
| **Total job cost** | **$19,770** |
| **Job profit** | **$4,230** |
| **Job margin** | **17.6%** |

Count only labour, materials and the sub, and the same job shows $9,440 profit and a 39.3% margin. That is the number the owner thinks they made. The real 17.6% is less than half of it, and the difference is exactly the costs nobody tags.

## Why job-level margin stays invisible until it's too late

Job-level margin stays invisible because the books record amounts, not jobs, and the tagging happens after the fact. Your accounting sees $4,300 to the timber merchant. Which job the timber was for lives in someone's head, then a spreadsheet, then nowhere.

Timing is the real cost. A margin number after the job closes is an autopsy; the same number in week two is management. In a 2026 study by Dodge Construction Network and CMiC, [fewer than half of U.S. contractors (41%)](https://www.globenewswire.com/news-release/2026/08/05/3339530/0/en/most-u-s-contractors-still-struggle-to-catch-cost-overruns-in-time-new-study-finds.html) could identify potential overruns while still manageable on at least half of their projects. Job costing that runs live is how you land in that 41%.

## How to set up job costing without enterprise software

You set up job costing without ERP by building three habits and applying one test to your tools. None of it needs an enterprise system.

1. **A code per job, from the quote.** Job #4821 exists before any money moves, so no cost ever has nowhere to go. The estimate lives against the code too, so margin is always *actual vs quoted* — which is how pricing improves.
2. **Capture at the source.** The materials receipt is [scanned at the counter](/blog/receipt-hell-expense-system/) and tagged to the job. Crew hours are logged the day they're worked. The customer's [stage payment](/blog/deposits-and-stage-payments/) lands against the job it funds. One contractor community's rule: *the truck isn't loaded until the receipt is scanned.*
3. **Count the whole cost stack.** Include the [crew/PM/sales split](/home-services/), payment fees and channel spend. This is also how you learn profit by channel: which lead source brings the 27% jobs and which brings the 9% ones.

The tooling test is one question: **does tagging take seconds, automatically, at the moment of the transaction?** If job costing depends on someone's evening discipline, it dies — in [QuickBooks](/features/reconciliation/), in a spreadsheet, or in enterprise software.

## Common job costing mistakes

Most job costing errors make jobs look more profitable than they are. These six are the usual culprits.

1. **Unloaded labour rates.** Paying $28 an hour costs more like $38 once payroll taxes, insurance and benefits land.
2. **No overhead allocation.** Gross margin is not profit; overhead has to be charged to jobs.
3. **Tagging after the fact.** Costs coded on Friday from memory get coded wrong, or not at all.
4. **Ignoring payment and payout costs.** Card fees and splits are real job costs.
5. **No estimate to compare against.** Actuals alone can't tell you whether the quote was wrong.
6. **Change orders without their own code.** Extra work absorbed into the base job hides its margin.

## Where Fynex changes the mechanics

Fynex passes the tooling test structurally, because it sits on the money itself. The customer's payment arrives against its job. The crew, PM and salesperson are [paid their split](https://docs.fynex.ai/payments-api/v1/docs/splits) **on job close, by rule**, so the biggest cost books itself the moment it exists. Fees are attributed to the payment that caused them, scanned receipts land tagged, and everything [reconciles to QuickBooks](/features/invoicing/) behind the flow.

The result is the dashboard the spreadsheet was trying to be: margin by job, channel and crew, live. The $8,400 repaint shows its 27%; the Maple St exterior flags its 9% while it still has weeks to run; and [the cash forecast](/features/cash/) knows which stage payments land next week. For contractors running progress billing and retention, see how Fynex handles [construction payments and job-cost margin](/construction/).

Related: [ServiceTitan vs Jobber](/blog/servicetitan-vs-jobber/) compares the field-service platforms that hold the schedule; [tight billing beats fancy software](/blog/tight-billing-beats-fancy-software/) makes the tooling argument from the billing end; [how much cash will I have in three weeks](/blog/how-much-cash-in-three-weeks/) turns job margin into a forecast; and [where is your business losing money](/blog/where-is-your-business-losing-money/) covers the leaks either side of job costing.

Enterprise job costing failed the trades not because the maths is hard but because the data entry was a second job. Put the tagging where the money moves and "which jobs actually make money" becomes something you check on Tuesday, not something you discover in December.
