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
| # | Activity | Default classification | Decided by which clause | Where operators get it wrong |
|---|---|---|---|---|
| 1 | Password reset, MFA re-enrolment | In-Agreement | Support scope, per-user services | Rarely — this is genuinely seat work |
| 2 | New user onboarding, within agreed monthly volume | In-Agreement | Onboarding volume cap | No cap is written, so there is no “above” |
| 3 | New user onboarding, above the agreed volume | Block-Hour | Onboarding volume cap | Absorbed indefinitely because nobody counts |
| 4 | Single-item backup restore | In-Agreement | Backup service description | Correctly included, then used to justify #5 |
| 5 | Full DR invocation, bare-metal recovery | Project or DR retainer | Disaster recovery clause, RTO/RPO | Assumed covered because backup is covered |
| 6 | Scheduled workstation refresh, imaging and deployment | Project | Hardware lifecycle exclusion | Treated as onboarding at scale |
| 7 | Hardware procurement — the devices themselves | Pass-Through with margin | Procurement clause | Passed through at cost as a “favour” |
| 8 | Resold third-party software licensing | Pass-Through with margin | Licensing and resale clause | Zero margin on real carrying risk |
| 9 | Microsoft 365 tenant-to-tenant migration | Project | Change-of-control / M&A exclusion | Assumed to be M365 admin, which is in scope |
| 10 | Office move, new-site standup | Project | Site count and locations schedule | Site list never updated after growth |
| 11 | After-hours cutover at client request | Block-Hour | Service hours definition | Service hours defined, out-of-hours rate not |
| 12 | Security questionnaire completion for the client’s customer | Block-Hour | Documentation and reporting scope | Feels like paperwork, costs a specialist day |
| 13 | Cyber-insurance attestation and renewal evidence | Block-Hour | Compliance support clause | Annual, so it never gets scoped |
| 14 | Compliance audit support, evidence collection, auditor calls | Block-Hour | Compliance support clause | Priced as hours, delivered as a programme |
| 15 | Vendor liaison for the client’s line-of-business application | Block-Hour | Third-party vendor management | The single most absorbed category |
| 16 | Line-of-business application administration | Named line item | Application support schedule | Drifts in via one helpful engineer |
| 17 | Printer and MFP fleet support | In-Agreement only if named | Device schedule | Devices are not seats; the schedule omits them |
| 18 | Executive VIP and home-office support | Named seat tier | Seat tier definitions | Delivered at VIP level, billed at standard |
| 19 | Firewall replacement, network refresh | Project | Infrastructure lifecycle exclusion | Sold as “included in the review” |
| 20 | Custom reporting and dashboards | Project | Reporting deliverables list | Built once, then maintained forever free |
| 21 | Employee offboarding and M365 license reclamation | Project | Data lifecycle and retention exclusion | Reads 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 / monthThat 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 / month | Cost of absorbed work | Per seat | Effective realised seat price | Gross margin | Effective hourly yield |
|---|---|---|---|---|---|
| 0 | $0 | $0.00 | $333.33 | 50.0% | $283.69 |
| 10 | $780 | $7.80 | $325.53 | 48.8% | $261.44 |
| 20 | $1,560 | $15.60 | $317.73 | 47.5% | $242.42 |
| 40 | $3,121 | $31.21 | $302.13 | 44.8% | $211.64 |
| 60 | $4,681 | $46.81 | $286.52 | 41.8% | $187.79 |
| 80 | $6,241 | $62.41 | $270.92 | 38.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 revenue | What this account is | Pricing posture | Contract controls required | If it leaves |
|---|---|---|---|---|
| Under 20% | A large client | Normal discipline; absorb selectively and knowingly | Standard MSA, standard notice | A bad quarter |
| 20–35% | A significant dependency | No absorbed work without a named owner and a number | 90-day notice; annual price review clause | A bad year, survivable |
| 35–50% | A structural dependency | Out-of-scope billed by default; exceptions escalate to ownership | 6-month notice; named-resource lines; indexed rates | Redundancies |
| 50–70% | A single point of failure | Every hour coded and reported monthly to the client | 12-month notice; termination-for-convenience fee; staged exit plan | Business-threatening |
| 70%+ | The business, with a customer attached | Absorbed work is a governance issue, not a pricing one | 12-month notice minimum; redeployment clause covering embedded staff; documented exit runbook | Extinction 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
- 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.
- 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.
- How Much Should an MSP Charge Per Seat? The Transparent Cost-Buildup — the buildup this page extends. Every shared figure originates there.
- The absorbed-hours model published above, with all four inputs stated inline. A model, not a survey.
