“Revenue per Employee: Workforce Productivity and Profitability Analysis”
Autotask PSA Datto RMM Datto Backup Microsoft 365 SmileBack HubSpot IT Glue All reports
AI-GENERATED REPORT
You searched for:

Revenue per Employee: Workforce Productivity and Profitability Analysis

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.

Built from: Autotask PSA HiBob HR
How this report was made
1
Autotask PSA
Multiple data sources combined
2
Proxuma Power BI
Pre-built MSP semantic model, 50+ measures
3
AI via MCP
Claude or ChatGPT writes DAX queries, executes them, formats output
4
This Report
KPIs, breakdowns, trends, recommendations
Ready in < 15 min

Revenue per Employee: Workforce Productivity and Profitability Analysis

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

Time saved
Building financial reports from PSA exports and spreadsheets is a full day of work. This report delivers it in minutes.
Margin visibility
Revenue numbers alone do not tell the story. This report connects revenue to cost for true profitability.
Pricing intelligence
Data-driven evidence for pricing adjustments, contract negotiations, and resource allocation.
Report categoryFinancial & Revenue
Data sourceAutotask PSA · Datto RMM · Datto Backup · Microsoft 365 · SmileBack · HubSpot · IT Glue
RefreshReal-time via Power BI
Generation timeUnder 15 minutes
AI requiredClaude, ChatGPT or Copilot
AudienceMSP owners, finance leads
Where to find this in Proxuma
Power BI › Financial › Revenue per Employee: Workforce Produ...
What you can measure in this report
Summary Metrics
Revenue per Resource — Active vs Total Headcount
Top 10 Resources by Hours Worked
Monthly Revenue Trend
Revenue by Contract Type
Analysis
What Should You Do With This Data?
Frequently Asked Questions
REVENUE / ACTIVE RESOURCE
TOTAL REVENUE
PROFIT / ACTIVE RESOURCE
BILLABLE UTILIZATION
AI-Generated Power BI Report
Revenue per Employee:
Workforce Productivity and Profitability Analysis

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.

Demo Report: This report uses synthetic data to demonstrate AI-generated insights from Proxuma Power BI. The structure, DAX queries, and analysis reflect real MSP data patterns.
1.0 Summary Metrics
REVENUE / ACTIVE RESOURCE
$209,604
84 active resources
TOTAL REVENUE
$17.61M
53.0% overall margin
PROFIT / ACTIVE RESOURCE
$111,118
After direct cost
BILLABLE UTILIZATION
457 h
Utilisation 75.6%
View DAX Query — Summary Metrics
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])
)
What are these DAX queries? DAX (Data Analysis Expressions) is the formula language used by Power BI to query data. Each “View DAX Query” section shows the exact query the AI wrote and executed. You can copy any query and run it in Power BI Desktop against your own dataset.
2.0 Revenue per Resource — Active vs Total Headcount

The gap between total resources (118) and active resources (84) significantly changes the per-employee number

MetricPer 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 resource325.1h456.7h+40.5%
71.2% Active
Active Resources
(84 of 118)
75.6% Billable
Billable Utilization
(38,364h of 50,752h)
53% Margin
Overall Profit Margin
($9.3M of $17.6M)
View DAX Query — Revenue per Resource Breakdown
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])
)
3.0 Top 10 Resources by Hours Worked

Ranked by total hours logged, with billable split and utilization rate per resource

#ResourceTotal HoursBillableNon-BillableTickets TouchedUtilisation
1Dr. Amber Ayala DVM2,399.8h1,749.2h650.6h60372.9%
2James Li2,136.0h1,303.4h832.6h79461.0%
3Kevin Allen2,060.1h1,145.0h915.1h9955.6%
4Maxwell Reed2,050.3h1,837.7h212.6h2,61389.6%
5Andrew Roberts1,887.7h1,527.1h360.6h2,29780.9%
6David Hunt1,862.2h1,415.9h446.3h8476.0%
7Chelsea Thomas1,779.6h1,157.0h622.6h14965.0%
8Jennifer King1,584.5h1,228.0h356.5h76377.5%
9Jerry Mcfarland1,554.0h819.2h734.8h48952.7%
10Gregory Horn1,504.5h957.0h547.5h2,01763.6%
Dr. J. Adams
2,400h
72.9%
S. Martinez
2,136h
61.0%
D. Chen
2,060h
55.6%
API Integration
2,050h
89.6%
M. Brown
1,888h
80.9%
J. Wilson
1,862h
76.0%
R. Thomas
1,780h
65.0%
E. Davis
1,585h
77.5%
L. Anderson
1,554h
52.7%
G. Horn
1,505h
63.6%
View DAX Query — Top 10 Resources by Hours
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
)
4.0 Monthly Revenue Trend

Revenue per month over the last 10 months showing growth trajectory

MonthRevenue
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
View DAX Query — Monthly Revenue
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
5.0 Revenue by Contract Type

Where the $17.6M comes from, broken down by contract category with margin per type

Contract TypeRevenueCostMarginContractsShare of Revenue
Recurring Service$15,724,070$7,067,81055.1%1,20789.31%
Time & Materials$1,840,111$1,163,62936.8%50410.45%
Fixed Price$17,210$4,31175.0%50.10%
Block Hours$7,502$3,62851.6%1730.04%
View DAX Query — Revenue by Contract Type
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
6.0 Analysis

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.

7.0 What Should You Do With This Data?

5 priorities based on the findings above

1

Clean up inactive resource records

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.

2

Investigate low-utilization, high-hours resources

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.

3

Review T&M contract margins before renewal season

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.

4

Track the June revenue decline against headcount changes

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.

5

Use $209K per active resource as your hiring benchmark

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.

8.0 Frequently Asked Questions
What counts as an "active" resource?

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.

How is revenue per employee calculated?

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.

What is a good revenue-per-employee benchmark for MSPs?

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.

Why is billable utilization important alongside revenue per employee?

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.

Can I run this report against my own 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.

Generate this report from your own data

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