Job costing: margins, direct costs and costing settings

Read a job's revenue, materials, labor and margin, add direct costs like permits and subcontractors, and set optional mileage and commission costs.

  • Owner
  • Admin
  • Accounting
Updated October 15, 2026
Where it lived in ServiceTitan
Reports › Job costing / Jobs › Job costing
On this page

Overview#

Every job shows what it made. Revenue comes from the invoice (before tax, after discounts). Costs come from materials used (inventory cost), purchase orders for the job (actual received cost), technician time from timesheets at burdened rates, optional mileage and commission, and direct costs the office adds. When a cost is unknown, TradesWork says so instead of showing a misleading margin.

Before you start#

  • The Job costing card needs costing.read (Owner, Admin, Accounting). It's hidden for other roles.

  • Adding and reversing costs and changing settings needs costing.manage (Owner, Admin, Accounting).

  • Per-person labor rates show only with payroll.rates (Owner, Admin).

  • Labor cost needs burdened rates set in payroll and approved timesheets.

Steps#

Read the job cost card#

  1. Open the job. In the side column, find Job costing.

  2. The headline says "This job made $X" (or "lost"), with the margin, or "Nothing invoiced yet", or "Margin unknown until every cost is known".

  3. Rows: Revenue, Materials (expand for details), Labor (hours; expand for drive and on-job time), Mileage, Commission, Direct costs, Total cost and Gross margin.

  4. Estimated vs actual compares the sold option (Sold) with Actual revenue, cost and margin.

  5. Warnings tell you what's missing, for example "N material lines have no cost, so the margin is overstated." or "Labor includes time not yet approved."

Add a direct cost#

  1. Open Add a direct cost.

  2. Pick the Kind: Equipment rental, Subcontractor, Permit / fees, Materials (bought for the job) or Other.

  3. Enter Description, Amount and Date, then click Add cost.

Reverse a direct cost#

  1. Next to the cost, open Reverse…, write Why (kept on the record) and click Reverse.

  2. The original stays visible, struck through, with the reason.

Post updated costs#

Costs post to the job's ledger when the invoice is approved. If costs change later, a Post updated costs button appears (with how the ledger and the job differ). Click it to bring the ledger up to date.

Set optional costs#

  1. Go to Accounting › Job Costing.

  2. In Optional costs, enter Mileage cost per mile ($) (for example 0.67, counting GPS trips during drive time to the job) and Commission (% of revenue). Leave blank to leave them out.

  3. Click Save.

Settings that change this#

  • Accounting › Job Costing: optional costs and invoice review rules.

  • Settings › People › Payroll: burdened rates, which drive labor cost.

  • Pricebook › Services & Materials: item costs, used when stock has no average cost yet.

Tips#

  • Fix "no cost" materials in the pricebook or by receiving them on a PO. Otherwise margins look better than they are.

  • Approve timesheets promptly; unapproved time is shown but flagged.

  • Check Reports for job costing totals: gross profit, gross margin, materials and labor as a % of revenue, and revenue per labor hour.

Troubleshooting#

  • "Describe the cost" / "Enter an amount above zero" → fill both fields.

  • "A cost can't be dated in the future." → use today or an earlier date.

  • "{month} is closed. Date this today, or ask the owner to reopen {month} (with a reason)." → see Close and reopen accounting months.

  • "This cost was already reversed." → nothing to do.

  • Labor shows as unknown → someone on the job has no burdened rate → set it in payroll.

FAQ#

Why is labor a single total? Per-person rates are private. Only owners and admins see them.

Do costs go to QuickBooks? No. Job costing lives in TradesWork. QuickBooks gets invoices, payments and refunds.

Coming from ServiceTitan#

  • Same: job costing from materials, labor and other costs, with margin per job.

  • Different: costs that are unknown are shown as unknown, not zero. Direct costs are reversed with a reason, never edited.

  • Where it lived: ServiceTitan job costing reports and the job's costing view; the Job costing card and Accounting › Job Costing in TradesWork.

Was this helpful?

Still need help?

Ask the assistant a question about your account, or open a ticket and a person will reply.