“Managed vs Project vs Break-Fix: Which Service Type Is Most Profitable?”
Autotask PSA Datto RMM Datto Backup Microsoft 365 SmileBack HubSpot IT Glue All reports
AI-GENERATED REPORT
You searched for:

Managed vs Project vs Break-Fix: Which Service Type Is Most Profitable?

Revenue and margin analysis across 7 billing sub-types, covering 122,884 billing items and 17.6M in total revenue. Data sourced from Autotask PSA via Proxuma Power BI.

Built from: Autotask PSA
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

Managed vs Project vs Break-Fix: Which Service Type Is Most Profitable?

Revenue and margin analysis across 7 billing sub-types, covering 122,884 billing items and 17.6M in total revenue. Data sourced from Autotask PSA via Proxuma Power BI.

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 › Managed vs Project vs Break-Fix: Whic...
What you can measure in this report
Summary
Revenue by Service Type
Margin Deep Dive
Volume vs Profitability
The Labour Cost Problem
Key Findings
Recommended Actions
Methodology
Frequently Asked Questions
Total Revenue
Recurring %
Overall Margin
AI-Generated Power BI Report

Managed vs Project vs Break-Fix: Which Service Type Is Most Profitable?

Revenue and margin analysis across 7 billing sub-types, covering 122,884 billing items and 17.6M in total revenue. Data sourced from Autotask PSA via Proxuma Power BI.

1.0 Summary
Total Revenue
€17.6M
122,884 billing items
Recurring %
54.4%
9.6M from recurring
Overall Margin
52.8%
9.3M profit
Highest Margin Type
100%
Milestone / Fixed Price
How to read this: Total revenue of 17.6M across all billing sub-types, with 54.4% coming from recurring service contracts. The overall margin sits at 52.8%, but this average masks extreme differences between sub-types. Milestone billing shows 100% margin (no cost recorded), while time entry labour runs at negative 341%.
2.0 Revenue by Service Type

The segmented bar below shows how total revenue splits across billing sub-types. Recurring service dominates at 54.4% of revenue, followed by milestone/fixed price at 21.8%. Materials and ad-hoc charges fill the middle, while time entries and expenses sit at the bottom.

Revenue
54.4%
21.8%
15.0%
5.2%
Recurring Service Milestone/Fixed Materials Ad-hoc Labour Expense Project Cost
58.0% margin Recurring Service
100% margin Milestone / Fixed Price
6.1% margin Materials / Products
50.5% margin Ad-hoc Charges
-341% margin Time Entry / Labour
DAX Query: Revenue by Billing Sub-Type
EVALUATE
ADDCOLUMNS(
    SUMMARIZECOLUMNS(
        'BI_Autotask_Billing_Items'[sub_type],
        "Revenue", SUM('BI_Autotask_Billing_Items'[total_amount]),
        "Cost", SUM('BI_Autotask_Billing_Items'[our_cost]),
        "ItemCount", COUNTROWS('BI_Autotask_Billing_Items')
    ),
    "Margin", DIVIDE([Revenue] - [Cost], [Revenue], 0)
)
ORDER BY [Revenue] DESC
3.0 Margin Deep Dive

The horizontal bars below show each sub-type's margin side by side. The contrast is stark: milestone and project cost billing show 100% margin (no cost recorded in PSA), recurring service sits at a healthy 58%, and then there is a sharp drop. Materials barely clear 6%, and labour runs deeply negative.

Milestone/Fixed
100%
3.8M
Project Cost
94K
Recurring
58.0%
9.6M
Ad-hoc
50.5%
918K
Expense
22.9%
225K
Materials
6.1%
2.6M
Labour
-341%
274K
Why 100% margin on milestone? Autotask records milestone and project cost billing without an associated our_cost value. The actual delivery cost is tracked through time entries and expenses on the parent project. So milestone revenue shows as pure profit in this view, while the cost appears under the labour and expense sub-types. This is a data model artifact, not actual 100% margin.
4.0 Volume vs Profitability

High volume does not mean high profit. Time entry/labour has the most billing items by far (69,321), yet generates the lowest revenue and the worst margin. Recurring service hits the sweet spot: large volume (42,607 items), strong revenue (9.6M), and healthy margin (58%).

Sub-Type Items Revenue Cost Profit Margin
Recurring Service 42,607 €9,577,503 €4,025,063 €5,552,440 58.0%
Milestone/Fixed Price 2,047 €3,845,490 €0 €3,845,490 100%
Materials/Products 4,597 €2,644,523 €2,483,170 €161,353 6.1%
Ad-hoc Charges 3,943 €917,546 €453,912 €463,634 50.5%
Time Entry/Labour 69,321 €273,878 €1,207,179 -€933,301 -341%
Expense 182 €225,026 €173,409 €51,617 22.9%
Project Cost 187 €94,305 €0 €94,305 100%
DAX Query: Tickets by Type
EVALUATE
SUMMARIZECOLUMNS(
    'BI_Autotask_Tickets'[ticket_type_name],
    "TicketCount", [Tickets - Count - Created],
    "AvgHrs", [Tickets - Avg Hours Per Ticket]
)
ORDER BY [TicketCount] DESC
5.0 The Labour Cost Problem

This is the number that should get attention in every MSP finance meeting. Time entries bill 273,878 in revenue but cost 1,207,179 to deliver. That is a net loss of 933,301 on labour alone.

Most of this cost is invisible in standard P&L reporting because it gets absorbed into the overall margin. Recurring service revenue at 9.6M provides enough buffer to cover the labour shortfall, but that means your managed service contracts are quietly subsidizing unbilled project work and break-fix labour.

Where the hours go: The ticket data shows 69,321 time entries across all ticket types. Incidents (break-fix) average 0.54 hours each, but with 27,664 tickets that adds up fast. Service requests average 0.78 hours across 12,653 tickets. Change requests (project work) average a full hour per ticket across 7,247 tickets. Only a fraction of these hours get billed as standalone line items.

The real question is not "why is labour losing money" but "how much of this labour cost is already covered by recurring service fees?" If your managed contracts include unlimited support, the labour cost is expected. If they do not, you have a billing gap.

Time Entry / Labour
€274K billed
€1,207K cost
Recurring Service
€9,578K billed
€4,025K cost
Materials / Products
€2,645K billed
€2,483K cost
Revenue Cost
DAX Query: Profitability by Client (Top 15)
EVALUATE
TOPN(15,
    SUMMARIZECOLUMNS(
        'BI_Autotask_Companies'[company_name],
        "Revenue", [Revenue - Total],
        "Cost", [Cost - Total],
        "Profit", [Profit - total],
        "Margin", [Profit - total - percentage]
    ),
    [Revenue], DESC
)
ORDER BY [Revenue] DESC
6.0 Key Findings
!

Labour is a massive loss center

Time entry billing loses 933K annually. At -341% margin, every euro billed as labour actually costs 4.41 to deliver. This is the single largest drag on profitability, and it is hidden by the strength of recurring revenue.

!

Materials margin sits at just 6.1%

With 2.6M in revenue and 2.5M in cost, materials/products barely break even. On a line-by-line basis, many items likely sell at a loss after accounting for procurement, shipping, and handling time. A 6% margin leaves zero room for returns or write-offs.

Recurring service is the profit engine

At 58% margin on 9.6M revenue, recurring service generates 5.6M in gross profit. This single category funds the entire operation and absorbs the losses from labour and thin-margin materials. Protecting and growing this revenue stream is the highest-priority business decision.

7.0 Recommended Actions

Audit unbilled time entries. Pull a report of all time entries that have no associated billing item. Identify which ones should have been billed and which ones fall under managed service agreements. The gap between 1.2M in cost and 274K in revenue suggests a significant portion of work is either unbilled or under-billed.

Increase materials markup. A 6.1% margin on 2.6M in product sales is not sustainable after accounting for overhead. Review your markup percentages and compare them to industry benchmarks (most MSPs target 15-25% on hardware). Even a 5-point increase in margin would add 132K in annual profit.

Separate project labour from managed labour. The current data lumps all time entries together. Create separate billing sub-types or use Autotask work type classifications to distinguish managed service hours (included in contract) from project hours (should be billed). This gives you visibility into whether managed contracts are properly priced.

Review per-client profitability. Use the third DAX query to identify clients where labour cost exceeds the managed service fee. These accounts need contract renegotiation or scope adjustment. A client paying 5K/month in recurring fees but consuming 8K/month in labour is slowly eroding your business.

8.0 Methodology

This report was generated by an AI agent connected to Proxuma Power BI through the MCP (Model Context Protocol) server. The AI wrote three DAX queries against the BI_Autotask_Billing_Items and BI_Autotask_Tickets tables, executed them, and formatted the results into this document.

Data source: Autotask PSA, synced to Power BI through the Proxuma connector. The billing items dataset contains 122,884 records across 7 sub-types. Revenue is based on total_amount, cost on our_cost, and margin is calculated as (Revenue - Cost) / Revenue.

Scope: All billing sub-types, all clients, full dataset. No date filters were applied. Ticket data (67,521 tickets) provides context for volume and average hours but is not directly joined to billing items in this analysis.

Limitations: Milestone and project cost sub-types show 0 cost because Autotask records their delivery cost through separate time entry and expense items on the parent project. The true margin for project work requires cross-referencing billing items with project time entries, which is outside the scope of this report.

9.0 Frequently Asked Questions
Why does milestone billing show 100% margin?

Autotask does not record a cost against milestone or fixed-price billing items. The cost of delivery is tracked through time entries and expenses on the parent project. So the margin you see here reflects the billing item only, not the true project margin. To get the real number, you need to compare milestone revenue against the sum of all time and expense entries on the same project.

Is the -341% labour margin really that bad?

Yes, but with context. The -341% means that for every euro billed as a time entry, the actual cost is 4.41. This happens because most labour hours are either included in managed service contracts (so they are covered by recurring fees, not billed separately) or they go unbilled entirely. The number is accurate for the sub-type, but it does not mean the business is losing money overall. Recurring service margins cover the gap.

How should I use this data to adjust pricing?

Focus on two areas. First, check whether your managed service contracts are priced to cover the actual labour cost. If a client is consuming more hours than the contract covers, you need a rate adjustment or scope limitation. Second, review materials markup. A 6% margin is too thin for hardware resale. Target 15-25% and verify that procurement costs are entered accurately in Autotask.

Can I run these DAX queries on my own dataset?

Yes. Copy any query from the toggles above 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. If you use a different data model, you may need to adjust the table and column names.

What is the difference between sub-types and ticket types?

Sub-types refer to billing item categories in the BI_Autotask_Billing_Items table: how revenue is classified (recurring, milestone, materials, etc.). Ticket types refer to the BI_Autotask_Tickets table: how work is classified (incident, service request, change request, etc.). A single ticket can generate multiple billing items across different sub-types.

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