
About UsPricingReviewsContact UsClient Portal loginBook a Free 30-Min Call
Last updated: October 18, 2026
Clean HVAC bookkeeping has to deliver three things: accurate job-level profit on every service call and install, a cash runway you can see coming, and GST/HST compliance that survives an audit. Most HVAC books fail at the first one because labour and materials get lumped into one account, hiding which jobs actually make money. The fastest fix is to reclassify technician labour as cost of goods sold and start a 13-week cash forecast this week, or bring in a CPA who has rebuilt books for trades before.
TL;DR:
- Reclassify technician wages as cost of goods sold and implement a 13-week cash forecast to improve profit visibility and cash planning.
- Track job costs precisely by assigning labor, materials, subcontractors, and overhead to each job at purchase or invoicing to accurately measure profitability.
- Use a detailed chart of accounts separating costs into specific groups and manage inventory and equipment as assets to maintain accurate margins and depreciation schedules.
- Maintain a monthly close process within the first ten business days, including critical reports like profit and loss by service line, job margins, cash forecast, and receivables aging.
- Connect field systems to your accounting software to ensure accurate, real-time data flow, and enforce strict internal controls on deposits, inventory, and expenses to prevent errors or fraud.
Generic bookkeeping treats a business as one revenue stream with one set of costs. HVAC contractors run two distinct business models under the same roof, and each one needs its own cost structure.
Service tickets are short cycle work: a technician diagnoses a furnace, swaps a part, bills an hour or two of labour plus a markup on the part. Install projects are the opposite. A full system replacement might run for days, involve subcontracted electrical or ductwork, tie up thousands of dollars in equipment before you ever bill the customer, and depend on manufacturer lead times you don’t control. NAICS Canada’s classification for plumbing, heating and air-conditioning contractors groups both activities under one industry code, but your accounting can’t treat them the same way.
That structural split creates real timing problems:
The result: owners look at a healthy bank balance and a profitable-looking income statement, then discover at tax time that half their install jobs lost money. Job-level detail is the only way to catch that before it repeats.
Job profitability comes down to four cost buckets tracked against every job number: labour, materials, subcontractors, and allocated overhead. Miss one, and the profit number you’re looking at is fiction.
1. Labour, fully burdened. Raw wages understate the real cost of a technician by a wide margin once you add CPP and EI employer contributions, vacation pay, WCB/WSIB premiums, benefits, and paid non-billable time like drive time and training. A technician earning $32 an hour can easily cost $42 to $46 an hour once burden is added. Time capture needs to happen at the job level, ideally through a mobile app or FSM tool that pushes hours directly against a job number rather than a general timesheet.
2. Materials, tracked to the job at purchase. Every parts purchase order and inventory pick should carry a job number from the moment it’s ordered, not when the invoice arrives weeks later. Vendor invoices get coded to the same job code used in your field system, so a $1,200 compressor purchase lands against the install it belongs to.
3. Subcontractors, coded the same way. Electrical or ductwork subs get invoiced against the job, not lumped into a general “outside services” account.
4. Overhead, allocated by a consistent rule. Vehicle costs, tools, and shop overhead should be allocated to jobs using a fixed method, such as a percentage of labour hours, applied consistently month to month.
Once those four buckets post correctly, a job-profitability report becomes simple: revenue billed minus the four cost buckets equals gross margin per job. Sort that report by margin percentage and the jobs running below breakeven jump out immediately, whether that’s a specific install type, a specific technician’s ticket average, or a customer segment that keeps negotiating discounts you can’t afford.

Pro Tip: Run the job-profitability report by service line, not just by job. A single unprofitable commercial install can hide inside a profitable residential service month if you only look at the company-wide total.
The chart of accounts is where most HVAC bookkeeping breaks down before job costing even starts. Technician labour has to post to cost of goods sold, not to a general “wages” expense account below the gross profit line. If labour sits in operating expenses, your gross margin looks artificially high and every pricing decision built on that number is wrong.
A working structure separates costs into distinct groups rather than one blended “Cost of Sales” line:
Inventory needs its own discipline. High-value equipment like furnaces, rooftop units, and heat pumps should be tracked as inventory assets until installed, not expensed on purchase. Regulated refrigerant is a separate concern entirely: track it by cylinder or unit for both cost control and the traceability regulators expect, and do a physical count monthly rather than relying on purchase records alone.
Cloud accounting platforms handle this through tracking categories or classes. Xero’s tracking categories let you tag every transaction by division (service versus install) and by job, which is what turns a standard profit and loss statement into something you can actually manage the business with. The mapping only works if every invoice, bill, and payroll entry carries the same job code your field team uses. Inconsistent job numbers between systems is the single most common reason job-cost reports come out wrong.

A monthly profit and loss statement tells you what happened. It does nothing to warn you that payroll is due Friday and your biggest receivable won’t clear until the following week. A 13-week rolling forecast, updated weekly, catches that gap before it becomes an emergency, which matters more for HVAC than most trades given how unevenly equipment purchases and customer deposits land in the calendar.
Three things make the forecast work:
Job-level costing shows that a meaningful share of HVAC jobs run below breakeven once labour and overhead are properly burdened, and that pattern shows up faster in a weekly cash forecast than in a monthly statement that lags reality by three or four weeks. The trigger point is simple: if the forecast shows a negative cash week within the next four to six weeks, that’s the signal to chase receivables, delay a discretionary equipment purchase, or draw on a reserve, not wait for the bank balance to actually go negative.
Job-cost reporting is only as good as the data flowing into it, and that data comes from four kinds of systems that need to talk to each other cleanly: field service management (FSM) and dispatch software, time capture tools, inventory and parts control, and your cloud accounting platform.
Three data flows matter more than the rest:
The failure mode here is what practitioners call sync drift: your FSM system and your accounting system technically connect, but job IDs don’t match exactly, so reports quietly diverge over a few months until nobody trusts them anymore. QuickBooks Online and Xero both support bank feeds and invoice automation that reduce manual entry, and a receipt-capture tool like Dext cuts down the coding errors that come from someone typing vendor invoices in by hand weeks after the fact. Pick one system as the single source of truth for job numbers, usually the accounting platform, and enforce it everywhere else.
The Canada Revenue Agency expects specific documentation behind every job, and “specific” means more than a shoebox of receipts. Keep vendor invoices, delivery slips, signed job tickets, payroll records, and bank statements for at least six years, since that’s the standard period the CRA can request records for review.
GST/HST treatment for HVAC contractors follows the rules in CRA’s guidance for the home construction industry, which covers registrants supplying construction-related goods and services. Once registered, you generally charge GST/HST on both labour and materials for taxable supplies, and you can claim input tax credits (ITCs) to recover the GST/HST paid on business purchases, from parts and equipment to vehicle expenses. Missing or poorly coded vendor invoices are the most common reason contractors under-claim ITCs they’re entitled to.
Deposits complicate this further. A deposit collected before work starts isn’t necessarily GST/HST-reportable revenue the moment it lands in your account, and how you record it affects both your cash forecast and your remittance timing. As a rule, hold deposits as a liability until the work is substantially performed, then recognize the revenue and the associated tax at that point rather than at the moment of collection.
A monthly close that takes three weeks to produce is one nobody uses for decisions. Aim to close the books and generate four reports within the first ten business days of the new month:
Four KPIs deserve a monthly look from the owner directly, not just the bookkeeper: job gross margin by service line, your fully burdened labour rate versus what you’re actually billing, days sales outstanding (DSO) by customer type, and the percentage of jobs running below breakeven.
| Report or KPI | Who reviews it | Decision it should trigger |
|---|---|---|
| Job-cost report | Owner/manager | Reprice or drop underperforming job types |
| 13-week cash forecast | Owner | Chase receivables or delay a purchase |
| A/R aging by customer type | Office manager | Tighten deposit or payment terms |
| Burdened labour rate vs. billed rate | Owner | Adjust hourly rates or crew mix |
Outsourcing usually pays for itself once monthly revenue climbs past roughly $50,000 to $75,000, or once you’re running install crews alongside service technicians and the job-cost math gets too tangled to track in a spreadsheet.
A specialist engagement should deliver specific, checkable outcomes:
Pro Tip: Measure success by whether your books close by the 10th business day, whether the share of jobs below breakeven is shrinking month over month, and whether you can state your cash position for the next six weeks without opening a spreadsheet.
Vehicles and equipment are two of the largest recurring cost categories in an HVAC business, and both get mishandled the same way: lumped into a general “vehicle expense” or “tools” account with no link back to which truck, which technician, or which job drove the cost.
Track vehicles individually, by unit or licence plate, covering fuel, maintenance, insurance, and lease or loan payments. That level of detail lets you see whether an aging service van is costing more in repairs than a replacement would, a decision that’s invisible in a blended account. For tax purposes, keep a mileage or usage log distinguishing business from personal use, since the Canada Revenue Agency expects that split to support any vehicle expense claim.
Major tools and equipment, from diagnostic gear to lift equipment, belong on a fixed-asset schedule with purchase date, cost, and expected useful life, not buried in a one-time expense entry. That schedule feeds your depreciation calculations and gives you a running picture of your capital base without digging through old invoices.
Smaller consumable tools and shop supplies can stay in a simplified supplies account, but set a dollar threshold, commonly $500 to $1,000, above which an item goes on the fixed-asset schedule instead. Review both the vehicle and equipment schedules quarterly. A tool that’s been repaired three times in six months is telling you something a monthly P&L will never show.
Warranty work is where profitable-looking job-cost reports quietly go wrong. A callback under manufacturer or workmanship warranty still consumes technician hours and parts, but if that labour and material cost gets buried in the original job’s numbers, the job looks less profitable than it actually was, and you lose the ability to see how much warranty work is really costing you.
The fix is a dedicated warranty labour and warranty parts account inside your COGS section, separate from standard service and install costs. Every warranty callback gets its own job code, linked back to the original install or service ticket for traceability, but tracked financially on its own line.
This separation answers two questions you need answered every month: how much warranty exposure is coming from a specific equipment brand or supplier, and how much is coming from your own installation quality. If warranty costs on a particular brand of furnace are climbing, that’s a conversation with your supplier about compensation or credit, not an absorbed cost that disappears into overhead.
When a warranty claim results in a parts credit or reimbursement from a manufacturer, record it against the original warranty job code, not as miscellaneous income. That keeps your warranty cost trend accurate instead of artificially improved by credits that landed in the wrong account. Review warranty costs as a percentage of total install revenue monthly. A number that’s climbing is often the earliest signal of a quality or supplier problem, well before customer complaints make it obvious.
HVAC payroll carries a few wrinkles that standard payroll processing doesn’t always handle well: a mix of hourly technicians, salaried managers, and sometimes piece-rate or commission-based installers, plus overtime rules that vary depending on job type and provincial employment standards.
Every payroll run needs to correctly calculate and remit CPP, EI, and applicable provincial payroll taxes, along with WCB or WSIB premiums that apply specifically to trades and construction-related work. Misclassifying a technician as a subcontractor when the working relationship actually meets the criteria for an employee is one of the more expensive mistakes in this industry. It exposes the business to reassessed payroll remittances, penalties, and interest going back years, not just for the current filing period.
Overtime tracking matters more in HVAC than in office-based businesses because of on-call rotations, emergency service calls, and seasonal surges where technicians routinely exceed standard hours. Provincial employment standards set the specific overtime thresholds and rates, and those rules need to be built into your time-capture system, not calculated manually after the fact.
Vacation pay, statutory holiday pay, and any benefits or health spending accounts you offer also need to flow into the burdened labour rate used in your job costing. If payroll compliance and job costing run as two disconnected processes, your labour burden calculation will drift out of accuracy every time a rate or remittance rule changes. Setting up your CRA payroll account correctly from the start avoids most of the downstream cleanup.
Service tickets and installation projects need different revenue recognition treatment, and applying the wrong one to either distorts both your monthly profit and loss statement and your tax filings.
A standard service call is straightforward: revenue is recognized when the work is completed and billed, generally within the same visit or the same week. Installation projects are different, especially larger commercial jobs that span days or weeks and involve deposits collected upfront.
As covered in the cash-flow section, a deposit collected before work begins is a liability, not revenue, until the work is substantially performed. For a multi-day install, that might mean recognizing revenue in stages as milestones are completed (equipment delivered, rough-in complete, final commissioning done) rather than all at once at the end. This staged approach keeps your monthly P&L aligned with the actual work performed in that period, instead of showing a revenue spike in the month you happen to invoice and a cost spike in the month before when the labour and materials were actually consumed.
Service contracts, such as annual maintenance agreements billed upfront, follow yet another pattern: recognize that revenue over the life of the contract rather than in the month you collect payment. A twelve-month maintenance plan paid in full in January should show roughly one-twelfth of that revenue each month, not the full amount in January and nothing for the rest of the year. Getting this wrong is one of the most common reasons an HVAC company’s monthly numbers swing wildly for reasons that have nothing to do with how the business is actually performing.
HVAC businesses handle enough cash, deposits, and inventory that basic internal controls aren’t optional, even for a small team. The most common exposure points are customer deposits, petty cash for parts runs, and inventory shrinkage on high-value equipment and regulated refrigerant.
Separate the people who collect money from the people who record it wherever your staffing allows. If the same person who takes a customer deposit also enters it into the accounting system with no second check, that’s an opening for errors or, less often, deliberate misstatement to go unnoticed for months. Even a two-person office can build in a simple check: someone other than the person who collected a deposit confirms it was recorded correctly within the week.
Require purchase orders for any parts or equipment purchase above a set threshold, and match every vendor invoice against a PO and a delivery confirmation before it’s approved for payment. This single habit closes most of the gap where inflated or duplicate vendor invoices slip through unnoticed.
Bank reconciliation should happen monthly at minimum, and ideally reviewed by someone other than whoever manages day-to-day bookkeeping entries. Reconcile physical inventory counts, especially refrigerant cylinders and high-value units, against your books quarterly rather than annually, since shrinkage on expensive equipment is much easier to catch and address early than to unwind after a full year has passed.
Most HVAC owners don’t need a full bookkeeping overhaul to see immediate improvement. Three changes, done in the next one to two weeks, move the needle fastest: reclassify technician labour to COGS so your gross margin reflects reality, start a 13-week cash forecast even if it’s rough at first, and require deposits on every install with clear liability treatment from day one. Engagements built around flat-rate deliverables rather than hourly billing keep the incentive on getting your books usable, not on running the clock.
— Wajahat Ajmal (CPA)
T-Ledgers Accounting is the flat-rate alternative to hourly bookkeeping bills that climb every time your job volume does. Instead of paying more as your business grows, you pay one predictable fee for bookkeeping, job-cost setup, and GST/HST filing, with virtual CFO support layered in when you need forecasting and pricing guidance rather than just monthly entries.

Onboarding starts with a review of your current chart of accounts and job-cost structure, followed by a rebuild that separates burdened labour, materials, subcontractors, and overhead the way this guide describes. You’ll see your onboarding deliverables and timeline laid out upfront, so there’s no guessing what “done” looks like. Most clients see their first clean, job-level profitability report within the first full month.
If your books currently tell you revenue and nothing else, book a conversation about virtual CFO services and find out what a properly built job-cost system would show you about your business today.
For source-level detail beyond this guide, review the Canada Revenue Agency’s GST/HST guidance for home construction, NAICS Canada’s classification for HVAC contractors, and product pages for QuickBooks Online, Xero, and Dext for system capability specifics. Contractors weighing marketing spend alongside their financial systems can also review Honey Badger SEO’s guidance for contractor lead generation.
No. AI tools speed up data entry and receipt capture, but job costing, burden rate calculations, and tax judgment calls still need a person who understands the trade and the CRA rules behind the numbers.
Hourly bookkeeping rates in Canada vary widely by region and experience level, which is exactly why flat-rate pricing has become attractive to HVAC owners who want a predictable cost regardless of transaction volume.
There’s no single best platform. QuickBooks Online and Xero both support the tracking categories and bank feed automation HVAC job costing needs, and the right choice depends on which one integrates cleanly with your existing FSM and dispatch software.
The strongest option is whichever field service platform pushes invoices directly into your accounting system with the job number attached, since manual re-entry is where most job-cost errors start. Pairing that with a receipt-capture tool like Dext further reduces coding mistakes on the materials side.
Update your 13-week rolling forecast weekly. HVAC cash timing shifts fast enough, between deposits, equipment purchases, and seasonal swings, that a forecast older than a week stops reflecting reality.
This article is intended to inform readers in general terms. It is not intended to provide any tax or business advice. Please consult your T-Ledgers advisor if you have any questions about your unique situation. While we have tried to ensure the accuracy of the information in this article, we accept no liability for errors or omissions.
Disclaimer: The articles, calculators and other content on this website are general information only, not tax, accounting, legal or financial advice. Calculator results are estimates based on the rates and assumptions shown and may not match your situation. Tax rules change and depend on your province, business structure and the facts of your case, so speak with a CPA, and a lawyer where legal matters are involved, before acting. T-Ledgers accepts no liability for decisions made based on this information. Book a free consult with T-Ledgers.