Dirt Face Logo

Job Costing

Set up and run job costing in Dirt Face: budget vs actual, labor from timesheets, materials, expenses, reports, and QuickBooks.

8 min read

Overview

Job costing compares the budget (from the linked quote) against actual costs that come in from timesheets, materials, purchase orders, and manual expenses. The server side ledger is the single source of truth for profit and margin, so every posted cost updates the job total automatically.

Use job costing when you want to know real profit per job, not just the quoted amount. This guide walks through setting it up end to end and points to the detailed articles for each source.

Where in the app: Job detail → Job Costing tab (URL ?tab=history)
Company report: Dashboard reports and insights or the full job costing report


How to set up job costing

Job costing runs on top of your normal job workflow. To get accurate numbers, put these pieces in place once:

  1. Link each job to a quote so it has a budget (see below). Jobs without a quote still track actuals but show $0 budget.
  2. Set burdened labor rates so approved hours convert to cost. Configure them in Timesheets settings and per person in Manage Team.
  3. Turn on the Operations portal and timesheets (Crew plan or higher) so field and shop hours flow to jobs. See Timesheets.
  4. Use sales orders and purchase orders for materials so material cost posts automatically. See Materials and inventory.
  5. Set the Job costing view permission on the roles that should see margin. Other users see budget and actual only.
  6. Optional: connect QuickBooks so time and expenses reach your accounting system.

Once these are set, actuals accumulate on their own as crews log time and materials move.


The budget column comes from the accepted quote attached to the job. When you convert an estimate to a job, the quote carries over and seeds the budget by category (materials, labor, concrete, and so on).

For warranty, service, or supply-only work created without a quote, the job shows $0 budget. You can still track actual cost, then link a quote later or use adjustments for manual corrections.


Labor: apply time to jobs

Labor is the most common actual cost. It posts from approved timesheets:

  1. Workers clock in or log hours against a job and operations area, then submit the week. See Time card clock-in.
  2. A manager reviews and approves the week in Approve timesheets.
  3. On approval, hours multiply by the burdened labor rate and post to the job Labor category.

Rate resolution order:

  1. Employee plus function override (set in Manage Team)
  2. Per function default from Timesheets settings (field, shop, yard, office)
  3. Organization average hourly cost from Default Settings

Burdened rates are for estimating and job costing, not payroll wages. If no approved time exists yet, scheduled time can act as a fallback estimate. See Timesheets and approval for the full workflow.


Materials

Material cost posts to the job automatically as inventory moves:

Because these flows post cost on their own, you do not enter material cost by hand when you use inventory. For one off purchases outside inventory, use an expense (below).


Expenses and adjustments

Two manual tools cover costs that do not come from time or inventory:

  • Add expense: field or office users post a one line cost such as fuel, permits, dump fees, or supplies a crew buys on site. Enter amount, category, and description on the Job Costing tab.
  • Adjust costs: office users post a positive or negative category adjustment to correct a total without editing the original quote.

Both post to the ledger and show in the ledger drawer with who entered them.


Reading the numbers

KPI bar

MetricMeaning
BudgetTotal estimated cost from the quote
ActualSum of ledger entries by category
ProfitRevenue minus actual cost
MarginProfit as a percent of revenue (requires Job costing view permission)

Users without margin permission still see the budget and actual columns.

Cost categories

CategoryTypical sources
MaterialsSales order fulfillments, picks, PO receipts
LaborApproved timesheets, scheduled time (fallback)
ConcreteQuote baseline plus ledger adjustments
ExpensesManual expenses (office or field workers)
SubcontractorsLedger entries
Overhead and equipmentManual adjustments when used

Click a category row to open the ledger drawer and see individual entries.

Activity sub-view

Switch to Activity on the same tab for the chronological timeline: schedule events, crew updates, photos, and invoices.


Where to find job costing reports

ViewWhere in the app
Single jobJob detail → Job Costing tab (?tab=history)
Company summaryDashboard → Reports and insights toggle
Full reportJob costing report

The company report rolls up budget, actual, profit, and margin across jobs in the active company profile. Margin figures require the Job costing view permission.


Permissions

  • Budget and actual columns are visible to users with job management access.
  • Margin and profit percentages require the Job costing view permission on the team role.
  • Adjust costs is limited to office users; Add expense is available to field and office users.

QuickBooks

Dirt Face stays the source of truth for job costing. QuickBooks stays the source of truth for accounting, expenses, and taxes. When the QuickBooks integration is connected, cost data reaches QuickBooks through the normal accounting documents:

  • Approved time posts as TimeActivity when Time cards sync is enabled.
  • Manual job expenses (for example, supplies a crew buys on site) post as Purchases when Job expenses sync is enabled, so out of pocket costs are captured in QuickBooks.
  • Materials reach QuickBooks as Bills when purchase orders are received, so material cost is not pushed a second time from job costing.

Map employees, jobs, and the job expense account under QuickBooks integration.


Non-quote jobs

Jobs created without a quote show $0 budget. Actuals from time, materials, and expenses still accumulate. Link a quote or use adjustments for manual corrections when you need a budget to compare against.