All articles

QuickBooks Job Costing Doesn't Match Profit and Loss

8 min read CSVQBO Team
csv / xls / xlsx → .qbo
No file handy?

No account needed for your first conversions. We never store your bank login.

Short answer: A job costing report and the Profit and Loss disagree because they are built from different data. The Profit and Loss counts every posted transaction. Job costing reports count only transactions that carry a Customer:Job, and the item-based ones count only costs entered on the Items tab. Anything missing a job assignment falls into a Not Specified column or vanishes from the report entirely, so the gap between the two numbers is almost always uncoded cost, not a broken report.

This is the single most common month-end complaint from contractors and anyone else running projects in QuickBooks. The good news is that the difference is measurable. You can put a dollar figure on it in about ten minutes, and once you can measure it you can chase it down transaction by transaction.

Why doesn't my job costing report match my profit and loss?

There are four causes, and they stack. First, transactions with no Customer:Job assigned appear on the Profit and Loss but not against any job. Second, the item-based reports (Job Profitability, Item Profitability, Estimates vs. Actuals) read costs from the Items tab of a bill or check, so a cost typed on the Expenses tab may be job costed without ever showing on those reports. Third, payroll does not job cost unless the file is configured for it. Fourth, the two reports may be running on different date ranges or a different accounting basis.

Work through them in that order. The first one usually accounts for most of the gap, and it is the easiest to quantify.

How do I reconcile job costing to the profit and loss?

  1. Run the Profit and Loss for the period you care about and note the total income and total expense figures.
  2. Run the Profit and Loss by Job for the exact same date range and the same accounting basis, cash or accrual. Reports pull different numbers on different bases, and a mismatch here explains a surprising number of unexplained variances.
  3. Compare the two totals. The Profit and Loss by Job should tie to the Profit and Loss in total, with the unassigned amounts sitting in a Not Specified column. That column is your uncoded cost, and its size tells you how much work is ahead.
  4. Double-click the Not Specified column to drill into the transactions behind it. QuickBooks opens the list, and you can open each transaction and add the Customer:Job directly.
  5. Re-run both reports and confirm the Not Specified column has shrunk to only the costs that genuinely belong to overhead rather than to a job.

Do this monthly rather than at year end. Coding a bill from three weeks ago is a quick judgment call. Coding one from eleven months ago usually means calling someone and asking what the material was for.

What does Not Specified mean on a Profit and Loss by Job?

It means the transaction posted to the general ledger without a Customer:Job on the line. QuickBooks still counts it in company profit, it simply has nowhere to put it by job. Typical culprits are credit card charges for materials, fuel, small tools, subcontractor bills entered in a hurry, and any expense entered through a journal entry. For a contractor buying materials on cards, this column is often the largest single reporting problem in the file.

Should I use the Items tab or the Expenses tab for job costs?

Use the Items tab when you want the cost to appear on the item-based job reports, which is most of the time for construction. Assigning a Customer:Job on the Expenses tab does job cost the transaction and it will show on the Profit and Loss by Job, but the Job Profitability and Estimates vs. Actuals reports compare estimated to actual by item, so a cost with no item attached has nothing to compare against. If you estimate by item, cost by item too, or the comparison reports will look wrong even though the accounting is right.

The Expenses tab is the correct place for costs that are not part of your estimate structure, such as a permit fee or a job-specific insurance charge. Put the Customer:Job on those lines and they will still flow to the Profit and Loss by Job.

Why isn't payroll showing in my job costing reports?

Because job costing payroll is a setting, not a default. In QuickBooks Desktop, go to Edit, Preferences, Payroll and Employees, Company Preferences, select Full payroll, and turn on job costing, class and item tracking for paycheck expenses. Then enter hours on timesheets with the Customer:Job filled in, and create paychecks from that time data. Without both halves, hours entered directly on the paycheck, wages land in payroll expense with no job attached.

In QuickBooks Online, wages and employer taxes allocate to a project only when the time was tagged to that project on a timesheet or single time activity, with the pay type specified, before the paycheck was created. Running payroll first and tagging time afterwards does not retroactively allocate the cost. Labor is usually the largest line on a job, so an unconfigured payroll setup makes every job look more profitable than it is.

Do journal entries show up in job costing reports?

Partly, and this trips people up. A journal entry line can carry a Customer:Job and will then appear on the Profit and Loss by Job. What it cannot do is carry an item, so it will not appear on the item-based reports or against an estimate. QuickBooks also only handles a job assignment cleanly on one side of the entry, which is why allocation entries spread across many jobs often produce odd results. Where you can, record job costs with bills, checks and credit card charges rather than journal entries.

What job costing reports does QuickBooks Desktop have?

The core set is Job Profitability Summary and Detail, Job Estimates vs. Actuals Summary and Detail, Item Profitability, Item Estimates vs. Actuals, Estimates by Job, Unbilled Costs by Job, and Time by Job. The Contractor editions of Premier and Enterprise add the Job WIP Summary and Committed Costs by Job, which is where open purchase orders and unpaid wages show up as cost you have committed but not yet recorded. If a job looks profitable but you know material is on order, check that report before you believe the number, and keep your open purchase orders cleaned up so committed costs stay meaningful.

How do I build a WIP report in QuickBooks?

The Job WIP Summary derives percent complete as actual cost divided by estimated cost, then multiplies that percentage by estimated revenue to get earned revenue. Compare earned revenue to what you have actually invoiced and the difference is your overbilling or underbilling. The report is summary only, there is no detail version, and it is only as good as your estimates: if the estimated cost on a job is stale, the percent complete is wrong and so is every figure derived from it.

If you are on QuickBooks Online or a Desktop edition without the Contractor reports, most firms build this in a spreadsheet from the Job Estimates vs. Actuals export. It is a monthly export rather than a live report, which is fine for a percentage of completion schedule that only changes at close.

Does QuickBooks Online have job costing?

It has Projects, which is available on Plus and Advanced only, and it is genuinely useful for tracking income and cost by project with labor allocated from timesheets. It is not as deep as Desktop job costing: there is no estimate versus actual by item in the same way, no committed costs report, and no WIP report. Essentials and Simple Start have no project tracking at all, so a contractor on Essentials is not doing job costing regardless of how the expenses are coded.

How do I handle overhead in job costing?

Leave true overhead unassigned rather than forcing it onto jobs. Rent, office wages, insurance and software are period costs, and spreading them across jobs by a made-up formula makes every job report less trustworthy, not more. A clean file has a Not Specified column that contains overhead and nothing else. If you do want overhead allocated for management reporting, do it outside QuickBooks in a schedule you can explain, and keep the books themselves clean.

The related fix is coding discipline at the source. Most uncoded job cost enters the file as a card swipe with no job on it, so if the receipts are piling up faster than anyone codes them, tightening how you capture and categorize card receipts removes the problem upstream instead of at month end.

Where to go next

Job costing sits inside the wider close, so run it as part of the QuickBooks month end close checklist rather than as a separate exercise. If costs are landing in the wrong place to begin with, the uncategorized expenses cleanup and chart of accounts cleanup guides fix the cause rather than the symptom, and a mis-mapped payroll item is covered in payroll item posted to the wrong account. Contractors importing bank and card activity from spreadsheets can convert those exports with the CSV to QBO converter for construction, which produces a .qbo file QuickBooks accepts through Bank Feeds so the cost lands in the file ready to code.

Convert your CSV to QBO now

Upload your CSV or Excel statement, map the columns, and download a QuickBooks ready QBO file in seconds.

Start converting