Troubleshooting
Role: Administrator · Accounting/HR Specialist · Operations ManagerArea: Job Costing, Reports, Pricebook/GL, Payroll · All versions
Note: This article covers the legacy job costing model. If your account has GL-Based Costing enabled (a gated, request-based feature that ties job and project costs directly to your General Ledger), your job costing figures come from GL data and may not match the checks below. For GL-Based Costing accounts, see the GL-Based Costing articles instead.
What you're seeing
Your job costing report shows costs or revenue that don't look right. This can take a few forms: revenue is lower than expected (a gap between the billed amount and recognized revenue), costs are inflated by duplicate items, or a technician's labor burden is missing from the report.
Where you see it: The job costing report / flyout (numbers don't match expectations).
Where you fix it: Reports (Invoice Item Detail with Pricebook Information), the Pricebook GL mapping, the invoice, and technician payroll settings.
Why this happens
There are 3 common reasons.
Reason 1
A pricebook item isn't mapped to an income GL account.
Job costing draws revenue from pricebook items mapped to GL accounts. If an item isn't mapped to an income GL account, it won't count as completed revenue on the job invoice, so revenue reads low.
Reason 2
Purchase orders are double-counted against the invoice.
Costs come from purchase orders and invoice items. When a PO's items are also copied onto the invoice, the same cost is counted twice, creating duplicate items and inflated costs.
Reason 3
A technician wasn't in payroll when the job completed.
Labor burden relies on payroll data from when the job was completed. If the technician wasn't in payroll then — or the payroll data needs refreshing — their labor burden won't appear on the report.
How to fix it
Use the check that matches what's wrong.
1Revenue is too low: confirm pricebook items map to income GL accounts
Use this if recognized revenue on the job is lower than the billed amount. Income items are pricebook items linked to income GL accounts, which determine completed revenue. An unmapped item still counts toward total sales on a sold estimate but not as completed revenue on the job invoice.
Go to the navigation bar and click Reports.
Open the Invoice Item Detail with Pricebook Information report.
Choose a date range so the invoice with the discrepancy appears. For a completed job, use the Completion Date filter; otherwise use the Invoice Date filter.
Filter to the invoice and check the GL accounts associated with it.
Confirm each account is an income account, not an expense account.
Adjust the pricebook item so it has the correct income account. (Map items to income GL accounts in QuickBooks or Intacct.)
Run the report again to confirm the discrepancy is resolved.
✓ Done · Revenue now reflects the correctly mapped income items.
2Costs are inflated: remove double costing from POs
Use this if costs look inflated by duplicate items. POs counted toward job costing can create duplicate items and inflated costs. Attach the PO without copying its items to the invoice.
Search for the job you want to attach a PO to.
Click Job Actions and select Purchase Order.
Fill out the PO information.
When finalizing the PO, select No when asked if you want to copy the items to the invoice. (This prompt only appears if Option to add inventory items to invoices is enabled under Settings > Inventory > Configuration.)
Click Save to attach the PO to the job.
To remove items already duplicated, open the job's invoice and click the small X next to each duplicate item.
✓ Done · The invoice carries zero cost while the PO carries the cost, so there's no double counting.
3A technician's labor burden is missing
Use this if a technician's labor burden doesn't appear in job costing. In some cases, only one technician's burden shows while others are missing.
Go to Settings > People > Technicians, find the technician, click Edit, and open the Payroll tab.
Confirm Include in Payroll is selected. (If they weren't in payroll at the time of the job, labor burden can't be calculated retroactively, even if added later.)
If they were in payroll for the job's date but the burden is still missing, identify the job's payroll period and click Update for that technician and period — in the Payroll tab or the Master Pay File report.
If burden is still missing, set the technician's Pay Type to Both (Settings > People > Technicians > Edit > Payroll, under General Pay Details), then refresh payroll data in the Master Pay File report.
Check the job costing screen again to confirm the labor burden now reports.
Caution: If your account uses Flexible Timekeeping, the payroll data behind these steps depends on your current timekeeping system. Time captured under legacy timekeeping on the affected job may not update the same way.
✓ Done · The technician's labor burden now appears in job costing.
Still not working?
Contact ServiceTitan Technical Support at go.servicetitan.com/ask with:
Which symptom you're seeing (low revenue, inflated cost, or missing labor burden)
The job/invoice number and the report date range
For revenue: the pricebook item and its current GL account
For cost: the PO and the duplicated items
For labor burden: the technician and whether they were in payroll at completion
Whether your account uses GL-Based Costing or Flexible Timekeeping
Want to learn more?
Committed costs not showing in job costing ›
How to enable committed costs so they appear in job costing.
Job costing still wrong after editing a timesheet ›
How to fix job costing issues when timesheets are edited.
Understand GL-Based Costing for external accounting platforms ›
How GL-Based Costing works with external accounting platforms.
Understand GL-Based Costing for document-based integration ›
How GL-Based Costing works with document-based integration.
Understand GL-Based Costing for journal entry integration ›
How GL-Based Costing works with journal entry integration.