Which team members generate more revenue than they cost, and where non-billable hours are eroding your margin. Generated by AI via Proxuma Power BI MCP server.
Which team members generate more revenue than they cost, and where non-billable hours are eroding your margin. 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: MSP owners, finance leads, and operations managers tracking profitability
How often: Monthly for financial reviews, quarterly for strategic planning, on-demand for pricing decisions
Which team members generate more revenue than they cost, and where non-billable hours are eroding your margin. Generated by AI via Proxuma Power BI MCP server.
EVALUATE
ROW(
"TotalHoursWorked", SUM('BI_Autotask_Time_Entries'[hours_worked]),
"TotalBillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]),
"AvgInternalCost", AVERAGE('BI_Autotask_User_Details'[internal_cost]),
"TotalLaborCost", SUMX(
VALUES('BI_Autotask_User_Details'[resource_name]),
CALCULATE(VALUES('BI_Autotask_User_Details'[internal_cost]))
* CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked]))
)
)
Each resource's total labor cost (hours × $115/hr) compared to estimated billable revenue (billable hours × $115/hr). Sorted by total hours worked.
| Resource | Total Hours | Billable | Non-Billable | Util % |
|---|---|---|---|---|
| Dr. Amber Ayala DVM | 2,400 | 1,749 | 651 | 72.9% |
| James Li | 2,136 | 1,303 | 833 | 61.0% |
| Kevin Allen | 2,060 | 1,145 | 915 | 55.6% |
| Maxwell Reed | 2,050 | 1,838 | 213 | 89.6% |
| Andrew Roberts | 1,888 | 1,527 | 361 | 80.9% |
EVALUATE TOPN(15, SUMMARIZECOLUMNS('BI_Autotask_Time_Entries'[resource_name], "TotalHours", SUM('BI_Autotask_Time_Entries'[hours_worked]), "BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]), "NonBillableHours", SUM('BI_Autotask_Time_Entries'[Non billable Hours]), "EntryCount", COUNTROWS('BI_Autotask_Time_Entries')), [TotalHours], DESC)
What percentage of each resource's labor cost is recovered through billable hours. 100% means the resource's billable revenue equals their total cost. Above 100% would mean they bill out at a higher rate than their internal cost.
EVALUATE
ADDCOLUMNS(
VALUES('BI_Autotask_User_Details'[resource_name]),
"cost_recovery_pct", DIVIDE(
CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
0
),
"total_cost",
CALCULATE(VALUES('BI_Autotask_User_Details'[internal_cost]))
* CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
"billable_revenue",
CALCULATE(VALUES('BI_Autotask_User_Details'[internal_cost]))
* CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours]))
)
ORDER BY [cost_recovery_pct] DESC
The dollar value of non-billable hours per resource. This is the direct cost of time that generates zero client-facing revenue.
| Resource | Non-Billable Hrs | Cost @ $115/hr | % of Total Hours | Burden |
|---|---|---|---|---|
| David Chen | 915 | $105,225 | 44.4% | |
| Sarah Martinez | 833 | $95,795 | 39.0% | |
| Lisa Anderson | 735 | $84,525 | 47.3% | |
| Dr. Jessica Adams DVM | 651 | $74,865 | 27.1% | |
| Robert Thomas | 623 | $71,645 | 35.0% | |
| Gregory Horn | 547 | $62,905 | 36.4% | |
| James Wilson | 446 | $51,290 | 24.0% | |
| Michael Brown | 361 | $41,515 | 19.1% | |
| Emily Davis | 357 | $41,055 | 22.5% | |
| API Integration | 213 | $24,495 | 10.4% |
EVALUATE
ADDCOLUMNS(
VALUES('BI_Autotask_User_Details'[resource_name]),
"non_billable_hours",
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked]))
- CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
"non_billable_cost",
(CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked]))
- CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])))
* CALCULATE(VALUES('BI_Autotask_User_Details'[internal_cost])),
"pct_non_billable", DIVIDE(
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked]))
- CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
0
)
)
ORDER BY [non_billable_cost] DESC
At the portfolio level, $17.6M in revenue against $5.8M in labor cost gives you a 3.0x revenue-to-cost ratio. That is healthy. But the aggregate number hides significant variance at the resource level, and the labor cost calculation here only covers internal hourly rates. It does not include benefits, tooling, or overhead.
No resource fully recovers their labor cost through billable hours alone. The best performer, API Integration, recovers 89.6% of its cost through billable time. This is expected in an MSP: internal meetings, training, admin, and project work consume hours that do not appear on client invoices. The remaining revenue comes from managed services contracts, product margin, and flat-rate agreements that are not tied to individual time entries.
The three resources with the lowest cost recovery are Lisa Anderson at 52.7%, David Chen at 55.6%, and Sarah Martinez at 61.0%. Lisa Anderson logs 735 non-billable hours, costing $84,525. David Chen has 915 non-billable hours at $105,225. These are not small numbers. If even a quarter of those hours can be converted to billable work or eliminated, the margin improvement is immediate.
On the other end, Michael Brown at 80.9% and Emily Davis at 77.5% show that high utilization is achievable. Their non-billable cost burden is under $42K each, roughly half of what the bottom-performing resources carry.
5 priorities based on the findings above
David Chen has 915 non-billable hours ($105K) and Lisa Anderson has 735 non-billable hours ($85K). Together that is $190K in labor cost generating zero revenue. Pull their time entry categories. Are they logging internal project work that should be billable? Are they stuck in meetings that could be shorter or skipped? Find the top three non-billable categories and decide whether to reclassify, reduce, or accept the cost.
Sarah logs 2,136 total hours but only 1,303 are billable, giving her a 61.0% utilization rate and a $96K gap between cost and billable revenue. That is the second-highest gap on the team. If she is spending 833 hours on internal work, the question is whether that work is necessary or whether it can be distributed. If it is necessary, it should be budgeted as overhead rather than treated as a utilization problem.
API Integration has 89.6% utilization and only 213 non-billable hours. It is the most cost-efficient resource in the dataset. If this represents automated or semi-automated billable work, expanding this model could improve margin without adding headcount. Look at what makes this resource different and whether the pattern is replicable.
Most MSPs set utilization targets around 70-80%. This report shows that at a uniform $115/hr internal rate, even 80% utilization leaves a 20% cost gap that must be covered by non-hourly revenue. If your bill rates vary by resource, run this analysis with actual bill rates to see the true cost recovery picture. A resource billing at $175/hr only needs 66% utilization to recover their $115/hr cost.
Run this report monthly and watch for two signals: resources whose utilization drops below 60%, and resources whose non-billable hours are increasing quarter over quarter. Both indicate a workload problem that will eventually show up in margin. Michael Brown and Emily Davis are currently the benchmarks to measure others against.
Labor cost is calculated from each resource's internal cost rate in Autotask multiplied by their total hours worked. Billable revenue is estimated by multiplying billable hours by the same internal rate. In a production environment, you would use actual bill rates for the revenue calculation. The $17.6M total revenue figure comes from billing items in the PSA, which includes managed services contracts and product revenue beyond hourly billing.
Because no resource is 100% billable. Every team member spends some hours on internal work, meetings, training, and admin. The gap represents the labor cost of those non-billable hours. In a healthy MSP, this gap is covered by managed services revenue, product margin, and flat-rate contracts that are not tied to individual time entries. A negative gap is normal. A large and growing gap is a problem.
Most MSPs target 70-80% utilization for technical staff. Below 60% typically indicates a workload problem. Above 85% can lead to burnout and quality issues. The right target depends on your billing model: if you bill mostly on fixed-fee contracts, utilization matters less than throughput and resolution quality.
Yes. Add a date filter to the DAX queries using BI_Autotask_Time_Entries[date_worked]. For monthly tracking, filter to the current month. For quarterly reviews, use a three-month window. Comparing quarters side by side shows whether cost recovery is trending up or down.
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 resource 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