Sample audit · anonymized
Paid Media Audit - sample report
Shopify apparel brand running Meta and Google Ads at mid five figures of monthly spend.
01 · Current architecture
Two ad accounts driving the store: Meta on a broad-plus-retargeting structure, Google split across Search, Shopping, and a Performance Max campaign. Platform-reported ROAS looked healthy - Meta claimed 4.2x, Google 3.8x - but blended revenue over total spend came out near 1.9x, and the gap was growing month over month. Conversion signals feed both platforms from browser pixels plus a server-side integration added by a previous agency. The account structure had accumulated overlapping audiences, a retargeting pool fed by a broken exclusion, and a Shopping feed quietly losing items to disapprovals.
02 · Findings (selected from the full document)
Both platforms count the same purchase, and one counts it twice
Browser and server events fire for every order without a shared deduplication key on part of the catalog, so the platforms optimize - and report - against inflated conversions.
Evidence row
Events Manager showed a dedup rate of ~71% on Purchase (event_id missing on orders routed through an app's checkout extension, pixel 2805•••••••); Google Ads imported both the tag conversion and a duplicated offline upload for the same order IDs.
Costs you: Reported ROAS overstates reality by roughly a third, so budget flows to campaigns that look profitable and are not.
Retargeting spends against people who already bought
The purchaser exclusion audience stopped updating when the pixel event it was built on was renamed. Retargeting has been showing ads to recent customers ever since.
Evidence row
The exclusion audience referenced an event name retired months earlier - its size froze on the same date; ad-level frequency in the retargeting ad set climbed above 9 while its post-purchase reach overlap read ~22%.
Costs you: A meaningful slice of retargeting spend buys orders that would have happened anyway - and annoys the exact customers most likely to buy again.
A tenth of the catalog is silently missing from Shopping
Feed disapprovals - price mismatches and missing identifiers - removed products from Shopping without anyone noticing, including several best-sellers.
Evidence row
Merchant Center listed ~11% of items disapproved (price mismatch between feed and landing page after a currency app update; missing GTINs on one product line), items that together carried a large share of pre-drop Shopping revenue.
Costs you: The store pays for Search demand while its best-converting products are absent from the shelf shoppers actually see.
Creative fatigue is being read as audience fatigue
The top ad set has run the same three creatives for months; performance decay was answered with budget cuts and new audiences instead of new creative.
Evidence row
First-time impression ratio in the main prospecting ad set fell below 15% while frequency passed 6; CTR on the three lead creatives declined ~40% over the period with no new variants launched.
Costs you: The account's best audience gets written off as exhausted when it has simply seen the same three ads too many times.
03 · Solution plan
| # | Fix | Layer | Impact | Effort |
|---|---|---|---|---|
| 01 | Restore purchaser exclusions on current events | Quick win | High | Low |
| 02 | Clear feed disapprovals, re-list missing products | Quick win | High | Low |
| 03 | Fix event_id dedup across pixel + server events | Structural | High | Medium |
| 04 | Remove duplicate conversion import in Google Ads | Structural | High | Medium |
| 05 | Creative testing cadence tied to fatigue signals | Strategic | Medium | Medium |
Composite sample: each finding is a real pattern from delivered paid media audits, combined into one representative document.
Want this for your store? Fixed price from $500, delivered in 1-2 days, credited toward implementation.
Book a discovery call