Agile Growth Labs
HK

Founder, Agile Growth Labs · 42 verified Upwork reviews · Installs Portable Delivery Intelligence so agency teams carry more accounts per person.

What Is a Good Profit Margin for a Marketing Agency? Where Delivery Eats It

8 min read 1,965 words by
#AI#Marketing#Performance
What Is a Good Profit Margin for a Marketing Agency? Where Delivery Eats It

For a marketing agency, I use 50%+ gross margin, 20%–30% operating margin, and 15%–25% net margin as planning targets, measured against fee income, not total billings. Before hiring or changing prices, I check each account’s actual delivery costs, including account management, senior review, and unpaid revisions.

The gap is often in how work gets done. AI can draft the work, but people still spend time rebuilding briefs, finding client details, and chasing approvals. I check those hours before blaming the tool or the fee.

My rule: <u>count the full cost of delivery before choosing the fix.</u>

How to make your marketing agency more profitable (margins, pricing & ops)

Where Client Delivery Cuts Account Profit

Agency Account Margins: Same Fee, Different Profit

Agency Account Margins: Same Fee, Different Profit

Client delivery cuts account profit when the work costs more than the fee leaves room for, even if agency-wide margins look healthy. Measure profit by account using actual delivery hours, since 2 clients paying the same fee can leave very different amounts to cover overhead.[6][7]

Calculate Each Account's Contribution Margin

Account contribution margin = (account fee revenue − all attributable delivery costs) ÷ account fee revenue. Track production labor, account-management labor, contractors, and client-specific tools separately. Use actual hours, not budgeted hours. The amount left helps cover overhead; it is not net profit.[6][7]

Use the same loaded-cost method across accounts. Include salary, employer taxes, and benefits, but keep agency overhead separate. Tag unbilled scope and rework within the same time entry so you do not count labor twice.[4][6][8]

Compare 2 Hypothetical $10,000 Accounts

Both accounts use a $60 loaded hourly cost and $800 in contractor and tool costs.[6][2]

Metric Account A Account B
Monthly fee revenue $10,000 $10,000
Delivery hours, including account management 70 110
Loaded hourly cost $60 $60
Delivery labor cost $4,200 $6,600
Contractor and tool costs $800 $800
Total delivery cost $5,000 $7,400
Contribution dollars $5,000 $2,600
Contribution margin 50% 26%

Account B leaves $2,400 less for overhead because of 40 additional hours of coordination, rebriefing, and unbilled revisions. That does not automatically mean the retainer is too low.[2]

The next question is which hours the work needs and which hours you can cut.

Count Overlooked Delivery Work

Audit a full month of internal meetings, Slack requests, approval follow-ups, and senior review. Charge leadership time to the account it serves. Use each person's loaded cost to reflect the higher cost of senior help. Class repeat AI prompting as production or rework based on why it was needed.[5][8]

Count work caused by approval delays, not idle waiting. Follow-ups, task switching, and rescheduling use team time. Idle waiting is not labor. Give each entry 1 activity code and 1 scope or rework tag to show where margin goes without counting work twice.[5][4][8]

Find the Bottlenecks Behind Falling Margins

Falling margins can come from coordination work, unpaid scope, approval delays, or pricing that does not cover delivery costs. To find the cause, compare account-management time, actual delivery hours, and priced hours before changing fees or adding staff, then fix the work that drains the most team capacity.

Separate Account-Management Overload From Scope Creep

Account-management overload is coordination labor. Scope creep is unpaid extra work. Both cut contribution margin, but they need different fixes.

Coordination hours eat into margin even when fee revenue stays flat. Track accounts per manager and account-management hours per account. Use 4–8 accounts per manager as a starting point, not a firm limit. Account complexity still matters.[7]

Compare actual delivery hours with priced hours over the last 3 months. Track unpaid scope hours on their own. Also track revision hours as a share of production hours.[2]

More management time with stable scope points to a coordination problem. More production time tied to extra requests points to weak scope controls.[2]

Track Repeated AI Briefing and Approval Delays

When scope is stable, check how much time goes into briefing AI tools and waiting for approvals. AI is not always the bottleneck. Missing client context can be.

Each time someone rebuilds a client brief, that prep becomes more delivery labor. It leaves less time to handle accounts. Track brief-prep minutes per task and rework hours caused by context errors as separate measures.[9]

Check who owns each approval and which tasks need senior review. Measure the time from submission to decision. Track follow-up, revision, and senior hours per account, too.[9]

A long approval cycle shows a delay. Follow-up and rework hours show what that delay costs in team time.[9]

Separate Pricing Problems From Workflow Problems

Match the fix to the cause before changing prices. Compare contribution margin with scope variance, coordination time, and the mix of staff doing the work.[2]

If delivery runs well but contribution stays low, pricing may be the problem. If revisions pile up or senior staff handle routine tasks, check the workflow first. The goal is more contribution margin without more hires.[2]

Diagnostic signal Likely cause Metric to check Targeted remedy
Low margin, high utilization Underpricing Gross margin % Reprice or cut scope.
High revisions Weak scope controls or unclear briefs Revision hours ÷ production hours; unbilled scope hours Set revision limits and approve extras.
High coordination time Account-management overload Account-management hours per account Cut duplicate reporting and clarify handoffs.
Context errors Missing client context Brief-prep time; context-related rework hours Use a shared client context and briefing format.
Senior time on routine work Task-assignment imbalance Utilization by role; senior hours by task Move routine work to the right role and keep 1 senior review step.

Increase Delivery Capacity and Measure Profit

Increase delivery capacity by fixing how client context moves through the team, then test the change against margin and quality. More accounts per person improve profit only when delivery costs fall or the team earns more profitable revenue without adding staff or letting quality slip.

Saved time is capacity, not profit. Change the workflow before changing the software stack.

Standardize Client Context, Scope, and Approval

Start with the gaps already found: briefing errors, repeat revisions, and slow approvals. These gaps point to missing context, not just a need for better AI tools.

At kickoff, keep strategy, scope, and approval rules in 1 controlled source.[8][9] Use brief and status templates. Set a clear update schedule, revision limits, and rules for change orders.[9][4][8]

Add 1 internal review to catch work that misses the brief.[9][4][8] Name the final approver by person, not role, so feedback has a clear endpoint.[10]

Test the New Delivery Process on One Service

Test 1 recurring service before changing the rest of delivery.[5][10] Keep the same method for tracking contribution margin by account. Use a standard intake form and set the approval threshold work must meet before production starts.[2][10]

The test should answer a clear question: Can the team carry more accounts per person without cutting contribution margin or quality?

Track where saved hours go. Do they become billable work, or does the team have unused time?[4] Count all pilot costs, including labor and the time and cost to put the new process in place.[5][2]

Conclusion: Confirm Capacity Gains Improve Profit

Compare the baseline with a 60–90-day pilot. Focus on project margin, not just total revenue.[4][8] Include onboarding, setup, and recurring overhead costs in the results.[5][2]

Use the results to check which bottleneck changed.

Metric Before: baseline After: pilot
Per-client contribution margin Contribution dollars and % by client Same measure, including pilot costs
Gross margin Revenue less delivery costs, as % Same cost classification
Management hours Hours per account per month Same measure
Unbilled hours and rework Track each separately Compare hours and share of delivery time
Approval time Time from submission to decision Same approval stages
Senior involvement Senior hours per account Same measure
Quality First-pass acceptance; client escalations Same checks and definitions

Keep 3 priorities in view: use the same margin definitions, count all delivery costs tied to the work, and expand only when the results support it.

The change must free capacity without hiring, cut costs or support more profitable revenue, and keep quality steady. Saved salaried hours do not automatically become operating profit.

FAQs

How should owner compensation affect my agency’s margins?

Treat owner compensation as overhead, not a direct delivery cost. Like leadership pay, admin costs, and other operating expenses, it reduces your agency’s net profit.

To keep a 15% to 25% net profit margin, count your pay in your overhead budget, typically 30% to 40% of revenue. Leave it out, and profit can look higher than it is. That can leave too little cash to run or grow the agency.

When should I reprice an unprofitable client account?

Reprice or cut scope when account data shows a pattern of low returns, such as gross margin below 50%–55% [1]. Check whether actual hours, labor costs, or tool costs exceed what you built into the fee [1][2][3].

A price change may make sense when client usage shifts, scope grows without a fee change, or delivery costs rise. If the client won't accept a higher price, offer less work for the current fee or end the relationship [1][2][3].

How can I tell if saved delivery time justifies another client?

Compare planned and actual hours for each role. Then calculate each account’s gross margin. Check that time saved with AI isn’t going into work you don’t bill for.

If work keeps taking more hours than you sold, there’s a scope or estimate gap. That’s not spare capacity.

Take on another client only after you close that gap and reach 50–60% gross margin or higher. At 70–85% utilization, your team is near the limit it can maintain. Fix wasted time in delivery first, so added work doesn’t cut margins or burn out the team.

Quick Q&A

How should owner compensation affect my agency’s margins?
Treat owner compensation as overhead, not a direct delivery cost . Like leadership pay, admin costs, and other operating expenses, it reduces your agency’s net profit. To keep a 15% to 25% net profit margin , count your pay in your overhead budget, typically 30% to 40% of revenue. Leave it out, and profit can look higher than it is. That can leave too little cash to run or grow the agency.
When should I reprice an unprofitable client account?
Reprice or cut scope when account data shows a pattern of low returns , such as gross margin below 50%–55% [1] . Check whether actual hours, labor costs, or tool costs exceed what you built into the fee [1] [2] [3] . A price change may make sense when client usage shifts, scope grows without a fee change, or delivery costs rise. If the client won't accept a higher price, offer less work for the current fee or end the relationship [1] [2] [3] .
How can I tell if saved delivery time justifies another client?
Compare planned and actual hours for each role. Then calculate each account’s gross margin . Check that time saved with AI isn’t going into work you don’t bill for. If work keeps taking more hours than you sold, there’s a scope or estimate gap. That’s not spare capacity . Take on another client only after you close that gap and reach 50–60% gross margin or higher . At 70–85% utilization , your team is near the limit it can maintain. Fix wasted time in delivery first, so added work doesn’t cut…
Free calculator. How many more accounts could you carry? →×

Find your capacity leak in 2 minutes.

See how many more accounts your team could carry. Free. No signup.

Run the free calculator →

Most account managers cap at 4 to 8 accounts. How many could yours carry?

Run the free calculator →