Job costing
Job costing for subcontractors, against the budget you actually bid.
Most subs find out a job lost money when the job is over. Not because nobody was watching, but because the numbers lived in four places: hours in a timesheet, materials in QuickBooks, POs in an email thread, and the budget in the estimate workbook nobody has opened since the award. SubMark lands them against one budget, per job, so the overrun shows up while there is still something to do about it.
14-day free trial, no card needed. Field crews are free and unlimited. See pricing →
- Labor costed at the rate that applied on the day the hours were worked, not today’s rate.
- Open purchase orders count as committed cost, before any invoice arrives.
- An alert when actual passes budget on the job or on labor, with the overrun as a percentage.
Why the overrun shows up late.
The budget is in a workbook
The estimate that won the job is the only place the budget exists, and it was built to win work rather than to be reported against for nine months. Nobody opens it again until something has already gone wrong.
Costs arrive at different speeds
Labor is weekly, supplier invoices come whenever the supplier bills, and a sub’s invoice turns up when they feel like it. Comparing any of it to a budget means waiting for the slowest input, which is how a monthly review becomes a quarterly one.
Committed money is invisible
You issued a $140,000 purchase order in March. Until the invoice lands, a budget-versus-invoiced report says the line is fine. It is not fine; it is spent.
A raise rewrites history
In most homemade costing sheets, giving a journeyman a raise quietly re-costs every hour he has ever worked on every open job. Last quarter’s margin changes because of something you did this week, and nobody can reconcile it.
Nobody looks until somebody asks
If the costed position takes a day to assemble, it gets assembled when a partner asks — which is after the decisions it should have informed.
How costs land on a job in SubMark.
Each input arrives from where it already exists, so nothing is typed a second time and nothing waits on a monthly export.
- 01 The budget goes on the job
Your budget lines live on the project itself, with an estimated and an actual figure each, so there is something to compare against from the first week rather than a workbook on somebody’s desktop.
- 02 Labor comes off the daily logs
Hours logged per worker, per job, per day cost at the rate that applied on that date — a snapshot taken when the hours were logged. A raise next month does not rewrite last month’s margin.
- 03 Materials and bills pull from QuickBooks
Bills and purchases pull across into job costing automatically, hourly, if you turn that on. Supplier invoices that arrive by email land in the invoices inbox, get read for vendor, number and amount, and you tag each one to its job and PO.
- 04 Open POs count as committed
A purchase order is money spent whether or not the invoice has arrived, so committed cost is shown beside invoiced cost. A budget line is not healthy just because the paperwork is slow.
- 05 Subs and lump-sum crews are in the same picture
Subcontractor invoices and lump-sum crew assignments land against the job alongside your own labor, so the cost of the job is the cost of the job.
- 06 An alert, not an autopsy
When actual passes budget — on the job as a whole or on labor specifically — it raises an alert with the overrun amount and percentage, instead of waiting for you to come looking.
Everything above ships today and none of it is a tier you upgrade into. The core modules are on in every trade pack from setup; a few extras, like the invoices inbox, are a switch in Settings. The full list is on the product page.
In the app
The cost buckets a job breaks into.
Grouped the way a sub’s owner thinks about a job, each bucket reading from the records that created it:
- Labor
- Your own crews, from the daily labor logs, at the rate that applied on the day. Hours and dollars, by worker.
- Crew lump sum
- Crews assigned at a fixed amount rather than an hourly rate, which is a real cost and a routinely missing one.
- Materials invoiced
- What has actually been billed to the job and reconciled against a purchase order.
- Materials committed
- Open purchase orders. Money spent, invoice pending.
- QuickBooks costs
- Bills and purchases pulled from QuickBooks Online, by category, so the costs your bookkeeper codes land here without being retyped.
- Subcontractor
- Invoices from the subs you hired on this job.
- Budget vs. actual
- Your budget lines with estimated, actual and variance on each one — the table the whole module exists to produce.
- Overrun alerts
- Raised on the job total and on labor, with the dollar overrun and the percentage, when actual passes budget.
Labor is costed at each worker’s logged wage rate, with no burden added — no payroll taxes, insurance or benefits — so treat it as wage cost and add your own burden before you read it as a margin.
Straight answer
What it does not do.
A product page that only lists wins is a product page you stop trusting in week two. These are the gaps, in our own words, before you find them yourself.
- Costing is per job, grouped by cost type. Labor broken out by phase or work type needs phase tracking switched on, and only the drywall pack has it on by default — it is a switch in Settings for every other trade, not an upgrade.
- T&M hours do not post to costing actuals. A T&M tag is billing, not cost; your labor cost comes from the daily logs. If both landed, every hour of extra work would be counted twice and every job would look like it was losing money.
- It is only as complete as its inputs. Bills pull hourly from QuickBooks if you enable it, and labor lands when it is logged — but the QuickBooks coverage meter, which shows how much of your pulled cost is coded to a job at all, is company-wide rather than per job. Read it before you trust a clean variance.
- Salaried and piece-rate workers are excluded from labor cost by design, because an hourly cost for them would be a fiction.
Which trades feel this most.
Same problem, different shape. Each trade page leads with that trade's own phases, schedule of values and wording.
Electrical
Rough-in hours vanish into a long job unless they land against a budget line the week they are worked.
HVAC / Mechanical
Equipment is bought early and big, so committed cost matters months before any invoice does.
Drywall & Framing
Labor is the job. The drywall pack ships with phase tracking on, so labor breaks out by phase from day one.
Questions
Job costing: what a sub’s office actually asks.
Is job costing per phase or per job?
Per job, grouped by cost type — labor, crew lump sum, materials, QuickBooks costs and subcontractors. Labor broken out by phase or work type requires phase tracking to be switched on, and the drywall pack is the only one that has it on by default. Every other trade can turn it on in Settings.
Where do the actual costs come from?
Labor from the daily labor logs, at the rate that applied on the day the hours were logged. Materials from purchase orders and reconciled invoices. Bills and purchases pulled from QuickBooks Online automatically, hourly, if you turn that on. Subcontractor costs from their invoices. Nothing here asks you to type a cost twice.
Do T&M hours show up in job costing?
No, deliberately. T&M tags are the billing side; your cost comes from the labor logs. If T&M hours also landed in actuals, the same hour would be counted twice and every job with extra work on it would look unprofitable.
What happens to past costs when we give someone a raise?
Nothing. The cost of an hour is snapshotted at the rate that applied when it was logged, so a raise this week does not rewrite the margin on a job you closed last quarter. That one behavior is the difference between a costing report you can reconcile and one you cannot.
How current are the numbers?
As current as their inputs. Labor is there as soon as the hours are logged; QuickBooks bills and purchases pull hourly if the connection is on; a supplier invoice that is still sitting in an inbox is not costed yet. The coverage meter is the honest check on that, and it is company-wide rather than per job.
Does this replace QuickBooks?
No, and it should not. Your books stay your books. SubMark pulls bills and purchases across so job costing sees them, and pushes draws and POs the other way with a click. Your accountant keeps working where they already work.
Read next
How to track labor hours by job and cost code
Labor is the biggest number here and the one most often wrong. This is how the hour gets captured once, at a grain you can report on.
How to price a T&M ticket
Your billing rate is built from the same burdened labor cost job costing reports against. Get one right and the other follows.
Schedule of values for subcontractors: how to build one that bills clean
The SOV is your billing structure and the budget is your cost structure. When they disagree, every month is a translation.
Put a budget on a job you are running now.
Start the trial, enter that budget, and log a week of hours against it. The variance either tells you something or it does not, and you will know inside a week.
14-day free trial, no card needed. See the whole product →
$249/mo for your company, your first 3 office users included, $39/mo each after that. Field crews are free and unlimited. See what's included →
The rest of the job
Change orders
From the day the field finds the change to the day it is in the schedule of values, with an audit trail at every step.
T&M tickets
Priced in the office off your own rate lists, signed on site, and several tickets roll into one change order.
Schedule of values
One SOV per job, built from your trade’s own breakdown, locked when the first draw goes out, and approved change orders added to it automatically.
Draw tracking
Fifteen jobs, nine GCs, nine cutoff dates and nine submission methods — in one calendar and one log, with drawn, certified and received as three different numbers.
Retainage tracking
Five or ten percent of everything you have ever billed, sitting somewhere, on jobs some of which finished last year.
Daily logs
The record that wins an argument nine months later, written in two minutes by a foreman who wants to go home.
Lien waiver tracking
Which waivers went up the chain, which the GC has received, and which draw is sitting still because one of them has not.
Crew scheduling
Who is on which job on Monday, across every job — and a flag the moment the same crew is promised to two of them.
QuickBooks
Bills and card purchases pull back as job costs. Draws and POs push across with a click. Your books stay your books.
Time tracking
Hours per worker, per job, per day — signed by the worker who worked them, approved by the office, and read straight into job costing.
Safety records
Toolbox talks signed off per person, scored site inspections, and certification and COI expiries you see 30 days out instead of on the day.