Skip to content

Answers · in depth

How Do You Know Which Jobs Actually Make Money?

You know which jobs make money by setting each job’s invoice beside that job’s own costs — the labor hours at what an hour really costs the company, materials, subcontractors, drive time and any trip back — and reading the difference job by job instead of as one total at month-end. That difference is the job’s gross profit, and it can be built from records a service company already keeps: timecards or payroll, the dispatch board, supplier invoices and the invoice register. This guide covers what one job costs, estimated against actual hours without new software, gross profit by job, customer and kind of work, what to do about the jobs that lose money, and who reads the numbers and how often.

By , founder of Lumina Business Advisory · Updated · Sources checked · Editorial standards

Why a profitable year can hide jobs that lose money

Free self-check · two taps · no email

Hand-off 6 of 6 · Payment → Margin

If deposits stopped today, how many days could cash cover payroll and bills?

Choose the answer that sounds like your business.

Answer it in the Self-Audit

The profit and loss statement answers whether the company made money. It totals every job, so it cannot say which ones produced the profit. A year can end in the black while one kind of work, or a handful of customers, lost money all year and the well-priced work covered for it.

Whether the company itself is profitable is a real question at this size too. In the Federal Reserve Banks’ 2024 Small Business Credit Survey, 59 percent of employer firms with $1 million to $5 million in revenue said they were operating at a profit at the end of 2023, 15 percent at break-even and 25 percent at a loss. The survey covers every industry and asks about the company as a whole. It says nothing about jobs, and that is the point: the company-wide answer comes from the books, and the job-by-job answer has to be built.

Revenue per job is easy, because it is printed on the invoice. Cost per job is hard, because the records that hold it were set up for other purposes: payroll pays people by the week, supplier invoices arrive by account, and the fuel card knows nothing about which customer the truck drove to. Job costing is the work of putting those costs back on the job that caused them.

What goes into the cost of one job

A job’s cost is every cost the company would not have spent if the job had not been done. Each line below comes from a record, not from memory.

  • Labor hours on the job, from the timecard or the ticket, at the loaded cost of an hour: the wage plus what the company pays on top of it.
  • What sits on top of the wage. Per the IRS, the employer pays 6.2 percent of wages for Social Security, up to that year’s wage base, and 1.45 percent for Medicare. Add unemployment tax, workers’ compensation at the rate on the company’s own policy, health coverage, retirement and paid time off. For scale, in the Bureau of Labor Statistics’ June 2026 figures for private industry, benefits, which BLS counts to include paid leave, overtime premiums, insurance, retirement and the legally required Social Security, Medicare, unemployment insurance and workers’ compensation, were 31.4 percent of employer compensation cost for installation, maintenance and repair occupations. The company’s own payroll register is the number to use.
  • Materials and parts at what the company paid, including whatever was bought on a second run to the supply house. The hours of that run are labor on the same job.
  • Subcontractors, equipment rental, permits and disposal fees charged to that job.
  • Drive time and the truck. The Department of Labor’s hours-worked fact sheet says travel “from job site to job site during the workday” is work time and must be counted as hours worked, so those paid hours belong on a job or a route, not in a general bucket. That is a plain reading of a federal fact sheet, not legal advice; state rules can add their own. Miles cost the company’s own vehicle expense per mile. The IRS business standard mileage rate, 76 cents a mile for July through December 2026, is a tax-deduction rate, useful only as a cross-check.
  • Callbacks. A second visit to fix the first one is a cost of the first job; warranty work on equipment that failed on its own belongs on its own tag. A callback booked as a new no-charge ticket makes the original job look better than it was and leaves a $0 ticket that looks like nobody’s fault. The guide to what an HVAC callback costs shows how to tie each return visit back to the job that caused it.

What stays out: office rent, office staff, the owner’s salary, marketing, software and the company’s general insurance. Those are overhead. If the owner still works on jobs, those hours go on the job at a field wage, like anyone else’s. Revenue minus the job costs above is the job’s gross profit; overhead is paid out of the gross profit of all jobs together, and what is left is the company’s operating profit. Spreading overhead across jobs by a formula is a later step, and done first it can bury the answer the first pass is meant to show.

How to track estimated vs. actual hours without new software

The estimate already holds the first half of the comparison, because a price for labor implies hours even when nobody wrote them down. The job’s paperwork holds the second half. The work is getting both numbers onto the same row, in this order.

  • Before the job: the estimator writes the estimated hours on the work order, the job folder or the dispatch ticket. If the quote was priced in dollars only, divide its labor dollars by the hourly rate used to price it. A flat-rate price book can carry the hour figure behind each task, if it was built from one.
  • During the job: the crew lead or technician records start and stop times against the job number, on the timecard, the ticket or a line in the job folder. Drive between jobs goes on its own line, so it can be counted by route instead of hiding inside one job’s hours.
  • At invoicing: whoever closes the job fills one spreadsheet row — job number, customer, kind of work, estimated hours, actual hours, materials from the receipts or purchase orders, subcontractor costs and the invoice total. A job is not marked closed until its row exists.
  • Before payroll closes: any hours with no job number go back to the person who worked them. The share of paid hours that never land on a job is a finding in its own right.

Last quarter can be rebuilt from records already on file: the payroll export for hours by person and day, the dispatch board for where each person was, supplier invoices and the invoice register. Mark rows rebuilt from the schedule as estimated, so nobody mistakes them for measured hours. Illustrative example: a hypothetical electrical contractor estimates a panel upgrade at 10 hours, and the timecards show 14, four of them spent waiting on a utility disconnect the quote never mentioned. That is not a crew problem. It is a line missing from the estimate, and the next quote can carry it.

Gross profit by job, by customer and by kind of work

With one row per job, the spreadsheet answers the question by sorting, with no formula beyond subtraction and one division. Revenue minus labor at loaded cost, materials, subcontractors and other direct costs is gross profit in dollars; gross profit divided by revenue is the gross margin. Then read it four ways.

  • By job: sort on gross margin and read the bottom ten jobs of the quarter, with their estimated and actual hours side by side.
  • By customer: total each customer’s jobs for the year and sort on gross profit dollars. A customer with a lot of revenue and thin gross profit can take more of the company’s time than one with less of both.
  • By kind of work: tag every row once — install or replacement, service or repair, maintenance visit, project work, warranty — and total each tag. This is where an average hides the most.
  • By estimator or crew: the same sort, used to find where estimates run short, not to grade people. A crew sent to the hardest jobs can show more overruns for that reason alone.

Illustrative example, with invented numbers: a hypothetical HVAC company tags one quarter’s jobs. Its 24 replacement installs bring in $288,000 against $201,600 in direct cost, a 30 percent gross margin. Its 520 service calls bring in $182,000 against $100,100, or 45 percent. Its 400 maintenance-agreement visits bring in $36,000 of agreement revenue against $40,000 in labor, drive and filters, a loss of $4,000. The quarter as a whole shows about 32 percent, and nothing in that figure says one kind of work ran below zero. Only the company’s own rows can say where its margin actually comes from.

Which customers or job types lose money, and what to do about them

A job or customer at the bottom of the sheet shows where to look, not what to do. The reason it lost money decides the fix, so name the reason first.

  • Hours over the estimate on every job of one kind: the estimate is short. Rebuild the hour figure from last quarter’s actuals and price the next quote from it.
  • Hours on estimate, but at a higher wage than the price assumed: the price has not moved since wages did. That is a price change, built from the job’s own wage rows.
  • Extra work done and never billed: the gap sits between the request on site and the invoice. The fix is a written change order before the extra work starts, or the owner’s written decision to do it for nothing.
  • Callbacks: the cost sits on the original job, and the cause sits upstream, in diagnosis, workmanship or a part. A callback list with a cause on each line says which.
  • Drive time: the customer sits far off the route, or the job is so small that the drive outweighs the work. A trip charge, a minimum, or scheduling those jobs by area changes that.
  • A price set to win the work: a reduced rate given once to close a deal and carried onto every job since. Decide whether it still earns anything.

For each one the decision comes from a short list: re-estimate, reprice, bill the extras, fix the cause of the return trips, re-route, or let the work go at the next renewal or quote. Some losing work is kept on purpose — maintenance visits that keep a customer for the next replacement, a small job for a customer whose large jobs pay well. That is a fair choice. Write it down as one, with its number next to it, and read the number again next quarter.

How often to review job costing, and who does it

Job costing read once a year is a post-mortem. Read on a fixed schedule by named people, it changes the next quote.

  • Every job, at close: the person who invoices it fills its row. Nobody else has the paperwork in hand at that moment.
  • Weekly, about half an hour: the estimator or service manager reads last week’s closed jobs that ran past their estimated hours by more than a threshold the owner sets once, and writes a reason next to each.
  • Monthly: the bookkeeper checks that the month’s job costs add up to the direct labor and materials on the books. The difference is cost that never reached a job — hours with no job number, materials bought and never charged out — and it should shrink month to month.
  • Monthly: the owner reads gross margin by kind of work and the ten customers with the lowest gross profit, each against its own previous months.
  • Quarterly, and before any price change: the full sort by customer and by kind of work, and the decisions from the section above, each with a name and a date.

This guide prints no target margin. Margins differ by trade, by region and by the mix of work, and the comparison that holds up is the company against its own previous quarters. When one kind of work slips two months running, it goes on the next weekly review instead of waiting for the year-end numbers.

When this needs no outside help, and where the Review fits

All of this is meant to be run in-house. A company whose timecards carry job numbers and whose estimates hold hours can build the sheet in an afternoon and keep it with an hour a week. If the field software already reports estimated against actual hours by job, skip the spreadsheet and put that report on the weekly agenda.

An outside look earns its fee when the records do not connect: hours with no job number, estimates kept in someone’s email, extras agreed on site with no paper, callbacks booked as new tickets. The Revenue Review takes two weeks. From read-only exports of payroll, the job or dispatch records, supplier invoices and the invoice register, it sets estimated against actual hours and gross profit by job, customer and kind of work where the records support it, and ends in a written report that prices each gap as a monthly dollar figure. It changes no price and contacts no customer; those decisions stay with the owner. There are no client case studies on this site yet.

If it is unclear whether any of that is worth a fee, the next step is a free 20-minute call, where a company too small for the arithmetic is told so.

Before any next step

What should you do next?

Fix it yourselves.
If the cause is clear, it lives inside one process, and one person can own it — take the play from this page and run it. That outcome is fine with us; it is why the play is published in full.
Order one bounded build.
If the fix is known but needs configuration or integration inside your stack — a cadence wired into your own system, an alert, a handoff — scope that one build, with us or with anyone you trust. The six systems we build show what bounded looks like.
Start with the Review.
If the causes are debatable, the problem crosses departments or systems, or the economics are unclear — diagnose before anyone builds. The Revenue Review: $4,500 fixed, two weeks, computed from your own records. Read a sample finding before you decide — free, no email.

Asked right after

How do I know which jobs or customers are actually profitable?
Put each job on its own row with its invoice total and its direct costs: labor hours at the loaded cost of an hour, materials, subcontractors, drive time and any return trips. Revenue minus those costs is the job’s gross profit. Total the rows by customer and by kind of work, sort, and read the bottom of each list.
How do I know if my service business is actually making money after expenses?
The profit and loss statement answers that for the company as a whole: revenue minus every expense, overhead included, closed every month. It will not say which jobs earned the profit. That takes the job-by-job sheet, whose total gross profit has to cover overhead before anything is left.
How do I know my gross profit on each job?
Subtract the job’s direct costs from what it was invoiced: labor at the loaded cost of an hour, materials, subcontractors, permits and fees, drive time and any return visits. Leave office costs and the owner’s salary out; they are overhead, paid from the gross profit of all jobs together. Gross profit divided by the invoice total is the job’s gross margin.
How do I track estimated vs. actual labor hours on jobs?
Write the estimated hours on the work order before the job starts, record start and stop times against the job number while it runs, and put both numbers on one spreadsheet row when the job is invoiced. Each week, the estimator or service manager reads the jobs that ran over and writes down why.
How do I compare job costing on HVAC installs vs. service calls?
Tag every job once by kind of work — replacement install, service call, maintenance visit, warranty — and total revenue and direct cost by tag for the same quarter. Keep each callback on the original job, and drive time on the job or route it belongs to, or one kind of work will look better or worse than it is.

The next step

Bring us the process that keeps getting stuck.

A 20-minute conversation about the workflow, the teams and the systems involved — and a straight answer on whether The Revenue Review is the right next step. If it is not, we say that on the call.

A real person answers or calls you back the same business day.

Free self-check · 2 taps