Skip to content
Bach.ai

Catalog Ads Showing Out-of-Stock Products? Fix It

Published
Drafted with AI; facts checked against the linked sources on . How we write

Why do my Meta catalog ads show out-of-stock products?

Meta excludes products marked out of stock from ads, so your catalog still lists the item as in stock. Check the feed schedule first: a daily or weekly upload lags stock that sells by the hour. Set an hourly update schedule in Commerce Manager, remove any rule that defaults blank availability to in stock, and keep one source for stock.

A sold-out product in a catalog ad is a data problem, not an ad problem. Meta already keeps items marked out of stock out of ads, so a sold-out item reaches a shopper when your catalog still says in stock, or when the ad shows an in-stock size of a product whose other sizes sold out. Find where the stale value comes from: the feed schedule, the upload setting, a data rule, a country feed or a second data source.

Doesn’t Meta hide out-of-stock products from ads automatically?

Yes. Meta says products marked out of stock in the availability field are not shown in your ads. They stay visible in shops on Facebook and Instagram for up to 56 days, marked as sold out. Meta also says you don’t need to filter a product set by “availability is in stock” for ads, because out-of-stock products are already excluded.

That narrows the question. If a shopper clicks your ad and lands on a sold-out page, Meta’s copy of that product says in stock at the moment the ad is served. Your store and your catalog disagree, and the catalog is behind.

Why does my catalog still say in stock?

Here are six causes, each tied to a rule in Meta’s own catalog documentation.

Cause How to spot it Meta’s rule Fix
Feed syncs too rarely Data sources shows a daily or weekly schedule Scheduled feeds run hourly, daily or weekly Add an hourly update schedule
Feed file built after the fetch The file’s own timestamp is older than the last upload Meta fetches the file at your scheduled time Schedule the fetch just after your file regenerates
Update schedule ignores removed rows Sold-out items were deleted from the file, not set to out of stock An update upload ignores products you simply delete Set availability to out of stock, or archive the item
A default-value rule Data feed rules include a default for availability A rule can fill blank availability with in stock Delete the rule and send real values
A country feed overrides stock Wrong stock shows only in one market The last country feed stays in force Update the country feed’s availability too
Two sources write stock Data sources lists a partner platform plus a feed or pixel Several sources can update the same products Set one source to own availability

The schedule is slower than your sales

Meta’s scheduled feed uploads can run hourly, daily or weekly. On a daily schedule, an item that sells out at 10 am can keep serving until the next fetch the following day. Meta’s own suggestion is an hourly update schedule for prices and availability, plus a weekly or monthly replace schedule to clear out old products.

Timing matters too. Meta fetches whatever file sits at your URL at the scheduled time. If your store rebuilds that file at 9 am and Meta fetches at 8:55 am, every upload is a day old. Meta’s example is a file updated at 9 am with the fetch set for 9:15 am.

The update setting skipped your deletions

An update schedule is fast, but Meta says products or fields you simply remove from the file are ignored. If your store drops sold-out items from the export instead of marking them out of stock, the catalog keeps the last value it had: in stock. Send the item with availability set to out of stock, or set its status field to archived, which Meta says keeps it out of both ads and shop.

A data rule is filling the gap

Meta’s product data rules can set default values for empty fields, and Meta’s own example is a rule that sets blank availability to in stock. That rule is harmless while every row carries a value. If your export leaves availability blank for sold-out items, the rule turns every one of them into an in-stock product.

A country feed or a second source wins

If you sell in more than one market, Meta’s guidance on country and language feeds says that when you update your main feed but not the country feed, the data in your most recent country feed is still delivered. A sold-out item can be correct at home and in stock abroad.

Meta also lets several data sources feed one catalog: a partner platform such as Shopify or WooCommerce, a data feed, the Meta Pixel, the Catalog Batch API and more. If more than one of them sends availability, decide which one owns it: Meta lets you set which source updates which attribute.

It may be one size, not the whole product

Meta shows one variant of each product per ad and says individual variants may not appear if they are out of stock. The product can keep running on its in-stock variants. A shopper who wanted a sold-out size will call the ad out of stock even though the catalog is right. That is a landing page fix: link to the in-stock variant or show size availability clearly.

How do I stop catalog ads showing sold-out items?

Fix the source of the stale value, then shorten the gap. Each step names the Commerce Manager path.

  1. Open Commerce Manager, select your catalog, open the Catalog tab and click Products. Search a sold-out item and read its availability.
  2. Click Data sources and open your data feed. On the Settings tab, read the Schedules section for the frequency and the setting (update or replace).
  3. Add an hourly update schedule under Schedules for availability and price. Keep a weekly replace schedule for clean-up, at least 10 minutes apart.
  4. Click Request update now on the schedule to pull a fresh file today instead of waiting for the next run.
  5. Check the Data feed rules section on the same Settings tab. Delete any rule that sets a default value for availability.
  6. Open each country feed under Data sources and send its availability alongside the main feed.
  7. Review the data sources list, and set one source to own availability if more than one writes it.

When hourly is still too slow

For items that sell out within hours, Meta’s developer guide on catalog inventory suggests a scheduled daily or hourly feed for the stable fields, plus the Catalog Batch API to send volatile stock values when they change. Keep those values out of the feed so the two never contradict each other. Batch API requests are asynchronous, so check each request’s status to confirm the update landed. Meta also notes you can mark an item out of stock early, before it hits zero, to avoid selling stock you no longer have.

Should I add an availability filter to my product set?

Not for this problem. Meta says out-of-stock items are already excluded from ads, so a filter on availability adds nothing when the value is wrong: a stale in-stock item passes the filter too. Product set filters are also dynamic, and Meta warns that editing a set during a live campaign can affect performance while the audience updates. Fix the data and leave the set alone. For sets that run short of products, read why are my Meta catalog ads not delivering?

For a wider check of identifiers, prices and images beyond stock, see how do I check my Meta product catalog for errors?, and add the feed schedule to your recurring Meta ads audit checklist.

FAQ

How long does Meta take to remove a sold-out product from my ads?

Meta updates availability at your next scheduled feed upload, or sooner when you click Request update now. The fastest schedule is hourly. Partner platforms such as Shopify sync updates on their own, and the Catalog Batch API can send a change as it happens, though its requests are processed asynchronously.

Should I delete sold-out products from my catalog?

Usually not. Set availability to out of stock so the item can return to your ads when you restock, or set status to archived to hide it from ads and shop. Meta’s developer guide warns that deleting products can make product tags and images disappear, and recommends deleting only after months have passed.

Why do out-of-stock products still show in my Facebook shop?

That is Meta’s rule, not a fault. Products marked out of stock are removed from ads but stay in shops on Facebook and Instagram for up to 56 days, labelled as sold out. Archive the product with the status field if you want it gone from the shop as well.

Do I need a separate feed for each country?

Only if you localize prices, text or stock by market. Country feeds override fields in your main feed for that market, and Meta says the most recent country feed stays in force until you upload a new one. Include availability in each country feed you use.

Sources

Sources: Meta Business Help Center, Edit product availability and prices using a data feed, About scheduled data feed uploads for catalogs, Update a data feed in your catalog, Add product data rules in Commerce Manager, Tips for managing country and language feeds, Ways to add products to your catalog, About variants in your catalog, Create and edit product sets and Tips for creating and managing product sets; Meta for Developers, Catalog inventory guide (checked 2 Oct 2026).

Catalog AdvertisingEcommerce Operations

See what your Meta ads are really costing you.

Connect your account and Bach ranks potential revenue leaks with estimates and actions you can review. Free for 7 days, no credit card.

Start Free Audit
Start your free audit