A breakdown of cost, hours, revenue, and profit margin per client. Identifies loss-making accounts, cost-per-hour outliers, and concentration risk in your service delivery spend.
A breakdown of cost, hours, revenue, and profit margin per client. Identifies loss-making accounts, cost-per-hour outliers, and concentration risk in your service delivery spend.
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
A breakdown of cost, hours, revenue, and profit margin per client. Identifies loss-making accounts, cost-per-hour outliers, and concentration risk in your service delivery spend.
All clients sorted by total service delivery cost, with revenue, profit, and margin indicators
| Company | Hours | Tickets | Revenue |
|---|---|---|---|
| Craig-Huynh | 4,370 | 5,458 | $2,324,617 |
| Little Group | 3,791 | 5,290 | $1,431,177 |
| Lewis LLC | 2,801 | 1,758 | $2,212,915 |
| Martin Group | 2,217 | 2,775 | $637,092 |
| Wall PLC | 1,697 | 2,376 | $476,622 |
| Rivers et al | 1,662 | 6,381 | — |
| Ramos Group | 1,171 | 1,728 | — |
| Thompson et al | 1,006 | 1,803 | — |
EVALUATE TOPN(10, SUMMARIZECOLUMNS('BI_Autotask_Companies'[company_name], "Tickets", COUNTROWS('BI_Autotask_Tickets'), "HoursWorked", SUM('BI_Autotask_Time_Entries'[hours_worked]), "Revenue", SUM('BI_Autotask_Billing_Items'[total_amount])), [HoursWorked], DESC)
Derived cost per logged hour per client, showing where service delivery is efficient and where costs are disproportionate to labor input
| Client | Cost | Hours | Cost/Hour | Efficiency |
|---|---|---|---|---|
| Client H | $206,868 | 84 | $2,463 | Very High |
| Client C | $645,574 | 695 | $929 | Very High |
| Client B | $894,222 | 2,801 | $319 | Above Avg |
| Client A | $1,013,970 | 4,370 | $232 | Normal |
| Client F | $224,394 | 1,312 | $171 | Normal |
| Client D | $603,420 | 3,791 | $159 | Normal |
| Client I | $141,416 | 1,006 | $141 | Normal |
| Client L | $107,091 | 782 | $137 | Normal |
| Client K | $120,188 | 865 | $139 | Normal |
| Client G | $214,395 | 1,697 | $126 | Efficient |
| Client J | $121,483 | 962 | $126 | Efficient |
| Client E | $248,212 | 2,217 | $112 | Efficient |
EVALUATE
ADDCOLUMNS(
SUMMARIZE(
BI_Autotask_Tickets,
BI_Autotask_Tickets[company_name]
),
"TotalCost", CALCULATE([Service Delivery - Total Cost]),
"TotalHours", CALCULATE([Time Entries - Total Hours]),
"CostPerHour", DIVIDE(
CALCULATE([Service Delivery - Total Cost]),
CALCULATE([Time Entries - Total Hours])
)
)
ORDER BY [CostPerHour] DESC
Side-by-side comparison of revenue and cost per client, making it easy to spot accounts where cost eats into margin
Deep dive into the only account operating at a loss: $645,574 in cost against $589,694 in revenue
Client C stands out because the cost structure does not match the labor input. With only 695 logged hours, the $645K total cost implies roughly $555K in non-labor expenses: subcontractor fees, hardware procurement, licensing costs, or project materials that run through the cost center but are not recovered in the contract price.
The revenue of $589,694 is not unusually low for a mid-tier client. The problem is entirely on the cost side. If the non-labor costs were stripped out, the labor-only cost at a typical $150/hour rate would be around $104K, which would give Client C a healthy 82% margin on labor alone.
This means the fix is not about service efficiency. It is about contract structure. Either the pass-through costs are not being billed, the contract does not account for materials, or a one-time project expense inflated the period cost without matching revenue.
EVALUATE
ADDCOLUMNS(
ROW("Client", "Client C"),
"TotalCost", CALCULATE([Service Delivery - Total Cost],
BI_Autotask_Tickets[company_name] = "Client C"),
"LaborHours", CALCULATE([Time Entries - Total Hours],
BI_Autotask_Tickets[company_name] = "Client C"),
"Revenue", CALCULATE([Revenue - Total],
BI_Autotask_Tickets[company_name] = "Client C"),
"Profit", CALCULATE([Revenue - Total],
BI_Autotask_Tickets[company_name] = "Client C")
- CALCULATE([Service Delivery - Total Cost],
BI_Autotask_Tickets[company_name] = "Client C"),
"CostPerHour", DIVIDE(
CALCULATE([Service Delivery - Total Cost],
BI_Autotask_Tickets[company_name] = "Client C"),
CALCULATE([Time Entries - Total Hours],
BI_Autotask_Tickets[company_name] = "Client C")
)
)
Clients grouped by cost efficiency based on margin and cost-per-hour performance
| Tier | Clients | Characteristics | Margin Range |
|---|---|---|---|
| High Efficiency | L, J, E | Low cost/hour ($112-$137), margins above 61% | 61% - 67% |
| Normal | A, D, K, I, G, F | Cost/hour $126-$232, margins between 52% and 58% | 52% - 58% |
| Review Needed | B, H | Higher cost/hour ($319-$2,463) but still profitable due to strong revenue | 50% - 60% |
| Loss-Making | C | Cost exceeds revenue, $929/hour cost rate, probable non-labor cost issue | -9.5% |
The only loss-making account in the portfolio. With $645K in cost against $590K in revenue, this client has a -9.5% margin. The cost-per-hour of $929 (versus a portfolio average of around $220) points to significant non-labor costs that are not being recovered through the contract. This needs a contract review, not a service efficiency fix.
Client A ($1.01M) and Client B ($894K) together represent $1.91M of the $4.54M total service cost. Both are profitable with margins above 56%, so this is not a problem today. But it is a concentration risk. If either client churns or renegotiates terms, the impact on the business would be significant.
The overall portfolio margin of 53% is healthy for managed services. The most efficient clients (L, J, E) run above 61% margin with cost-per-hour rates below $140. This is a well-structured service delivery operation with one outlier that needs attention.
5 priorities based on the findings above
Pull the full cost breakdown for Client C: labor, materials, subcontractor invoices, license pass-throughs. With only 695 hours logged but $645K in total cost, roughly $540K sits outside labor. Find out what it is, whether it was billed, and whether the contract covers it. If not, renegotiate the contract terms or stop absorbing those costs.
Client H has only 84 logged hours but $206K in cost, producing a cost-per-hour rate of $2,463. The 50.3% margin means the revenue covers it, but barely. Check whether these are recurring costs or a one-time project. If recurring, the margin will erode over time.
These two accounts make up 42% of cost and 46% of revenue. Build a scenario model for what happens if either client downsizes or leaves. Consider diversifying the client base to reduce dependency on the top two accounts.
The range from $112/hour (Client E) to $2,463/hour (Client H) is too wide to ignore. Set a target cost-per-hour band (e.g., $120-$200) and investigate any client that falls outside it. Outliers indicate either pricing problems or cost allocation issues that can be fixed.
Client L runs at 67.4% margin with a $137/hour cost rate and $328K in revenue. That is the best efficiency-to-revenue ratio in the portfolio. Study what makes this engagement work: contract structure, service mix, team allocation. Then apply those patterns to mid-tier clients like F and G where margins could improve.
Service delivery costs are pulled from Autotask PSA through Proxuma Power BI. This includes labor costs (based on internal hourly rates multiplied by logged hours), plus any material, subcontractor, or pass-through costs recorded against the client's contracts and tickets. The AI runs DAX queries against the semantic model to calculate totals per client.
A high cost-per-hour number means the client has significant costs that are not tied to logged technician hours. This typically happens with hardware procurement, software licensing, subcontractor fees, or project materials. The hours in the denominator only reflect internal labor, so non-labor costs inflate the ratio. These clients need a cost breakdown, not more efficient time tracking.
Industry benchmarks for managed service providers range from 40% to 60% gross margin depending on service mix. Pure labor-based services tend to run higher (55-65%) while engagements with significant hardware or licensing pass-throughs run lower. A client below 40% deserves a contract review. A client below 0% needs immediate attention.
Quarterly for standard monitoring. Monthly if you have clients in the review or loss-making tier. Before any contract renewal, run it filtered to that specific client to see their cost trajectory. The data updates as Autotask records come through, so the report is always based on the latest available information.
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 one 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