This report provides a detailed breakdown of which contracts are unprofitable? for managed service providers.
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
EVALUATE
ROW(
"TotalRevenue", [Revenue - Total],
"TotalCost", [Cost - Total],
"TotalProfit", [Profit - total],
"AvgMargin", [Profit - total - percentage],
"LossMakingContracts", COUNTROWS(FILTER(
ADDCOLUMNS(
SUMMARIZE('BI_Autotask_Companies', 'BI_Autotask_Companies'[company_id]),
"P", [Profit - total]
),
[P] < 0
))
)
The 14 contracts below have positive revenue but still run at a loss. The pattern across these accounts is consistent: either the billed amount underprices the actual time required, or out-of-scope work has been absorbed without additional charges. Four accounts have losses exceeding $1,000, and two exceed $10,000 — making them priority targets for pricing or scope correction.
| # | Client / Agreement | Revenue | Cost | Loss | Margin | Hrs Worked | Action |
|---|---|---|---|---|---|---|---|
| 1 | Turner-Rodriguez | $23,124 | $89,730 | -$66,606 | -288% | 22.2h | Review |
| 2 | Lopez-Reyes | $589,694 | $645,574 | -$55,879 | -9.5% | 694.5h | Review |
| 3 | Butler, Weber and Carter | $25,468 | $55,205 | -$29,737 | -117% | 71.3h | Review |
| 4 | Fox, Conner and West | $116,947 | $136,713 | -$19,765 | -16.9% | 501.6h | Reprice |
| 5 | Santiago, Ward and Beltran | $72 | $1,137 | -$1,066 | -1487% | — | Review |
| 6 | Vargas, Scott and Randall | $465 | $1,512 | -$1,048 | -225% | 1.8h | Reprice |
| 7 | Palmer, White and Decker | $7,822 | $8,460 | -$637 | -8.1% | 96.5h | Monitor |
| 8 | Shaw-Ryan | $2,803 | $3,398 | -$595 | -21.2% | 86.4h | Monitor |
| 9 | Garcia-Stuart | $719 | $995 | -$275 | -38.3% | 0.8h | Investigate |
| 10 | Perez-Ortiz | $25 | $272 | -$247 | -982% | 1.2h | Investigate |
| 11 | Hughes-Morgan | $615 | $712 | -$97 | -15.8% | 11.4h | Monitor |
| 12 | Ford, Mclean and Robinson | $59 | $100 | -$41 | -69% | 3.2h | Monitor |
| 13 | Stephens, Lopez and Jenkins | $33 | $44 | -$11 | -34% | 0.6h | Monitor |
EVALUATE
TOPN(15,
FILTER(
ADDCOLUMNS(
SUMMARIZE(
'BI_Autotask_Companies',
'BI_Autotask_Companies'[company_name]
),
"Revenue", [Revenue - Total],
"Cost", [Cost - Total],
"Profit", [Profit - total],
"ProfitPct", [Profit - total - percentage],
"HoursWorked", [Company - Hours Worked],
"HoursBilled", [Company - Hours Billed],
"EffectiveRate", [Analytics - Client Effective Rate]
),
[Revenue] > 0 && [Profit] < 0
),
[Profit], ASC
)
ORDER BY [Profit] ASC
Not all contract structures carry equal risk. Time and Materials agreements can absorb unlimited scope without automatic charge increases. Recurring Service contracts run into trouble when engineer hours are not correctly allocated against the monthly fee. Understanding which contract types in your portfolio produce the most losses gives you a structural fix, not just a client-by-client negotiation.
Fixed monthly fee covering a defined scope. Risk arises when actual hours worked exceed what the fee covers. Common in managed service blocks.
Billed per hour worked. Risk arises when rates are set too low, hours are not approved before work, or credit adjustments are applied without review.
Pre-purchased hours drawn down over time. Risk arises when block hours run out and additional work continues without repurchase.
Agreed total for a defined deliverable. Risk arises when scope is poorly defined and engineers overrun without change order process.
EVALUATE SUMMARIZECOLUMNS('BI_Autotask_Contracts'[contract_type_name], 'BI_Autotask_Contracts'[contract_status_name], "ContractCount", COUNTROWS('BI_Autotask_Contracts'))
With 694 hours worked and nearly $590K in revenue, this looks like a healthy account. The problem is that cost runs $56K above revenue. At this scale, a 9.5% negative margin represents a significant loss. The contract likely has a rate that was set years ago without adjustment for increased service complexity or engineer costs.
For every dollar this client pays, the MSP spends $3.88. With only 22 hours of recorded work, the cost overrun is not from labour volume — it likely reflects high-value engineer time, out-of-scope incidents, or internal allocations that were never charged. A billing audit on this account would typically identify unbilled work within hours.
This is the highest-volume unprofitable account. 501 hours worked with $116K revenue implies a billed rate that does not cover actual delivery cost. At an effective rate of $233/hr and a fully loaded engineer cost above that, every hour worked erodes margin. A rate review against current engineer costs would quickly show the gap.
The majority of loss-making contracts have small absolute losses. These accounts are not emergencies, but they are worth reviewing annually. Often a single rate correction or scope clarification converts them to margin-positive without any client friction.
Revenue means money was charged and invoiced. Profit is what remains after subtracting the cost of delivering that service — primarily engineer labour costs plus direct charges. When the cost to service an account exceeds what was invoiced, the result is negative profit even with positive revenue. This is most common when hourly rates are too low or when substantial time is worked but not billed.
Compare the effective rate (revenue per hour worked) against your target billing rate. If the effective rate is close to your billing rate but costs are high, the issue is likely contract scope rather than rate. If the effective rate is well below your billing rate, you are either discounting, absorbing unbilled work, or issuing credits. The hours worked vs hours billed ratio in this report provides the first signal.
Not necessarily all at once. Prioritise by absolute loss first — address the two or three largest losses before touching the smaller ones. For each, prepare a data pack showing actual hours, cost, and revenue before the conversation. Clients respond better to evidence-based discussions than to a blanket rate increase announcement.
Yes. The Autotask contracts table includes a contract_status_name column with values like Active, Inactive, and Cancelled. You can add a filter to the DAX query to limit results to active contracts only, ensuring you focus on current obligations rather than historical data.
Monthly is a practical frequency for most MSPs. Running it before contract renewal season gives you leverage in pricing discussions. Running it quarterly gives you trend data that is more persuasive in client conversations than a single month's snapshot.
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