MSP Profit Margins: How To Measure Them On Each Contract

MSP profit margins, one contract at a time: fee, overage, and expenses against logged hours, loaded cost, and tools. Worksheet and filled-in example.

MSP profit margins

MSP profit margins are earned or lost one contract at a time. Contract gross margin is a month's contract revenue minus the direct cost of delivering it, divided by that revenue. The worksheet below runs it on a live contract: included hours, logged time, overage, and expenses.

This guide comes from the team behind SherpaDesk, a helpdesk and professional services automation (PSA) tool a small IT team can run alone. Two founders who ran their own MSP have built it since 2001.

To start now, jump to the contract margin worksheet and its TXT download.

What Is Contract Gross Margin?

Definition

Contract gross margin is the share of one contract's monthly revenue left after the costs of delivering it. Those costs are technician hours at loaded cost, tools you pay for that client, and other direct costs such as parts and travel.

Net margin goes further: net income divided by sales. Rent, admin, sales, and insurance come out first. That's your accountant's profit-and-loss statement.

The contract is where you can act. A company-wide 40% can hide one client at 60% and another at 15%, and you can only reprice or bill overage one contract at a time.

Owners also disagree about what goes into cost. In one r/msp thread about a 34% margin, one commenter said, "I think that 34% margin is pretty good at that small size, with an employee." Another pushed back that the poster was "including labor in your calculation, but salaries come from gross profit," and put their own managed services "around 70% gross margin." Same number, two readings. In this worksheet, technician labor is a direct cost.

MSP Profit Margins: What Neutral Data Shows

Few published figures on MSP profit margins say who was measured. Two recent sources do, and neither measures a small MSP's contract.

Margin data with a stated sample
Who was measuredMeasureResult
MSPs surveyed for Informa's 2026 MSP 501 report (600+ in the data set)EBITDA margin of at least 6%89% of MSPs
Same sampleEBITDA margin above 15%42% of MSPs
64 US public companies, computer servicesGross margin24.26%
Same 64 companiesNet margin4.45%
5,994 US public companies, all sectorsNet margin9.74%

Published January and September 2026.

The MSP 501 figures come from firms that applied to Informa's ranking with verified profit-and-loss data; Ingram Micro sponsored the report. EBITDA is operating income with depreciation and amortization added back, a company number earned after overhead. In our reading, it sits closer to net margin than to contract margin. The public-company figures come from NYU Stern's margin tables, with data as of January 2026.

Treat both as company-level context, not targets for a contract. Compare a contract with its own history, run through the same worksheet.

The Contract Margin Worksheet

One sheet per client per month. Letters A to S match the steps below.

Contract margin worksheet
CONTRACT MARGIN WORKSHEET
One client, one contract, one month
Client: [name]
Contract: [type, e.g. monthly fee with included hours]
Month: [month and year]

REVENUE
A. Monthly fee, without resold licenses ...... $[    ]
B. Overage hours invoiced .................... [    ] h
C. Overage rate per hour ..................... $[    ]
D. Overage revenue (B x C) ................... $[    ]
E. Expenses invoiced, with markup ............ $[    ]
F. Contract revenue (A + D + E) .............. $[    ]

HOURS
G. Included hours in the contract ............ [    ] h
H. Hours counted against the allowance ....... [    ] h
I. Other hours logged on the contract ........ [    ] h
J. All hours logged (H + I) .................. [    ] h
K. Overage not invoiced (H - G - B, min 0) ... [    ] h

DIRECT COST
L. Loaded cost per hour ...................... $[    ]
M. Labor cost (J x L) ........................ $[    ]
N. Other direct costs, billed or not ......... $[    ]
O. Tools you pay for this client ............. $[    ]
P. Direct cost (M + N + O) ................... $[    ]

RESULT
Q. Gross profit (F - P) ...................... $[    ]
R. Contract gross margin (Q / F x 100) ....... [    ] %
   (if F is 0, skip R and report Q in dollars)
S. Overage left unbilled (K x C) ............. $[    ]
Contract margin worksheet Plain text · 1 KB · 19 fields, A to S · updated Nov 10, 2026
Download Worksheet

How To Fill In The Worksheet, Field By Field

Fill it in after the month's invoice run, from your helpdesk's time entries.

  1. Total the month's contract revenue (A to F)

    Add the monthly fee, the overage you invoiced, and the expenses you billed, markup included.

    Common mistake: adding resold licenses or standalone hardware sales to the fee. Resale has its own margin and can hide a contract that loses money on labor.

  2. Total every hour logged against the contract (G to J)

    Line H is every hour drawn against the included allowance, including chargeable hours past it. Line I is every other hour spent delivering the contract, such as rework that doesn't count against the allowance. Count every tech, owner included. A non-billable hour costs you the same as a billable one. As one r/msp owner put it: "The math is easy. It all comes down to the accuracy of the tracked hours."

    Common mistake: counting only the hours past the allowance as H. Then K reads zero when overage went unbilled.

  3. Find the overage that never reached the invoice (K)

    Take H, subtract included hours, then subtract the overage hours you invoiced. Anything left is chargeable time the client never paid for. The formula assumes one overage rate and no rounding or discounts; otherwise take D from the invoice and K from unbilled entries. Our billable hours tracking guide covers that review.

    Example: 19.5 hours against a 16-hour allowance, 2 overage hours invoiced: 1.5 hours never billed.

  4. Set your loaded cost per hour (L)

    Median pay for computer support specialists was $30.24 an hour in 2025. Wages were 70.0% of private-industry employer compensation costs in June 2026. Our estimate applies that all-industry wage share to one occupation: $30.24 ÷ 0.70 = $43.20 an hour.

    Common mistake: costing hours at the wage. If your techs log only part of their paid week to clients, divide their monthly cost by hours logged instead. Our MSP challenges guide builds the full budget for one tech.

  5. Add the costs that aren't labor (N and O)

    Line N is every other direct cost of the contract this month, billed or not: parts, travel, a courier. Line O is the tools you pay for this client: RMM, backup, and security seats. For a shared tool, divide its bill by clients or seats.

    Common mistake: entering only the costs you invoiced. A part you forgot to bill still cost you money.

  6. Divide (P to S)

    Direct cost is labor plus other direct costs plus tools. Gross profit is revenue minus direct cost. Gross profit ÷ revenue × 100 is the contract gross margin. S, K × C, is overage you worked but never billed. If revenue is zero, report gross profit in dollars instead.

Filled-In Example: An Accounting Office Contract

Say you run a contract for a 25-user accounting office. The fee is $2,000 a month with 16 included hours and overage at $125 an hour. In October your techs logged 21.5 hours: 19.5 against the allowance and 2 of rework that didn't count against it. You invoiced 2 overage hours and one replacement switch, bought for $180 and billed at $216. You also pay $210 a month for this client's tool seats.

October worksheet, 25-user accounting office
LineValue
A. Monthly fee$2,000.00
D. Overage revenue, 2 h × $125$250.00
E. Expenses invoiced$216.00
F. Contract revenue$2,466.00
J. All hours logged21.5 h
K. Overage not invoiced, 19.5 − 16 − 21.5 h
M. Labor cost, 21.5 h × $43.20 (our estimate)$928.80
N. Other direct costs (the switch)$180.00
O. Tools for this client$210.00
P. Direct cost$1,318.80
Q. Gross profit$1,147.20
R. Contract gross margin46.5%

Line S is the one to act on: 1.5 hours × $125 is $187.50 of overage left off the invoice. Bill it, and revenue becomes $2,653.50 and gross profit $1,334.70. The contract gross margin moves from 46.5% to 50.3% without a new client or a price change.

Run your own contract below with lines F and P.

Contract gross margin, one month

46.5%contract gross margin

(revenue − direct cost) ÷ revenue × 100. Your numbers stay in the browser.

A non-billable hour costs you the same as a billable one.

Subscribe to the SherpaDesk Blog.
Get Tips for Running IT With a Small Team.

Loading form…

What A Low Contract Margin Tells You

Stop at the first row that matches.

Reading a low contract margin
Signal on the sheetWhat to checkWhere the fix lives
K above zeroBillable hours past the cap that no invoice line carriesReview uninvoiced entries before every invoice run
J above G three months runningWhether the extra hours were in scope, repeat incidents, or reworkThe scope and price review in your managed services agreement
I a large share of JWhich tickets carry non-billable time, and whyDocument the fix that keeps coming back
N at or above EParts and travel billed at cost, or not billedA written markup, and a billing check on parts
O rising, A flatTool seats added without a price changeA pass-through clause for per-seat tools
M above ALabor alone costs more than the feeReprice from your hours; see managed services pricing

The first row is a billing fix. The second needs a client conversation; our QBR template shows how to present the hours.

Prepaid Blocks, Hourly And Retainer Contracts

Prepaid block of hours. Set A and G to zero, enter the hours drawn this month as B and the block rate as C, so D is the month's revenue. One r/msp member described the problem: "Client doesn't use hours/money & then complains as to why they're billed as much." Write the expiry and rollover rule into the agreement before the block sells.

Hourly. Set A and G to zero, enter invoiced hours as B and your rate as C. H is every chargeable hour logged, so K and S still show hours you worked and didn't bill.

Retainer plus hourly. The retainer goes in A and the hourly work in B to D. G is the hours the retainer covers, or zero if it buys availability.

Run The Worksheet From Your Helpdesk Data

How this works in SherpaDesk

Hours, overage, and expenses on one contract

On a Flat + Hourly contract, the fee covers its included hours, and hours past them bill as overage at the contract's rates. You get an alert as the included hours run out, and overage can move into a new prepaid pack.

Your techs log time as billable or non-billable, and expense items can carry a markup. Uninvoiced time and expenses collect in "Ready to Invoice" by contract. The Time Log Detail Report and Time Log Export support XLSX, and the Contract Detail Report shows prepaid-pack hours remaining.

A helpdesk and PSA a small IT team can run alone. No contract. No implementation project. No dedicated admin.

Base Camp is $45 per agent per month ($40 billed annually). The first agent is free, forever, and the trial is 14 days free with no card.

Invoicing In SherpaDesk

Who this isn't for

If you need a full profit-and-loss statement, overhead allocation, or a valuation of your MSP, this worksheet stops at the contract; that's work for your accountant. And if you want monitoring in the same product: we don't build RMM. We integrate with yours, and the stack stays yours.

Frequently Asked Questions

What is a good profit margin for an MSP?

We found no neutral survey that sets a contract gross margin target for small MSPs. At company level, 42% of MSPs surveyed for Informa's 2026 MSP 501 report had EBITDA margins above 15%, and 89% had at least 6%. For contracts, set the target from a quarter of your own sheets (benchmarks).

Is a 20% profit margin high?

As a net margin, yes. Across 5,994 US public companies, net income was 9.74% of sales in NYU Stern's January 2026 data, and 4.45% for 64 in computer services. As a contract gross margin, 20% leaves little room. Rent, admin, sales, and the part of your own pay not already costed as ticket hours still come out of it.

How does an MSP make money?

On a contract like the one in our example, from three lines: the monthly fee, overage hours billed above the included hours, and expenses billed with a markup. Licenses and hardware resold on their own earn a separate margin, so keep them off the service worksheet. Parts used to deliver the contract, like the example's switch, go in both E and N (worksheet).

Should the owner's own hours count as labor cost?

Yes. Log your own hours on the contract and cost them at what you'd pay a tech for the same work. Leave them out, and a contract you service yourself looks better than it is until the day you hire. Pay for your selling and admin time stays in overhead, so it isn't counted twice.

How often should I run the worksheet?

Monthly, for every contract, after the invoice run, so invoiced overage and expenses are final. Before a renewal or a quarterly review, compare each contract with its last three months, so one heavy month doesn't read as a trend (signals).

About the author
Patrick Clements Co-founder & CEO, SherpaDesk

Patrick co-founded SherpaDesk and has led it as CEO since 2013. He has worked with IT service providers since 1998, first on network projects for schools and government offices, then on the helpdesk software their technicians use every day.

Published Nov 10, 2026 by

Run a help desk your clients can set their watch by

Tickets, SLAs, time tracking and invoicing in one place. Your first agent is free, with no contract.