Every stock-aware ads rule sits on top of one assumption: that Shopify inventory is actually reaching the Meta catalogue, per variant, reasonably quickly. In our experience that assumption is wrong more often than any tool is. Here is how the sync works, and how to check it in twenty minutes.
Direct answer: Shopify's Facebook and Instagram channel builds a catalogue in Meta Commerce Manager with one item per variant, and pushes availability changes as inventory moves. The sync is real but it lags by minutes to hours, it only reads the inventory location you told it to, and it breaks quietly when a feed app, an unpublished product or a parent-level feed gets in the way. Test it with a controlled stockout before you build anything on it.
How the chain works
- You add the Facebook and Instagram channel in Shopify and connect a Meta business.
- The channel creates a catalogue in Commerce Manager, or connects to an existing one.
- Products published to the channel become catalogue items. Each variant is its own item, with the Shopify variant ID as its retailer ID, and its own price and availability.
- When inventory changes at the location the channel is reading, the channel pushes an update. Meta re-processes the item and availability changes.
- Catalogue ads stop shopping items that are out of stock, and product sets built on availability update on their own refresh cycle.
Every step has a way to fail, and the failures are silent. Nothing in Ads Manager says "your catalogue has been lying since Tuesday".
Where it quietly breaks
| Symptom | Usual cause | Check |
|---|---|---|
| Sold-out size still serving days later | Item created at product level, or a feed app overriding the channel | Search the size in Commerce Manager. Does it have its own item? |
| Everything shows out of stock | Channel reading the wrong inventory location | Channel settings: which location feeds availability? |
| Some products never appear | Not published to the channel, or failed Meta review | Product availability on the channel; catalogue diagnostics |
| Availability flips hours late | Normal lag, made worse by a feed app on a schedule | Controlled stockout with a stopwatch |
| Rules apply to the wrong variant | Retailer ID is not the Shopify variant ID | Compare IDs on one item |
The twenty-minute test
Pick a slow variant. Note the time. Set its inventory to zero in Shopify. Open the item in Commerce Manager and refresh until availability changes. Write the minutes down. Set the stock back. That number is your exposure window every time a size sells out, and it is the single most useful fact about your catalogue. The full protocol, including the four places it usually breaks, is in how to verify a tool's variant-level stock sync. Before running that test, it is worth confirming the order actually came from a cold audience, a step laid out in first Shopify sale, what to do next.
Channel or feed app?
The channel is free, variant-level and maintained by Shopify. Use it until it cannot do something you need. Feed apps earn their place when you need custom labels driven by rules, buffers that hide the last units, or transformations to titles and images. The risk with a feed app is two sources of truth: the channel's catalogue and the app's catalogue, with ads pointed at one and rules written against the other. Pick one catalogue for ads and make sure everything writes to it.
What a working sync does not fix
- The parent that stays available when only tail sizes remain. That is a policy, not a sync: core-size automation.
- The lag itself. It can be shortened, not removed, and the spend during it is a cost: catalogue lag is a media tax.
- Static and UGC ads that show a dead colour. Catalogues cannot see creative.
- Knowing what it cost. A sync moves availability; it does not join it to spend.
Every rule is only as honest as the sync underneath it. Test the sync first, then buy the rules.
Where Ralph starts
Ralph reads Shopify at variant level and the Meta catalogue's retailer IDs, and tells you when they do not match. It does not replace the channel or patch availability. It uses the catalogue identity the channel provides to put cover and core-run health next to spend, and to stage exclusions and product sets for approval. If the mapping is broken, that is the first thing it will say. The rest is in how Ralph handles out-of-stock variants.
The twenty-minute test
0 of 5 done. Ticks stay on this device. When they are all ticked you know exactly what a desk would be doing for you.
Check your Shopify to Meta catalogue sync is real
- Find a variant, not a product, in Commerce Manager. Search the catalogue for a specific size or colour. If the item exists with its own ID and its own availability, the catalogue is at variant grain.
- Check the retailer ID matches the Shopify variant. The item's retailer ID should be the Shopify variant ID, not the product ID. Mismatches are how rules get applied to the wrong thing.
- Run a controlled stockout. Set a slow variant to zero at a known time. Watch the item in Commerce Manager until availability flips. Record the minutes.
- Check the sales channel and location. Confirm the channel is reading the inventory location that serves online orders, not a wholesale or returns location.
- Repeat after any app change. Feed apps, inventory apps and theme changes can all break the mapping. Re-run the stockout test when anything in the chain changes.
Questions people actually ask
How does Shopify inventory get into the Meta catalogue?
Through the Facebook and Instagram channel in Shopify, which creates and maintains a catalogue in Commerce Manager, with each variant as a catalogue item whose availability tracks Shopify inventory. Third-party feed apps can do the same job with more control and more ways to misconfigure it.
Why is my Meta catalogue not updating inventory?
Usual suspects: the channel is reading a different inventory location than your online store, the product is not published to the channel, a feed app has overridden the channel's catalogue, or the item was created at product level so the variant availability has nowhere to go. Run a controlled stockout to see where the chain breaks.
How often does the Meta catalogue update from Shopify?
The channel pushes changes rather than waiting for a scheduled feed, but there is still a delay between the Shopify change, the push, and Meta re-processing the item. In practice, minutes to a few hours. Measure yours instead of trusting a figure.
Should I use the Shopify channel or a feed app?
Start with the channel. It is free, it is at variant level, and it is maintained by Shopify. Move to a feed app when you need custom labels, buffers, or transformations the channel cannot do, and keep the channel's catalogue as the one your ads use unless you have a reason not to.
Does a working sync mean my ads stop on sold-out sizes?
For catalogue ads, mostly yes: an unavailable item is not shopped. It does not fix the parent that still looks available when only tail sizes remain, the static ad that shows a dead colour, or the spend that leaked during the lag. Those need rules and a person.
If the catalogue is the problem: Ralph maps every Shopify variant to its Meta and Google catalogue item, scans for missing attributes, and drafts the fixes and the feed changes for approval. See Ralph · How Ralph reads the catalogue · Docs