How many hours are your engineers working but not recording in the PSA? This report calculates the gap and breaks it down by resource. Generated by AI via Proxuma Power BI MCP server.
How many hours are your engineers working but not recording in the PSA? This report calculates the gap and breaks it down by resource. Generated by AI via Proxuma Power BI MCP server.
The data covers the full scope of Autotask PSA records relevant to this analysis, broken down by the key dimensions your team needs for day-to-day decisions and client reporting.
Who should use this: Operations managers, service delivery leads, and MSP owners managing capacity
How often: Weekly for scheduling, monthly for utilization reviews, quarterly for staffing decisions
How many hours are your engineers working but not recording in the PSA? This report calculates the gap and breaks it down by resource. Generated by AI via Proxuma Power BI MCP server.
EVALUATE
TOPN(
15,
FILTER(
ADDCOLUMNS(
SUMMARIZECOLUMNS(
BI_Autotask_User_Details[resource_user_name],
"Logged", [Total],
"Capacity", [Capacity Total (Proxuma)]
),
"Unwritten", [Capacity] - [Logged],
"UnwrittenPct", DIVIDE([Capacity] - [Logged], [Capacity])
),
[Capacity] > 500
),
[Unwritten], DESC
)
ORDER BY [Unwritten] DESC
The split between logged hours and unlogged capacity, with a breakdown of billable vs. non-billable within the logged portion
| Category | Hours | % of Capacity | Status |
|---|---|---|---|
| Billable hours logged | 38,364 | 22.0% | Revenue-generating |
| Non-billable hours logged | 12,388 | 7.1% | Internal / admin |
| Unwritten hours (gap) | 123,968 | 71.0% | Not captured in PSA |
| Total annual capacity | 174,720 | 100.0% | 84 resources × 2,080h |
EVALUATE
ROW(
"LoggedHours", [Total],
"CapacityProxuma", [Capacity Total (Proxuma)],
"UnwrittenProxuma", [Unwritten (Proxuma Capacity)],
"UnwrittenPctProxuma", DIVIDE([Unwritten (Proxuma Capacity)], [Capacity Total (Proxuma)]),
"EstTrueBillablePct", [Estimated True Billable % (Proxuma Capacity)]
)
Resources ranked by total hours logged against their annual capacity of 2,080 hours (40h/week × 52 weeks)
EVALUATE
ADDCOLUMNS(
VALUES('BI_Autotask_User_Details'[resource_name]),
"hours_logged", CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
"billable", CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours]))
)
ORDER BY [hours_logged] DESC
Billable hours as a percentage of total hours logged per resource, showing how much of their recorded time generates revenue
| Resource | Logged | Billable | Billable % | Utilization | Status |
|---|---|---|---|---|---|
| API Integration | 2,050 | 1,837 | 89.6% | High | |
| M. Brown | 1,888 | 1,527 | 80.9% | High | |
| E. Davis | 1,585 | 1,228 | 77.5% | Good | |
| J. Wilson | 1,862 | 1,415 | 76.0% | Good | |
| Dr. J. Adams | 2,400 | 1,750 | 72.9% | Good | |
| R. Thomas | 1,780 | 1,157 | 65.0% | Average | |
| G. Horn | 1,505 | 957 | 63.6% | Average | |
| S. Martinez | 2,136 | 1,303 | 61.0% | Average | |
| D. Chen | 2,060 | 1,145 | 55.6% | Watch | |
| L. Anderson | 1,554 | 819 | 52.7% | Low |
EVALUATE
ADDCOLUMNS(
VALUES('BI_Autotask_User_Details'[resource_name]),
"hours_logged", CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
"billable", CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
"billable_pct", DIVIDE(
CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked]))
)
)
ORDER BY [billable_pct] DESC
Out of 174,720 annual hours of capacity across 84 resources, only 50,752 hours appear as time entries. That is a 123,968-hour blind spot. Even after accounting for PTO, meetings, and admin overhead, most MSPs should expect 50-70% of capacity logged. A 29% capture rate means the majority of your team's work is invisible to reporting and billing.
Of the 50,752 hours that were logged, 38,364 were billable. That 75.6% billable ratio looks healthy in isolation. The problem is that it only covers 29% of capacity. If even 10% of the unwritten gap turns out to be billable work that was done but never recorded, that represents roughly 12,400 hours of lost invoicing opportunity per year.
Dr. Jessica Adams logged 2,400 hours against a 2,080-hour capacity (115% utilization), suggesting overtime or capacity data needing adjustment. At the other end, Lisa Anderson logged 1,554 hours with only 52.7% billable. The spread between top and bottom performers indicates inconsistent time entry discipline rather than uneven workloads.
5 actions to close the unwritten hours gap and recover lost revenue
Start with a target of 6 hours logged per day per resource (allowing 2 hours for meetings and admin). That is 30 hours per week. Run a weekly report showing who hit the target and who did not. Teams that track daily logging consistently recover 15-25% of their unwritten gap within the first quarter.
Resources logging fewer than 1,200 hours per year with low billable percentages (like L. Anderson at 52.7%) likely have entire days of client work that never made it into Autotask. Pull their ticket history and compare closed tickets against time entries. Gaps between ticket resolution and zero time logged are the first place to look for recoverable revenue.
If engineers do not have a quick way to log meetings, internal projects, and training, those hours disappear. Add standard non-billable categories in Autotask: "Internal Meeting," "Training / Certification," "Documentation," "Travel." Making it easy to log non-billable time is the fastest way to improve capture rates and get an accurate picture of where hours go.
The 2,080 hours per resource assumes zero PTO, zero sick leave, and zero holidays. Adjust capacity to reflect actual availability (typically 1,760-1,880 hours per year after standard leave). This will give you a more honest utilization percentage and reduce the apparent gap. The remaining gap is the real problem to solve.
Michael Brown (80.9% billable) and James Wilson (76.0% billable) demonstrate that high capture rates are achievable. Study their workflows: do they log time as they go or batch it at end of day? Do they use Autotask timer features? Share their approach with the team. Peer benchmarking is more effective than top-down mandates because it shows proof that the target is realistic.
All time entry data comes from Autotask PSA, pulled into Proxuma Power BI through the Autotask connector. The AI then runs DAX queries against the BI_Autotask_Time_Entries table to sum hours_worked, Billable Hours, and Non billable Hours per resource. Capacity is calculated from the active resource count in BI_Autotask_User_Details.
This report uses a standard 40 hours per week multiplied by 52 weeks, giving 2,080 hours per resource per year. The total capacity is the number of active resources (84) multiplied by 2,080. For a more accurate picture, adjust capacity downward for PTO, holidays, and part-time employees. Typical adjusted capacity is around 1,800 hours per year.
An unwritten hour is the difference between available capacity and logged time entries. It includes everything that was not recorded: PTO and sick leave (if not tracked as time entries), meetings, administrative tasks, breaks, and genuinely forgotten time entries for client work. The goal is not to eliminate all unwritten hours, but to understand what portion is recoverable billable time.
Industry benchmarks for MSP engineers typically target 65-75% billable utilization against adjusted capacity (after subtracting leave). That means 6-6.5 billable hours per working day. Resources consistently above 80% may be overloaded or under-investing in training and internal work. Resources below 50% billable need a closer look at their workload and logging habits.
Yes. The DAX queries can be filtered by adding conditions on resource department, role, or date range. For weekly tracking, filter BI_Autotask_Time_Entries by date_worked to a specific week and compare against that week's capacity (40 hours per resource). Ask the AI to add these filters when generating the report against your data.
Yes. Connect Proxuma Power BI to your Autotask PSA, add an AI tool (Claude, ChatGPT, or Copilot) via MCP, and ask the same question. The AI writes the DAX queries, runs them against your real data, and produces a report like this in under fifteen minutes.
Connect Proxuma Power BI to your PSA, RMM, and M365 environment, use an MCP-compatible AI to ask questions, and generate custom reports - in minutes, not days.
See more reports Get started