84 resources carry 3,360 hours of weekly capacity. Actual billable output averages 738 hours per week, leaving a 78% utilization gap against the 80% target. This report maps the variance by month, by metric, and by resource efficiency.
84 resources carry 3,360 hours of weekly capacity. Actual billable output averages 738 hours per week, leaving a 78% utilization gap against the 80% target. This report maps the variance by month, by metric, and by resource efficiency.
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
84 resources carry 3,360 hours of weekly capacity. Actual billable output averages 738 hours per week, leaving a 78% utilization gap against the 80% target. This report maps the variance by month, by metric, and by resource efficiency.
EVALUATE ROW(
"TotalEstimatedHours", SUM('BI_Autotask_Projects'[estimated_hours]),
"TotalWorkedHours", SUM('BI_Autotask_Projects'[worked_hours]),
"TotalBillableHours", SUM('BI_Autotask_Projects'[billable_hours]),
"TotalNonBillableHours", SUM('BI_Autotask_Projects'[non_billable_hours]),
"TotalVarianceHours", SUM('BI_Autotask_Projects'[variance_hours]),
"ProjectsWithEstimate", CALCULATE(COUNTROWS('BI_Autotask_Projects'), 'BI_Autotask_Projects'[estimated_hours] > 0),
"WorkedVsEstPct", [Worked Hours % (vs Estimated)]
)
Side-by-side breakdown of theoretical capacity against actual logged hours across the 19-month analysis period
| Project | Customer | Status | Estimated | Worked | Variance | Var % |
|---|---|---|---|---|---|---|
| Project Environment | Lewis LLC | Complete | 1,205.0 | 1,586.7 | -381.7 | -31.7% |
| Project Along | Doyle-Contreras | Complete | 238.0 | 536.3 | -298.3 | -125.4% |
| Project Number | Little Group | Complete | 24.0 | 302.8 | -278.8 | -1161.7% |
| Project Leave | Clements, Pham and Garcia | Complete | 219.0 | 417.3 | -198.3 | -90.5% |
| Project Not | Martin Group | Complete | 5.0 | 155.8 | -150.8 | -3016.7% |
| Project Feel | Wu-Jackson | In progress | 161.0 | 276.8 | -115.8 | -71.9% |
| Project Return | Thomas-Watson | Complete | 36.0 | 135.8 | -99.8 | -277.1% |
| Project Set | Drake and Sons | Complete | 128.0 | 0.0 | +128.0 | 100.0% |
| Project Feel | Smith, Santos and Kim | Complete | 135.0 | 3.0 | +132.0 | 97.8% |
| Project Feel | Kelley-Walsh | Complete | 204.0 | 66.8 | +137.2 | 67.2% |
| Project Fund | Wall PLC | Complete | 190.0 | 27.3 | +162.8 | 85.7% |
| Project Modern | Craig-Huynh | Complete | 173.0 | 2.5 | +170.5 | 98.6% |
| Project Feel | West, White and Lawson | Complete | 182.0 | 6.5 | +175.5 | 96.4% |
| Project Writer | Rivers, Rogers and Mitchell | In progress | 240.0 | 3.1 | +236.9 | 98.7% |
| Project Safe | Ramos Group | Complete | 675.0 | 67.1 | +608.0 | 90.1% |
EVALUATE TOPN(15,
CALCULATETABLE(
SELECTCOLUMNS('BI_Autotask_Projects',
"Project", 'BI_Autotask_Projects'[project_name],
"Customer", 'BI_Autotask_Projects'[company_name],
"Status", 'BI_Autotask_Projects'[project_status_name],
"Estimated", 'BI_Autotask_Projects'[estimated_hours],
"Worked", 'BI_Autotask_Projects'[worked_hours],
"Variance", 'BI_Autotask_Projects'[variance_hours],
"VariancePct", DIVIDE('BI_Autotask_Projects'[variance_hours], 'BI_Autotask_Projects'[estimated_hours])
),
'BI_Autotask_Projects'[estimated_hours] > 0
),
ABS([Variance]), DESC
)
ORDER BY [Variance]
Billable hours per month over 19 months, with the 80% utilization target line for reference (2,688h/month at full headcount)
Billable hours climbed from a low of 137 in July 2024 (partial month of data collection) to a peak of 2,981 in October 2025. The upward trend is clear, but no single month has reached the 2,688-hour threshold needed for 80% utilization across the full team. The closest was October 2025, still 11% short.
EVALUATE
ADDCOLUMNS(
SUMMARIZE(
'BI_Autotask_Time_Entries',
'BI_Autotask_Time_Entries'[date_worked].[Year],
'BI_Autotask_Time_Entries'[date_worked].[MonthNo]
),
"BillableHours", CALCULATE(
SUM('BI_Autotask_Time_Entries'[Billable Hours])
),
"NonBillableHours", CALCULATE(
SUM('BI_Autotask_Time_Entries'[hours_worked])
) - CALCULATE(
SUM('BI_Autotask_Time_Entries'[Billable Hours])
),
"TotalHours", CALCULATE(
SUM('BI_Autotask_Time_Entries'[hours_worked])
)
)
ORDER BY
'BI_Autotask_Time_Entries'[date_worked].[Year],
'BI_Autotask_Time_Entries'[date_worked].[MonthNo]
Per-resource metrics compared to the 80% utilization benchmark, showing the gap between what each person should deliver and what they actually log
| Metric | Target (80%) | Actual | Gap | Rating |
|---|---|---|---|---|
| Billable hours/week per resource | 32.0h | 10.9h | −21.1h | 34% of target |
| Total hours/week per resource | 40.0h | 14.4h | −25.6h | 36% of target |
| Billable ratio (of worked hours) | 80.0% | 75.6% | −4.4pp | Near target |
| Monthly billable hours/resource | 138.7h | 47.3h | −91.4h | 34% of target |
| Annual billable hours/resource | 1,664h | 567h | −1,097h | 34% of target |
The billable ratio of worked hours (75.6%) sits close to the 80% target. That means when people do log time, three quarters of it is billable. The real problem is volume: resources average 14.4 hours of logged time per week, well below the 40-hour standard. This suggests either part-time resources, shared roles, time logging gaps, or a headcount that includes inactive or lightly-active accounts.
EVALUATE
VAR _TotalBillable = SUM('BI_Autotask_Time_Entries'[Billable Hours])
VAR _TotalHours = SUM('BI_Autotask_Time_Entries'[hours_worked])
VAR _Resources = DISTINCTCOUNT('BI_Autotask_Time_Entries'[resource_id])
VAR _Weeks = 82.8 -- 19 months approx
RETURN
ROW(
"BillablePerResourcePerWeek", DIVIDE(_TotalBillable, _Resources * _Weeks),
"TotalPerResourcePerWeek", DIVIDE(_TotalHours, _Resources * _Weeks),
"BillableRatio", DIVIDE(_TotalBillable, _TotalHours),
"MonthlyBillablePerResource", DIVIDE(_TotalBillable, _Resources * 19),
"AnnualBillablePerResource", DIVIDE(_TotalBillable, _Resources * 19) * 12
)
The headline number looks alarming: 84 resources producing billable output equivalent to 24.4 FTEs. But the data needs context. The "84 active resources" count includes everyone who logged at least one time entry in the 19-month window. That likely covers part-time staff, managers who log occasional hours, dispatchers, and people who left during the period.
The more useful signal is the billable ratio of 75.6%. When people work, they spend most of that time on billable tasks. The gap is in total hours logged per person, not in what those hours go toward. Fixing this starts with cleaning up the resource count to reflect actual full-time-equivalent capacity, then setting utilization targets per role rather than across the board.
4 priorities based on the findings above
84 "active resources" is misleading if it includes part-timers, managers, or departed staff. Filter to resources logging 20+ hours per week consistently. You will likely end up with 25 to 35 true FTEs, which makes the utilization numbers far less alarming.
A service desk technician should hit 85% billable. A project engineer sits around 65%. A service manager, 30%. Applying 80% across all roles produces a gap that does not reflect a real operational problem. Build targets by role and measure against those.
14.4 hours per week per resource suggests incomplete time entry. If people work 40 hours but log 14, you have a data quality issue, not a capacity issue. Compare logged hours against scheduled hours or contractual FTE status to find the gap.
75.6% billable vs 80% target is a 4.4 percentage point gap. That is manageable. The team is already directing most of their logged time toward billable work. The improvement opportunity sits in volume (more hours logged) rather than in mix (billable vs non-billable).
The 84-resource count includes everyone who logged time in the period, including part-time staff, managers, and people who left. The real FTE count is closer to 24 to 35. When you measure against actual FTEs, the utilization gap shrinks from 78% to something more typical for an MSP.
80% is a common MSP industry benchmark for billable utilization. It means 32 out of 40 hours per week spent on billable work, with 8 hours for internal meetings, training, admin, and breaks. In practice, top-performing service desk teams hit 85%, while project teams average 60 to 70%.
All data comes from the BI_Autotask_Time_Entries table in Power BI. The AI counts distinct resource IDs, sums hours_worked and Billable Hours, then calculates the ratios. Planned capacity is derived from the resource count times 40 hours per week.
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