MSP Profit Margins: Why Your Busiest Clients Look the Most Profitable

Pull up your agreement clients and sort them by margin. Somewhere near the top is a client you would swear is a headache. Their users call the main line constantly, your senior tech knows half of them by voice, and yet the report says they are one of your best accounts. Usually the report is not lying about the revenue. It is lying about the cost, because a lot of the work that client generates never became a time entry.

That is the part of MSP profit margins most articles skip. They give you a benchmark, a formula and a list of ways to cut costs. But on flat-fee managed services, the margin number is only as good as the time data underneath it, and missing time does not show up as lost revenue. It shows up as a client that looks more profitable than it is.

What is a good profit margin for an MSP?

There is no single number, and the published ranges disagree because they measure different things. The most useful benchmark comes from Service Leadership, the ConnectWise-owned firm that runs the Service Leadership Index. Its Q2 2024 data report, published by ConnectWise, put the average adjusted EBITDA for MSPs worldwide at 14.1%, with average managed service gross margin at 46.2%, product gross margin at 26.3% and project services gross margin at 19.4%. The same report said 16% of MSPs reported a loss that quarter.

For targets, ConnectWise's own guidance puts best-in-class services gross margin at 48% or higher and product gross margin at 27% or higher.

You will also see much higher numbers, like a 65% service gross margin, in articles that cite accounting firms. Much of the gap is definitions: what you put in cost of goods sold (all technician labor with burden, or only some of it; tools and licensing, or not) moves gross margin a long way. Pick one definition, write it down, and compare yourself to yourself month over month before you compare yourself to anyone else.

The blunt version:

  • Net margin / adjusted EBITDA: the average MSP sits in the low-to-mid teens. If you are well above that, check your cost data before you celebrate.
  • Managed services gross margin: the mid-40s is average under Service Leadership's definitions.
  • Product and project margins are lower, so a revenue mix that leans on hardware resale or projects drags the blended number down even when the service desk is healthy.

How to calculate MSP profit margin per client

Company-wide margin tells you whether the business is healthy. It does not tell you which clients are paying for which. Per-client margin is where decisions get made: who to reprice, who to re-scope, who to let go at renewal.

The calculation is simple:

  1. Service revenue for the client for the period: the agreement and labor invoice lines, at the invoiced amount.
  2. Plus product margin: resold hardware and licenses at invoiced amount minus cost, not the full invoice. Counting full product revenue makes a client who buys a lot of laptops look profitable when your margin on the boxes was thin.
  3. Minus labor cost: every hour logged to that client times each technician's hourly cost. Use a burdened cost (wage plus payroll taxes, benefits and paid time off), not the base wage.
  4. Margin % is the result divided by service revenue plus product margin.

A worked example, with round numbers that are illustrative, not a benchmark: a client pays $4,000 a month on a per-user agreement. Your techs logged 30 hours to them last month at a $60 burdened hourly cost. Labor is $1,800, profit is $2,200, margin is 55%. Healthy.

Now suppose your techs actually spent 45 hours on them, and 15 hours were phone calls, quick fixes and callbacks that never became time entries. Real labor is $2,700, profit is $1,300, margin is 32.5%. Same client, same invoice, and a completely different renewal conversation.

On an hourly client, those 15 hours are lost revenue and someone in billing eventually notices. On a flat-fee client, nobody notices, because nothing was going to be billed anyway. The cost is real; it just never reaches the report.

Why unlogged time inflates agreement margins

This is the counterintuitive part. Most margin advice treats unlogged time as a billing leak. On managed services, it is a measurement leak, and it bends the report in a specific direction: the clients who generate the most unlogged work look the most profitable.

The work that goes unlogged is not random. It is the short, interrupt-driven work that happens outside a ticket: the password reset done live on a call, the callback to a user who left a voicemail, the "while I have you" question on the end of another call. We covered where that time goes in MSP time tracking: the leak is at the phone. The clients who call the most generate the most of it. So the per-client margin report systematically flatters exactly the clients you should be looking at hardest.

Three other cost-data failures do the same thing:

  • Missing technician cost. If a tech has no hourly cost on their member record in the PSA, any tool that multiplies hours by cost will count their hours as free. A new hire with no cost set makes every client they touch look better.
  • Time logged to the wrong company. Time charged to your own internal company, or to a parent company instead of the child that actually called, moves cost off one client and onto nobody.
  • Rounding. If techs round seven minutes down to nothing rather than up to fifteen, small frequent work disappears. Our billing increments post covers why where you round matters more than the increment.

None of these are fixed by raising prices. If you reprice off a report built on bad time data, you will raise prices on the wrong clients.

What to check before you trust a margin report

A short monthly review that catches most of the distortion:

  1. Compare ticket and call volume to logged hours, by client. If a client is in your top ten by tickets or inbound calls but not in the top ten by hours, the hours are probably missing, not the work. Your phone system's call logs are the cross-check most MSPs never run.
  2. Look at hours per user per month across agreement clients on the same plan. Outliers in either direction need an explanation. A client at a fraction of the average is either remarkably well run or under-logged.
  3. Confirm every active technician has a burdened cost in the PSA, and that it was updated after the last raise.
  4. Separate product margin from service revenue. If your report counts full hardware invoices as revenue, a client's laptop refresh will make that month look like a great one.
  5. Read the bottom five and the top five together. The bottom five are the obvious repricing candidates. The top five are where you check whether the data is real.

If the phone-to-PSA gap check or a look at your call logs shows a lot of client calls with no matching ticket or time entry, fix the capture problem first. Margin work done on top of it will point you the wrong way.

Where MSP margin actually leaks

Once the data is trustworthy, the leaks tend to fall into a few buckets. These are the ones that show up in per-client numbers, not in the P&L:

  • Agreements priced off an old user count or scope. The client added a second office, a line-of-business app and a compliance requirement. The agreement did not change. See how much MSPs charge for how pricing models handle scope.
  • Projects absorbed into support. A migration that should have been a quoted project gets worked one ticket at a time under the agreement.
  • After-hours work with no billing rule. Emergency calls at 11 p.m. are either covered by the agreement, billed at a premium, or ambiguous. Ambiguous means free.
  • One heavy user. A small client can lose money because of one executive or one office manager who calls about everything. Per-client hours by contact shows this quickly if your time entries carry the contact.
  • Senior techs on junior work. The same hour costs very different amounts depending on who works it. A client whose calls always land with your most expensive tech has a different margin than its hour count suggests.

How AI changes the margin math (and where it doesn't)

AI does not fix pricing, scope or a bad agreement. What it can fix is the capture problem underneath the report.

This is the part Vight works on. Vight pulls recorded calls from the phone system, transcribes them, matches each call to the client and ticket, and posts a note and a time entry to the ticket in ConnectWise PSA, Autotask, HaloPSA or Syncro. The seven-minute call that used to vanish becomes a time entry against the right client, which means it reaches the margin report.

For ConnectWise shops, Vight also has a profitability view that puts ConnectWise invoices next to logged time. You choose which product catalog classes count as service revenue at the full invoiced amount and which count as product margin (invoiced amount minus cost), and labor cost is each hour logged times the hourly cost on the member's ConnectWise record. It shows margin by client and by group of clients, a 12-month trend, and a member table for each client with hours and labor cost. It also flags members with no hourly cost, so their hours are not silently counted as free. Profitability is ConnectWise only today.

What AI will not do: decide what a fair price is for a client, have the renewal conversation, or tell you whether a client is worth keeping for reasons that are not in the numbers. It gives you a margin report you can believe. The decisions are still yours.

FAQ

What is the average MSP profit margin?
Service Leadership's Q2 2024 data, published by ConnectWise, put average adjusted EBITDA for MSPs worldwide at 14.1%, and average managed service gross margin at 46.2%. Figures quoted elsewhere vary widely because they define cost of goods sold differently.

What is a good gross margin for managed services?
ConnectWise's guidance puts best-in-class services gross margin at 48% or higher under Service Leadership's definitions. Higher figures, such as 65%, often rest on a different definition of cost of goods sold. Benchmark against one definition consistently.

How do I calculate profit per client?
Take the client's service revenue for the period, add product margin (resale revenue minus cost), and subtract labor cost: hours logged to that client times each technician's burdened hourly cost. Divide by service revenue plus product margin for margin percentage.

Why does my most demanding client show a high margin?
Usually because much of their work is never logged. Short calls, callbacks and live fixes outside a ticket do not become time entries, so labor cost is understated, and on a flat-fee agreement nothing in billing catches it. Compare their ticket and call volume to their logged hours.

Should I raise prices to improve margins?
Only after you trust the per-client numbers. If time data is incomplete, repricing off the margin report will hit the wrong clients. Fix time capture and technician cost data first, then reprice the clients that are still underwater.

The short version

MSP profit margins are a per-client question, and per-client margin is a time data question. Before you benchmark, reprice or drop a client, make sure the hours behind the number are real, especially for the clients who call the most.

If you want to see what your margin report looks like once phone work lands in the PSA as time entries, book a demo of Vight and bring a client you suspect is under-logged.

See Vight document every call and ticket in your PSA

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *