For HVAC contractors, service contracts are the financial backbone of the business — recurring revenue that smooths out seasonal volatility, builds customer relationships, and theoretically generates predictable profit. Theoretically. In practice, most HVAC contractors don't actually know which service contracts make money and which ones quietly bleed cash. A 2024 ACCA (Air Conditioning Contractors of America) survey found that the average HVAC service contract generates a gross margin of only 18-22% — well below the 35-45% target needed for healthy business operations. Worse, 30-35% of individual contracts operate at a net loss when fully loaded labor costs, travel time, emergency callbacks, and parts consumption are accurately allocated (PHCC/Service Roundtable, 2024). The commercial HVAC service contract market reached $32.8 billion in 2024, growing at 6.4% CAGR (Grand View Research), yet contractor profitability in this segment has been declining as equipment complexity increases, technician labor costs rise 4-6% annually, and customers demand more coverage for lower prices. The contractors who thrive aren't necessarily the biggest — they're the ones who know exactly what each contract costs to service and price accordingly.
Analyzing HVAC service contract profitability requires tracking actual labor hours, travel time, parts consumption, emergency call frequency, and equipment condition against the contract revenue — for every contract, every building, and every piece of equipment covered. Oxmaint CMMS captures every service visit, every part used, every hour worked, and every callback against the specific contract — then calculates actual profitability by contract, customer, equipment type, and building, showing you exactly where you're making money and where you're losing it. Schedule a demo.
The difference between a profitable HVAC business and a struggling one isn't revenue — it's knowing which contracts generate profit and which ones consume it. Most contractors are surprised by the answer.
The Anatomy of a Service Contract: Where Money Is Made and Lost
Every HVAC service contract has a revenue side and a cost side. Profitability is determined by how accurately you estimate costs at pricing time — and how disciplined you are at tracking actual costs during the contract term:
Revenue Side
Cost Side (Where Profit Dies)
Know Exactly What Every Contract Costs — and What It Earns
Oxmaint tracks every labor hour, every part, every trip, and every callback against the specific service contract — then calculates actual profitability by contract, customer, equipment type, and building in real-time.
The Six Profit Leaks in HVAC Service Contracts
Contract profitability doesn't erode from one catastrophic event — it drains slowly through six systematic leaks that most contractors don't measure until the annual P&L reveals the damage:
Untracked Travel Time
A technician drives 45 minutes to a contract customer site for a 1-hour PM visit. The contract was priced assuming 15 minutes of travel. Over 4 visits per year across 80 contracts, that's 160 hours of unrecovered travel time — $8,000-$12,000 in labor cost absorbed by the contractor. Travel time is the most underestimated cost in HVAC service contracts because it's rarely tracked per contract. The technician logs "2 hours at ABC Company" but doesn't separate drive time from wrench time.
"Unlimited Service Calls" Without Limits
The most dangerous words in an HVAC service contract: "unlimited service calls included." A commercial customer with aging equipment calls 18 times per year — 14 more than the 4 visits you budgeted. At $350 loaded cost per visit, those 14 extra calls cost $4,900. The annual contract fee is $3,600. You're losing $1,300 per year on this contract — and the customer is your "best" client because they use the service so heavily. Meanwhile, a customer who calls twice per year subsidizes the heavy caller — paying the same rate for less service.
Aging Equipment Eating Margins
Equipment age is the strongest predictor of service contract profitability — and it changes every year. A 5-year-old rooftop unit costs $400-$600/year to maintain under contract. The same unit at 15 years costs $1,800-$3,200/year. If the contract price doesn't escalate with equipment age, margins compress from 40%+ in year 1 to negative territory by year 8-10. Most contractors price contracts based on equipment count without adequately weighting age, condition, and failure history — treating a 3-year-old VRF system the same as a 20-year-old packaged unit.
Parts Included Without Parts Tracking
Contracts that include "minor parts" (filters, belts, capacitors, contactors) without tracking actual parts consumption per contract are flying blind. A technician replaces a $45 capacitor on a service call and records it as "parts used" in the truck inventory — but doesn't allocate it to the specific contract. At year-end, the parts category shows $85,000 in consumption but nobody can tell you which contracts consumed what. Was Contract #247 profitable after parts? Nobody knows. The parts that were "included" may have consumed 40% of the contract revenue.
Callbacks Buried in the Numbers
A technician visits a site, diagnoses low refrigerant, adds a pound of R-410A, and closes the ticket. Two weeks later, the customer calls — system isn't cooling again. Another technician visits, finds the same low charge, this time locates a coil leak. A third visit is needed for the repair. Three visits for one problem. The first visit was wasted ($350), the second was partially diagnostic ($350), and the third was the actual fix ($350 + parts). Total cost: $1,050+. Revenue allocated: $0 (it's a "covered" service call). Industry callback rates of 8-15% silently consume 5-10% of total contract revenue.
Flat-Rate Renewal Without Performance Review
Contract comes up for renewal. The account manager sends a renewal letter with a 3% price increase — "standard annual escalation." No review of actual service costs, call frequency, equipment condition changes, or parts consumption for that specific contract. The customer with 3 demand calls last year gets the same 3% increase as the customer with 14 demand calls. One remains profitable; the other falls further into loss. Renewal is the most important profitability lever — and most contractors treat it as an administrative task instead of a financial analysis.
The Profitability Dashboard: KPIs Every HVAC Contractor Must Track
These metrics, tracked at the individual contract level, reveal exactly where profit is being made and lost — and provide the data foundation for pricing, staffing, and renewal decisions:
Contract Gross Margin
Cost Per Visit
Demand Call Rate
Callback Rate
Revenue Per Equipment Unit
Technician Utilization on Contracts
See Your Real Margins — Not the Ones You Assumed When You Priced the Contract
Oxmaint calculates contract profitability in real-time — tracking every hour, every part, every trip, and every callback against contract revenue, with automated renewal reports that recommend pricing based on actual performance data.
What the CMMS Must Track for Contract Profitability Analysis
Accurate contract profitability requires specific data architecture linking service activity to contract revenue — most CMMS platforms track work orders but not contract financials. Here's what's needed:
Frequently Asked Questions
How do you calculate the true cost of an HVAC service contract?
Most HVAC contractors underestimate contract costs because they only count direct labor and obvious parts — missing 30-40% of actual costs. The complete cost formula: Total Contract Cost = Scheduled PM Labor + Demand Call Labor + Travel Time + Parts & Materials + Callbacks + Overhead Allocation. Scheduled PM labor: Number of planned visits × hours per visit × loaded labor rate. Loaded labor rate must include wages, payroll taxes, health insurance, workers' comp, paid time off, and training time — typically 1.4-1.7× the hourly wage. A technician earning $30/hour actually costs $42-$51/hour loaded.
What is a good profit margin for HVAC service contracts?
Gross margin targets by contract type: PM-only contracts (scheduled maintenance only, no demand calls or parts included): Target 45-55% gross margin. These are the most predictable and should be the most profitable — costs are known, labor is scheduled, and scope is defined. If PM-only contracts aren't hitting 45%+, pricing is too low or PM execution is inefficient. Full-service contracts (PMs + demand calls + minor parts): Target 35-45% gross margin. The demand call component introduces variability, but with proper pricing based on equipment age and historical call frequency, this range is achievable. Below 30% indicates systematic underpricing or high callback rates. All-inclusive contracts (PMs + unlimited calls + all parts + labor): Target 30-40% gross margin. These carry the highest risk because cost variability is absorbed entirely by the contractor. Price must account for worst-case scenarios on aging equipment. Below 25% is unsustainable.
How should equipment age affect service contract pricing?
Equipment age is the single strongest predictor of service contract cost — and therefore the most important variable in pricing. The age-cost curve for commercial HVAC equipment follows a predictable pattern: Years 1-5 (warranty period): Lowest service cost. Equipment is reliable, most failures covered by manufacturer warranty, parts consumption is minimal. Service cost: $200-$500 per unit per year. Many contractors offer aggressive pricing to win new construction/installation contracts knowing the early years will be highly profitable. Years 5-10 (sweet spot): Moderate service cost. Equipment is mature but still reliable. Occasional component replacements (capacitors, contactors, fan motors). Service cost: $500-$1,200 per unit per year.
How does CMMS software enable service contract profitability tracking?
A CMMS configured for contract profitability transforms from a work order management tool into a financial intelligence system. Contract-work order linkage: Every work order is assigned to a specific service contract. When a technician logs time, uses parts, or records travel — it's automatically allocated to the contract. This is the foundational requirement that most CMMS implementations miss. Without this link, labor and parts are tracked but cannot be attributed to specific contracts. Time tracking granularity: Work orders capture travel time separately from on-site time. On-site time is further categorized as PM work, demand repair, diagnostic, or callback. This decomposition reveals where time is actually spent — not where you assume it's spent. Parts cost allocation: Every part consumed is logged with part number, cost, and linked to the work order (and therefore the contract). The CMMS maintains real-time parts cost per contract — no end-of-year guessing.
When should you terminate or restructure an unprofitable service contract?
Not every unprofitable contract should be terminated — but every unprofitable contract must be addressed. The decision framework: Step 1 — Quantify the loss: Calculate actual annual loss (revenue minus fully loaded costs). A contract losing $500/year on a $5,000 contract is a different conversation than one losing $3,000 on a $4,000 contract. Step 2 — Identify the cause: Is the loss driven by equipment age (escalating repair costs), service frequency (too many demand calls), scope creep (doing work outside the contract without billing), travel distance, or underpricing? Each cause has a different solution. Step 3 — Evaluate the customer relationship: Does this customer generate other revenue? Equipment replacement sales, project work, referrals, or portfolio expansion potential may justify a below-target contract if the total customer relationship is profitable. A $2,000 contract loss is acceptable if the customer spends $15,000/year in project work at 40% margin. Step 4 — Restructure before terminating: Price adjustment: Present actual service data to the customer: "Your equipment required 14 service calls last year vs. the 6 we budgeted.
Price With Data. Renew With Confidence. Profit With Every Contract.
Join HVAC contractors already using Oxmaint to track real contract costs, identify profit leaks, generate data-driven renewal pricing, and build a service contract portfolio that actually makes money.







