Monthly product-level ROAS report: Shopping and PMax vs store stock
Pulls last month's product-level results for Shopping and Performance Max, joins them with WooCommerce SKU, price and stock, and sorts products into stars, zombies, bleeders and out-of-stock spenders. Report only.
When to use it
When you suspect Shopping or Performance Max budget is going to weak products or items that are out of stock and want to see it product by product.
What you get
A product-level ROAS report that sorts products into stars, zombies, bleeders and out-of-stock spenders, with the wasted-spend share and recommended fixes.
Does it change anything in my account?
No. The assistant only reads your data and reports back.
Build last month's product-level ROAS report for our Shopping and Performance Max campaigns in Google Ads account [customer ID], with stock from our WooCommerce store [site URL].
1. Run list_accounts to confirm the account. Then run google_ads_query on shopping_performance_view with segments.date DURING LAST_MONTH, selecting segments.product_item_id, segments.product_title, campaign.name, campaign.advertising_channel_type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions and metrics.conversions_value. Calculate ROAS yourself as conversion value / cost. Raise the limit so no products are cut off, and tell me if the result was still truncated.
2. As a sanity check, compare the total cost from step 1 with campaign-level cost from get_report for the same month. If the gap is more than 5%, say so before going further.
3. Run list_wordpress_sites and wordpress_site_info to confirm the site and that WooCommerce is active. Then page through wordpress_woo_products (per_page=100, page 1, 2, 3...) until you have the full catalog with name, SKU, price and stock.
4. Join the two lists by matching item ID to SKU. Item IDs are often prefixed or use the WooCommerce product ID instead of the SKU (for example "woocommerce_gpf_123" or "gla_123"). If fewer than 80% match, show me 5 unmatched examples from each side and ask how to map them before continuing. Treat a product as out of stock if its stock field shows out of stock or a quantity of 0. Note that stock is today's value, not last month's.
Sort products into buckets:
- Stars: ROAS at or above [target ROAS] with cost above [minimum product spend].
- Zombies: more than 1,000 impressions but fewer than 10 clicks.
- Bleeders: cost above the minimum spend with zero conversions, or ROAS below half of target.
- Out of stock but spending: any cost while WooCommerce currently shows the product as out of stock.
Show the top 20 of each bucket by cost, the share of total Shopping/PMax spend going to bleeders and out-of-stock items, and a separate list of products with spend that could not be matched to a SKU. Finish with recommendations such as feed fixes, price checks, separate campaigns for stars or listing group exclusions. This is report only. Change nothing.
Builds a one-page, jargon-free monthly report for a client with exact calendar-month figures versus the previous month, explains every big KPI move from campaign data and creates the white-label link only after you approve the draft.
When to use itWhen you have to send a client their monthly Google Ads results in plain language and explain what moved and why.
Compares every connected Google Ads client account over the last 30 days versus the previous 30, adds month-to-date budget pacing, ranks accounts by risk and gives account managers one data-backed first check for the top 5. Read-only.
When to use itWhen you manage many Google Ads client accounts and need to know which ones to open first this week.