Agency profitability and client results aren't the same goal, and the gap is where corners get cut.
I've sat on both sides of this table, inside agencies and advising clients trying to figure out why their agency relationship feels off even when the reports look fine. Almost none of what I'm about to describe is fraud. It's structural. Agencies are businesses optimizing for their own margin, and a lot of common practices exist because they protect that margin, not because they serve the client's outcome. The two goals overlap often enough that most clients never notice when they diverge.
Understanding where that divergence tends to show up is the difference between being a client who gets managed and a client who gets results.
Media markups are the oldest trick, and the least disclosed.
If an agency runs your media buying, ask directly how they make money on the media itself, not just the management fee. Trading desks and programmatic buying arrangements can carry markups baked into the media cost that never appear as a line item. Volume discounts and rebates negotiated with platforms and publishers based on the agency's total spend across all clients often stay with the agency instead of passing through.
Layer in programmatic ad tech, where a dollar of client budget can pass through multiple intermediaries (DSP fees, data costs, verification fees, exchange fees) before it ever buys an impression, and it becomes very easy for a client to be paying a real markup they were told didn't exist.
Senior staff sell the account, junior staff run it.
The team in the pitch deck is rarely the team doing the work six months later. This isn't unique to agencies, it happens in consulting and professional services broadly, but it's worth naming directly. The strategist who impressed you in the sales process moves on to the next pitch. The account gets handed to newer staff being billed at rates set for senior expertise.
This isn't automatically a problem. Junior staff can do excellent work with the right oversight. It becomes a problem when the client is paying senior rates for junior judgment and has no visibility into which one they're actually getting.
Retainers quietly shrink in scope while the invoice stays the same.
Watch the arc of a typical retainer. The first few months involve real strategic work: audits, setup, testing, building out campaigns and structure. Once that foundation is in place, actual hours worked on the account often decline while the invoice holds steady. The account shifts into what I'd call maintenance mode, coasting on the setup work done early on, with incremental tweaks standing in for genuine strategic attention.
The client rarely notices because the deliverables still show up. What's missing is the strategic thinking that justified the fee in the first place.
Reporting gets optimized for how it looks, not what it means.
Impressions, reach, and click-through rate are easy numbers to make look good, and they're often the numbers agencies lead with. They're not meaningless, but they're rarely the numbers that map to whether the client's business actually grew. Dashboards get built to justify the spend that already happened rather than to honestly interrogate whether that spend was the right call.
If a reporting deck consistently avoids the metrics closest to actual revenue, that's worth asking about directly, not assuming is an oversight.
Account ownership and access get quietly withheld.
This is the one I'd flag hardest. Ad accounts, analytics properties, pixel access, even domain or CMS credentials in some setups, sometimes stay under agency ownership rather than the client's. Framed as convenience, it functions as a retention mechanism. Leaving becomes slow, disruptive, and sometimes involves rebuilding tracking and campaign history from scratch.
A client should own every account tied to their business, full stop. An agency should have access granted to it, not the other way around.
Signs your agency's intentions aren't aligned with yours.
A few patterns tend to show up together when an agency relationship has drifted toward protecting their margin over your results:
- Reports emphasize activity over outcomes. Lots of language about what was done, very little about what it produced.
- Questions about strategy get answered with reassurance instead of specifics. "We're on track" without the underlying number that supports it.
- You don't have login access to your own ad accounts or analytics. Or you do, but changing anything requires going through the agency.
- The team on your monthly calls has changed multiple times and nobody mentioned it. Turnover happens, but silent turnover is a signal.
- Scope conversations only go one direction. Adding services is easy. Asking what could be cut without hurting results gets vague answers.
- You can't get a straight answer on how media budget is spent. Any hesitation around disclosing markups, rebates, or media buying mechanics is itself the answer.
- Testing and optimization claims aren't backed by anything you can see. "We're always testing" without a record of what was tested and what changed as a result.
None of these alone is damning. Together, they describe an agency managing the relationship instead of the outcome.
The fix isn't distrust, it's structure.
I don't think the answer is assuming every agency is working against you. Most people in this industry are trying to do good work inside business models that create these pressures whether they intend it or not. The answer is building structure into the relationship that keeps incentives honest: full ownership of your own accounts, reporting tied to business outcomes rather than platform vanity metrics, and clear visibility into who is actually doing the work and how media dollars move.
This is a lot of what fractional CMO or freelance oversight ends up solving in practice, and it's worth being specific about why the structure itself helps. A fractional CMO or independent freelancer isn't billing you through a media markup, so there's no incentive baked into how your budget gets spent. There's no bench of junior staff to staff up behind a senior pitch, because the person you hired is the person doing the work. There's no retainer built around a standard service package that needs to stay full regardless of what your business actually needs that month, since the engagement scales with the work in front of it. And because that person isn't managing an agency's client roster or trying to protect a renewal, the incentive runs toward telling you the truth about what's working, even when the truth is that less activity, not more, is the right call.
None of that makes a fractional or freelance model automatically better in every case. It makes the incentives simpler to see, which is most of what's missing in the patterns above.
Q&A
Is it reasonable to ask my agency directly about media markups?
Yes, and a good agency should be able to answer clearly. Hesitation or vague answers about how they make money on media is itself useful information.
How do I know if my account team turnover is a problem?
Some turnover is normal in any service business. The problem isn't turnover itself, it's turnover that isn't disclosed or explained, especially when the new team's experience level doesn't match what was originally proposed.
Should I always insist on owning my own ad accounts?
Yes. There's rarely a legitimate reason for a client not to own the accounts, analytics, and pixels tied to their own business. Agency access should be granted, not the default state of ownership.
What's a reasonable way to check if reporting reflects real performance?
Ask for the metric closest to revenue, whether that's conversions, cost per acquisition, or return on ad spend, and ask how it's trended over the life of the engagement. If that's harder to get than impressions and reach, that's worth noting.
Does this mean I should manage everything in-house instead of using an agency?
Not necessarily. Good agencies exist and can be genuinely valuable. The point is building in enough visibility and structure that you'd know the difference between a good one and one that's optimizing for its own margin.