HVAC

You're Losing $10K+ a Year in Unbilled HVAC Labor

When techs guess their hours at the end of the day, you lose 15% or more of billable time. Automatic interval tracking captures every minute of work — and every pause — without anyone remembering to hit a button.

May 7, 2026|7 min read

TL;DR

Your techs guess their hours at the end of the day and you lose 15%+ of actual time worked. Every forgotten callback, every rounded-down half hour, every parts run that didn't make it onto the timesheet. Opsler's automatic interval tracking starts a WORK timer the moment a job begins and records every PAUSE with a reason code — parts run, lunch break, waiting for customer. No manual entry. No end-of-day guesswork. For an 8-tech shop, that's roughly $112,500/year in labor you're currently doing but not billing for.

The Hours That Disappear

I want you to think about what your techs did yesterday. Not the big stuff — the AC install, the no-cool diagnosis on the Carrier unit with the failing compressor. Think about the small stuff. The 20-minute callback where the homeowner said the blower motor sounded funny after the repair. The 15 minutes waiting in the driveway because the customer wasn't home yet. The parts run to grab a 35/5 capacitor because the van was out.

Now ask yourself: did any of that make it onto a timesheet?

I already know the answer. It didn't. Because your techs fill in their hours at 5pm from memory, and nobody remembers the 20-minute callback. They remember the 4-hour install. They remember lunch. But the gaps between jobs — the small chunks of real, legitimate work time — those vanish.

And it's not because your guys are lazy or dishonest. They're just human. When you're on your sixth call and your hands smell like refrigerant and you still have a evaporator coil swap on the board, you're not thinking about whether you logged 42 minutes or 48 minutes on the last job. You round down to 40 and move on.

That rounding adds up. We tracked it at my shop for two months — actual GPS arrival/departure times versus what techs wrote down. The gap was 45 minutes per tech per day. Not huge on any single job. Devastating across a crew over a year.

Automatic Interval TrackingWORK 48mPAUSEParts runWORK 1h 22mPAUSELunchBillable2h 38mPaused42m

Automatic interval tracking captures every WORK and PAUSE period with reason codes — no manual timesheets needed.

How Automatic Time Tracking Works

1

Timer starts when the job starts

Your tech taps "Start Job" in the app and a WORK interval begins recording automatically. No separate clock-in button. No remembering to start a timer. The job is in progress, the clock is running. Simple.

2

Pauses get tagged with a reason

When your tech needs to stop — parts run, lunch break, waiting for the homeowner to get home — they tap pause and pick from four reason codes: PARTS_RUN, LUNCH_BREAK, WAITING_FOR_CUSTOMER, or OTHER. The WORK interval closes, a PAUSE interval opens. When they resume, PAUSE closes, new WORK interval starts. Every transition is timestamped.

3

Totals calculate themselves

Opsler automatically calculates totalWorkMinutes and totalPauseMinutes from the interval data. Your tech starts an AC install at 9am, pauses at 10:30 for a parts run, resumes at 11:15, takes lunch at 12:00, back at 12:45, finishes at 3:15. End of the job, you see exactly 4 hours 45 minutes of billable work and 1 hour 30 minutes of pauses — broken down by reason.

4

Admin correction for edge cases

Tech left the timer running during lunch? Forgot to resume after a parts run? Your office staff can apply a time correction on any completed job. They enter the corrected worked minutes with a mandatory reason, and that override becomes the number used for billing and payroll. Original intervals stay on record for the audit trail.

Where Unbilled Time Goes8 hrs worked6.8 hrs billed-1.2 hrs lostforgot to log15% unbilled × $500K revenue =$75,000 / year

Manual timesheets let 15%+ of actual worked hours leak out of your billing. Automatic tracking closes the gap.

What 45 Minutes a Day Actually Costs You

Let me walk you through a real day. Your tech Danny starts an AC install at 9am. At 10:30, the evaporator coil doesn't match — wrong tonnage in the box. He drives 20 minutes to the supply house, waits 15 minutes, drives back. That's 55 minutes. The app records it: PAUSE — Parts Run, 10:30 to 11:25. Danny resumes, the WORK interval picks back up.

Lunch at 12:30. PAUSE — Lunch Break. Back at 1:15. New WORK interval. He finishes the install at 3:45, heads to a callback for a noisy blower motor. That takes 25 minutes but Danny forgot to start a new job for it. With the old system, those 25 minutes are just... gone.

With interval tracking, even if Danny doesn't create a separate job for the callback, the time on the main job is still captured accurately. And when he does log that callback properly, it auto-tracks too. No guesswork.

Here's where it gets expensive. For an 8-technician shop:

  • 8 techs x 45 min/day lost = 6 hours of unbilled labor daily
  • 6 hours x $75 effective labor rate = $450/day walking out the door
  • $450/day x 250 working days = $112,500/year in unbilled labor

That number lands differently when you realize it's not coming from one big mistake. It's death by a thousand paper cuts. Five minutes here. Twelve minutes there. A rounded-down half hour. A callback that never got logged. None of it shows up on a timesheet because timesheets only capture what people remember.

The pause reason data is gold, too. After a month you can pull up your reports and see that 22% of pause time across your crew is PARTS_RUN. That tells you something about your van stocking. Maybe your guys are running to the supply house three times a week because nobody's tracking what's on each van. Fix the inventory, and the parts run pauses drop. Fix the pauses, and billable time goes up again.

The dual tracking — per-technician timers plus granular intervals — means multi-tech jobs get captured right, too. A two-man condenser install where one tech works 5 hours and the helper works 3? Both times are on the record. Both feed into your profitability reporting. No more averaging or guessing who worked what.

Frequently Asked Questions

When a technician starts a job in the Opsler app, a WORK interval begins recording immediately. There's no separate 'start timer' button to forget. The clock starts when the job starts. Period. If the tech needs to pause for a parts run or lunch, they tap pause, select the reason, and a PAUSE interval begins. When they resume, a new WORK interval picks up.

Opsler has four built-in pause reason codes: PARTS_RUN (technician needs to get parts), LUNCH_BREAK (lunch or personal break), WAITING_FOR_CUSTOMER (customer not available or needs to make a decision), and OTHER (requires a note explaining why). These categories give you clear visibility into where non-billable time goes without making your techs write essays.

Yes. Opsler has an admin time correction feature for completed jobs. If a tech forgot to pause for lunch or left the timer running accidentally, an admin or office staff member can override the tracked time with a corrected value. A reason is required for every correction, so you have an audit trail. The original interval data is preserved — the correction just tells payroll and billing which number to use.

Yes. Opsler runs dual tracking: per-technician timers and granular WORK/PAUSE intervals. On a two-man install, each tech has their own timer tracking their individual hours, and the interval system captures the overall job timeline with pause reasons. Both layers feed into your reporting so you can see the full picture.

They're auto-calculated from the interval data. Every time a WORK or PAUSE interval ends, Opsler sums up all completed intervals by type and updates the totals on the job record. You never have to add up intervals manually. Your reporting dashboards, payroll exports, and profit calculations all pull from these pre-calculated totals.

Ready to Run Your Business Without the Chaos?

Scheduling, dispatch, estimates, invoicing, customer portal, review management, and a free branded website — all in one plan at $149/month.

10 days free. No credit card required. Cancel anytime.

View as plain text