How much revenue each resource generates, what they cost, and where profit per employee is strongest or weakest. Generated by AI via Proxuma Power BI MCP server.
How much revenue each resource generates, what they cost, and where profit per employee is strongest or weakest. 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
How much revenue each resource generates, what they cost, and where profit per employee is strongest or weakest. Generated by AI via Proxuma Power BI MCP server.
EVALUATE ROW(
"TotalRevenue", SUM('BI_Autotask_Billing_Items'[total_amount]),
"TotalCost", SUM('BI_Autotask_Billing_Items'[our_cost]),
"TotalResources", COUNTROWS('BI_Autotask_User_Details'),
"ActiveResources", CALCULATE(COUNTROWS('BI_Autotask_User_Details'), 'BI_Autotask_User_Details'[autotask_status] = "Active"),
"BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]),
"NonBillableHours", SUM('BI_Autotask_Time_Entries'[Non billable Hours])
)
The gap between total resources (118) and active resources (84) significantly changes the per-employee number
| Metric | Per Total (118) | Per Active (84) | Difference |
|---|---|---|---|
| Revenue per resource | $149,210 | $209,604 | +40.5% |
| Cost per resource | $70,109 | $98,486 | +40.5% |
| Profit per resource | $79,101 | $111,118 | +40.5% |
| Billable hours per resource | 325.1h | 456.7h | +40.5% |
EVALUATE ROW(
"TotalRevenue", SUM('BI_Autotask_Billing_Items'[total_amount]),
"TotalCost", SUM('BI_Autotask_Billing_Items'[our_cost]),
"TotalResources", COUNTROWS('BI_Autotask_User_Details'),
"ActiveResources", CALCULATE(COUNTROWS('BI_Autotask_User_Details'), 'BI_Autotask_User_Details'[autotask_status] = "Active"),
"BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]),
"NonBillableHours", SUM('BI_Autotask_Time_Entries'[Non billable Hours])
)
Ranked by total hours logged, with billable split and utilization rate per resource
| # | Resource | Total Hours | Billable | Non-Billable | Tickets Touched | Utilisation |
|---|---|---|---|---|---|---|
| 1 | Dr. Amber Ayala DVM | 2,399.8h | 1,749.2h | 650.6h | 603 | 72.9% |
| 2 | James Li | 2,136.0h | 1,303.4h | 832.6h | 794 | 61.0% |
| 3 | Kevin Allen | 2,060.1h | 1,145.0h | 915.1h | 99 | 55.6% |
| 4 | Maxwell Reed | 2,050.3h | 1,837.7h | 212.6h | 2,613 | 89.6% |
| 5 | Andrew Roberts | 1,887.7h | 1,527.1h | 360.6h | 2,297 | 80.9% |
| 6 | David Hunt | 1,862.2h | 1,415.9h | 446.3h | 84 | 76.0% |
| 7 | Chelsea Thomas | 1,779.6h | 1,157.0h | 622.6h | 149 | 65.0% |
| 8 | Jennifer King | 1,584.5h | 1,228.0h | 356.5h | 763 | 77.5% |
| 9 | Jerry Mcfarland | 1,554.0h | 819.2h | 734.8h | 489 | 52.7% |
| 10 | Gregory Horn | 1,504.5h | 957.0h | 547.5h | 2,017 | 63.6% |
EVALUATE
TOPN(10,
ADDCOLUMNS(
SUMMARIZE('BI_Autotask_Time_Entries','BI_Autotask_Time_Entries'[resource_name]),
"TotalHours", CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours]) + SUM('BI_Autotask_Time_Entries'[Non billable Hours])),
"BillableHours", CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
"NonBillable", CALCULATE(SUM('BI_Autotask_Time_Entries'[Non billable Hours])),
"Tickets", CALCULATE(DISTINCTCOUNT('BI_Autotask_Time_Entries'[ticket_id])),
"Utilization", DIVIDE(CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])), CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours]) + SUM('BI_Autotask_Time_Entries'[Non billable Hours])))
),
[TotalHours], DESC
)
Revenue per month over the last 10 months showing growth trajectory
| Month | Revenue |
|---|---|
| 2024-04 | $0 |
| 2024-05 | $1,777 |
| 2024-06 | $502 |
| 2024-07 | $19,255 |
| 2024-08 | $850,721 |
| 2024-09 | $827,356 |
| 2024-10 | $872,119 |
| 2024-11 | $846,378 |
| 2024-12 | $933,099 |
| 2025-01 | $942,444 |
| 2025-02 | $1,051,887 |
| 2025-03 | $1,106,651 |
| 2025-04 | $1,341,613 |
| 2025-05 | $1,080,822 |
| 2025-06 | $1,033,307 |
| 2025-07 | $1,045,558 |
| 2025-08 | $1,058,862 |
| 2025-09 | $1,002,352 |
| 2025-10 | $1,006,189 |
| 2025-11 | $927,813 |
| 2025-12 | $887,195 |
| 2026-01 | $770,865 |
EVALUATE
ADDCOLUMNS(
SUMMARIZE('BI_Autotask_Billing_Items', 'BI_Common_Dim_Date'[year_month]),
"MonthlyRevenue", CALCULATE(SUM('BI_Autotask_Billing_Items'[total_amount]))
)
ORDER BY 'BI_Common_Dim_Date'[year_month] ASC
Where the $17.6M comes from, broken down by contract category with margin per type
| Contract Type | Revenue | Cost | Margin | Contracts | Share of Revenue |
|---|---|---|---|---|---|
| Recurring Service | $15,724,070 | $7,067,810 | 55.1% | 1,207 | 89.31% |
| Time & Materials | $1,840,111 | $1,163,629 | 36.8% | 504 | 10.45% |
| Fixed Price | $17,210 | $4,311 | 75.0% | 5 | 0.10% |
| Block Hours | $7,502 | $3,628 | 51.6% | 173 | 0.04% |
EVALUATE
VAR Types = VALUES('BI_Autotask_Contracts'[contract_type_name])
RETURN
ADDCOLUMNS(
Types,
"Revenue", VAR Ids = CALCULATETABLE(VALUES('BI_Autotask_Contracts'[contract_id]), 'BI_Autotask_Contracts'[contract_type_name] = EARLIER('BI_Autotask_Contracts'[contract_type_name]))
RETURN CALCULATE(SUM('BI_Autotask_Billing_Items'[total_amount]), TREATAS(Ids, 'BI_Autotask_Billing_Items'[contract_id])),
"Cost", VAR Ids = CALCULATETABLE(VALUES('BI_Autotask_Contracts'[contract_id]), 'BI_Autotask_Contracts'[contract_type_name] = EARLIER('BI_Autotask_Contracts'[contract_type_name]))
RETURN CALCULATE(SUM('BI_Autotask_Billing_Items'[our_cost]), TREATAS(Ids, 'BI_Autotask_Billing_Items'[contract_id])),
"ContractCount", CALCULATE(COUNTROWS('BI_Autotask_Contracts'), 'BI_Autotask_Contracts'[contract_type_name] = EARLIER('BI_Autotask_Contracts'[contract_type_name]))
)
ORDER BY [Revenue] DESC
At $209,604 revenue per active resource, this MSP sits well above the Service Leadership benchmark of $150,000–$180,000 for mature managed service providers. The 53% overall margin is healthy and leaves room for reinvestment.
The gap between total and active resource counts matters. With 118 total resources but only 84 active, 34 inactive records are dragging down the per-head number to $149,210. For board reporting or investor conversations, the active-only figure is the accurate one. The inactive records should be reviewed and archived if they represent former employees.
Utilization tells the productivity story. The portfolio-wide 75.6% billable rate is solid, but individual variance is significant. API Integration runs at 89.6%, Michael Brown at 80.9%, while Lisa Anderson sits at 52.7% and David Chen at 55.6%. Those two resources log high total hours but lose nearly half to non-billable work. That is either an internal projects allocation (acceptable) or a time entry discipline problem (fixable).
Monthly revenue has grown from $827K in September 2024 to a peak of $1.34M in April 2025, a 62% increase over eight months. The recent dip to $1.03M in June 2025 bears watching. If headcount has grown in that period but revenue is flattening, per-employee productivity may be declining.
The contract mix is heavily weighted toward recurring services at 89.3% of total revenue. That is exactly where an MSP wants to be. The 36.7% margin on Time & Materials work suggests either aggressive pricing to win projects or underestimation of effort on T&M engagements.
5 priorities based on the findings above
34 inactive resources inflate your headcount and dilute per-employee metrics. Review each one. If they are former employees, archive them. If they are contractors who work intermittently, tag them separately. Accurate headcount is the foundation of every workforce metric in this report.
Lisa Anderson (52.7% utilization, 1,554 total hours) and David Chen (55.6%, 2,060 hours) are logging significant time but losing close to half on non-billable work. Pull their time entries by work type. If it is internal projects, make sure those projects are justified. If it is admin overhead or rework, address the root cause. Moving either resource from 55% to 70% utilization would recover hundreds of billable hours.
Time & Materials contracts carry a 36.7% margin compared to 55% on recurring services. That 18-point gap matters at $1.84M in T&M revenue. Before renewing T&M agreements, audit the rate card against actual resource costs. A 5-point margin improvement on T&M alone would add $92K to the bottom line.
Revenue dropped from $1.34M in April to $1.03M in June. If you added staff during that period, per-employee revenue is compressing. Cross-reference this with hiring dates. If headcount was flat, the decline is seasonal or client-driven. If headcount grew, you are diluting productivity and need to ramp new hires faster.
Before approving the next hire, calculate whether the expected revenue from new clients or capacity will sustain $209K per head. If a new technician costs $85K fully loaded and takes 6 months to ramp, you need at least $105K in incremental annual revenue to break even within the first year. Use this number as a gate for headcount decisions.
An active resource is any user record in Autotask where the is_active flag is set to true. This typically means they are a current employee or contractor who can be assigned to tickets and log time. Inactive resources include former employees, disabled accounts, and placeholder records.
Total revenue from all billing items in Autotask is divided by the number of resources. This report shows both per-total (118 resources) and per-active (84 resources) figures. The revenue includes recurring services, time and materials, block hours, and product/material charges.
Service Leadership benchmarks show that Best-in-Class MSPs generate $180,000 or more per employee annually. The median sits around $140,000–$160,000. MSPs below $120,000 per employee typically have utilization or pricing problems. This dataset at $209,604 per active resource is above Best-in-Class.
Revenue per employee can look healthy even if utilization is low, as long as pricing is high enough. But low utilization means you are paying for capacity you are not selling. A team at 60% utilization and $200K per head has room to grow without hiring. A team at 85% utilization and $200K per head is at capacity and needs new hires to grow revenue.
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