Cash Flow

Why Am I Busy But Not Making Money? The Profitable-on-Paper Cash Trap

May 14, 20266 min read

If you're running a $1-3M contracting business and you've ever stared at a packed schedule on a Monday morning wondering why payroll feels tight on Friday, you're in the most common pattern I see in trade contractors. The schedule is full. Revenue is the best it's ever been. And the bank account is somehow always tighter than it should be.

The frustrating part is that everything looks fine on paper. Your P&L shows healthy revenue. Your accountant tells you the year is going well. And yet you keep stretching to make payroll, you can't quite save for the truck you need, and the question "are we actually making money?" feels uncomfortable to ask out loud.

Here's the honest answer: you're probably making money on most jobs and losing money on enough of them to drag the whole business sideways. And because QuickBooks only shows you totals, you can't see which is which.

The Pattern: Profitable on Paper, Tight on Cash

Profit and cash are not the same thing. Profit is an accounting concept — revenue minus expenses over a period. Cash is what's actually in your bank account on the day payroll is due. You can be profitable for the quarter and still bounce a check if your cash timing is wrong.

For contractors, the gap between profit and cash usually comes from three sources that compound:

  1. Job-level losers hiding inside the average. Your overall gross margin might be 38%. But that's an average. A few jobs at 55% margin are subsidizing a few jobs at 15% margin (or negative). You can't tell which is which because nobody is computing per-job profitability with materials, labor, callbacks, and overhead all in one view.
  2. Slow customer payments stretching DSO. You pay your crew this week. You pay your supplier on net 30. The customer pays you on net 45 (or 60 if you don't chase). The gap is real cash that you're financing personally, and it grows linearly as revenue grows.
  3. Overhead creep nobody's tracking. The truck payment is fine. Insurance went up 12% in January. The new dispatcher is a great hire. Each individually justified; together, a meaningful overhead jump that nobody's allocating per job, so per-job margins look better than they really are.

The Single Question That Surfaces the Real Issue

If you can answer this question for last month, you'll know exactly where the leak is: "Of every job we closed last month, which ones actually made money — and how much?"

Not your overall margin. Not your top-line revenue. Per-job profit, with real materials cost (including the supplier price update you forgot about), real labor cost (with loaded burden, not base wage), real callbacks (the ones that cost you a tech revisit and a refrigerant top-off), and allocated overhead.

Most contractors at $1-3M can't answer that question in less than a week of spreadsheet work. The honest answer for most of them, when they finally get there: 20-30% of jobs were less profitable than expected, and 5-10% lost money outright. Those are the jobs eroding your cash.

Why QuickBooks Won't Tell You

QuickBooks is brilliant at recording transactions. It tells you that a $4,200 invoice from your refrigerant supplier hit on the 15th. It does not tell you that $200 of that refrigerant went into a callback on a job you closed three weeks ago, that the original install bid assumed $160 of refrigerant, that the callback also cost you 2 hours of tech time at $85/hr loaded, and that the job's actual margin is therefore 6 points below what you priced it at.

That kind of analysis isn't what bookkeeping software is for. It's what a controller does. And until recently, the only way to get that analysis at a $1-3M shop was to hire a part-time controller for $3,000-5,000/month or to do it yourself in spreadsheets that never quite stay current.

What Changes When You Can See Per-Job Profit

Here's what shifts the week you start tracking real per-job profit:

Bidding gets sharper. When you can see that your last five AC changeouts averaged 41% margin and a specific competitor type came in at 32%, you stop bidding work that drags the average down. You either reprice it or stop selling it.

You catch leaks in real time. A job trending 15% over materials estimate at the halfway mark gets flagged. You call the supplier, find out about the price update, and roll it into the next ten bids before they cost you anything.

Cash forecasting becomes possible. Once you know which jobs are profitable and when they invoice, you can forecast cash 90 days out — including the cooling-to-heating transition for HVAC, the storm-work slowdown for roofing, the Q1 dip for general contracting. You stop being surprised.

Your conversations with your accountant change. Instead of "the year is going well", you can ask "is the maintenance contract tier we added in March pulling its weight?" and get a specific answer.

The Practical Way Out

You don't need a six-figure controller. You don't need a custom-built spreadsheet. You need a system that plugs into your QuickBooks data and shows you real per-job profitability automatically, in plain English, every week.

That's exactly what Accomptant does. It's built for $1-3M trade contractors. Plugs into QuickBooks in about 10 minutes. Shows you per-job profit on every install and service call. Forecasts cash 90 days out. And lets you ask plain-English questions like "which jobs lost money last month?" and get an answer in seconds. $149/month, not $3,000.

If "busy but not making money" is the story you've been telling yourself, it's not because you're working harder than the market can support. It's because a handful of jobs are quietly costing you the year, and the system you're using to track it can't see them. Fix that, and the same schedule starts producing the cash it should.

See Accomptant in action

Start your free 14-day trial. No credit card required.