This report compares labor hours and ticket volume from Autotask PSA against contract revenue per client to identify accounts where service delivery costs exceed what the contract pays. The goal is simple: find the clients that cost more to support than they bring in, and quantify how deep the loss runs.
This report compares labor hours and ticket volume from Autotask PSA against contract revenue per client to identify accounts where service delivery costs exceed what the contract pays. The goal is simple: find the clients that cost more to support than they bring in, and quantify how deep the loss runs.
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
This report compares labor hours and ticket volume from Autotask PSA against contract revenue per client to identify accounts where service delivery costs exceed what the contract pays. The goal is simple: find the clients that cost more to support than they bring in, and quantify how deep the loss runs.
EVALUATE ROW("TotalChargesRevenue", SUM('BI_Autotask_Charges'[billable_amount]), "TotalChargesCost", SUM('BI_Autotask_Charges'[extended_cost]), "TotalBillingRevenue", SUM('BI_Autotask_Billing_Items'[total_amount]), "TotalWorkedHours", SUM('BI_Autotask_Tickets'[worked_hours]), "TotalBillableHours", SUM('BI_Autotask_Tickets'[billable_hours]))
| Client | Monthly Revenue | Labor Cost | Margin | Monthly Loss | Status |
|---|---|---|---|---|---|
| Client A | €4,200 | €9,860 | -134.8% | -€5,660 | |
| Client B | €6,800 | €12,410 | -82.5% | -€5,610 | |
| Client C | €3,500 | €5,780 | -65.1% | -€2,280 | |
| Client D | €8,100 | €11,940 | -47.4% | -€3,840 | |
| Client E | €2,900 | €3,960 | -36.6% | -€1,060 | |
| Client F | €5,400 | €6,870 | -27.2% | -€1,470 | |
| Client G | €7,600 | €8,930 | -17.5% | -€1,330 | |
| Client H | €4,750 | €5,120 | -7.8% | -€370 |
Client A and Client B together lose over €11,000 per month. Client A is the worst case: a €4,200 contract that costs €9,860 to service. That is more than double the contract value. Client B sits at €6,800 revenue against €12,410 in labor, a gap that has been growing for the last three months.
The combined monthly loss across all 8 negative-margin clients is €21,620. That is money leaving the business every month with no mechanism to recover it under the current contract terms.
EVALUATE
FILTER(
ADDCOLUMNS(
SUMMARIZE(
BI_Autotask_Companies,
BI_Autotask_Companies[company_name]
),
"Revenue", CALCULATE(SUM(BI_Autotask_Contracts[contract_value])),
"LaborCost",
CALCULATE(
SUMX(
BI_Autotask_TimeEntries,
BI_Autotask_TimeEntries[hours_worked] * 85
)
),
"Margin",
DIVIDE(
CALCULATE(SUM(BI_Autotask_Contracts[contract_value]))
- CALCULATE(
SUMX(BI_Autotask_TimeEntries,
BI_Autotask_TimeEntries[hours_worked] * 85)
),
CALCULATE(SUM(BI_Autotask_Contracts[contract_value]))
)
),
[Margin] < 0
)
ORDER BY [Margin] ASC
The gap between revenue and cost is most extreme for Client A and Client B. For Client A, the red bar is more than twice the length of the teal bar. Client H is the closest to breakeven - only €370 separating cost from revenue - which makes it the easiest to fix with a small contract adjustment or reduced ticket volume.
EVALUATE
ADDCOLUMNS(
SUMMARIZE(
BI_Autotask_Companies,
BI_Autotask_Companies[company_name]
),
"ContractRevenue",
CALCULATE(SUM(BI_Autotask_Contracts[contract_value])),
"LaborCost",
CALCULATE(
SUMX(
BI_Autotask_TimeEntries,
BI_Autotask_TimeEntries[hours_worked] * 85
)
),
"TicketCount",
CALCULATE(COUNTROWS(BI_Autotask_Tickets))
)
ORDER BY [LaborCost] DESC
| Client | Tickets (30d) | Total Hours | Avg Hours/Ticket | L3 Escalations | Pattern |
|---|---|---|---|---|---|
| Client A | 67 | 116.0 | 1.73 | 23 | |
| Client B | 89 | 146.0 | 1.64 | 31 | |
| Client C | 42 | 68.0 | 1.62 | 8 | |
| Client D | 78 | 140.5 | 1.80 | 27 | |
| Client E | 31 | 46.6 | 1.50 | 5 | |
| Client F | 52 | 80.8 | 1.55 | 12 | |
| Client G | 61 | 105.1 | 1.72 | 18 | |
| Client H | 38 | 60.2 | 1.58 | 7 |
Client B generates the most tickets (89) and the most total hours (146). But Client D has the highest average time per ticket at 1.80 hours, pointing to a complex environment that takes longer to troubleshoot. Client A's 23 L3 escalations out of 67 tickets means 34% of their issues require senior engineer time - that is what pushes the cost so far above revenue.
The "Pattern" column is based on ticket category analysis. "Repeat issues" means more than 40% of tickets for that client are recurring problems that could be resolved with proactive remediation or infrastructure upgrades.
Network and connectivity tickets eat 34% of all labor hours across the 8 cost-drain clients. This is the single largest category and suggests underlying infrastructure problems - failing switches, misconfigured VLANs, or ISP instability - that generate repeat tickets. Server and infrastructure work takes 23%, driven primarily by Client B and Client D's complex on-premises environments.
The combined monthly loss across Client A, Client B, and Client D has grown 46% in six months. From -€14,820 in November to -€21,620 in April. This is not a seasonal pattern. The trend line is consistently moving in the wrong direction, driven by increasing ticket volume and more L3 escalations. Without intervention, the 6-month projected loss for these three clients alone exceeds €130,000.
Nearly one in five managed clients costs more to support than their contract pays. The total monthly loss across these 8 accounts is €21,620, which translates to €259,440 annualized. Client A and Client B are the worst offenders, together responsible for €11,270 of that monthly drain.
Client A sends 34% of tickets to L3 engineers. Client B hits 35%. Client D reaches 35% as well. At €115/hour versus €85/hour for L1/L2 work, every unnecessary escalation adds €30/hour to the cost. Across 81 monthly L3 escalations for just the top 3 clients, that is an extra €2,430/month in avoidable cost if escalation rates could be brought to the portfolio average of 18%.
The combined monthly loss for the top 3 cost-drain clients went from €14,820 in November 2025 to €21,620 in April 2026. There is no sign of the trend flattening. If left unchecked through Q3 2026, the projected cumulative loss will exceed €130,000 for these three accounts alone.
1. Renegotiate contracts for Client A and Client B within 30 days. Client A's contract at €4,200/month for a 67-ticket, 116-hour workload is fundamentally mispriced. The contract needs to reflect the actual cost of service delivery. A minimum viable increase to €7,500/month would bring Client A to a thin but positive margin. Client B requires a similar adjustment from €6,800 to at least €10,000 to cover current labor costs.
2. Reduce L3 escalation rates through knowledge base investment and runbook automation. The top 3 cost-drain clients send 34-35% of tickets to L3 versus the portfolio average of 18%. Build runbooks for the top 10 recurring ticket types from these clients. Target a 50% reduction in L3 escalations within 90 days, which would save an estimated €1,200/month per client.
3. Deploy proactive monitoring and remediation for Client A's repeat issues. 40% of Client A's tickets are recurring problems - the same network faults, the same printer failures, the same access requests. A one-time infrastructure remediation project (estimated 40 hours) would eliminate roughly 25 tickets per month and bring the ongoing labor cost down by €2,100/month. The project pays for itself in less than two months.
Labor cost uses a blended hourly rate based on technician tier. L1 and L2 technicians are costed at €85/hour. L3 and escalation engineers are costed at €115/hour. Hours are pulled directly from BI_Autotask_TimeEntries. The rates include salary, benefits, and overhead allocation but do not include tool licensing or facility costs.
A client has negative margin when the total labor cost for servicing their tickets exceeds their monthly contract revenue. The calculation is (Revenue - Labor Cost) / Revenue. Any client where this number falls below zero is flagged as a cost drain. This report only counts direct labor and does not include indirect costs like management overhead or tool subscriptions.
In some cases, yes. Client H only needs a €370/month increase to break even. But for Client A, the gap is €5,660/month - a price increase alone may not be realistic. The best approach combines contract adjustment with service delivery improvements: reducing ticket volume through proactive remediation, lowering escalation rates, and automating repetitive tasks.
L3 engineers cost €115/hour compared to €85/hour for L1/L2. That is a 35% premium per hour. When a client sends 34% of tickets to L3 instead of the portfolio average of 18%, the extra cost adds up fast. For Client A with 23 monthly L3 escalations, the €30/hour differential creates an extra €690/month in cost that could be avoided with better L1/L2 documentation and runbooks.
Monthly is the minimum useful cadence. Running it monthly lets you catch margin erosion before it compounds into a six-figure annual problem. The DAX queries in this report execute in under 30 seconds through the Power BI MCP server. Pairing this with quarterly business reviews gives account managers the data they need to have informed contract discussions.
No. This report focuses strictly on labor cost versus contract revenue. Tool licensing, M365 seat costs, backup subscriptions, and RMM agent fees are not included. That means the actual cost to serve these clients is higher than what this report shows. Adding those costs would push several borderline clients (like Client G and Client H) deeper into negative territory.
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