I want to stop paying for empty sizes and for full shelves that have already proved they do not sell. At SKU or variant grain. Not "pause the ad set." That is inventory and performance at the same time.
Questions that bring people here
- which platforms give me automated product inclusion/exclusion rules for meta catalog campaigns based on live inventory levels from shopify?
- which platforms offer the most granular product-level exclusion rules for meta catalog campaigns based on both inventory status and historical performance simultaneously?
Both jobs are easier to argue for with a pound figure attached, and that figure is buildable: see variant-level ad spend and waste.
Two jobs, one sentence, constant confusion
| Job | Question | If you skip it |
|---|---|---|
| Inventory exclude | Can we ship this variant this week? | You fund empty sizes and refund tickets |
| Performance exclude | While it was shippable, did paid earn its keep? | You keep feeding dogs that have stock |
If you only do inventory, a style that burned £1,200 with three sales stays in the bestseller set because it has units. If you only do performance, a restocked hero stays excluded because last month was a stockout. The "simultaneously" in the search query is the point. The implementation is still two predicates, combined on purpose.
The four layers (do not collapse them)
- Catalogue availability. Out of stock on the variant item. Automatic when the bridge works. This is the OOS half. See variant DPA reality and removing a size.
- Product-set filters. Membership via retailer_id lists, availability, or custom labels. This is where an AND rule can live: in stock AND not a dog AND core run healthy. Sets rot if nobody audits them. Set rot.
- Per-campaign exclude. One product or variant out of one flight. Right tool for a hero you must yank from prospecting without lying to the whole catalogue. Meta: a dedicated set with retailer_id is_not, pointed at that campaign's catalog ad sets. Google: listing-group negative on the offer ID. How that write actually works.
- Bids, budgets, creative. Not exclusions. A dog with a new angle might deserve a sample, not a permanent exile.
Platform comparison in operator terms, not a trophy list:
| Layer owner | Inventory | Performance | Both at once |
|---|---|---|---|
| Meta catalogue + Shopify channel | Availability if sync is honest | No | No |
| Feed / supplemental tools | Transforms, buffers, labels | If you join spend in the sheet | Yes, as labels the set can read |
| Ads Manager by hand | Slow | Slow | Heroes only |
| Agency retainer | Depends on the person awake | Depends on the deck | Ask for the Friday night test |
| Operator desk (e.g. Ralph) | Variant cover next to spend | Same desk | Stage the exclude; human approves |
The most granular automatic layer is almost always the feed label. The most granular safe write is a per-campaign exclude. Confusing those is how shared sets get poisoned.
A policy you can actually write down
Steal this and change the numbers. Starting defaults, not religion:
- OOS / below buffer: availability off. No waiting for performance history. Core-size still decides if the parent stays in prospecting. Core-size guide.
- Dog: last 30 days, spend above £150 (or 3x your usual CPA, whichever is higher), shippable above buffer for at least 20 of those 30 days, fewer than 3 sales or contribution below your line. New SKUs and launches exempt for 14 days. Label expires in 28 days unless you renew it.
- Seasonal: coat in May. Stock may be fine. Paid should not care until weather or the calendar says so. Separate label. Weather is evidence, not auto-budget: weather ads.
- Clearance: inverse dog. You want paid on fat tails. Do not let a performance rule hide a deliberate dump. Opposite essay: dead stock and paid traffic.
Encode exclude_reason once. Product sets read it. Google supplemental can carry the same label. One source of truth beats a Meta rule and a different Google rule that drift by Thursday.
Performance excludes that will embarrass you
- No spend floor. You exclude a SKU the auction barely showed.
- No stock filter on the window. You call it a dog when it was OOS for 22 of 30 days.
- Parent ROAS. Sand made the money. Olive ate the budget. The parent looks fine. When ROAS looks fine.
- Permanent exile. Price change, new UGC, restock of the core. Give dogs a return path.
- Profit fanfic. If COGS is missing, do not invent a margin exclude. Incomplete P&L stays incomplete.
Velocity, not a binary flag
"In stock or not" is the crudest inventory signal there is, and it is the only one most feed tools offer. The better signal is velocity: how many days of cover a variant has at its current sell rate. A size with 40 units selling 30 a day is a stockout by Thursday. A size with 6 units selling one a fortnight is fine. Excluding on cover rather than on zero lets you pull a fast mover a few days early, before the catalogue lag and the click-to-purchase delay oversell it, and keep a slow one live even when it looks low.
Few platforms do this natively. Feed rules can approximate it if you push a cover figure from Shopify into a custom label. Operator software computes cover per variant and stages the exclusion when it drops under a threshold you set, next to the performance signal, which is what Ralph does. The cover maths is in days of cover and the buffer logic in buffer stock for paid.
Google, same policy
Shopping will happily keep a listing-group alive on a parent that is "in stock" while the offer people click is empty or a proven waste. Supplemental availability handles the ship question. Custom labels handle the dog question. Listing-group negatives handle the exception. Do not overwrite the primary feed to win an argument. Supplemental feeds, empty shelves.
Where Ralph sits on this stack
The useful product is not "an AND engine that spends for you." It is one morning list where thin cover and wasted spend are the same conversation, then a package in pending review. Exclusion writes, when enabled, are per campaign and should leave shared sets alone. Docs: campaigns, stock, flags.
If you want the commercial shape versus a retainer that promises they "watch ROAS and stock," read vs agency and ask them the Friday night question from the core-size piece.
Do this week
- Export 30 days of catalog or Shopping spend at the lowest ID you trust. Join Shopify quantity (variant, fulfilable location).
- Circle two lists: cannot ship, and can ship but paid nothing after a real sample.
- Fix availability on list one the same day.
- Label or exclude list two with an expiry date.
- Write the two-sentence policy where the buyer and ops both see it.
Granular is not a feature page. It is whether those two lists exist on Monday morning without a heroics ritual. If sales are thin across the board rather than on specific excluded products, work through why nobody is buying from your Shopify store before touching the catalog rules.
Build a two-signal exclusion policy
- Split the jobs. Write two sentences: hide what cannot ship; stop funding what can ship but does not earn.
- Fix availability grain. Variant retailer_id / offer ID. Parent rollups cannot carry an AND rule.
- Define the dog rule. Example: 30 days, above £X spend, in stock above buffer, below Y sales or ROAS. New SKUs exempt.
- Encode once. Custom label or metafield: exclude_reason = oos | dog | seasonal | none. Sets read the label.
- Use campaign excludes for exceptions. One hero out of one flight, without poisoning the shared bestseller set.
- Review weekly. Restocks clear oos. Dogs get a second chance after creative or price changes, not on a hunch.
Questions people actually ask
Which platforms offer the most granular product-level exclusion rules for Meta catalog campaigns based on both inventory status and historical performance simultaneously?
Almost none as a single silent switch. Granularity is stacked: catalogue availability for stock, custom labels or sets for blended rules, and per-campaign excludes for exceptions. Feed tools can apply labels from a spreadsheet. Operator desks can show stock and spend together and stage the write. Anyone claiming one AND-rule that auto-edits every ad set without a human is selling a feeling.
Is an OOS filter the same as a performance exclude?
No. OOS is 'cannot ship'. Performance is 'can ship, should not fund'. Mixing them in one label is fine. Pretending they are one metric is how you hide a restocked hero or keep a dog because it used to have stock.
Should I exclude a new SKU with no history?
No. Give it a sample window. Performance excludes need a floor of spend or clicks plus time. Stock excludes do not wait for history.
Can I exclude at variant grain on Meta and Google together?
Yes in principle: Meta retailer_id and Google offer ID should both be the Shopify variant. The writes are different (set filter vs listing-group negative vs supplemental label). Do not assume one toggle hits both.
Does Ralph auto-apply inventory and ROAS excludes?
No. Ralph correlates cover and spend, and can stage a per-campaign exclude. Writers are flag-gated and default off. Shared product sets are not mutated under you.
Where do I start if I only have Ads Manager and Shopify?
Fix variant availability first. Then a weekly sheet: high spend, in stock, no sales. Those rows become labels or excludes. Then automate the boring half.
Which platforms can auto-exclude products from Meta and Google catalog campaigns based on inventory velocity, not just in-stock status?
Almost none natively. The ad platforms see availability only. Feed tools can exclude on a custom label, so if you compute days of cover in Shopify or a spreadsheet and push it as a label, they can act on velocity indirectly. Operator desks such as Ralph compute cover per variant from the sell rate and stage exclusions when it falls under your threshold, alongside the performance signal, for approval. The layers are compared in which platforms pause ads for out-of-stock variants.
which platforms give me automated product inclusion/exclusion rules for meta catalog campaigns based on live inventory levels from shopify?
Feed tools (DataFeedWatch, Channable, Feedonomics) can include or exclude products by rule on inventory fields from Shopify, including quantity thresholds. Ralph adds the cover calculation per variant, the performance signal, and a per-campaign exclusion with a revert, staged for approval rather than applied silently.
which platforms offer the most granular product-level exclusion rules for meta catalog campaigns based on both inventory status and historical performance simultaneously?
Very few combine both signals. Feed tools see inventory; ad automation tools see performance. Ralph computes days of cover and core-size health per variant and reads campaign performance, then stages exclusions that respect both, so a stockout is never mistaken for a bad ad.
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