
Key takeaways
- I run several US ecommerce stores and built a Claude skill to audit my own Google Ads. On one account (about $14,000 in spend over 30 days, blended 3.85x ROAS), it flagged ~$1,282/month in concrete recoverable spend, with a directional ceiling near 31% of total spend.
- Leak 1 (geography): ~$924/month went to states that search and click but barely convert; one state had literal zero conversion value.
- Leak 2 (Performance Max cross-serving): ~$1,170/month on 2,164 clicks that converted zero times, across 102 auto-generated search categories, even though the campaign already had 111 negative keywords.
- Leak 3 (branded cannibalization): my brand-name clicks cost ~$0.30 in a dedicated branded campaign versus $2-4 on non-branded terms. Letting Performance Max absorb brand searches means overpaying to buy back customers who were already looking for me.
- Leak 4 (ad schedule): the account ran with zero time-of-day bid adjustments. A handful of hours pulled clicks at 0.4-0.6x ROAS, roughly $789/month on one campaign alone.
- None of this showed up in the platform’s own “optimization score.” You have to go looking.
Why I audit my own accounts instead of trusting the dashboard
I am not an agency. I run the stores and the ad accounts myself, day to day. That is the whole reason I wrote this.
For a long time my routine was manual. Every morning I spent close to an hour per ad account pulling numbers and stitching together what happened yesterday, then a half-day whenever I wanted to research and launch a new campaign. Across three accounts that is three hours of report-reading before I have made a single decision, with the data scattered across the store, Merchant Center, and Google Ads.
So I built a Claude skill that reads the account through the API and does the first pass for me. Now the morning check is 10 to 20 minutes for all three sites, most of it automated, and it surfaces the things I would never catch by clicking around. Below are the four it found on one account. The numbers are real; I have anonymized the store.
Here is the whole account at a glance before I break down each leak:
| Leak | ~$/month | Root cause | Fix | How to check |
|---|---|---|---|---|
| No-convert states | ~$924 | Bidding into states that click but do not buy | Exclude or bid-down the dead states | Locations report: conv. value / cost by state |
| PMax cross-serving | ~$1,170 | Negatives do not fully bind PMax; it matches on AI + feed | Feed hygiene + search themes + brand exclusions | PMax search-term insights: zero-conversion categories |
| Branded cannibalization | CPC $2-4 → $0.30 | PMax absorbs brand searches at a premium | Dedicated branded Search campaign + brand exclusions | Compare branded vs non-branded CPC |
| Ad-schedule hours | ~$789 | Ads run 24/7 with zero time-of-day bid adjustments | Negative bid adjustments on weak hours | Day & hour report: ROAS by hour |
Leak 1: I was paying to advertise in states that don’t buy
The audit pulled conversions by state and the picture was blunt. About $924/month was going to states with high clicks and poor-to-zero return. One state had spent real money for zero conversion value over the window. Several more sat well under a 1.0x ROAS, meaning I paid more to reach them than they ever returned.
Widen the lens across the account’s shopping campaigns and the directional geo waste was closer to $1,800/month. That is not “cut everything” money, some of those regions are worth a reduced bid rather than a full exclusion, but it is money that was flowing out on autopilot because nobody had ever looked at the map.
How to check this yourself: in Google Ads, open a campaign, go to the locations report, and add the conversions and conv. value / cost columns. Sort by cost. Any state spending real money at well below your target ROAS is a candidate for a bid-down or an exclusion. You are looking for the states that take clicks and give nothing back.
Leak 2: Performance Max was buying clicks for things I don’t sell
This is the one that surprised me, because I thought I had already handled it.
Performance Max on that account had 111 negative keywords applied. It still spent about $1,170/month on 2,164 clicks that converted zero times, spread across 102 auto-generated search categories, at an average cost of about $0.52 a click. I was paying for a category called “clothes” (I don’t sell clothes), for a competitor’s brand name, and for generic terms with no buying intent.
Here is the part most guides get wrong: negative keywords behave differently on Performance Max than on Search. Per Google’s own docs, PMax negatives only govern its Search and Shopping inventory (Google Ads Help); they do nothing for the Display, YouTube, Gmail, or Discover placements PMax also buys (account-level negatives). And PMax finds buyers using AI, feed data, and audience signals rather than an exact-keyword auction (about PMax), so a negated term still lets semantically related queries through its auto-generated categories. Google raised the campaign-level negative cap to 10,000 in 2025, but even that only touches Search and Shopping. This is structural, not a missing setting, and adding more negatives barely moved it.
What actually helps is upstream: clean the product feed so ineligible products (equipment, competitor lines, anything that should not be advertised) are excluded, and give the campaign real search themes so you steer intent instead of hoping negatives catch the overflow. The campaign leaking the worst had zero search themes set.
Leak 3: Performance Max was eating my branded searches
My branded terms convert very well, of course they do, the person is already typing my store name. The trap is what you pay for them.
In a dedicated branded Search campaign, my brand-name clicks cost about $0.30 each. On non-branded terms I pay $2 to $4 a click. When Performance Max is allowed to absorb branded searches, you still get the sale, and the ROAS on that campaign looks great, but you are quietly paying a premium to buy back a customer who was already coming to you.
I want to be honest about the ROAS number here, because this is where people fool themselves. My branded campaign shows a very high return on paper. I do not credit that as pure merit. A lot of it is promo-period timing and demand spilling over from my other campaigns. The real reason to run a lean, dedicated branded campaign is not the headline ROAS, it is the $0.30 CPC and brand protection, so a competitor (or your own PMax) is not setting the price on your own name.
The fix: run a tight branded Search campaign with exact and phrase brand terms, keep it cheap, and apply brand exclusions on Performance Max so it stops serving for your name (a control Google expanded in 2025). PPC practitioners flag this brand-cannibalization pattern widely; the fix is the same. You defend the brand at $0.30 instead of renting it back at a premium.
Leak 4: The ads ran all day, including the hours that only bring browsers
The account had an ad schedule, but every single entry had a bid adjustment of zero. In other words, there was a schedule but no dayparting, all 21 schedule entries were flat, and one campaign had no schedule criteria at all.
When I looked at performance by hour, the waste was obvious. On one campaign, four hours were dragging: 11:00 spent $366 at 0.6x ROAS, 22:00 spent $130 at 0.4x, plus a couple more, roughly $789/month of clicks that mostly window-shopped. (I trust the hourly read here because 91% of this account’s conversions land within a day, so the 30-day numbers are stable enough to act on.)
How to check: in Google Ads, use the “Day & hour” or time report, add conversions and ROAS, and find the hours where you spend real money at a fraction of your target return. Those get a negative bid adjustment, not necessarily off, just dialed down.
What the Google Ads audit added up to (honestly)
I don’t want to inflate this. The leaks overlap, so you cannot just sum them. The audit’s concrete, non-overlapping recoverable figure was ~$1,282/month on that one account, cuts plus reallocation. If you counted every directional geo and daypart opportunity on top, the ceiling was about 31% of the account’s spend, but those are single-dimension estimates that double-count, so I treat the ~$1,282 as the number I can actually bank and the 31% as “how much slack is in here if I keep pulling.”
The account was not broken. It scored 83/100 in my own audit and ran at a healthy 3.85x blended ROAS. That is the point: a good account can still leak four figures a month, and the platform’s optimization score will happily call it excellent while it does.
How I run this now
The audit is a Claude skill I built and open-sourced, wired to the account through the Google Ads API. I wrote up how the skill itself works in a separate post: an open-source Claude skill for ecommerce Google Ads. The short version is that every morning it re-checks geography, search-term categories, branded pacing, and hour-of-day, and only pings me when something crosses a threshold. The manual hour-per-account became a 10-minute read. I connect Claude to my stores through MCP the same way I run store ops, which I walk through in connecting Claude to Shopify via MCP.
What this audit can’t do (honest limits)
- It surfaces signals; it does not make the calls. It tells me a state is bleeding money; I decide exclude versus bid-down based on whether I want presence there.
- It is directional, not a lab experiment. These are my accounts over 30 days. Your mix of campaigns, margins, and seasonality will differ.
- It does not replace strategy. Cutting waste is defense. Growth still needs a plan; on the SEO side of that plan I wrote about making Shopify collection pages AI-citable.
- Numbers like a 15x branded ROAS are not proof of a genius campaign, they are often spillover. Read them with suspicion.
FAQ
How do I audit my own Google Ads account?
Start with four reports you already have: locations (conversions by state), search terms / PMax insights (zero-conversion categories), your branded vs non-branded CPC, and performance by hour. Sort each by cost and look for spend that returns well below your target ROAS. That is 80% of the value before any tool.
Is Performance Max cannibalizing my branded search?
Often, yes. Check your branded CPC inside a dedicated branded campaign versus what PMax pays for the same intent. If PMax is winning your brand name at a higher cost, apply brand exclusions to PMax and run a lean branded Search campaign.
Why do negative keywords not stop Performance Max waste?
Because PMax negatives only cover its Search and Shopping inventory, not Display, YouTube, Gmail, or Discover (Google Ads Help), and PMax matches on AI, feed, and audience signals rather than an exact-keyword auction (about PMax). So auto-generated categories slip past keyword negatives. The stronger levers are feed hygiene and search themes.
Do I need an agency to audit Google Ads?
No. An operator who knows the business can often spot waste faster than a templated agency audit, because you know which states, products, and terms actually matter. A tool just makes the first pass quick.
If you run an ecommerce store
If you read this and want a second pair of eyes on your account, email me at [email protected] with your store and what you are trying to fix. I audit a few accounts for free depending on what you are after. I would rather you catch your own $1,000/month leak than keep paying it.
About the author: Khue Tran runs several US ecommerce stores and builds open-source Claude tools for store and ad ops. 15 years in performance marketing, half of it hands-on in Google Ads.