How do I account for service agreements and maintenance contracts in my HVAC business?
When a customer pays $300 upfront for an annual maintenance agreement, that $300 is not revenue yet. You received the cash, but you haven’t done the work. The accounting term for this is deferred revenue, and it sits on your balance sheet as a liability until you perform each service visit.
Here’s a simple example. You sell a maintenance contract in January for $300 that covers two visits, one in spring and one in fall. When the customer pays, you record $300 as cash in and $300 as deferred revenue. Your revenue stays at zero because you haven’t earned anything yet. When you complete the spring visit in April, you move $150 from deferred revenue into service revenue. Same thing when you complete the fall visit in October. Now the full $300 has been earned and your liability balance is zero.
This matters more than most HVAC owners realize. If you’re booking the full contract amount as revenue when collected, any month with heavy renewals looks artificially profitable. Then the months where your techs are actually out performing those visits show no contract revenue at all. Your monthly P&L becomes unreliable, and you can’t tell whether the business is genuinely profitable in a given month or just benefiting from collection timing.
The recognition method depends on how your contracts work. If the agreement covers a fixed number of visits, recognize revenue per visit. Two visits means half per visit. Four visits means a quarter per visit. If the contract is more of a monthly retainer that includes priority service and discounts, recognizing revenue evenly each month makes more sense. Pick the method that best reflects when you’re actually delivering value and stick with it.
In QuickBooks Online, set up a liability account called Deferred Revenue or Unearned Service Revenue. When you receive payment, record it to that account instead of an income account. As each visit is completed, create a journal entry moving the appropriate portion from the liability account to your service revenue account. It takes a few extra minutes per contract but the accuracy is worth it.
This is especially important if you’re growing your contract base. A business that goes from 50 contracts to 200 contracts in a year could show a huge revenue spike from collections that doesn’t reflect actual service delivery. Lenders and potential buyers look at this, and so should you when making hiring or equipment decisions. Skilled trades businesses that get this right have a much clearer picture of their real margins.
If your books currently lump contract payments into revenue when received, a cleanup is straightforward. Go through active contracts, figure out what’s been performed versus what’s still owed, and adjust accordingly. Phoenix bookkeeping services built around your specific business model can set this up properly from the start so your financials reflect reality every month.
Your Valley of the Sun Bookkeeper
The Next Step:
A Quick Conversation
Tell us what's going on with your books. We'll listen, ask a few questions, and give you a clear quote with no surprises.
More Questions
What expense categories should I set up in QuickBooks for a cleaning business?
Start with cleaning supplies as cost of goods sold, then set up operating expense categories for labor, vehicles, insurance, equipment maintenance, marketing, uniforms, licensing, phone, and office costs. You should also separate residential and commercial income if you do both.
Read answerHow do I handle bonding and insurance costs in my cleaning business books?
Surety bond premiums and general liability insurance are deductible business expenses that belong in their own categories. Workers comp should be allocated to labor costs rather than lumped with other insurance. Tracking each type separately gives you accurate job costs and cleaner books at tax time.
Read answerHow do I track labor costs for multiple crews working different job sites in my landscaping company?
Have every crew member log hours against a specific job site or customer daily using a time tracking tool that syncs with QuickBooks Online. Multiply those hours by your burdened labor rate to get true job costs, then compare actual labor to your bid to find which jobs are profitable and which crews are most efficient.
Read answerHow does fund accounting work for a nonprofit and why is it different from regular bookkeeping?
Fund accounting tracks money by restriction type rather than by profit. Every dollar gets classified as restricted or unrestricted based on donor intent, and expenses must be allocated across program services, management, and fundraising for Form 990 reporting.
Read answerWhat records do I need to keep for tax deductions on a residential cleaning business?
Keep receipts for supplies and equipment, mileage logs between job sites, payroll records, insurance policies, bank and credit card statements, and client contracts. Digital copies are fine as long as they're organized and accessible.
Read answerHow should a real estate brokerage track individual agent commissions and 1099 reporting?
Set up QuickBooks Online with classes or sub-customers for each agent. Track gross commission received, agent split paid, and brokerage retention per transaction, then use those records to generate 1099-NECs at year end.
Read answer