A contract-level profitability analysis across 187 active contracts from Autotask PSA. This report pinpoints the 23 contracts running at a loss, totaling -$312K in combined losses, and breaks down which contract types carry the most risk.
A contract-level profitability analysis across 187 active contracts from Autotask PSA. This report pinpoints the 23 contracts running at a loss, totaling -$312K in combined losses, and breaks down which contract types carry the most risk.
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 contract-level profitability analysis across 187 active contracts from Autotask PSA. This report pinpoints the 23 contracts running at a loss, totaling -$312K in combined losses, and breaks down which contract types carry the most risk.
Key financial metrics across all 187 active contracts from Autotask PSA billing data.
The worst-performing contracts ranked by total loss, with contract type and margin shown for context.
| Contract | Client | Type | Revenue | Cost | Loss | Margin |
|---|---|---|---|---|---|---|
| Contract A | Client E | Managed Services | $142K | $198K | -$56K | -39.4% |
| Contract B | Client K | Managed Services | $18K | $72K | -$54K | -300% |
| Contract C | Client L | T&M Block Hours | $25K | $52K | -$27K | -108% |
| Contract D | Client M | Managed Services | $89K | $108K | -$19K | -21.3% |
| Contract E | Client N | Per Device | $34K | $46K | -$12K | -35.3% |
| Contract F | Client O | Managed Services | $67K | $75K | -$8K | -11.9% |
| Contract G | Client P | T&M Block Hours | $12K | $19K | -$7K | -58.3% |
| Contract H | Client Q | Per Device | $45K | $51K | -$6K | -13.3% |
| Contract I | Client R | Managed Services | $28K | $33K | -$5K | -17.9% |
| Contract J | Client S | Per User | $8K | $12K | -$4K | -50.0% |
Contract B is the worst by margin. At -300%, costs run 4x the revenue. But Contract A causes the most absolute damage at -$56K. Together, the top 3 contracts account for $137K in losses -- 44% of all contract losses.
EVALUATE
TOPN(
10,
ADDCOLUMNS(
SUMMARIZE(
'BI_Autotask_Billing_Items',
'BI_Autotask_Contracts'[contract_name],
'BI_Autotask_Companies'[company_name],
'BI_Autotask_Contracts'[contract_type]
),
"Revenue", [Revenue - Total],
"Cost", [Cost - Total],
"Profit", [Profit - total],
"Margin", [Profit - total - percentage]
),
[Profit], ASC
)
ORDER BY [Profit] ASC
Average margin and contract count per type. Higher bars are healthier. The number of unprofitable contracts is shown on the right.
Per User contracts deliver the best margins at 55.2% average, with only 2 out of 22 running at a loss. Fixed Price and T&M Block Hours contracts sit below 42% margin, which signals tighter pricing or scope creep. Managed Services has the highest raw count of unprofitable contracts (11), but that is partly because it is the largest category with 89 contracts total.
EVALUATE SUMMARIZECOLUMNS('BI_Autotask_Contracts'[contract_type_name], "ContractCount", COUNTROWS('BI_Autotask_Contracts'))
How all 187 contracts break down by margin band. The red segment on the right represents contracts losing money.
59% of contracts sit above 40% margin -- that is the healthy core of the portfolio. The 16 contracts in the 0-20% band are worth watching: they are one bad quarter away from going negative. Combined with the 23 already-unprofitable contracts, that is 39 contracts (20.9%) in the danger zone.
Not all unprofitable contracts are equal. The top 3 account for a disproportionate share of total losses.
The loss curve is steep. Contracts A, B, and C alone generate $137K in losses -- 44% of the total $312K. Fixing or renegotiating just those three contracts would cut total portfolio losses nearly in half. The top 10 contracts cover 90% of all losses, meaning the remaining 13 unprofitable contracts contribute only $31K combined.
EVALUATE
VAR _ContractProfits =
ADDCOLUMNS(
SUMMARIZE('BI_Autotask_Billing_Items', 'BI_Autotask_Contracts'[contract_name]),
"Profit", [Profit - total]
)
RETURN
ROW(
"TotalLoss", SUMX(FILTER(_ContractProfits, [Profit] < 0), [Profit]),
"Top3Loss", SUMX(TOPN(3, FILTER(_ContractProfits, [Profit] < 0), [Profit], ASC), [Profit]),
"UnprofitableCount", COUNTROWS(FILTER(_ContractProfits, [Profit] < 0))
)
11 of 23 unprofitable contracts (48%) are Managed Services. Here is the breakdown of those 89 MS contracts.
Managed Services contracts make up 47.6% of the portfolio but generate 65.7% of all losses. The typical pattern: a flat monthly fee that was priced years ago, while the client's environment grew in complexity and ticket volume. Contract B is the extreme case -- $18K in revenue against $72K in costs, a contract that likely started small and was never repriced as the client scaled.
The 78 profitable MS contracts average a 58.3% margin, proving the model works when priced correctly. The problem is not the contract type itself. It is stale pricing and missing scope boundaries on specific deals.
Contracts A, B, and C collectively lose $137K. Contract B stands out with a -300% margin, meaning costs run 4x the revenue. These three contracts need immediate review -- renegotiation, scope reduction, or termination.
11 unprofitable MS contracts lose $205K combined. The root cause is flat-fee pricing that has not kept up with growing service demands. The profitable MS contracts average 58.3% margin, so the model is sound when pricing stays current.
These contracts are not yet losing money, but margins are razor thin. A single month of unplanned work could push any of them negative. Combined with the 23 already-unprofitable contracts, 39 contracts (20.9%) are at risk.
These two types average below 42% margin. T&M Block contracts often lose money when block hours are exhausted but work continues without billing. Fixed Price contracts suffer from scope creep that is not captured in change orders.
Concrete steps to stop the bleeding and protect margins going forward.
Contracts A, B, and C lose $137K combined. Pull their time entries, compare contracted scope to actual delivery, and build a case for repricing. For Contract B specifically (-300% margin), calculate the breakeven rate and present it to the client. If they will not accept a price correction, plan an exit.
Set a Power BI alert for any MS contract dropping below 20% margin on a rolling 3-month basis. Catch problems before they compound. The 78 profitable MS contracts prove the model works -- the failures are pricing problems, not structural ones.
Both types average below 42% margin and are vulnerable to unbilled overruns. Add automatic overage billing when block hours are exhausted. For Fixed Price contracts, define explicit scope boundaries and require change orders for anything outside them.
Revenue minus Cost per contract from Autotask billing items. Revenue is the SUM of total_amount and Cost is the SUM of our_cost in BI_Autotask_Billing_Items, grouped by contract. Margin is Profit divided by Revenue as a percentage.
MS contracts use flat monthly fees. When a client's environment grows or ticket volume increases, costs rise but revenue stays flat. Without regular repricing, the margin erodes over time. The 11 unprofitable MS contracts lost $205K, while the 78 profitable ones averaged 58.3% margin.
It means the contract costs 4x what it brings in. For every $1 of revenue, the MSP spends $4 on delivery. Contract B generated $18K in revenue but cost $72K to service, resulting in a $54K loss. This typically happens when a small contract is never repriced as the client's needs grow.
Not necessarily. Some unprofitable contracts belong to clients with other profitable contracts. Termination should be a last resort after repricing and scope reduction. Start with the biggest losses, build a business case, and negotiate. Only exit if the client refuses a fair price correction.
Monthly for the KPI dashboard, quarterly for the full contract-level breakdown. Set automated alerts for any contract dropping below 15% margin so you catch problems between formal reviews.
Yes. Copy any query from the toggle sections and paste it into DAX Studio or the Power BI Desktop performance analyzer. The queries reference standard Proxuma data model tables and measures that exist in every Proxuma Power BI deployment.
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