A structural audit revealed 89% of the budget was running through broken ad groups and 478,000 negative keywords were blocking the retailer's own best-sellers. The fix wasn't more spend — it was stopping spend on what wasn't working. Two months later: ad spend down 19.7% year-on-year, ROAS up 6.4%, revenue stable.
This national workwear retailer had been running Google Shopping for years across a large catalogue — hundreds of product variants, multiple supplier brands, and dozens of active ad groups. Revenue was consistent but efficiency had plateaued. ROAS was hovering around 3–3.5x and budget increases weren't delivering proportional returns.
The instinct in these situations is usually to adjust bids or test new creative. But the data pointed somewhere else. When the Shopping campaigns were audited at the ad group level, the scale of the structural problem became clear: the account was effectively working against itself.
The most striking find: a Shopping campaign where $6,499 of $7,274 in total spend — 89.3% — was flowing through ad groups that were structurally broken. Five had no-index products incorrectly included. Seven were missing product subdivisions entirely. And layered across the whole account were 478,149 ad-group-level exact match negative keywords — added over the years to reduce irrelevant traffic — of which 62.7% contained terms the retailer's own best-selling products showed up for. The campaigns were blocking themselves.
478,149 negative keywords audited. 62.7% were blocking the retailer's own best-selling products from appearing in search results. The campaigns had been optimised into irrelevance, one negative at a time.
The priority wasn't spending more or changing bids — it was removing the structural barriers that were suppressing what the campaigns could already do.
Audited every ad group across all Shopping campaigns at the product level. Identified the 12 broken ad groups consuming 89%+ of spend — corrected no-index inclusion errors and rebuilt missing product group subdivisions using custom_attribute0 segmentation.
Reviewed all 478,149 ad-group-level exact match negatives. Removed every negative that contained a term matching the retailer's own products — stopping the campaigns from suppressing their own relevant traffic. Kept only legitimate exclusions (competitor brands, irrelevant categories).
Built new campaigns using a dynamic product performance framework — segmenting SKUs by velocity and margin using custom_attribute0 labels. High-performing products were separated into priority campaigns with tighter ROAS targets; slow-moving or low-margin inventory was isolated to reduce wasted spend. New campaigns generated $30,740 in the first month at 3.08–3.22x ROAS with no ramp-up.
Applied target ROAS settings calibrated to each campaign's performance profile — moving from flat Max Conversion Value to tROAS targets that directed budget toward higher-returning segments. Eliminated spend on product groups with persistent zero-conversion signals.
The account was already generating demand — removing the structural barriers let more of that demand convert efficiently. Within the first month after the audit, new cleanly-built campaigns generated $30,740 in revenue at 3.08–3.22x ROAS, with no ramp-up period.
The clearest signal came from DSA campaigns: after the negative keyword purge, revenue grew from $1,428 to $5,588 in a single month — a 291% increase — without touching bids or budgets. The traffic had always been there; the campaigns were simply blocking themselves from reaching it.
| Campaign | Revenue | ROAS | Notes |
|---|---|---|---|
| Brand Search | $25,846 | 43.6x | 99% impression share |
| Shopping — All Products | $24,286 | 3.08x | New campaign, immediate results |
| Shopping — AS Colour | $6,454 | 3.22x | New campaign, brand-segmented |
| DSA Campaigns | $5,588 | — | +291% after negative purge |
| Performance Max (No-Index) | varies | 3.57x | +103% ROAS improvement vs prior period |
The goal was never to spend more — it was to stop spending on what wasn't working. Campaigns running on no-index and under-index products were consolidated or paused. The budget that remained was directed toward SKUs with proven conversion signals. The account went from 12 campaigns to 8.
Month-on-month, revenue continued to grow. The more important comparison is year-on-year: the account is spending 19.7% less than the same period the prior year, generating revenue at a higher ROAS, with average order value up 17.9% — driven by the shift in Shopping visibility toward higher-margin, over-index products.
| Metric | January 2026 | February 2026 | Change |
|---|---|---|---|
| Revenue | $141,089 | $150,838 | +6.9% |
| Spend | $35,399 | $39,493 | +11.6% |
| ROAS | 3.99x | 3.82x | Above 3.25× target |
| Conversions | 818 | 808 | −1.2% |
| Avg Order Value | $172.49 | $186.72 | +8.3% |
When 89% of your Shopping budget is running through the wrong product groups and your negative keywords are filtering out your own best-sellers, you're not in an optimisation problem — you're in a structural one. No amount of bid adjustment or budget increase will fix a campaign that's actively blocking itself from converting.
The fix wasn't more spend. It was a thorough audit, a purge of years of accumulated bad negatives, and a clean rebuild using dynamic product performance segmentation — separating high-velocity, high-margin SKUs from slow-moving and non-converting inventory, then stopping budget from following the latter. The account went from 12 campaigns to 8. Spend dropped 19.7% year-on-year. Revenue stabilised and kept growing. ROAS improved. Average order value hit a 12-month high.
Doing more with less isn't a slogan — it's what happens when the budget stops chasing products that don't convert.
The Gap Analysis identifies exactly where your budget is going to waste — and which products are worth spending on.