TL;DR: Agency profit doesn't leak from one big mistake. It leaks from six small ones, weekly, in places you're not looking. The median agency holds a 15% net margin. Specialists hit 25 to 40%. The gap is closed by tracking six numbers every Friday: gross margin per client, billable utilization, AR aging, scope-creep absorption, software bloat, and effective hourly rate. Below: where each leak lives, how to measure it, and what to do about it.
I ran my agency for 18 months before I looked at margin by client. When I finally did, one of my biggest revenue clients ($2,800/month, "anchor client") turned out to be running at 11% gross margin. A smaller client at $1,900/month was at 51%. The math didn't care that the bigger one paid more. It cared that one was profitable and the other wasn't. I fired the bigger one inside the quarter. Total agency margin moved from 14% to 22% in 90 days. Revenue dropped. Profit went up.
I'm Sammie Oku, founder of Eximius Studio, a web design and dev agency in Tyler, TX. This post is the six numbers I should have been tracking from day one. Each one names a specific leak, where to find it, and what fixing it actually does to the bottom line.
For context, how to run a web design agency covers the seven systems this fits inside. Financial visibility is System 7. This is the full playbook for that system.
The benchmark: 15% net margin is average, 25 to 40% is achievable
The median digital agency has held a 15% net margin since 2015 (Promethean Research). That number hides a wide distribution. Specialized agencies report 25 to 40% margins. Generalists struggle to break 20%. The gap isn't talent. It's operational discipline.
A few benchmark numbers worth memorizing because they're the targets the rest of the post points at:
| Metric | Healthy target | Warning |
|---|---|---|
| Gross margin per client | 50% to 65% | Below 40% |
| Net profit margin (agency-wide) | 20% to 30% | Below 12% |
| Billable utilization (producers) | 75% to 85% | Below 65% or above 90% |
| AR days outstanding | Under 30 | Above 45 |
| Scope creep absorption | Under 3% of total hours | Above 7% |
| Software cost per FTE | Under $400/month | Above $600/month |
The six leaks below map to those numbers.
Leak 1: Underpriced retainers
The single most common margin killer in small agencies. A retainer priced at $2,500/month for 18 hours of work, at a true hourly cost of $95, is running at a 32% gross margin. That sounds fine. It isn't. Once you spread overhead and non-billable hours across the retainer, the net margin is closer to 8%. You're making $200 of real profit per month on $2,500 of revenue. The underpricing usually traces back to weak discovery: you didn't surface the real scope before you priced.
Where to find the leak. Calculate true hourly cost (see how to price a web design retainer for the formula). Multiply by actual hours delivered per retainer per month. Divide by retainer revenue. If gross margin is under 50%, the retainer is underpriced.
What fixing it does. Raising a $2,500/month retainer to $3,200/month at the same hours moves gross margin from 32% to 47%. On a single retainer, that's $8,400 in additional annual revenue at near-zero additional cost. Across four retainers, it's $33,600/year in pure margin.
How to fix. Don't try to renegotiate mid-term. Use the annual rate-review clause in your retainer agreement to raise rates at renewal. Build a 5% annual escalator into every new retainer. The compounding alone keeps you ahead of cost inflation.
Leak 2: "Quick favor" absorption between billings
Client emails: "hey, can you push this small fix live before Friday?" You do it. It takes 90 minutes. You don't write a Change Order. You don't log it against the retainer. The work disappears into goodwill.
Two quick favors per week across four clients is roughly 6 hours of unbilled work per week. At an effective $150/hour billable rate, that's $900/week, or $46,800 per year, in margin you give away politely.
Where to find the leak. Add a "Goodwill" column to your time tracking. Every time you decide to absorb instead of write a Change Order, log it. Review monthly. If goodwill spend is above 5% of total billable hours, you're not being generous, you're being undisciplined.
What fixing it does. Eximius cut goodwill absorption from ~8% of hours to ~2% over six months by routing every out-of-scope request through the scope-change protocol. Annual margin lift: roughly $28,000.
How to fix. Run the "Let me check" trigger on every out-of-scope request. Use the swap-or-add script. Absorb only when the client is high-LTV and the work is under 1 hour. Track the absorptions and audit them every month.
Leak 3: Over-servicing your top-revenue client
This is the leak nobody talks about because it feels like good service. Your largest client gets 30% of your revenue. They also get 50% of your attention, 60% of your "yes" responses, and the best of your team's time. Their margin is fine. The margin on everyone else is degraded because you're emotionally allocated to keeping the big one happy.
Where to find the leak. Calculate gross margin per client. If your largest client has the highest margin, great. If your second and third largest clients have notably lower margins than smaller clients, you're over-servicing the big one at the cost of the rest.
What fixing it does. Spreading attention proportionally to revenue (or proportionally to margin, even better) usually adds 3 to 5 points of agency-wide margin within a quarter. On a $400K revenue agency, that's $12,000 to $20,000 of pure profit.
How to fix. Cap weekly hours per client at retainer scope. Use the monthly retainer report to surface over-delivery. If your top client consistently consumes 40% more hours than they pay for, the conversation is either "we need to expand the retainer" or "we need to enforce the cap."
Leak 4: Time not logged (you can't fix what you can't see)
The simplest leak and the most universal. Hours not logged are hours you can't bill against, can't measure margin against, and can't see in any report. Most agency owners think they're under-logging by 5%. The real number, when audited, is usually 15 to 25%.
Where to find the leak. Compare logged billable hours against your work-day reality. If you worked 40 hours this week and logged 22 hours billable, where did the other 18 go? Some was non-billable (correctly). Some was billable work you forgot to log.
What fixing it does. Recovering 5 hours per week of un-logged billable work, at $150 effective rate, is $39,000 per year. On a solo agency where that work was already done, the entire amount drops to the bottom line.
How to fix. Log time the same day, not at week's end. Use a simple tool (Toggl, Harvest, or a Notion database, structured per agency project management in Notion). Track in 30-minute blocks, not perfect minutes. The discipline matters more than the precision. Once a week, audit the log against your calendar for anything that's missing.
Leak 5: Software bloat (the $400/month nobody audits)
Every agency carries software subscriptions that compound silently. Notion, Figma, Adobe, Webflow CMS seats, ConvertKit, Calendly, Loom, Zapier, Linear, Slack, Google Workspace, hosting, domain registrar, SSL provider, password manager, accounting software, time tracker, project management tool. Sub-$30/month each. $400 to $800/month total per FTE.
Where to find the leak. Pull your last three months of credit card statements. List every recurring software charge. For each one, ask: do I actually use this every week? If no, cancel.
What fixing it does. A typical solo agency audit reveals $200 to $400/month of unused software. That's $2,400 to $4,800/year of pure margin recovery, every year, in perpetuity.
How to fix. Schedule a quarterly software audit. Every active subscription gets a "kept / cancelled / downgraded" decision. Set a budget: software cost should run under $400/month per FTE. Above $600/month means you're paying for tools you've outgrown or never used.
Leak 6: Unmanaged scope creep
The biggest leak by dollar amount, covered in full in how to stop scope creep. Worth naming here as one of the six numbers because it's the one that hides best.
Unmanaged scope creep typically destroys 10 to 25% of project margin. A $15,000 project priced at 38% margin can land at 4% margin after six "small" absorbed requests. The project still ships. The revenue still hits the books. The margin disappears.
Where to find the leak. Track planned vs. actual hours per project. Difference between the two is scope absorption. If actual hours exceed planned hours by more than 10%, the project absorbed scope you didn't charge for.
What fixing it does. Cutting scope absorption from 15% to 3% on a $200K/year project revenue base moves $24,000 of revenue from unbilled to billed. Same work, properly priced.
How to fix. Run the 5-move framework in the scope creep post. Specificity at proposal. Defined revision policy. Change Order trigger. Swap-or-add script. End-of-phase sign-off. Built once, holds forever.
The 6 numbers to track weekly
The leaks above all surface in six metrics. Track these every Friday in a 30-minute review.
1. Gross margin per client. Revenue minus direct delivery cost, divided by revenue. Target 50%+ per client. Below 40% triggers a conversation about pricing or scope.
2. Billable utilization (by team member). Billable hours divided by available hours. Target 75 to 85% for producers, 40 to 55% for owner/founder, 50 to 60% agency-wide.
3. AR aging. Total outstanding invoices, bucketed by 0 to 30, 31 to 60, 61 to 90, 90+ days. Anything past 30 days gets a follow-up. Anything past 60 days gets a phone call. Anything past 90 days, work stops until it clears.
4. Scope-creep absorption (goodwill hours). Hours of unbilled out-of-scope work per week. Target under 3% of total hours. Audit monthly.
5. Software cost per FTE. Total monthly software spend divided by full-time-equivalent headcount. Target under $400/month. Above $600/month, audit.
6. Effective hourly rate. Total monthly revenue divided by total billable hours delivered. Tells you whether your pricing is rising or falling over time. For most small web design agencies, target $125 to $175. Below $100 means underpriced. Above $200 means you've earned premium positioning.
These six numbers fit on one page. Look at them every Friday for 30 minutes. After three months, you'll know which leaks are real for your agency and which aren't. The Friday review is itself one of the most important agency SOPs to document, because skipping it for two weeks in a row is how most margin problems compound out of sight.
Building this from scratch is slow. The financial dashboard, per-client margin tracker, AR aging view, and software audit log are inside Agency Operations OS. Deploys in an afternoon, $79. Link at the end.
When to fire your worst client
Sometimes the math is unambiguous. A client at consistently under 20% gross margin, who absorbs the most goodwill hours, who consumes the most stress, is not a client. They're a tax.
The decision rule I use: if a client is in the bottom margin quartile for three consecutive months, has absorbed more than 5 hours of unbilled goodwill in any of those months, and is not realistically going to increase scope or fees in the next quarter, fire them.
"Firing" doesn't mean dramatic. It means: at the next natural renewal point (end of project, end of retainer term), don't renew. If there is no natural renewal point, give 30 days written notice per the retainer agreement clauses and offboard professionally.
What firing does. Frees up 8 to 15 hours per month of capacity. Drops stress. Improves your average client margin (because the worst one is gone). And it almost always coincides with attracting a better-fit replacement within 60 days, because your attention isn't bottled up by a low-margin client anymore.
The math on firing my $2,800 client: lost $33,600/year of revenue, recovered roughly 14 hours/month, freed up attention that helped close a $52,000 project in the following quarter. Net effect on annual profit: positive by $14,000+.
What overhead actually costs (the number to budget against)
Overhead for a small agency typically runs 30 to 40% of total costs once you include software, contractors, rent (if any), accounting, taxes, insurance, and the founder's draw. Knowing your overhead percentage tells you what utilization you need to hit to be profitable.
The relationship is simple: if overhead is 35% of costs, you need at least 35% of your revenue to come back as gross profit just to break even. That means a gross margin floor of 35% on every engagement. Anything below that is losing money once overhead is allocated.
This is why the 50%+ gross margin per client target matters. 50% gross minus 35% overhead = 15% net. Right at the industry median. To beat the median, push gross margin to 60%+ per client.
Frequently asked questions
What's a good profit margin for a web design agency?
Target 20 to 30% net profit margin. Industry median is 15%. Specialized agencies achieve 25 to 40%. Gross margin per client should run 50 to 65%. If your net margin is under 12%, the most likely culprits are underpriced retainers, unmanaged scope creep, or low billable utilization. Track gross margin per client and billable utilization weekly to identify which one is the primary leak.
How do you calculate agency profit margin?
Gross margin = (Revenue minus direct delivery costs) divided by Revenue, times 100. Direct costs include fully-loaded labor (salary plus 25 to 30% for taxes, benefits, and software). Net margin = (Revenue minus direct costs minus overhead) divided by Revenue. Overhead typically runs 30 to 40% of total costs. For a $400K agency at 60% gross margin and 35% overhead, net margin lands around 22%.
What's a healthy utilization rate for an agency?
75 to 85% for producers (designers, developers). Below 65% means you're not selling enough. Above 90% means burnout risk and quality decline. Owner-founder utilization should run 40 to 55%, because some of your time is sales, ops, and strategy. Agency-wide blended utilization is 50 to 60%. If your team is at 95% three months running, expect a quality issue or a quit notice.
How often should agency owners review financials?
Weekly for the six core metrics, monthly for the deeper P&L, quarterly for strategic decisions (fire clients, raise rates, hire or contract). The Friday 30-minute review is enough for ongoing health monitoring. Set a longer 90-minute review on the first of each month for P&L and AR cleanup. Quarterly, run a full audit including software, margin per client, and rate review for retainers.
Why is my agency revenue growing but profit isn't?
Three usual causes. First, new revenue is from lower-margin clients dragging down your average. Second, scope creep absorption is silently destroying project margin on bigger projects. Third, you're hiring or expanding software faster than revenue justifies. Fix: calculate gross margin per client and segment by quarter signed. If newer clients are at lower margin than older ones, your pricing has drifted. Tighten it.
The shortcut: Agency Operations OS
Building the financial dashboard, the per-client margin tracker, the AR aging view, and the goodwill log from scratch takes 6 to 10 hours of Notion work. The pieces aren't complicated. Wiring them together so they update automatically every week is.
Agency Operations OS is the Notion template I use to run Eximius Studio. It includes:
- 7 core databases: Leads, Deals, Projects, Retainers, Change Orders, Financials, AR Aging
- 5 dashboards: Weekly Owner Review, Pipeline, Active Projects, Retainer Health, Margin by Client
- 15 SOPs including the Friday financial review, software audit, and client-firing decision process from this post
- 5 bonus docs: Master Services Agreement, Retainer Agreement, Project Proposal template, Discovery Call script, and the 47-item Pre-Launch QA Checklist
One template, deploys in an afternoon, $79.
The six numbers above are where agency margin actually leaks and how to find each one. Build the Friday review habit, watch the numbers for a quarter, fix the worst leak first. Margin moves before revenue does.
For the bigger picture, how to run a web design agency shows where financial visibility fits in the seven-system operating model, how to price a web design retainer covers the math on the most common leak, and the best Notion templates for web design agencies compares the templates that ship with per-client margin dashboards built in.
