Profit & Grit CFOs

Table of Contents

Profit & Grit Podcast

The Home Service Podcast for Trades Entrepreneurs​

Share this article

HVAC Accounting: From Chart of Accounts to Month-End Close

Tyler Martin, CPA and fractional CFO

Tyler Martin

Tyler Martin, CPA is a fractional CFO for home service companies and the founder of Profit & Grit CFOs.

He built and sold a CPA firm, then built an engineering services company to $25 million in annual revenue before selling it. He hosts Profit & Grit podcast.

More about Tyler →

21 min read

It’s a fair question, and he’d been asking it for months before we talked. He assumed the answer was somewhere in his pricing, or that overhead had crept up on him. Sometimes it is pricing, and there is a method for working the price up from loaded cost rather than habit.

It was neither. The money was accounted for. His books just weren’t built in a way that could show him where it went.

That distinction is most of what I want to get across here. There’s a difference between having your numbers recorded and having them organized so you can understand them, and a lot of owners are sitting on the first one while thinking they have the second. Everything below is how you get from one to the other.

I’ll come back to what we found in his books a little further down, because the answer is a good illustration of why the structure matters so much.

Cash basis or accrual, and why it’s both

Let me clear something up first, because it confuses a lot of owners and it doesn’t need to.

Most home service companies file their taxes on a cash basis, and that’s usually the right call. If you carry receivables, filing on cash basis means you’re not paying tax on money you haven’t collected yet. In most cases it’s the more tax-efficient way to file, and I’m not suggesting you change it.

But how you file and how you understand your business are two different things.

Use accrual-based financials to run your company. If you want to know whether a month was actually good, whether a department is actually profitable, or whether a price increase actually worked, accrual is the only way to get a straight answer.

This is the whole foundation of the work I do with clients. It isn’t a technicality.

Here’s why it matters in practice. Accrual accounting matches your revenue to the costs that produced it, in the period the work happened. Cash basis records things when money moves, which is a different thing entirely.

When you’re on cash basis, your P&L gets lumpy. You’ll see a great month followed by a terrible one, and nothing in the field changed. What changed was when a supplier bill got paid, or when a customer’s check cleared.

I had an owner tell me this year, looking at a P&L that jumped around every month, that it shouldn’t fluctuate that much. He was right, and it wasn’t the business. He had roughly $125,000 owed to one supplier, about half of it paid and half of it still sitting. Depending on which month those bills landed in, he looked like a hero or a disaster. Neither was true.

Once we matched those costs to the months the work was done, the picture flattened out and started making sense. That’s all accrual does. It stops the calendar from lying to you.

Your tax preparer can still file you on cash basis. Those two things coexist fine, and every client I work with does exactly that.

Your chart of accounts is doing more work than you think

A clean, logical chart of accounts is often the difference between understanding your financial data and staring at it. It’s not glamorous, and it’s usually the first thing I look at.

The most common problem I run into is a chart of accounts that’s been turned into a list of who you paid. I’ve opened files with sixty vendors sitting in there as separate accounts. Every one of those carries through to the P&L, so the owner gets a profit and loss statement that’s pages long and impossible to read.

I’ve seen the same thing done with people. Every employee listed individually under wages, thirty or fifty names deep. Nobody can look at that and tell you what labor cost last month.

A chart of accounts isn’t a vendor report and it isn’t a payroll register. Those already exist elsewhere in your system. What you want is a structure that’s thorough enough to be useful and shallow enough to read on one screen.

Keep revenue simple and let classes do the work

You don’t need twenty income accounts. One or two broad lines will do, something like Services and Memberships. The trade-level detail comes from classes.

Your classes are your departments, and they should match how you actually run the business:

  • HVAC Service, HVAC Install, HVAC Maintenance and Memberships
  • Plumbing, and Drain or Sewer if that’s a separate crew
  • Electrical
  • Anything else you’d want a separate margin on, like duct and dryer vent work
  • An Admin or Corporate class for costs that don’t belong to any one department

This is what we turned on for the owner I mentioned at the top. Once his revenue and costs were split by department, the answer showed up in about a month. One part of the business had carried the growth and another had quietly absorbed most of the profit it produced. He’d been looking at a blended number the whole time, and a blended number can’t tell you that.

One practical warning. If your field system feeds QuickBooks, coordinate any class change with that integration before you make it. Rename a business unit on one side and not the other and the sync breaks, usually without telling you.

Cost of goods sold, and why you can’t compare it to anyone else’s

Before the structure, the caveat, because this one causes more confusion than anything else in trades accounting.

Cost of goods sold is an art, not a science. What one company puts above the gross profit line and what another company puts there can be wildly different, which makes comparing your GP to somebody else’s close to meaningless. If you run ServiceTitan, what lands in those buckets is decided by how job costing is set up.

The clearest example: plenty of companies don’t have direct labor in cost of goods at all. Then they’ll tell you at a conference they’re running 60% gross profit. Of course they are. They left out the biggest cost of delivering the work. It isn’t dishonest, they’re just measuring something different than you are.

So when you hear a number from another owner, the useful question isn’t what the percentage was. It’s what they put in the bucket.

Here’s the structure I build:

COGS accountWhat lands there
MaterialsJob materials and supplies
EquipmentUnits and major components
LaborField labor only
Payroll tax, direct laborEmployer tax on field wages
CommissionsSales commissions on the job
Shipping and taxFreight and non-recoverable tax
RestockingReturns and restocking fees
SubcontractorsAnything you hired out

Commissions belong there because selling the job is a direct cost of the job. Merchant fees and financing charges are a judgment call, and I’ve seen them handled both ways. If a meaningful share of your work is financed, putting those fees in cost of goods gives you a truer margin. Just pick one treatment and stay with it, because switching halfway through a year makes your own trend useless.

Fix the labor lines first

Three changes I make on almost every engagement:

Rename “Wages” to “Direct Labor.” The wording matters more than it sounds like it should, because a generic wages account invites office payroll to drift into it over time.

Group wages, payroll tax and benefits so they subtotal together. You want to see one fully loaded payroll number in your cost of goods section instead of three lines you have to add up yourself.

Keep office payroll below the line. Admin and office wages belong in Salaries and Wages under overhead, and employer payroll tax follows whatever wages it was charged on.

One judgment call worth sharing. I’ve classified sales apprentices as overhead rather than direct labor while they’re still training, on the basis that they’re a sales investment before they’re a producing cost. You could argue it the other way. What matters is deciding once and applying it the same way every month.

Number the accounts so they stay organized

Giving related accounts a numbered hierarchy keeps new ones from landing wherever somebody happens to click. Marketing is the clearest case: a 4000 parent, then 4001 for mailers, 4002 for paid search, and so on. When somebody asks whether the mailers are working, that’s a line item instead of a research project.

Vehicles is the other one worth doing. Wash, road service and repairs tend to scatter until somebody pulls them together under vehicle repairs and maintenance.

If you want the fuller version of what belongs where and how it moves your margin, that’s in what good HVAC profit margins look like.

Inventory and truck stock, the line most shops skip

Almost every set of books I open expenses inventory the moment it’s purchased. Material gets bought, it hits cost of goods, done. It feels simple and conservative.

It also misstates your gross profit every month.

One client had $25,000 of inventory on the balance sheet and somewhere between $60,000 and $70,000 physically sitting in the warehouse. Everything above that $25,000 had already been run through cost of goods. The effect was about three points of gross profit. The books showed 44.7% when the truer number was closer to 47.1%.

Three points sounds academic until you hear what it cost that team. Bonuses were held back that period because gross profit looked too low to pay them. People missed money they’d earned, because of an accounting choice nobody had revisited in years.

We’re putting inventory that’s sitting in the warehouse into cost of goods right now. Then we’re misstating our gross profit.

It scales badly too. Another client had over $240,000 in the warehouse plus $50,000 to $100,000 in truck stock, and none of it was on the books. A third had $300,000 to $350,000 unbooked, including about $80,000 of equipment bought ahead of an announced 8% supplier increase. Buying early to beat a price rise is a smart move. Expensing it the day it lands turns a smart move into a bad month on paper.

If a full inventory system is more than you want

Most shops under $10M aren’t going to run perpetual inventory, and I’m not going to pretend that’s a realistic ask. Here’s the middle ground I use:

Put a standing value per truck on the balance sheet, add a reasonable warehouse figure, and true both up every three to nine months with a physical count.

As a starting point, $4,000 to $7,000 per truck is a range I’ve seen work, but treat it as a conversation starter rather than a rule. It depends heavily on how your trucks are stocked, what trades you run, and where you are. A plumbing truck in a dense metro carries a different load than an install truck two hours from the supply house. Count one of yours and use that.

How the work becomes a ledger entry

Your field system knows what happened. Your books know what got recorded. The gap between those two is where a lot of trouble hides.

I reviewed one month where QuickBooks showed about $60,000 of revenue and the field system showed roughly $343,000. The difference was around 730 transactions that had posted but never exported. They were sitting in a queue nobody had been asked to watch.

When they don’t export, there’s no revenue showing in QuickBooks.

That risk varies by platform and by how the implementation was done. What each field service system does to your accounting goes through the differences.

Two things prevent this.

The mapping has to match exactly. A business unit called “HVAC Service” on one side and “Service Field” on the other will block the export. A membership revenue account that exists in the field system but not in QuickBooks will block it too. It has to match to the letter.

As a general rule, don’t use bypass export. It clears the queue without moving the transactions, and you can’t undo it. There are narrow cases where it makes sense, usually old transactions that were already entered into QuickBooks by hand and just need to come off the queue. But you need to know exactly what you’re looking at before you touch it, and if you’re not sure, ask someone.

The rule I give clients is simple. If you change something in the field system that’s accounting in nature, something probably has to change in QuickBooks too, or you’ve broken the chain between them. Why ServiceTitan and QuickBooks stop matching walks through the specific failure points.

Maintenance agreements and deferred revenue

If you sell agreements, the money shows up before the work does. Until you deliver, that’s a liability rather than revenue.

Agreement revenue sits in deferred revenue and releases as each visit gets completed. A plan covering a heating visit, a cooling visit and a water heater flush is three separate recognition events, and if a visit never gets attached to a completed job, the schedule drifts quietly.

Here’s the check that catches it. If your balance sheet says you’re carrying $35,000 in deferred revenue, you should be able to pull a report out of your field system showing exactly what makes up that $35,000. Agreement by agreement, visit by visit.

If nothing supports the number, the number is a guess. Run that report monthly and compare it. It takes a few minutes and it’s the single best control on this part of your books.

If recurring revenue is how you steer the business, give membership its own line on the P&L so it’s impossible to miss. The mechanics are in how to account for HVAC maintenance agreements.

Sales tax

Sales tax problems stay hidden longer than anything else on this list, because nothing looks wrong until a notice shows up.

The process itself is short. Close the accounting period first. Then pull your field system’s tax zone report as your control total, compare it to what QuickBooks says, and true up the difference. The order matters more than people expect. Run that report before the period is closed and it comes back empty or partial, which is why a lot of owners conclude it’s broken and stop using it.

The failure to watch for is transactions from an earlier period getting pulled in after you’ve already filed. That creates a gap in what you owe, and it grows quietly. One client had a setup that underreported for roughly a year, about $8,000 owed against a $3,000 credit, so around $5,000 net with penalties possible on top.

One habit worth building: any time you change how tax is calculated in the field system, write down the date. Most of the exposure I find traces back to a setting that changed at some point, and a filing history that assumes it never did.

Accounting for plumbers, electricians and roofers

Most of what’s above applies whatever trade you run. The chart of accounts, the close, the inventory question, the deferred revenue on agreements. None of that is specific to heating and air.

What changes is the detail inside the structure.

Accounting for plumbers has a couple of wrinkles HVAC doesn’t. Drain and sewer usually belongs in its own department, because the margin profile looks nothing like service plumbing and lumping them together hides which one is carrying you. Truck stock is the other one. A plumbing truck tends to carry more items at lower cost each, which makes a standing per-truck inventory number harder to hold steady. Count one truck properly before you set it.

Electrical runs into something different. More of the work is project-based, so the gap between spending and billing stretches out. If you’re running panel upgrades or service changes that span weeks, cash basis will make your months look random, and the deferred revenue conversation matters more than it does on a service-heavy HVAC book.

Roofing sits furthest from HVAC of the three. Job sizes are larger, material is a bigger share of each job, and progress billing shows up often enough that it has to be handled deliberately rather than as an exception.

The principle holds across all of them. Build the chart of accounts around how you actually run departments, keep field labor and its burden in cost of goods sold, and close monthly so the comparison means something. The trade changes what sits in the buckets. It doesn’t change what the buckets are.

When you inherit a mess, fix it in this order

Everything above assumes you’re starting from something clean. Often you’re not, and that’s not a judgment. Books drift, people leave, systems get bolted on. Here’s what I look for first, because these come up again and again:

  • Opening balance equity with a number in it. I’ve opened files with $78,000 sitting there. It’s a holding pen QuickBooks uses during setup, and it should be zero. Whatever’s in it never got assigned anywhere.
  • Bank accounts that haven’t been reconciled in months. Sometimes years. Until those are done, nothing above them can be trusted.
  • Negative vehicle loan balances. Payments recorded against a liability that was never set up right, so the loan now reads as an asset.
  • Undeposited funds that only grow. It’s a clearing account. It should empty out.
  • Field system receivables that don’t match the books. I’ve seen $133,000 on one side and $42,000 on the other.

The order you fix them in matters as much as the list, because going out of order means doing the work twice.

Order of operations: accounts payable and the data entry workflow first, then the field system integration, then the balance sheet, and the P&L last.

The logic is that your P&L sits downstream of all of it. Clean it up first and next month’s bad data undoes the work. Fix how transactions get in, fix what flows in automatically, correct the balances they land against, and the profit and loss statement largely sorts itself out.

Give this a few months rather than a weekend. A decade of drift doesn’t reverse in one close.

The accounting calendar

Good books are a rhythm more than a project. This is the schedule I hold clients to:

WhenWhat happens
WeeklyCategorize transactions, clear the export queue, look at AR
MonthlyClose by the 10th, tie the field system to the books, review margin by department
QuarterlyTrue up inventory and truck stock, reconcile sales tax, revisit labor burden
AnnuallyReview the chart of accounts against how the business actually runs now

About that closing date

The 10th is the part people push back on, and I’ve heard the same justification enough times to name it. Companies closing on the 20th or the 25th will tell you the close date doesn’t really matter, because they spend their meeting on the forecast rather than the month that just ended.

I don’t buy it. I’ve almost never seen a company actually do that. It’s a reason offered after the fact for a close that slipped, and I’d rather be straight with you about it than nod along.

Forecasting matters, and you should absolutely be doing it. But it doesn’t replace knowing what happened. A guest put it well on the podcast: when you get the data after the fact, you don’t get halftime and you don’t get an adjustment. The harder it is to react to a number, the more it matters that the number shows up on time.

The month-end close checklist is the detailed version of getting there.

What you should be getting out of it

If the structure above is in place, here’s what should land on your desk every month:

  • P&L by department. Which part of the business made money, not the company average.
  • Gross margin by department. Look at it monthly, and when it moves, go find out why. A spike or a drop is information. I’ve had clients where the answer was a run of recalls, or a big equipment buy that should have gone to inventory. You only catch those if you’re looking every month and asking about the changes.
  • Balance sheet with inventory on it and clean AR. How to read one without being an accountant.
  • AR aging. Revenue you booked and haven’t collected isn’t revenue yet.
  • Labor as a percentage of revenue, by department. Usually the earliest warning you get. Whether your technicians are profitable starts here.

If you can’t produce that set in under an hour, the problem is the structure rather than the effort.

Who should be doing this work

A bookkeeper records what happened and keeps it current. A controller makes sure it’s right and owns the close and the reconciliations. A CFO uses it to decide what happens next: pricing, hiring, capital, an eventual sale. Which of the three you need depends on your size and what is actually broken, and I compared them side by side in bookkeeper vs controller vs fractional CFO.

Most companies in the $3M to $15M range have the first role covered and the other two open. That’s why the books can be current and still not answer the question the owner is asking.

Whether the recording layer is holding up is its own question. How to tell if your bookkeeping is any good has the four checks I use.

That middle layer is most of what I do. Sometimes that means my team handles the bookkeeping outright. More often you already have a bookkeeper or a small accounting team, and I come alongside them, take on the harder parts of the close, and make sure it lands on time and ties out. Once that’s steady, we can spend our time on the strategy conversations instead of asking whether the numbers are right.

If your books are current and you still can’t tell which department made money last month, let’s have a conversation.

Questions owners ask

What does accounting for an HVAC company actually involve?

Beyond recording transactions, it means a chart of accounts built around your departments, field labor and its burden sitting in cost of goods sold, inventory carried on the balance sheet instead of expensed when you buy it, agreement revenue deferred until the work is delivered, and a monthly close that ties your field system to your books. The tax filing is a byproduct. The point is getting a P&L you can make decisions from.

Should an HVAC company use cash basis or accrual accounting?

Both, for different purposes. File your taxes on cash basis if that’s what your preparer recommends, which for most home service companies it is, because you’re not paying tax on money you haven’t collected. Then do accrual-based accounting for the financial statements you actually manage from. Accrual matches your costs to the work that created them, so a good month looks good for the right reasons. The two coexist without any conflict.

How should an HVAC company set up its chart of accounts?

Keep revenue to one or two broad accounts and use classes for department detail: HVAC service, install, maintenance, plumbing, electrical. Under cost of goods sold, build out materials, equipment, direct labor, payroll tax on that labor, commissions, freight, restocking and subcontractors. Rename any generic wages account to direct labor, and keep office payroll below the line. Avoid turning the chart of accounts into a list of vendors or employees, which makes the P&L unreadable.

Do I need to track inventory in my HVAC business?

At least approximately, yes. Expensing material the day you buy it understates your gross profit, and I’ve watched that cost a team their bonuses. If perpetual inventory is more than you want to take on, put a standing value per truck on the balance sheet along with a warehouse estimate and true it up every three to nine months. What that per-truck number should be depends on your trades, how you stock, and where you operate, so count one of your own rather than borrowing somebody else’s figure.

What accounting services does an HVAC company actually need?

Transactions recorded weekly, a close by the 10th, reporting at the department level, a monthly tie-out between the field system and the books, quarterly inventory and sales tax true-ups, and somebody reviewing margin by department who can explain why it moved. Most shops have the first item handled and not much of the rest.

Why does my profit look so different from month to month?

If you’re managing from cash basis numbers, that’s usually the answer. Cash basis records things when money moves rather than when the work happened, so a supplier payment landing a few days early or late can swing a month. Accrual accounting is what smooths that out, because it puts the costs in the same period as the revenue they produced. If you’re already on accrual and it’s still bouncing around, then look at inventory being expensed on purchase, or transactions stuck in an export queue.

Talk to a fractional CFO about your HVAC accounting

Real Talk.
Real Profits.

A weekly show built for blue-collar entrepreneurs in the trades who want to grow, profit, and build something that lasts.

You’ll only hear from us when new episodes drop.
No spam, ever!

GET STARTED

Want to see what your numbers are actually telling you?

 Two ways to start. Pick whichever fits.

No pressure either way. Let’s chat!

Latest Podcast Episodes:

More Great Articles: