> For the complete documentation index, see [llms.txt](https://learn.withessential.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.withessential.com/reporting-and-integrations/reporting/job-costing-reports.md).

# Job costing reports: profitability, cost breakdown, and more

Job costing reports break down revenue, labor, and material cost by job and by technician. The four job-level reports use the same numbers as the Job Costing card. All five reports share a date-range picker with Last 30 days, This quarter, Year to date, Last 12 months, and Custom range for exact start and end dates. They also export to CSV. The four job-level reports — Job profitability, Cost breakdown, Estimated vs. actual, and Labor cost by job — let you click a row to open that job; Technician profitability rows aren't clickable, since a technician isn't a single job.

> **Where to find it:** Reports, under the Job costing section.

**Before you start:** Job Costing must be turned on for your business, and your role needs the job-costing view permission — see [Turn on Job Costing and set cost rates](/administration/settings/turn-on-job-costing-and-set-cost-rates.md). Job costing reports can't be shared with individual colleagues the way some other reports can: they expose cost rates and margins, so access always requires the permission.

Revenue in every report excludes draft and void invoices, the same rule the Job Costing card uses. Technician profitability uses recognized revenue for the selected period under your business's accounting basis — see [Change your accounting method](/reporting-and-integrations/accounting/change-accounting-method.md) — and only includes revenue that credits a technician through direct invoice links or the invoice’s linked jobs. If a technician has no cost rate set for a job in the period, their labor shows an asterisk — their time cost $0 for that stretch, so margin reads high until you set a rate in [Settings > Work Management > Job Costing](/administration/settings/turn-on-job-costing-and-set-cost-rates.md).

## Job profitability

Revenue, total cost, and gross margin for every job in the range. Columns: Job, Customer, Property, Visits, Labor, Parts, Total cost, Revenue, Margin, Margin %.

## Cost breakdown

Where the money goes on each job — labor against parts. Columns: Job, Customer, Property, Labor hrs, Labor, Labor %, Parts, Parts %, Total cost.

## Estimated vs. actual

Quoted amount against actual cost, to spot jobs that ran over budget. Columns: Job, Customer, Property, Quoted, Actual cost, Variance, Variance %, Status (Over budget / Under budget). Only quotes the customer could act on count toward the estimate — draft, error, and void quotes are excluded. If a job links more than one active quote, their quoted amounts sum, so a superseded revision counted alongside its replacement will overstate the estimate.

## Labor cost by job

Clocked hours valued at cost rates, rolled up to each job. Columns: Job, Customer, Property, Techs, Labor hrs, Labor cost, Revenue, Labor % of rev.

## Technician profitability

Each technician's labor cost against their share of recognized invoice revenue. Columns: Technician, Jobs, Labor hrs, Labor cost, Revenue, Labor % of rev. An invoice credits the distinct set of directly linked technicians and technicians assigned to visits on its linked jobs; if that is three technicians, each receives one-third of its revenue (with any indivisible cents distributed across the shares), so the Revenue column and report total remain additive.

Change credit by editing jobs and technicians on the invoice (**Related Records → Save links**) or by changing visit assignments in Scheduling. Each technician counts once; removing a direct link retains credit through linked jobs. An invoice with neither direct technicians nor assigned technicians on linked jobs credits nobody and shows up under Unattributed invoices in [See revenue by technician](/reporting-and-integrations/reporting/revenue-by-technician.md).

The two sides of the ratio use different date rules: labor counts a technician's full clocked time on any job with a visit in the period, while revenue counts recognition in the period under your accounting basis — an invoice's own date under Accrual, or when payment is collected under Cash. For a job that spans periods — or is billed before or after the work — a technician's Labor % of revenue can look high in one period and low in the next. Judge spanning jobs over a range wide enough to contain both the work and its invoices, such as This quarter or Last 12 months.

The Financial section also has a dedicated [Revenue by technician](/reporting-and-integrations/reporting/revenue-by-technician.md) report for the same invoice attribution without labor-cost or margin data.

## Related guides

* [Job Costing on a job: revenue, costs, and margin](/customers-and-work/jobs/job-costing-on-a-job.md)
* [See revenue by technician](/reporting-and-integrations/reporting/revenue-by-technician.md)
* [Turn on Job Costing and set cost rates](/administration/settings/turn-on-job-costing-and-set-cost-rates.md)
* [Payroll and timecard reports](/reporting-and-integrations/reporting/payroll-and-timecard-reports.md)
* [Export, filter, and drill into a report](/reporting-and-integrations/reporting/export-filter-and-drill-into-a-report.md)
* [Change your accounting method](/reporting-and-integrations/accounting/change-accounting-method.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://learn.withessential.com/reporting-and-integrations/reporting/job-costing-reports.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
