Work Beyond MSP Services: How to Price Out-of-Scope Work (Without Hidden Margin Bleed)

Price work outside the managed-services agreement as separate project or block-hour revenue, never absorbed into the per-seat fee. Absorbing it hides the true cost of your largest account and makes the seat price look artificially profitable. Define scope in the agreement, quote out-of-scope work at a published project rate, and review quarterly.

An operator on r/msp described a good problem. Their best client keeps growing, spans multiple locations, has embedded onsite engineers dedicated purely to that account — and represents 70 percent of total revenue. The question asked was how to price the work falling outside the agreement.

The thread answered the question it was asked. Charge time and materials. Use block hours. Put it in the contract. All correct, all insufficient, because none of it touches the sentence the asker wrote in the same paragraph without appearing to notice it.

  • Out-of-scope work absorbed into a per-seat fee does not disappear. It re-prices every seat downward, and because the reduction never appears on an invoice you cannot see by how much. Twenty absorbed hours a month on a hundred-seat account moves a $333.33 seat to an effective $317.73.
  • The boundary is a contract question before it is a rate question. If the agreement does not define scope, no rate card is enforceable and every conversation becomes a negotiation you are starting from behind.
  • Effective hourly yield is the number that settles internal arguments — total account revenue divided by total hours delivered, contracted and absorbed together. Most operators have never computed it, and it is the only figure that makes absorbed work visible.
  • Embedded or dedicated onsite staff break per-seat economics outright. Three dedicated engineers on a 250-seat account add $110 per seat per month of cost that the buildup never sees, turning a nominal 50 percent gross margin into 17 percent.
  • Above roughly a third of revenue in one client, pricing discipline stops being a margin exercise and becomes a survival control. At 70 percent the correct response is not a better rate card — it is a notice period, a named-resource line, and a second client.

How do you price work that falls outside the MSP agreement?

Separately and visibly, through one of three structures: a fixed-fee project for predictable scope, block hours for unpredictable but bounded work, or pass-through with a stated margin for hardware and third-party licensing. The structure matters less than the visibility. Work that arrives as a line item can be priced, refused or renegotiated. Work absorbed into the seat fee can only be delivered.

The instinct to absorb is not laziness. It is relationship management — the job is small, the client is good, invoicing two hours feels like nickel-and-diming a partner you want to keep. That instinct is right about the relationship and wrong about the arithmetic, and the gap between the two is where a service business quietly stops being profitable.

The cure is not to bill for everything. It is to know the value of what you choose not to bill for. An MSP that absorbs eight hours a month and can name the number is making a commercial decision. One that has never counted them is not making a decision at all.


What counts as work outside the agreement?

Whatever the agreement does not name — which in most managed-services contracts is far more than the operator believes. Scope clauses tend to list what is included and go quiet on everything else, so the boundary ends up being decided per ticket by whichever engineer picks it up. The matrix below classifies twenty common activities and, more usefully, names the contract clause that decides each one.

The Out-of-Scope Boundary Matrix

#ActivityDefault classificationDecided by which clauseWhere operators get it wrong
1Password reset, MFA re-enrolmentIn-AgreementSupport scope, per-user servicesRarely — this is genuinely seat work
2New user onboarding, within agreed monthly volumeIn-AgreementOnboarding volume capNo cap is written, so there is no “above”
3New user onboarding, above the agreed volumeBlock-HourOnboarding volume capAbsorbed indefinitely because nobody counts
4Single-item backup restoreIn-AgreementBackup service descriptionCorrectly included, then used to justify #5
5Full DR invocation, bare-metal recoveryProject or DR retainerDisaster recovery clause, RTO/RPOAssumed covered because backup is covered
6Scheduled workstation refresh, imaging and deploymentProjectHardware lifecycle exclusionTreated as onboarding at scale
7Hardware procurement — the devices themselvesPass-Through with marginProcurement clausePassed through at cost as a “favour”
8Resold third-party software licensingPass-Through with marginLicensing and resale clauseZero margin on real carrying risk
9Microsoft 365 tenant-to-tenant migrationProjectChange-of-control / M&A exclusionAssumed to be M365 admin, which is in scope
10Office move, new-site standupProjectSite count and locations scheduleSite list never updated after growth
11After-hours cutover at client requestBlock-HourService hours definitionService hours defined, out-of-hours rate not
12Security questionnaire completion for the client’s customerBlock-HourDocumentation and reporting scopeFeels like paperwork, costs a specialist day
13Cyber-insurance attestation and renewal evidenceBlock-HourCompliance support clauseAnnual, so it never gets scoped
14Compliance audit support, evidence collection, auditor callsBlock-HourCompliance support clausePriced as hours, delivered as a programme
15Vendor liaison for the client’s line-of-business applicationBlock-HourThird-party vendor managementThe single most absorbed category
16Line-of-business application administrationNamed line itemApplication support scheduleDrifts in via one helpful engineer
17Printer and MFP fleet supportIn-Agreement only if namedDevice scheduleDevices are not seats; the schedule omits them
18Executive VIP and home-office supportNamed seat tierSeat tier definitionsDelivered at VIP level, billed at standard
19Firewall replacement, network refreshProjectInfrastructure lifecycle exclusionSold as “included in the review”
20Custom reporting and dashboardsProjectReporting deliverables listBuilt once, then maintained forever free
21Employee offboarding and M365 license reclamationProjectData lifecycle and retention exclusionReads as routine tenant admin; it starts a 30-day purge clock no ticket reverses

Read the third column before the second. If a row has no governing clause in your agreement, the default here is not enforceable for you — it is a description of what a well-written contract would say. That gap is the finding.


Why does absorbing out-of-scope work quietly destroy per-seat margin?

Because the seat price is a quotient, and absorbed hours change the denominator without changing the invoice. Every hour delivered outside the agreement is labour you paid for and did not price, so it comes out of the same margin the seat fee was supposed to protect. The effect compounds silently: no invoice records it, no report shows it, and the account continues to look like its nominal rate right up to the point someone measures.

The Absorbed-Hours Seat-Price Model

This continues the buildup published on the pillar page, using the same engineer, the same seat count and the same break-even — so the two pages can be read together without reconciling anything.

Inputs, all stated:

loaded engineer cost          $110,000 / year      (BLS OEWS anchored; see pillar)
seats per engineer            100
break-even cost per seat      $166.67 / month      (labour 91.67 + overhead 30 + tools 45)
nominal seat price            $333.33 / month      (100% markup -> 50.0% gross margin)

attended hours    2,080 - 120 PTO - 80 holiday   = 1,880
productive hours  1,880 x 0.75 utilisation       = 1,410 / year
loaded hourly     $110,000 / 1,410               = $78.01
contracted hours  1,410 / 12                     = 117.5 / month

That last line is the one that does the work. It is not a new assumption — it is the pillar’s “one engineer per 100 seats” restated in hours. Which means the buildup already spends the engineer’s entire productive year on contracted delivery. Absorbed hours cannot come from slack, because the model contains none. They come from another client’s capacity, or from the engineer’s evening.

Outputs, for a 100-seat account at $333.33 nominal:

Absorbed hrs / monthCost of absorbed workPer seatEffective realised seat priceGross marginEffective hourly yield
0$0$0.00$333.3350.0%$283.69
10$780$7.80$325.5348.8%$261.44
20$1,560$15.60$317.7347.5%$242.42
40$3,121$31.21$302.1344.8%$211.64
60$4,681$46.81$286.5241.8%$187.79
80$6,241$62.41$270.9238.5%$168.78

Effective realised seat price is nominal price minus absorbed cost per seat. Effective hourly yield is total account revenue divided by all hours delivered, contracted and absorbed together.

Two things are worth sitting with. Forty absorbed hours a month — one engineer-day a week, which almost no operator would call a problem — costs 5.2 points of gross margin and $31.21 off every seat. And the yield column falls faster than the margin column, because yield counts the hours you actually delivered rather than the hours you agreed to.

The margin column is what your P&L eventually shows you. The yield column is what you could have known in month one.


Fixed-fee project, block hours, or time and materials — which fits which work?

Match the structure to how well you can predict the scope. Predictable and bounded work takes a fixed fee, which transfers estimation risk to you and is worth it for the close rate. Unpredictable but capped work takes block hours. Genuinely open-ended work takes time and materials with a not-to-exceed ceiling. Each of the three fails in a specific way, and knowing the failure mode is more useful than knowing the definition.

Fixed fee fails through scope drift you agreed to informally. The defence is a written deliverable list and a change-request process that costs the client something, even if only a signature.

Block hours fail through the unexpired balance. A client with sixty purchased hours sitting unused holds a claim on your future capacity at last year’s rate, and will present it at the least convenient moment. Blocks need an expiry that survives the renewal conversation — which is where most of them quietly die.

Time and materials fails through the invoice nobody expected. A cap solves this, and a cap you are willing to enforce solves it twice.

Pass-through with margin is the fourth structure and the one most often run at zero. Procuring hardware or reselling licensing means carrying warranty administration, vendor escalation, delivery risk and working capital. At cost, all of that is priced at nothing. Take a margin or charge a procurement fee, but do not do it free and call it a relationship investment — that is absorption wearing a different label.

Several rows in the matrix are project work by nature rather than by contract. A hypervisor change or a mail-platform move is a bounded engagement with a deliverable and a failure mode, and it belongs in a project scope with its own risk budget. So does the backup layer most agreements assume Microsoft provides — the gap between Microsoft’s retention windows and an actual backup is one of the most commonly absorbed items in this matrix, because it looks like configuration and behaves like a service.


How do you price embedded or dedicated onsite staff?

As a named-resource line at cost plus margin, indexed annually, entirely outside the seat rate. Dedicated headcount is not a per-seat service — it is a sub-contracted employee whose cost does not vary with the client’s user count. Folding it into the seat fee makes the seat price meaningless in both directions: the client cannot see what they are buying, and you cannot see what the account actually earns.

Run the r/msp asker’s own shape through the model. A 250-seat account at the pillar’s $333.33 nominal produces $83,333 a month, against a buildup cost of $41,667 — a clean 50 percent gross margin, and the number most operators would quote if asked.

Now add three dedicated onsite engineers who are not in that buildup:

3 x $110,000 loaded / 12          = $27,500 / month
$27,500 / 250 seats               = $110.00 per seat per month

true cost per seat   $166.67 + $110.00 = $276.67
gross margin         (333.33 - 276.67) / 333.33 = 17.0%

Fifty percent on the rate card. Seventeen percent in reality. The account did not become unprofitable — at 17 percent it is still contributing — but it is contributing a third of what the business believes, and every decision made on the strength of the 50 percent figure is wrong by that factor.

The fix is structural, not arithmetical. Move the embedded team onto its own line, priced at loaded cost plus your margin, indexed to wage inflation annually, with a notice period long enough to redeploy or exit the headcount. If the client will not accept a named-resource line, that is information: it means they are buying dedicated staff at a per-seat price and have no intention of paying for it as staff.


How do you introduce a scope boundary with an existing client without losing them?

At renewal, not mid-term, and with the boundary presented as a definition rather than a price rise. Bring twelve months of absorbed-hours data, propose a written scope with an explicit out-of-scope rate card, and grandfather two or three absorbed items by name as a visible concession. Clients rarely object to being told what is included. They object to discovering it during an argument.

Sequence matters more than wording. Measure first — you cannot negotiate a boundary you cannot quantify, and a PSA that has never had out-of-scope time coded against it will need a quarter of clean data before the conversation is winnable. Bring the number, not the grievance.

Three openings, by relationship type:

Long-standing, high-trust. “We have never had a scope document with you, which has worked because we absorb the edges. Last year that was 340 hours. I want to write it down so it survives both of us leaving.” Names the number, frames the document as continuity rather than restriction.

Growing fast, boundary already strained. “Your estate has roughly doubled and the agreement has not moved. Here is what is in it, here is what we have been doing anyway, and here is what I propose we do about the second list.”

Price-sensitive, likely to push back. Lead with the rate card, not the scope. “Our project rate is X and our block rate is Y. Nothing changes about what you already pay.” The boundary arrives implicitly, and the negotiation is about a published rate rather than about whether you have been generous enough.

In all three, concede something specific and named. An operator who arrives with a boundary and no concession is asking a client to accept a pure loss, and that conversation goes badly regardless of how correct the arithmetic is.


When one client is most of your revenue, does the answer change?

Yes — materially. Below roughly 20 percent of revenue, out-of-scope discipline is a margin exercise and absorbing a little is a reasonable relationship investment. Above about a third it becomes a survival control, because the account is now large enough that its pricing errors determine your profitability rather than affecting it. At 70 percent, the pricing question is secondary to the concentration question, and fixing only the first is treating a symptom.

The Client Concentration Risk Matrix

Share of revenueWhat this account isPricing postureContract controls requiredIf it leaves
Under 20%A large clientNormal discipline; absorb selectively and knowinglyStandard MSA, standard noticeA bad quarter
20–35%A significant dependencyNo absorbed work without a named owner and a number90-day notice; annual price review clauseA bad year, survivable
35–50%A structural dependencyOut-of-scope billed by default; exceptions escalate to ownership6-month notice; named-resource lines; indexed ratesRedundancies
50–70%A single point of failureEvery hour coded and reported monthly to the client12-month notice; termination-for-convenience fee; staged exit planBusiness-threatening
70%+The business, with a customer attachedAbsorbed work is a governance issue, not a pricing one12-month notice minimum; redeployment clause covering embedded staff; documented exit runbookExtinction event

The asker sits in the bottom row. Their embedded engineers make it worse, not better: dedicated headcount is the least redeployable cost in the business, and it is contractually tied to the one client whose departure would trigger the need to redeploy it.

At that level the useful moves are not pricing moves. Extend notice periods so the exit is survivable. Get the embedded team onto a named line with a redeployment clause. Then spend the margin the boundary recovers on winning the second client, because the only real fix for 70 percent concentration is a denominator that grows.


What this framework does not solve

Four cases, and they are common enough that presenting the matrix as universal would be dishonest.

An underpriced base agreement. If the managed-services fee is below cost, scope discipline will not save it and may hide it — you will bill more out-of-scope work, the total will look healthier, and the recurring revenue underneath stays underwater. Fix the base rate first. The per-seat cost buildup exists to tell you whether that is your actual problem.

A market with a genuine price ceiling. In some regions and verticals the rate is set by what the market will bear, and the correct response is to reduce delivery cost — standardise the stack, raise seats per engineer — rather than to find more things to bill for. Billing discipline in a capped market moves work to a competitor and calls it margin.

Co-managed arrangements. Where an internal IT team owns part of the estate, the boundary is genuinely negotiated per ticket and a static matrix fights the operating model. Price the interface — a named number of collaboration hours — rather than trying to classify every task.

The client whose out-of-scope volume is a signal. If an account generates constant project work, the answer may not be to bill it piecemeal but to move them to a different contract type entirely: a higher seat tier with project allowance, or a retained transformation engagement. Persistent out-of-scope volume is usually the contract being the wrong shape, not the client being difficult.


Where this sits in the pricing picture

This page answers one question that the pillar deliberately leaves open: what happens to the buildup when work arrives that the buildup never priced. The arithmetic here is the pillar’s arithmetic — same engineer, same seats, same break-even — extended by one derived input, the loaded hourly rate.

Start with the buildup if you have not already, because an out-of-scope rate card sitting on top of an underpriced base agreement solves nothing: how per-seat pricing is actually built. Then code one month of out-of-scope time in your PSA, run the model above, and compare the effective hourly yield on your largest account against your smallest. Most operators find the answer uncomfortable, and all of them find it useful.

  • Code out-of-scope time in the PSA for one month. Not estimated — coded.
  • Compute effective hourly yield for your three largest accounts.
  • Read your MSA against column three of the boundary matrix. Note every row with no governing clause.
  • Move any embedded or dedicated headcount onto its own line before the next renewal.
  • Calculate your top client’s share of revenue and find your row in the concentration matrix.

Sources

  1. Work beyond MSP services, how to price? (r/msp) — the source thread, and the origin of the 70 percent concentration figure used in the worked example.
  2. Network and Computer Systems Administrators (SOC 15-1244) — Occupational Employment and Wage Statistics, May 2025 — US Bureau of Labor Statistics. The wage anchor for the loaded-cost input, identical to the one used in the pillar so the two pages remain reconcilable.
  3. How Much Should an MSP Charge Per Seat? The Transparent Cost-Buildup — the buildup this page extends. Every shared figure originates there.
  4. The absorbed-hours model published above, with all four inputs stated inline. A model, not a survey.