Guides/accounting firms
Contribution margin by service line: how to calculate
Oct 16, 2026 · 6 min read

Contribution margin by service line is each service's revenue minus only the costs that exist because that service is sold: the direct labor, materials, subcontractors, and software that would disappear if the line were dropped. Rent, the office manager, insurance, and the owner's salary stay out. To calculate it from closed books, tag every invoice line and every direct-cost line with its service, allocate labor by one of three methods and apply it consistently, and run the report monthly. The result is a line per service with a dollar and a percentage, and the pricing decision is usually visible in the first month.
We run an accounting firm, and margin by service line is the second CFO deliverable we sell, after the cash forecast. It's also the one that most reliably produces an argument, unless overhead is left out. Here's the method, the three labor approaches, and how to turn the report into a price.
Why overhead allocation produces arguments instead of decisions
The instinct is to produce a full P&L per service line, with rent, admin, and insurance spread across the lines by revenue, by headcount, or by square footage. The moment that report lands, the conversation becomes about the allocation. The manager of the line that got 40 percent of the rent says the formula is wrong. The owner wonders whether the line "really" loses money or just got too much overhead. Nobody talks about price.
Contribution margin avoids the fight by not allocating anything that doesn't change with the line. Overhead is a single number below the lines, and the question the report answers is: does the sum of the contribution margins cover it, and which lines contribute most per dollar of revenue? That's the pricing question, and it doesn't depend on a formula anyone can dispute.
The rule for what's direct: if the client stopped selling this service tomorrow, would the cost go away within a quarter? The technician's wages, yes. The parts, yes. The scheduling software licensed per technician, yes. The rent, no. The owner's salary, no. When it's genuinely unclear (the shared truck, the receptionist who also books that line), leave it in overhead and note it. Consistency matters more than precision.
Setting up lines: classes on invoices and bills
The setup is a dimension on every transaction that touches a line. In most ledgers that's a class (or a location, if the client's lines are physically separate offices); the name doesn't matter, the discipline does.
Revenue. Every invoice line item carries its service line. For a client with an item list, mapping each item to a line once means the tag is automatic from then on. For a client who invoices free-form, the tag goes on at invoicing, and the close checks for Untagged revenue before the report runs. Untagged revenue should be zero.
Direct costs. Every bill and card charge that's a direct cost carries its line. The categorization rule that codes the parts supplier to Materials also assigns the line, when the supplier serves one line; when it serves several, the line comes from the PO or the receipt request's "which line?" question, answered at the time of purchase. Subcontractor bills name the job, and the job maps to a line.
Software and per-unit costs. The per-technician license, the per-transaction platform fee, the lab fee per case. Each maps to its line by rule.
Three to six lines is the right number. A client with fifteen lines has a product catalog, not a set of service lines, and the report becomes noise. Lines should be what the owner would actually decide to price differently, staff differently, or stop.
Three ways to allocate labor, and which to use
Labor is the largest direct cost for most service businesses and the one that decides whether the report is believable. Three methods, in order of preference.
1. Payroll mapping, for dedicated staff. When a person works entirely in one line, the payroll journal posts their wages, employer taxes, and benefits to that line every run. The payroll provider's department setup does it once. Hygienists to Hygiene, installers to Installation, the tax preparer to Tax. No estimate involved.
2. Time or dispatch hours, for staff who split. When a technician works across lines, the time-tracking or dispatch system gives hours by line per pay period, and the payroll journal allocates wages in proportion. This is the accurate method for field-service businesses with dispatch software and for professional firms with time entry. The allocation runs off the hours each period, so a shift in mix shows up in the month it happens.
3. Written owner estimate, applied consistently. When there's no time data and it isn't worth collecting (a two-person shop where the owner knows the split is roughly 60/40), the owner writes down the percentage, the firm applies it every month, and the report says so in a footnote. The estimate is revisited quarterly. It's less precise than hours and far better than leaving labor unallocated, which makes every line look profitable.
The mistake to avoid is mixing methods within a line without documenting it, or changing the method month to month. The report's value is the trend, and a trend built on a moving method is noise.
Burden travels with wages: employer taxes, workers' comp, and benefits allocated at the same ratio as the wages they attach to. A flat burden rate applied to direct wages is fine if it's applied to every line.
Reading the report: the three usual findings
One page, monthly: revenue by line, direct costs by category by line, contribution margin in dollars and as a percentage of the line's revenue, total contribution, overhead as one number, and net. The prior three months alongside.
The findings tend to be one of three.
The busy line with the thin margin. The largest revenue line contributes the least per dollar, usually because its labor is heavy and its price hasn't moved in three years. The owner has been proud of it because it's "most of our business."
The small line that carries the company. A line the owner considers a sideline, with a 55 percent contribution margin, that's covering the overhead the busy line can't. It deserves more sales effort, not less.
The line that loses money on every job. Negative contribution, meaning the direct costs exceed the revenue before overhead. Either the price is wrong, the labor is wrong, or the line should be dropped, and the report says which by showing where the cost sits.
For the CFO tier, this report and its findings are the quarterly meeting. We wrote about the report as a product in margin by service line as a CFO report; this article is the calculation underneath it.
Turning margin into a price change, in dollars
The report matters when it changes a price. The arithmetic is short.
Take the busy line: $600,000 of revenue, $450,000 of direct cost, a 25 percent contribution margin, on 1,200 jobs at a $500 average. The owner wants the line at 35 percent. Holding direct cost per job at $375, the target price is $375 divided by 0.65, or about $577. That's a 15 percent increase, which sounds alarming until it's phrased per job: $77 more on a $500 ticket.
Then the sensitivity. If the increase loses 10 percent of the jobs, the line does 1,080 jobs at $577, revenue of about $623,000, direct cost of $405,000, contribution of about $218,000 against $150,000 before. The line contributes more with fewer jobs, and the freed labor either goes to the small line that carries the company or comes off the schedule.
That's the conversation the report exists for: a number the owner can take to the price list, with the downside computed. Delivered quarterly, it's worth more than the annual advisory fee, and it comes entirely from books that were tagged at the time of posting rather than reconstructed later.
Where the platform comes in
Woven is our product, and service lines in it are classes or locations on every invoice and bill line, assigned by the same categorization rules that code the expense, with the receipt request asking "which line?" at the time of purchase when a rule can't decide. Labor allocates from the payroll journal by department mapping or from the firm's own time tracking by hours, and the margin-by-line report runs as a scheduled package off closed books, with the close board flagging Untagged revenue before it goes out. The setup is done once and the report is a byproduct of the close. To see the report on live books, book a demo.
Frequently asked questions
- What is contribution margin by service line?
- Revenue for a service minus the direct labor, materials, subcontractors, and software that exist only because that service is sold.
- Should rent be allocated to service lines?
- No. Overhead allocation by formula creates arguments; the pricing decisions live in the contribution line.
- How is direct labor split between services?
- By payroll mapping when staff are dedicated, by time tracking or dispatch hours when they split, or by a written owner estimate applied consistently.
See Woven on your own books.
14-day free trial, no card. Migration imports your chart of accounts, customers, vendors, balances, and history so you verify instead of re-enter.
Book a demo