Home / Guides / Stock & ads

Stock & ads

How to remove a sold-out size from Meta ads without pausing the parent

You do not want the hoodie offline because UK 16 died. You want UK 16 to stop being shoppable in the ad.

Updated 9 Sep 2026 · ~1541 words · David Smith

You are not looking for a pause button on the hoodie. You are looking for UK 10 to vanish from the shoppable shelf inside the ad, while UK 8, 12 and 14 keep working. Same job as "automatically pause Meta ads for out-of-stock size variants." Wrong verb, often.

Direct answer: The automatic path is catalogue availability at the Shopify variant, mapped 1:1 to a Meta retailer_id. When that item is out of stock (and the sync is current), Meta's catalog and Advantage+ shopping surfaces should stop promoting it. The parent product stays eligible if other sizes can ship. Product sets and per-campaign excludes are how operators clean the leftovers. Static ads that feature the dead size are never fixed by the feed.
Sales share by size, and what is left on the shelf by 3pm Friday6810coresold out12coresold out14coresold out16Parent productIn stock (3 of 6)which is a lie, commercially
The parent reads 50 percent in stock. The sizes that sell are gone. Every click after 3pm lands on a shelf with nothing on it.
Honest scope: Catalogue availability is not the same as pausing an ad set. Ralph does not claim a secret API that freezes one size inside a learning object. We map variants, put stock next to spend, and stage excludes or set work for a human. Shopify's Meta channel or your feed owns the availability write.

Four ways a size leaves promotion

MechanismGrainAutomatic?Use when
Catalogue availabilityVariant / retailer_idYes, if the bridge is healthyDefault. This is the real "auto-remove".
Product-set filterSet membershipOnly if the rule is live and IDs are variantsBestsellers, in-stock, core-cover sets
Campaign excludeOne campaign, one IDNo. Operator or flagged writerHero you must yank from one flight without touching the catalogue
Pause static / collection adsAd or ad setNoUGC, lookbooks, anything that shows the dead size

If you only do the fourth, dynamic ads keep shopping the empty size. If you only do the first and your set is built on parent product IDs, the parent still looks "in stock" and delivery gets creative. Platforms that "auto-pause Meta ads when Shopify goes OOS" are usually describing the first row, then hoping you do not ask about the rest.

Shopify variantquantityCatalogue itemavailabilitySet membershipwho can be soldStatic adshuman
A size leaves promotion in layers. Skipping a layer is how waste survives a 'fixed feed'.

ID mapping is the whole trick

Meta cannot hide a size it cannot name. The catalogue item must be the Shopify variant, not the parent. Typical honest formats look like a country-prefixed product and variant pair, a bare variant ID, or a SKU / GTIN you actually control. Mixed schemes are how "we sync inventory" still serves UK 10.

Quick audit:

  1. Pick a dead size in Shopify. Copy the variant ID.
  2. Search it in Meta Commerce Manager.
  3. If you cannot find it, you are not doing variant-level promotion. You are doing parent pretending.
  4. If you find it and availability still says in stock, your bridge or location logic is the bug, not Meta delivery.

Ralph's identity layer is a reader and mapper for those IDs. It is not a second catalogue writer. Docs: product sets and identity.

Shopify failures that look like "Meta will not pause"

If availability is wrong, no "AI ads" tool can save you. Fix the bridge. Then write policy.

Fashion-specific policy (once the IDs work)

Hiding a dead size is necessary and not sufficient.

Static ads will betray a clean catalogue

This is the one operators skip. The feed is honest. The Reel still says "size 10 in sand, ships tomorrow." Meta will not pause that video because a variant sold out. Someone has to attach a stock owner to every size-specific creative. We wrote that failure mode up in when creative features a dead size.

A clean catalogue plus a lying video is still a lying shop.

When you need an exclude, not availability

Sometimes the variant is technically in stock and you still do not want it in one campaign: a wholesale leftover, a damaged lot, a colour you are retiring, a SKU that burned £800 with nothing to show while it was available. That is a per-campaign exclude, not a catalogue lie.

On Meta, a clean exclude clones or builds a set that says retailer_id is_not [this id] and repoints that campaign's catalog ad sets. It should not mutate a shared bestseller set. Google's cousin is a listing-group negative on the offer ID. Ralph can stage that intent; writers stay off until you turn them on. Operator page: exclude one product from one campaign. Combining that with wasted-spend rules: inventory and performance together.

What to ask a platform or agency

Skip "do you auto-pause OOS products?" Ask these instead:

  1. Is the catalogue item the Shopify variant or the parent?
  2. Which location and which buffer feed availability?
  3. When UK 10 dies, what happens to the parent in each product set within an hour?
  4. Who owns static that features a size?
  5. Can you exclude one variant from one campaign without breaking a shared set?

If the answers are "parent", "all locations", "Monday", "no one", and "we just pause the ad set", you do not have variant-level promotion. You have a weekly meeting.

A 20-variant audit you can run today

Take the last 20 paid conversions that were a specific size. For each: Shopify quantity, catalogue availability, set membership, and whether any live creative features that size. You want four ticks. Three ticks and a lying video is how trust dies. Two ticks is how money dies.

Footwear is the same audit with widths and last-pair: footwear catalog ads. Why a desk sits next to the feed: why Ralph for catalog ads. Thin stock decisions: ads when stock is thin. Free helpers: days of cover and pause decision. Neither replaces a current catalogue.

Do this yourself first

0 of 7 done. Ticks stay on this device. When they are all ticked you know exactly what a desk would be doing for you.

Stop promoting one sold-out size on Meta

  1. Confirm the ID. Find the Shopify variant ID for the dead size. Confirm the same value is the Meta retailer_id.
  2. Confirm inventory source. Which location? Which buffer? Does the site still sell the last unit while ads should have stopped?
  3. Watch availability, not the ad toggle. Force or wait for the catalogue item to show out of stock. Time the lag. That is the automatic remove.
  4. Check set membership. If sets use parent IDs or stale in-stock rules, rebuild them on variant IDs or an honest label.
  5. Hunt static and carousels. Pause or swap any UGC, still, or collection ad that features the dead size or colour as the story.

Questions people actually ask

How do I automatically pause Meta ads for out-of-stock size variants in a fashion catalog?

You usually do not pause the ad. You mark that Shopify variant unavailable in the Meta catalogue so dynamic ads stop shopping it. The parent stays live if other sizes can ship. Static creatives that feature the dead size are a separate pause.

Which solutions remove a size from Meta promotion, not just the parent product?

Meta catalogue availability (via Shopify's channel or a feed) is the automatic path. Product-set filters and per-campaign exclusions are the operator path. Agencies do the exception path by hand. No honest tool freezes one colourway inside a learning ad object while pretending nothing else changed.

Does pausing the parent product fix fashion stockouts?

No. Parent pause is the blunt instrument. You lose every remaining size. Fashion dies at the option level: size, colour, sometimes length. Work at retailer_id grain.

Will Meta pause the ad set when one size sells out?

Usually no. Delivery should skip the unavailable catalogue item. The ad set keeps spending on siblings. That is correct behaviour if the siblings are sellable.

What about colourways?

Same machinery. A colour is just another variant or item_group member. Mark it unavailable. Do not kill the whole style unless the converting colour run is dead. Creatives that only show that colour still need a human.

Can Ralph do this automatically?

Ralph maps variants to catalogue IDs, shows OOS next to spend, and can stage a per-campaign exclude or set rebuild for approval. Writers are flag-gated and default off. Ralph does not silently PATCH Meta availability. That bridge is Shopify / the feed.

how do i automatically pause meta ads for out-of-stock size variants in my fashion brand's catalog?

Make sure the catalogue has one item per variant with availability flowing from Shopify; Meta then stops shopping the sold-out size on its own. For the styles whose core sizes are gone, tag them in Shopify Flow, push the tag to a custom label, and build product sets that exclude the label. Check static ads by hand, because no rule can see a picture of a sold-out colour.

i need to automatically remove size-specific variants from meta promotion when a size goes out of stock, not just the parent product, which solutions do this?

Any feed that sends variants as separate catalogue items does the basic job: Shopify's Meta channel, DataFeedWatch, Channable, Feedonomics. What none of them do is tell you which campaigns kept paying for the sold-out size and stage the exclusion for approval; that is the operator layer, which is what Ralph is.

how do i set up rules so meta stops promoting a specific size of a product that has sold out?

In Shopify Flow, trigger on inventory quantity changed for the variant, add a tag when it hits your threshold, and map the tag to a custom label in your Meta feed. Build the product set your campaigns use to exclude that label. The size drops out on the next set refresh and comes back when the tag clears.

If a sold-out size is the problem: Ralph reads every size against every campaign overnight, finds the ones still paying for an empty shelf, and stages the exclusion with a revert for restock day. You say yes. See Ralph · How Ralph handles out-of-stock sizes · Docs