Case Study
How an $8M HVAC contractor uncovered $140K in misallocated overhead in 48 hours
This commercial HVAC shop was doing $8M+ in revenue. They had a full team, a packed schedule, and no idea which jobs were making them money. Here is how Level changed that. This is based on one real Level engagement; names are withheld and figures are adjusted for confidentiality.
$140K
Misallocated overhead identified in 48 hours
34 → 18 days
Invoice-to-payment cycle reduction
28
Operational data points in real-time dashboards
6 wk
Rolling cash flow forecast, reviewed weekly against actuals
The Challenge
$8M in revenue. Limited visibility into job-level profit.
Limited job-level costing
The P&L showed the business was profitable overall, but overhead, drive time, callbacks, and warranty work weren't broken out at the job level. Job margins were estimated, not measured.
Inconsistent expense tracking
Expenses were categorized inconsistently in QuickBooks, the chart of accounts had grown organically over years, and reconciliations were running behind.
60-day lag on financials
By the time the books were closed and the P&L was ready, the quarter was already over. Decisions were being made on gut feel, not data.
Cash flow surprises
Seasonal dips hit without warning. Big invoices sat unpaid for weeks. AR management was reactive, and the line of credit was the backup plan.
What We Did
From blind spots to real-time clarity
We connected to their existing systems, built a data pipeline, and had answers within 48 hours. No new software to learn. No months of onboarding.
Connected to their systems
We plugged into their field service platform and QuickBooks in under an hour. No IT department needed. Access to work orders, invoices, technician logs, customer records, and equipment history through vendor authorization, using read-only scopes or user permissions where available. QuickBooks accounting OAuth itself is not read-only; confirm the permissions and operational controls for each system.
Built a unified data pipeline
We ingested 28 operational data points from both platforms and normalized everything into a single financial model. Job costs, labor hours, material spend, overhead allocation, and revenue by customer, tech, and service type.
Deployed AI-powered financial dashboards
We stood up a dashboard that answers natural-language business questions. Instead of waiting for monthly reports, the owner could ask 'Which customers are profitable this quarter?' and get an answer in seconds, drawn from posted data and controller-reviewed allocation rules.
Ran a full profitability audit
Within 48 hours, we had job-level and customer-level profitability broken out with proper overhead allocation. That is when the surprises started.
Set up real-time job costing
We replaced the old close-the-books-and-hope approach with live job costing. Profitability is visible during the job as costs are posted, rather than waiting 60 days after closeout. Dashboard answers depend on timely inputs and controller review of allocation rules. If a job is trending unprofitable, the team knows before it is too late.
Built a 6-week cash flow forecast
Using historical patterns, AR aging, and seasonal trends, we built a rolling 6-week cash flow forecast designed to flag expected dips before they hit, and compared it each week with actual bank balances.
Results
The numbers speak for themselves
$140K
in misallocated overhead identified in the first 48 hours
Overhead was being absorbed by service calls instead of properly allocated to projects. Once we reallocated, reported service margins rose and reported project margins fell to a more realistic level, so both service and project pricing could be set on accurate costs. Total profit did not change; the pricing signal did.
#1 → #3
Their largest customer by revenue ranked third by margin after overhead allocation
High volume masked thin margins. After overhead allocation, two mid-size accounts were significantly more profitable per dollar of revenue.
34 → 18 days
invoice-to-payment cycle reduction
In this one adjusted engagement, invoice-to-payment days fell from 34 to 18, a 16-day (about 47%) reduction (measurement basis and window are not published), after AR aging dashboards, automated follow-up triggers, and priority flagging on aging invoices were added. Seasonality and customer mix were not isolated, so treat these changes as contributors, not proven sole causes. A shorter cycle is a one-time cash timing gain, not new recurring profit.
6-week
rolling cash flow forecast, reviewed weekly against actuals
Built on historical seasonality, AR aging curves, and project schedules, so seasonal dips are planned for rather than discovered in the bank balance. To score a forecast like this on your own books, compare each week-6 projected ending cash balance with the actual ending balance, and track the average absolute dollar miss over at least 8 to 12 weeks, adding a percentage measure only when actual balances are well above zero.
Which of our jobs and customers actually make money once overhead, callbacks, and warranty work are counted, and is our biggest account really our best one?
The question behind this engagement
Paraphrased owner question, not a direct quote
What the Data Revealed
What the numbers showed
Highest-revenue customer ranked third by margin after overhead allocation
Once overhead was properly allocated, the largest account by revenue ranked third by margin after overhead allocation. Volume was high, but callbacks, extended warranties, and gradual scope creep on service agreements had compressed margins over time. Two mid-size commercial accounts with less revenue but tighter scopes were generating better returns per dollar.
$140K in overhead was hiding in the wrong place
Overhead was being absorbed by service calls instead of allocated to construction and project work. That meant service margins looked worse than they were, and project margins looked better. The team was making pricing decisions on bad data. Service rates were too high (losing bids), and project bids were too low (winning unprofitable work). Fixing the allocation alone changed the way they priced every job going forward. To check this on your own books, here is a fictional example: $600K of shop overhead is charged entirely to $3M of service revenue, while $5M of project revenue carries none. Labor hours split 40% service and 60% project. Using labor hours as the driver, service is assigned $240K and projects $360K. Service margin after overhead rises by $360K / $3M = 12 points, and project margin falls by $360K / $5M = 7.2 points. Total profit is unchanged.
Real-time visibility changed behavior, not just reports
Once the team could see job profitability in real time, they started making different decisions. Service managers flagged jobs trending over budget before they closed out, not 60 days after. The office manager started prioritizing collections on the oldest invoices instead of the biggest ones. And the owner stopped guessing about cash flow and started planning around it. The data did not just produce better reports. It changed how the business operates day to day.
Based on a real Level engagement. Names are withheld and exact figures are adjusted to protect client confidentiality, the same discretion we bring to your data.
Simple pricing
Three tiers, one ladder.
$500+/mo
Bookkeeping
The clean data layer: monthly books, reconciliations, and organized financials AI can work with.
$1,500-$5,000/mo
Scale
The full AI operating layer: custom agents, weekly actions, and benchmarks to grow margin per hour.
Custom
Platform / Multi-Office
Multi-branch benchmarking and scorecards for PE-backed and multi-location groups.
Think your numbers might be off?
Same process we ran for this case study. 48-hour turnaround once system access is in place.
No commitment. Real numbers, not generic advice.