Why agencies are fully booked but not profitable: summary & key takeaways
The gap: Your team is busy on hours that never reach an invoice at full rate, so a full calendar hides a thin margin.
The breakdown: Sort one month of available hours into four buckets: billed, given away on retainers, unpriced non-billable work and bench.
The test: Compare your billed rate and effective rate with a cost floor to tell a pricing problem from a delivery problem.
The fix order: Recover the bucket holding the most dollars first, then reprice whatever still sits below the floor.
The main reason why agencies are fully booked but not profitable is that the calendar counts hours worked, not hours billed at the rate you sold. Looking back from Teamwork.com, over-servicing was the biggest drain of my agency years: clients asked for more inside the same retainer, and nothing recovered the cost.
A full team that still can't show a profit is exhausting, and it rarely means people are slacking or clients are wrong. Sort one month of booked hours into four buckets and you can name the cause that took your margin, then fix the biggest bucket first.
A full calendar counts hours worked, not hours paid for
A fully booked team can still bill barely half its time, because booking and billing measure different things. Billable utilization is the share of a person's available hours that you bill to a client. The second number is the share of client delivery hours you actually invoice, which consultancies call realization. Pull both from last month's timesheets before reading on.
The two can sit far apart. A timesheet can show 95% of hours booked while billable utilization sits under 60%, because retainer overruns, internal meetings and account admin count as booked. For the profit levers behind that gap, see why fully booked firms still miss their margin.
Split one month of booked hours into four buckets
The fastest way to see what sits behind those two numbers is to sort every available hour in one month into four buckets. Take an illustrative 60-person agency with a 40-person delivery team; every figure is an assumption.
Each person has 140 available hours a month after leave and holidays, giving 5,600 honest available hours. The rate card assumes a $150 blended billable rate, a $70 fully loaded blended cost rate and 75% billable utilization. The booked-hour breakdown for one agency month shows a full team billing just over half its time.
Booked-hour bucket
Only 280 hours sat unassigned, so the team really is full: 5,320 hours booked, or 95% of the month. Yet billable utilization is 57.5%, and the team billed only 85.2% of the 3,780 hours it spent delivering for clients.
In dollars, the planned vs. actual delivery margin for the month shows a $164,500 gap. The plan bills 4,200 hours at $150 and costs 5,600 hours at $70.
Delivery margin line
Actual cost runs $17,500 over plan. Senior people costing about $95 an hour spent 500 hours on work priced for mid-level staff at about $60.
The rest of the gap is unbilled revenue. Giving away 560 retainer hours cost $84,000 at $150 an hour. Non-billable and bench time used 1,820 hours against the 1,400 the plan allowed, so the extra 420 hours cost $63,000. That makes over-servicing the biggest single cause, at about half the gap.
Run the same split on last month's timesheets. If your time entries can't be sorted into these four buckets, that's your first finding.
Five causes, and the symptom that gives each one away
The breakdown shows how many hours went missing, and usually one or two causes took most of them. Each leaves a distinct symptom in the numbers, and every threshold here is a working rule of thumb to adjust to your rate card.
Retainer hours given away beyond the allowance
Over-servicing shows up as retainer accounts burning past their monthly allowance while the invoice stays flat. Small requests get absorbed because they're quick, and nobody logs them as out of scope.
The test is retainer burn above 110% of the allowance two months running. One heavy month is just busy; two in a row is a scope that has outgrown its fee.
Log every out-of-scope request against the retainer as it arrives, then offer a change order or re-scope at renewal. Roll underspend and overspend between months only inside a band both sides have agreed. Our guide to preventing scope creep on retainers covers the client conversation.
Non-billable work nobody priced in
Busy weeks with low billable utilization point to non-billable load the rate card never priced: status decks, client reporting, internal meetings and account admin. You'll know it's this cause when non-billable plus bench hours run more than 5 points above the rate card's share. In the example, they took 32.5% against 25%.
List the top three non-billable activities by hours. Then price account management and reporting into the retainer as named deliverables, or cut the time. Either way, these hours belong in each account's cost to serve.
Work sold below what it costs to deliver
Two rates per account tell you whether you have a pricing problem or a delivery problem. Billed rate is revenue divided by billed hours, and effective rate is revenue divided by every client hour worked. Set a working floor at twice the fully loaded cost rate, then adjust it to your target margin.
A billed rate below the floor is a pricing problem, so reprice from what the last comparable projects cost. A billed rate above the floor with an effective rate below it is a delivery problem, so fix scope and hours first. In the example, the $150 billed rate clears a $140 floor, but $483,000 across 3,780 client hours tells a different story:
At about $127.78, the effective rate sits below the floor, so this agency has a delivery problem. I see scope creep as a scoping failure that clients get blamed for, and it usually begins with an underbid at the pitch. An underbid rarely shows in the rate; it shows up later as hours the effective rate has to absorb.
Senior people doing work priced at junior rates
When budgets burn faster than progress and the same senior names keep appearing on production tasks, the staffing mix has moved away from the quote. Confirm it by checking whether the senior share of hours runs more than 10 points above the mix the quote assumed. Plan by role before the project starts and keep senior time for work priced at senior rates; in the example, that swap cost $17,500. The mix lever in our project variance guide runs the same check per project.
Hours AI removed from work you still bill by the hour
When logged hours on hourly accounts fall while scope holds, AI has removed hours you used to bill, and invoices shrink. The giveaway is logged hours down 10% or more quarter on quarter with the same deliverables. The fix is fixed fee or outcome pricing, set from what the work costs now.
In SPI Research's 2026 Impact of AI on Professional Services report, firms saying AI had "significantly increased" productivity achieved 85.9% of their revenue target. Firms reporting no change achieved 93.5% (both figures from Chapter 6 of the full report). Saved hours don't become revenue on their own; on an hourly account they come off the invoice unless you reprice or resell them. Our guide to where AI-saved hours leak covers the pricing math.
Each cause fails a different test and needs a different first fix.
Cause
If two rows fit, start with the one holding more dollars in your breakdown. That's your dominant cause, and it sets the order for everything else.
Fix the biggest bucket first, then reprice what's left
Once you've named the dominant cause, fix the bucket holding the most dollars first, because hours recovered from an existing client cost nothing to win. Raising utilization or winning more clients comes later, because more booked hours pour into the same four buckets. Leaks outside delivery hours need a different exercise, which our agency margin leak map covers.
Stop the biggest give-away: In the example that's retainer over-servicing, and recovering half the 560 hours adds $42,000 a month.
Price or cut the non-billable load: Charge for account management and reporting inside the retainer, or remove the hours.
Restaff the mix: Move production tasks back to the roles the quote priced, and protect senior time.
Reprice what's left: Raise rates that sit below the floor, and move hourly work AI is shrinking to fixed fee.
Step 2 often starts with reporting. As an Account Director, I watched manual client reporting eat unbillable hours every week, because every client wanted a different format. If one status update takes half a day to build, nobody can see the account for the rest of the month. That's the gap to close.
Step 4 follows where pricing is heading. Business Insider reported in November 2025 that about a quarter of McKinsey's global fees now come from outcome-based pricing. That's one firm's own fee mix, not an industry rate. For an agency, it backs pricing retainer deliverables from what they cost, so a faster month doesn't shrink the fee.
A good breakdown next month has given-away hours at or under 5% of available hours. Non-billable plus bench should be back inside the rate card's 25% allowance.
Booked-hour bucket
If the freed hours go to billable delivery and senior time returns to senior work, revenue reaches $588,000 and delivery margin $196,000, or 33.3%. That's about three quarters of the gap recovered without winning a single new client.
Where this diagnosis stops working
The fix order assumes last month's hours are accurate, and the diagnosis breaks down when they aren't. If the team doesn't trust its own timesheets, fix time capture first, then run the split on two clean weeks. Under about 15 people, one person's month swings every average, so look per person and per account instead.
Project-only shops without retainers won't see a given-away bucket in the same form, because it turns into scope overruns on fixed fees. A project-level variance check on each fixed fee fits that shape better. At any size, averages hide imbalance: a 75% team average can be two people at 95% and two at 55%. Read utilization per person before you trust the team figure.
How Teamwork.com shows where every booked hour went
Teamwork.com builds the booked-hour breakdown from live delivery data, so nobody rebuilds it from timesheets each month. It's the agentic PSA (professional services automation platform), connecting projects, resourcing and financials in one system. Project management software tracks tasks, while a PSA tracks whether the work is actually making money. Teamwork.com captures time, cost rates and billable rates in the same place delivery happens, keeping all four buckets current for every client and retainer.
Catch retainer overspend in the week it starts. Over-servicing does the most damage when nobody sees the allowance running out until renewal. Retainers in Teamwork.com reallocate the budget across the retainer, adding underspend to the next period or subtracting overspend from it. Custom notifications alert you when the budget reaches an amount you set. Set that amount below the allowance, and over-servicing shows up as an alert long before the 110% test fails.
See whose week went to work nobody pays for. Non-billable load and senior people on junior tasks both disappear inside a team total. The Utilization Report gives you real-time reports on how the team is being used, against billable targets set for every team member. The AI Utilization Summary shows who is over-capacity, under-capacity or unassigned, for a manager to act on. The Workload Planner is the short-term planning view where you shift tasks and balance workloads, moving production tasks back to the roles the quote priced.
)
Tell a pricing problem from a delivery problem. The two-rate test stalls when revenue, hours and cost live in separate spreadsheets. Set custom cost and billable rates for each team member, and the Profitability Report shows which projects or clients are profitable. With revenue, logged hours and cost in one place, you can work out both rates without rebuilding a spreadsheet. The AI Profitability Forecaster gives data-backed predictions of revenue, cost and profit, for you to review before you reprice.
)
Manual reporting belongs in the non-billable bucket. OIC Advisors moved budget reporting, portfolio dashboards and time tracking into Teamwork.com. The result, per the OIC Advisors customer story: 100% less time spent manually generating reports.
A full calendar is only good news when you can see which of its hours were paid for.
)
)
)
)
)
)
)
)
)
)