A $1,000 repair is not $1,000 of money you get to keep. In the example below, after the tech's time, the parts and the drive, a little over half of it is left to pay for the office, the trucks, the phones and the owner's profit. That remainder, as a share of the price, is your gross margin. It is the single number that tells you whether your prices can carry the business.
Gross margin in plain English
Think of every invoice as two buckets. The first bucket pays for doing that specific job: the technician's hours, the parts and equipment, any subcontractor, the permit, the disposal fee. The second bucket is everything left over. Gross margin is the size of the second bucket compared with the whole invoice.
Here is an example with made-up numbers for a residential HVAC repair:
| Line | Amount |
|---|---|
| Invoice total (before sales tax) | $1,000 |
| Capacitor and contactor at cost | $85 |
| Technician time, 2.5 hours × $55 burdened rate | $137.50 |
| Drive time, 0.5 hours × $55 | $27.50 |
| Refrigerant and misc. materials at cost | $180 |
| Direct cost of the job | $430 |
| Gross profit | $570 |
| Gross margin | 57% |
Leave sales tax out of revenue. It is the state's money, not yours, and including it inflates the margin on taxable jobs.
How do you calculate gross margin?
Metric
Gross margin %
The share of each revenue dollar left after the direct costs of the work are paid.
(Revenue − direct job costs) ÷ revenue × 100
Where the numbers come from: Invoice subtotals after discounts and before tax; parts and equipment at cost; field labor hours times each person's burdened rate; subcontractor and permit bills tied to the job.
The math is simple. The hard part is deciding what counts as a direct cost. The federal cost principles used for government contracts give a useful test: a direct cost is one "specifically identified" with a particular cost objective, which for you means a particular job.1 If you can point to the job that caused the cost, it belongs in the margin. If it would exist whether or not that job happened, such as dispatcher wages, rent or your website, it is overhead.
Count labor at the burdened rate
Wages are only part of what a technician costs. The Bureau of Labor Statistics reports that private employers spent $46.89 per hour worked on total compensation in June 2026, of which $32.82 was wages and salaries and $14.07, or 30.0%, was benefits.2 Those are all-industry averages, not trade figures, but the gap is the point: costing labor at wage alone overstates every job's margin.
Common mistakes in the math
- Dividing by cost instead of price. That gives you markup, not margin. See the comparison below.
- Leaving labor out. A "parts margin" of 70% tells you nothing about whether the job made money.
- Counting sales tax as revenue. It raises revenue without raising profit.
- Mixing installs and service. A blended number hides a weak install margin behind strong service work. Split by job type.
- Ignoring return trips. A callback adds labor to the original job's cost. If you book it as a separate $0 job, the original job's margin looks better than it was.
Gross margin vs markup
This is the most expensive confusion in trade pricing. Markup is what you add to cost. Margin is what you keep out of price.
| Markup on cost | Price of a $100 part | Gross margin |
|---|---|---|
| 25% | $125 | 20.0% |
| 50% | $150 | 33.3% |
| 100% | $200 | 50.0% |
| 150% | $250 | 60.0% |
| 200% | $300 | 66.7% |
Convert between them
If your target is a 50% margin, you need a 100% markup, not a 50% one. The markup vs margin calculator does the conversion for any number.
Gross margin vs the gross profit on your tax return
The gross profit line on a Schedule C is a tax number, and it can look very different from your management margin. IRS Publication 334 says gross profit is net receipts minus cost of goods sold, and that its cost of goods sold chapter "does not apply to a personal service business," naming a carpenter and a painter as examples.3 It also explains that labor in cost of goods sold is usually a manufacturing item, so many service businesses report wages as an ordinary business expense further down the form.3
The practical upshot: do not judge your pricing from the tax return's gross profit line. Build your own gross margin from job costing, with burdened field labor included, and let your accountant handle the tax presentation.
What is a good gross margin?
There is no reliable public benchmark for residential HVAC, plumbing or electrical gross margin. Published figures tend to come from vendor or consultant surveys with unclear samples and definitions, so we don't quote them here.
You can work out your own floor instead:
- 1
Add up a year of overhead
Everything that is not a direct job cost: office wages, rent, insurance, software, marketing, non-job vehicle costs, the owner's market-rate salary.
- 2
Pick a net profit goal
Decide what profit you want as a share of revenue. That is a business decision, not an industry average.
- 3
Divide by expected revenue
Overhead plus profit goal, divided by next year's expected revenue, is the minimum blended gross margin you need.
- 4
Set targets by job type
Service, maintenance and install work carry different margins. Set a floor for each so the blend still clears your minimum.
Example: $600,000 of overhead plus a $200,000 profit goal on $2,000,000 of expected revenue means you need a 40% blended gross margin before anything else works.
What moves gross margin?
| Lever | Why it works | How to check |
|---|---|---|
| Flat-rate prices built from real cost | Prices that include burdened labor and material cost can't drift below cost | Margin per price book task, reviewed quarterly |
| Fewer return trips | Every second visit adds labor and drive time to the same revenue | Return-trip and callback rate by tech |
| Discount discipline | A 10% discount on a 50% margin job cuts its gross profit by 20% | Discounts as a share of revenue, by tech |
| Truck stock that fits the work | Supply-house runs are unpaid drive time | Parts runs per week |
| Install estimates checked against actuals | Installs are where hours overrun | Estimated vs actual cost on every install |
The discount row is worth a second look. On a $1,000 job with a 50% margin, gross profit is $500. Take $100 off and gross profit drops to $400, a 20% cut in what the job contributes, while the work stays the same.
Free calculatorMarkup vs margin calculatorConvert markup to margin (and back) so your prices actually hit your margin target.How TradesWork shows gross margin
Job costing in TradesWork builds the cost of each job as it happens: materials from stock, invoice lines and purchase orders (de-duplicated), labor at each person's burdened rate, optional mileage, and direct costs such as subcontractors and permits. Gross margin uses the invoice subtotal before tax and after discounts. If someone on the job has no burdened rate set, labor shows as unknown rather than $0, so the margin isn't overstated. Invoices under your margin floor, 25% by default, get a review flag before they sync.
For the step after gross margin, see net profit and how overhead gets built into your rates.
Footnotes
-
Federal Acquisition Regulation 31.202, Direct costs, via Acquisition.gov, checked October 2026. https://www.acquisition.gov/far/31.202 ↩
-
U.S. Bureau of Labor Statistics, Employer Costs for Employee Compensation, June 2026, private industry workers. https://www.bls.gov/news.release/ecec.nr0.htm ↩
-
Internal Revenue Service, Publication 334, Tax Guide for Small Business, chapters 6 (Cost of Goods Sold) and 7 (Figuring Gross Profit). https://www.irs.gov/publications/p334 ↩ ↩2
