Homeowners typically pay somewhere between $75 and $150 an hour for HVAC labor, and a lot of contractors set their own rate by looking at that range and picking a number that feels competitive. From keeping the books for HVAC companies, we've found that the rate that actually works has very little to do with what the shop down the road charges, because it comes out of three numbers sitting in your own books, which are what a technician really costs per hour, how many of those hours you actually bill, and how much overhead each billed hour has to carry.
When those three numbers are pulled from the books instead of guessed, the break-even rate for a typical residential service company often lands above $100 an hour, which means the contractors pricing at the bottom of the market range are frequently losing money on every hour they sell. This post walks through how to calculate an HVAC labor rate from your own numbers, using a worked example, and how to tell whether the rate you're charging today is covering what it needs to.
The labor rate is built from three numbers
Your hourly labor rate has to cover the fully burdened cost of the technician's time, a share of the overhead that keeps the business running, and the profit you want left at the end. Each of those pieces comes from a different place in your books, and the mistakes that sink most labor rates happen because one of them gets measured wrong.
The first is burdened labor cost, which is the technician's wage plus the employer payroll taxes, workers' comp, and benefits that come with every paid hour. The second is billable hours, which is how many of the hours you pay for actually get charged to a customer. The third is overhead, meaning rent, office payroll, insurance, software, fixed vehicle costs, and everything else that exists whether a tech is on a call or not. Our post on HVAC labor cost percentage covers the burden side in more depth, and HVAC overhead covers what belongs in the overhead number.
A worked example
Picture a residential HVAC company with six service technicians, each paid $30 an hour, which is close to the national median of $29.33 that the Bureau of Labor Statistics reported for HVAC mechanics and installers in May 2025. In Florida, workers' comp rates for HVAC work are among the highest in the country, and fully burdened labor commonly runs 30 to 50 percent above base wages, so a 35% burden is a reasonable assumption here. That puts each technician's real cost at $40.50 for every hour on the payroll.
Each tech is paid for 2,080 hours a year, but nobody bills 2,080 hours. Drive time, shop time, training, callbacks, holidays, and the slow days between calls all come out of that total, and in this example each tech bills about 1,250 hours, or roughly 60% of paid time. That changes the math considerably, because the company pays $84,240 a year for each technician and recovers it across only 1,250 billed hours, which makes the true labor cost $67.39 per billable hour rather than the $40.50 on the payroll register.
Next comes overhead. Say the company's overhead runs $330,000 a year, and the six techs together bill 7,500 hours. Each billed hour has to carry $44 of overhead, which brings the break-even rate to about $111.39 an hour. To leave a 10% net profit on top of that, you divide the break-even rate by 0.90 rather than multiplying it by 1.10, because profit is measured as a share of the price the customer pays. That puts the target labor rate at about $123.77 an hour.
Now compare that to a common shortcut. A contractor who prices at two and a half times the tech's base wage would charge $75 an hour, which sits comfortably inside the market range and loses more than $36 on every hour billed in this example. The rate looks competitive on the invoice, and the loss only shows up months later as a P&L that never seems to produce the profit the busy schedule promised.
Why billable hours move the rate more than anything else
Of the three numbers, billable hours is the one most owners have never actually measured, and it has the biggest effect on the result. In the example above, if each tech billed 1,500 hours instead of 1,250, labor cost per billable hour would drop to $56.16 and overhead per billable hour would drop to about $36.67, which brings the break-even rate down to roughly $92.83. Nothing about wages or overhead changed, only how much of the paid time turned into billed time.
That's why the number has to come from your books and your field software rather than an estimate. Billable hours from your dispatch or field service system, compared against paid hours from payroll, give you the real ratio, and in Florida it's worth checking that ratio separately for the peak cooling months and the shoulder season, since a rate that works in July can fall short in January when the schedule thins out. The same ratio drives revenue per technician, so the two numbers are worth tracking side by side.
Where material markup fits
The example assumes the labor rate carries all of the company's overhead. Most HVAC companies also recover part of their overhead through the markup on parts and equipment, and if materials are carrying a meaningful share, the labor rate can come down without hurting profit. The catch is that you can only make that tradeoff on purpose if you know how much gross profit your materials actually produce each year, which our post on HVAC material markup covers in detail. Without that number, lowering the labor rate because "we make it up on parts" is a guess.
The same logic applies to flat-rate pricing. Most residential service companies quote by the task from a price book rather than by the hour, but every flat-rate price still has an hourly rate built into it, based on how long the task usually takes. If the hourly rate underneath the price book is wrong, every price in the book is wrong in the same direction.
Commercial labor rates
Commercial HVAC work usually needs its own rate rather than the residential one. Commercial jobs often carry different requirements, like specialized certifications, after-hours access, more paperwork, and on public projects, prevailing wage rates that set a floor on what you pay the tech. Each of those changes the burdened cost or the billable ratio, so the calculation above should be run separately for commercial work with its own wages, burden, and billable hours rather than borrowing the residential number.
What your books need to show
None of this works if the inputs aren't visible. Technician wages, payroll taxes, workers' comp, and benefits need to sit in cost of goods sold, separate from office payroll, so burdened labor can be measured. Overhead needs to be grouped so the annual total is one clean number rather than something assembled by hand from an alphabetical expense list. And revenue should be split between service and install, since the two carry different labor profiles and usually need different rates.
Once the books are set up that way, recalculating the labor rate becomes a once-a-year exercise, or a quick check any time wages, insurance, or overhead change meaningfully. A rate that hasn't been recalculated in a few years has almost certainly fallen behind, since wages, insurance, and overhead rarely move in any direction but up.
When to bring in a specialist
For HVAC companies past about $500,000 in revenue, the gap between the rate you charge and the rate your costs require is usually worth tens of thousands of dollars a year in either direction. Getting the inputs right is mostly a bookkeeping problem, because burdened labor, billable hours, and overhead all have to be measured consistently before the rate can be trusted.
At Prophet Accounting, we work with HVAC and other home service trades across Port St. Lucie, the Treasure Coast, and nationwide. We set up your books so burdened labor, billable hours, and overhead are visible every month, which gives you the numbers to set a labor rate that actually covers your costs. Schedule a consultation at prophetaccounting.com/contractors or give us a call at (772) 380-2871. For a quick read on monthly bookkeeping costs, our pricing calculator gives you a ballpark in about two minutes.