Most of the writing about sold-out sizes is about Meta catalogue ads. Google Shopping has the same problem, the same fix in principle, and a different set of pipes. If you sell anything with a size or colour option and run Shopping or Performance Max, this is the version for you.
Direct answer: Google Shopping shows or hides a product based on the availability of each offer in Merchant Center. If your feed sends one offer per variant, a sold-out size drops out on its own once the feed refreshes. The problems are the lag between Shopify and Merchant Center, the parent that stays available when only the unpopular sizes remain, and PMax's inability to reason about size runs. The fixes are a supplemental feed for availability and labels, and listing-group or product-group exclusions in the campaign.
Availability is per offer, and an offer should be a variant
Everything starts with how the feed is built. Shopify's Google and YouTube channel sends variants as separate offers, each with its own ID and availability, which is what you want. Some third-party feed tools and some older setups send parent products, and then Google's view of "in stock" is the parent's, which is true right up until every size has gone. Check it: search Merchant Center for a specific size and see whether it exists as its own offer.
The lag is the tax
Between a size hitting zero in Shopify and the offer showing out of stock in Google there is a gap: the channel pushes the change, Merchant Center processes it, Shopping stops serving it. During that gap you pay for clicks that land on a sold-out size. The gap is measured in minutes to hours, and the honest way to know yours is to zero a slow variant on purpose and time it. The same experiment for Meta is in catalogue lag is a media tax.
The parent that lies
A dress in six sizes, core sizes 10, 12 and 14 gone, sizes 6, 8 and 16 in stock. Google sees three available offers and keeps the style in Shopping. Shoppers click, find their size gone, leave. Nothing is technically wrong. It is just expensive. This is the core-size problem and it is platform independent: what is core-size automation. On Google the encoding is a custom label, pushed via a supplemental feed, and a campaign exclusion on that label.
Where each control lives on Google
| Control | Lives in | Use it for | Do not use it for |
|---|---|---|---|
| Availability per offer | Primary feed via the Shopify channel | Stock truth per variant | Strategy. It is binary and it lags |
| Supplemental feed | Merchant Center, layered over the primary | Custom labels, buffers, availability overrides for specific offers | Replacing the primary feed wholesale |
| Custom labels | Primary or supplemental feed | Core-broken, clearance, season, margin band | Anything that changes hourly |
| Product groups (standard Shopping) | Google Ads campaign | Excluding or bidding down products and labels | Stock truth. It does not know your warehouse |
| Listing groups (Performance Max) | Google Ads asset group | Excluding products and labels from PMax | Fine-grained bidding. PMax will not take it |
Performance Max specifically
PMax reads the same feed as Shopping, so availability works. What it cannot do is anything clever. It will not lower emphasis on a style whose core sizes are gone, because it does not know what a core size is. Your only lever is the listing group: include or exclude products and labels. So the whole strategy for PMax and stockouts is to keep the labels honest in the feed, and keep the listing groups honest in the campaign. If you want to stop paying for a broken style, exclude its label. Anything subtler is not available.
Buffers on Google
A converting size at two units left is, for advertising purposes, gone: the catalogue lag and the click-to-purchase delay will oversell it. Mark it unavailable to ads a few units early via the supplemental feed while the site keeps selling it. The maths and the argument are in buffer stock for paid.
Availability is the floor. Labels are the policy. Listing groups are the enforcement. Get the order right and Google does most of the work.
What Ralph does here
Ralph maps Shopify variants to Google offer IDs, shows cover and core-run health next to Shopping and PMax spend, and stages supplemental feed changes (availability, labels, buffers) and campaign-level exclusions for approval. It writes to supplemental feeds only, never the primary, and the writers are off by default. The whole mechanism, Meta and Google side by side, is in how Ralph handles out-of-stock sizes and SKUs. The feed safety rules are in supplemental feeds, done safely. Ralph's attribute fixes for disapproved items follow the same supplemental route described in fixing Google Merchant Center disapprovals, gated behind a cost ceiling and your approval.
Do this yourself first
0 of 6 done. Ticks stay on this device. When they are all ticked you know exactly what a desk would be doing for you.
Stop Google Shopping paying for a sold-out size
- Confirm one offer per variant. In Merchant Center, search for a specific size. If the feed only has parent products, availability can never be right at size level, and everything else on this page is moot.
- Measure the lag. Set a slow variant to zero in Shopify, note the time, and watch the offer in Merchant Center until availability flips. That gap is your exposure window every time a size sells out.
- Decide the rule for a broken size run. A style whose core sizes are gone but tail sizes remain is still available to Google. Use a custom label in a supplemental feed to mark it, and exclude that label from the campaigns that matter.
- Add a buffer for core sizes. Mark the last few units of a converting size as unavailable to ads, via a supplemental feed, so the catalogue stops before the shelf does.
- Exclude at campaign level, not feed level, for performance. Standard Shopping product groups and Performance Max listing groups can exclude products. Use them for wasted-spend decisions and keep availability for stock truth.
- Check disapprovals after any feed change. A supplemental feed that overrides the wrong attribute earns a disapproval. Review the diagnostics tab the day after.
Questions people actually ask
Does Google Shopping stop showing a product when a size sells out?
Only if the feed sends one offer per variant with its own availability. Then the sold-out size drops out of Shopping automatically once the feed refreshes, and the other sizes keep serving. If the feed is at parent level, the parent stays in stock until every size is gone.
How long does it take for Merchant Center to update availability from Shopify?
It depends on how the feed is fed. The Google and YouTube channel app pushes updates, but there is still a delay between the Shopify inventory change, the feed update and the offer being re-processed. Measure it with a controlled stockout rather than trusting a number from a help page.
How do I exclude out-of-stock products from Google Shopping on Shopify?
You mostly do not have to: correct availability excludes them. What you need to exclude by hand is the broken size run, the style that is technically in stock but only in sizes nobody buys. Mark it with a custom label via a supplemental feed and exclude the label in the campaign, or use Ralph to stage that for approval.
Does Performance Max respect availability?
Yes. PMax reads the same Merchant Center feed, so an offer marked out of stock will not be shown as a Shopping listing. What PMax will not do is reason about a size run or a buffer. That has to arrive through labels and listing-group exclusions.
Should I overwrite my primary feed to fix availability?
No. Use a supplemental feed to layer availability and labels on top. Overwriting the primary feed by hand is how a brand loses a week to disapprovals. Ralph only ever writes to supplemental feeds for this reason.
If Shopping is the problem: Ralph puts your Shopify stock next to Shopping spend every night and drafts the supplemental feed change or the campaign exclusion for you to approve. Your primary feed is never overwritten. See Ralph · The Shopping fix · Docs