Answers · MSPs & IT services
MSP Unbilled Hours: Time Never Logged, Logged as No-Charge, or Never Invoiced
MSP unbilled hours look like one problem on a margin report and are really three, sitting in different parts of the PSA. Some work is never logged at all. Some is logged under a work type, board or agreement setting that marks it do-not-bill or no-charge by default. And some is logged as billable and never reaches an invoice: block hours past the prepaid bank, time posted to an expired agreement, entries still waiting for approval when the invoice run closed. Each has a different cause, a different owner and a different fix, and a single “log more time” push treats all three as the first. This guide separates them and shows how to count each from one month of time entries, without buying a tool.
By Tamara Stepanyan, founder of Lumina Business Advisory · Updated · Sources checked · Editorial standards
Why MSP unbilled hours are three problems, not one
Free self-check · two taps · no email
Hand-off 4 of 6 · Delivery → Invoice
Choose the answer that sounds like your business.
That was one of six hand-offs where money changes hands, from first inquiry to collected cash. The other five take about three minutes and end in a dated sheet that names where to start.
A margin report shows one gap: hours worked against hours billed. That gap mixes work nobody recorded, work recorded and deliberately not charged, and work recorded as chargeable that fell between the PSA and the invoice. Only the third is plainly money the client already owes. The second may be a right choice, or a default nobody chose. The first is invisible in billing and in cost, which is why it distorts margin per agreement even when every client is on a flat fee.
One owner put the first leak in plain words. Matt Rose of Tech Rage IT, on a ChannelPro panel in August 2026, called “getting your techs to accurately record ticket time” one of the most important things to watch, and said his firm ties bonuses to it. That is one firm’s answer to the first leak. It does not touch the other two.
- Leak one, never logged: the work happened and no time entry exists, or the entry is shorter than the work.
- Leak two, logged but not billable: the entry exists, but a default marked it do-not-bill or no-charge, or a tech picked that status for work the agreement does not cover.
- Leak three, billable but never invoiced: the entry is marked billable and still sits outside any invoice.
Leak one: time that was never logged
Work goes unlogged at the edges of the day: the two-minute phone fix, the after-hours server restart from an alert, the chat that solved a problem without a ticket, the ticket closed from a phone with the time left for later. None of it is dishonest. The tech helped first and planned to log it after, and after turned into the next ticket.
It can be counted without a time-tracking tool. Three exports from last month do it:
- Tickets closed with zero time entries, by tech and by board.
- After-hours alerts and remote sessions from the RMM or remote-access log, matched against time entries in the same hour.
- Hours logged per tech per working day, set against that tech’s scheduled hours. A full schedule with a short log is a question to ask, not an accusation.
The fix for this leak is a rule at the ticket, not a lecture: no ticket closes with zero time, and a weekly list of zero-time closures goes to the service manager. If logging is tied to pay, as at Rose’s firm, the same weekly list should also look for the opposite pattern, entries rounded up or padded, so the count stays honest in both directions.
Leak two: time logged under a do-not-bill default
A PSA can let a work type, a service board or an agreement carry a default billing status, such as billable, do not bill or no charge, and every time entry under it inherits that status unless someone changes it. The setting was chosen once, sometimes years ago, by whoever built the board. A work type made for warranty calls, internal tasks or an all-inclusive agreement can carry “do not bill” into work the agreement treats as billable: a new-device setup, an office move, a project task logged to a support ticket.
The difference between the two non-billable statuses shows up at the invoice. In PSAs that separate them, no-charge time can still print on the client’s invoice at zero, while do-not-bill time does not appear at all. The first shows the client the work that was given away; the second hides it from the client and, in some reports, from the owner.
The count: last month’s time entries grouped by work type, billing status and agreement. For each non-billable group, ask one question: does the client’s written scope say this work is covered? Where it does not, the hours are either a choice the owner would make again or a default nobody made. Only the owner can say which, and the count puts that choice in front of the owner once instead of in front of a tech every day. The written scope is the same document that settles out-of-scope work under a flat fee, so the check also shows where the scope is unclear.
Leak three: billable time that never reached an invoice
This one reads as a straight loss, because the PSA already says the client owes it. It hides in a few specific places:
- Block hours past the bank: the prepaid block ran out mid-month, and the overage rate in the agreement never made it onto an invoice.
- Expired agreements: the agreement ended, the client kept calling, and time posted against an agreement that no longer generates invoices.
- Entries waiting for approval: time not approved or posted when the invoice run closed, which then dropped out of the next run.
- Time-and-materials clients with no recurring agreement, whose tickets wait for someone to start an invoice by hand.
- Project time logged to a project and tied to a milestone nobody marked complete.
The count: every billable time entry dated last month, minus every entry that appears on an invoice dated last month or this month. What is left, sorted by client and by reason, is leak three. The fix is a pre-invoice list run before every billing cycle: billable, unposted, older than the cycle. A short review of that list before the invoice run is cheaper than recovering the time later, when the client has to be reminded what the work was.
One month of time entries, counted three ways
The whole check runs on one export: last month’s time entries with tech, ticket, work type, billing status, agreement, hours, and whether each entry is on an invoice. Notes and descriptions can be dropped from the export; nothing in the count needs them. Add the closed-ticket list with time totals and the RMM after-hours log, and the three leaks separate on their own.
Illustrative example: a hypothetical firm with four techs logs 600 hours in a month. Of those, 420 fall under flat-fee agreements, 60 are billable and invoiced, 75 are marked no-charge on work types its written scopes list as billable, and 45 are billable and on no invoice. Separately, 30 tickets closed with zero time. At an assumed $125 an hour, the 45 hours are $5,625 the PSA already says clients owe; the 75 hours are $9,375 of decisions to review; the 30 tickets carry no dollar figure yet, because nobody knows how long they took, which is the whole point of leak one.
Note what the example does not say. It does not say any of the 75 hours should have been billed; some may be goodwill the owner would choose again. It says nobody chose them, and that unless they print at zero, the client never sees them either.
Three fixes for three leaks in time entries
Each leak has its own owner and its own fix. Treating them as one problem is how a firm ends up buying a time-capture tool for a leak that lives in its billing defaults.
- Leak one: a closing rule at the ticket, a weekly zero-time list, and logging from the phone made as easy as closing from it. If bonuses depend on logged time, count padding as well as gaps.
- Leak two: review work-type, board and agreement defaults once, with the written scope open; change the defaults that contradict it; ask for a one-line reason when a tech switches billable work to no-charge. Show given-away work on the invoice at zero rather than hiding it.
- Leak three: a pre-invoice list of billable, unposted entries; an alert when a prepaid block passes a set threshold; agreement end dates on a calendar, with a renewal or a switch to time-and-materials decided before the date, not after.
None of these needs new software. If a time-capture or billing tool is bought later, it should be bought for the leak the count found, not for all three at once.
When not to hire anyone for unbilled time, and where the Review fits
If the three counts come back small, with few zero-time closures, non-billable groups the owner would choose again and nothing billable left off an invoice, the firm has its answer, and it cost an afternoon. If every client is on an all-inclusive flat fee with no block hours or time-and-materials work, leak three barely exists; leak one still matters, because it decides whether each agreement makes money. And if the real issue is one tech who will not log time at all, that is a management conversation, not a consulting engagement.
The Revenue Review reads time entries as part of the Delivery → Invoice hand-off, from a read-only export with notes and descriptions stripped. It separates the three leaks, puts a monthly dollar figure on the ones that have one, and sets them beside the other gaps between delivery and cash: seats, licenses, invoices that age. It takes two weeks and ends in a written report the firm keeps; the fixes above stay the firm’s to make, with or without us.
The next step is a free 20-minute call, where we say whether the Review is worth the fee for this firm, or whether one month of time entries and the counts above settle it.
Before any next step
What should you do next?
- Fix it yourselves.
- If the cause is clear, it lives inside one process, and one person can own it — take the play from this page and run it. That outcome is fine with us; it is why the play is published in full.
- Order one bounded build.
- If the fix is known but needs configuration or integration inside your stack — a cadence wired into your own system, an alert, a handoff — scope that one build, with us or with anyone you trust. The six systems we build show what bounded looks like.
- Start with the Review.
- If the causes are debatable, the problem crosses departments or systems, or the economics are unclear — diagnose before anyone builds. The Revenue Review: $4,500 fixed, two weeks, computed from your own records. Read a sample finding before you decide — free, no email.
Asked right after
- How can an MSP find unbilled hours in its PSA?
- Start from one month of time entries. Count tickets closed with zero time (never logged), group non-billable entries by work type and compare them with the written scope (logged but not billed), and subtract every entry that appears on an invoice from the billable ones (billable but never invoiced). The three counts point at three different fixes.
- What is the difference between no-charge and do-not-bill time?
- In PSAs that separate the two, no-charge time can still print on the client’s invoice at zero, while do-not-bill time does not appear on the invoice at all. The first shows the client work that was given away; the second hides it. Check how the firm’s own PSA treats each status before changing any defaults.
- Should techs log time on flat-fee managed services tickets?
- Yes, if the owner wants to know which agreements make money. A flat fee fixes what the client pays, not what the work costs the firm, and margin per agreement can only be computed from the hours actually logged against it.
- How often should unposted time entries be reviewed?
- Before every invoice run. A list of billable entries not yet approved or posted, older than the billing cycle, is short to read and catches billable time while the work is still fresh in the client’s mind.
- Should tech bonuses be tied to logging time?
- Matt Rose of Tech Rage IT said on a ChannelPro panel in August 2026 that his firm ties bonuses to accurate ticket time. If pay depends on logged hours, the weekly review should look for padded and rounded-up entries as well as missing ones, so the incentive does not trade one distortion for another.
Keep reading
Related answers
Sources
- MSP Pricing Strategies: Expert Insights and Best Practices · ChannelPro, 2026
The next step
Bring us the process that keeps getting stuck.
A 20-minute conversation about the workflow, the teams and the systems involved — and a straight answer on whether The Revenue Review is the right next step. If it is not, we say that on the call.
A real person answers or calls you back the same business day.