The account that looked brilliant on paper
A home fitness equipment brand in Manchester came to us spending around £18,000 a month on Google Ads. Their Performance Max campaign was reporting a 6.4x return on ad spend. The founder was happy with that number but confused by another one: blended revenue across the business had barely moved in four months, even as PMax spend had climbed from £6,000 to £11,000. If the campaign was producing six pounds for every pound in, where was the money going?
We pulled the search terms insight report inside PMax and the answer was sitting there. Roughly two thirds of the attributed conversions came from search categories containing the brand name or close misspellings of it. The campaign was not finding new buyers. It was standing at the door and taking credit for people who had already decided to walk in.
Why Performance Max does this by default
Performance Max is built to hit a conversion target as cheaply as possible across every Google surface it can reach: Search, Shopping, YouTube, Display, Gmail, Discover and Maps. It is given a budget and a goal and left to find the lowest-cost conversions available. The lowest-cost conversions in almost any account are branded searches, because the person typing your name into Google has already done the hard part. The click is cheap, the conversion rate is high, and the attribution model hands the sale to whichever paid touchpoint was last.
Unless you tell it otherwise, PMax will fish in that pond first and keep fishing in it as you raise the budget. What looks like scaling is often just a bigger share of your existing branded demand being routed through a paid click instead of a free organic one. Your reported ROAS stays flat or even improves, while your actual incremental revenue, the sales you would not have made without the ad, goes nowhere.
There is a second mechanism that makes this worse. Final URL expansion, which is switched on by default, lets Google send traffic to any page on your site it thinks is relevant and generate its own headlines. In practice that means it can serve your homepage against your own brand name, which is exactly the query a brand campaign or organic listing was already winning.
How to check whether this is happening to you
You do not need a data scientist for this. Three checks will tell you most of what you need to know.
First, open the Insights tab inside the PMax campaign and look at the search terms or search categories report. Sort by conversions. If your brand name and its variants are at the top, you have a cannibalisation problem. Google groups these loosely, so also scan for product names that are unique to you.
Second, compare the campaign's reported revenue against your actual order data over the same window. If PMax claims £70,000 in revenue in a month when the store did £85,000 total and you also have organic, email and a brand search campaign running, the attribution is not describing reality. Last-click models in Google Ads will always flatter the campaign that catches the final branded search.
Third, look at the Shopping half of the campaign. Pull the product-level report and check whether a handful of your best-known SKUs are absorbing most of the spend while the long tail gets nothing. That pattern usually means the system has found the easy conversions and stopped exploring.
What to change
Start with brand exclusions. Google now lets you add a brand list at the campaign level in Performance Max, which stops it from serving on Search and Shopping queries that contain your brand terms. Build the list carefully: include misspellings, the brand name combined with product words, and any trademarked product names. Then run your branded traffic through a dedicated Search campaign with exact and phrase match keywords, a modest budget and a tight bid cap. Branded clicks are cheap. There is no reason to let an automated campaign buy them at whatever price it likes.
Turn off final URL expansion or, if you keep it on, add URL exclusions for the homepage and any pages that mainly rank for branded queries. Write the headlines yourself. Google's generated versions tend to be generic and they frequently repeat your brand name, which pulls in more of the traffic you are trying to exclude.
If your main goal is growth rather than defending existing demand, switch the campaign goal to new customer acquisition and upload your existing customer list so Google knows who to treat as returning. Set the new-customer value so the system is rewarded for finding strangers, not for re-selling to your email list.
Finally, change what you measure. ROAS inside the platform is a useful operating metric, but the number that tells you whether the account is working is marketing efficiency ratio: total revenue divided by total marketing spend, measured monthly across every channel. If PMax spend goes up and MER does not improve, you are buying your own customers back. For the Manchester brand, applying brand exclusions dropped the PMax ROAS from 6.4x to about 2.9x within three weeks. That number looked worse, but it was the first honest figure the account had produced. Spend was then shifted into non-brand Shopping and a prospecting Search campaign, and the owner could finally see which pounds were actually creating new orders.
The uncomfortable part
Separating brand traffic will almost always make your Performance Max campaign look less impressive. If you are reporting to a board or a business partner on platform ROAS, be ready to explain why a falling number is good news. The alternative is scaling a campaign for another six months on the basis of revenue it never generated, which is a much harder conversation later.
Related reading while you are in the account: the negative keyword lists that stop broad match wandering, why your platform conversions never match your store, and the difference between a good ROAS and actual profit. If Shopping inventory is what PMax is absorbing, the feed is where that gets fixed.
If you want a second pair of eyes on how much of your reported Google Ads revenue is incremental, our free growth audit includes exactly this check.
