Meta's Commerce Manager is quieter about problems than Google Merchant Center. An item can sit in your catalog as Eligible while your ads show a blank tile, and a whole upload can “succeed” while half the fields landed in the wrong place. Below are the things that actually take products out of Facebook and Instagram ads, roughly in the order they happen to people.
1. The file was imported with the wrong format selected
When you add a data source, Commerce Manager asks “Which platform is your file formatted for?” and offers two answers: Commerce Manager and Google Merchant Center. The default is the first. If your feed is a Google Shopping XML or CSV — and most feeds exported from stores are — you have to pick the second, or the columns are read under the wrong names and products come in with missing prices, links or images. This is the single most common cause of “my feed looks fine but the catalog is empty”. Fix: delete the data source and add it again with the right format; there is no way to change it afterwards.
2. Availability written in words Meta doesn't know
Meta accepts a short list: in stock, out of stock, preorder, available for order, discontinued. Anything else — a translated word, yes, 1, a typo — is read as unavailable, and the item silently stops serving while your store still shows it in stock. This is the hardest problem to notice from the inside, because nothing is marked as an error. Fix: map your store's stock status to exactly those values, and check the catalog's Availability column after the next import.
3. Images that ads can't use
Meta wants at least 500 × 500 pixels for catalog ads and strongly prefers a square crop; smaller images are accepted into the catalog but rejected from ad placements, which is why a product can be eligible and still never appear. Image URLs must be public and direct: a link that redirects, needs a cookie, or points to a page rather than the file itself fails on fetch. Text overlays and watermarks are an ads-policy problem on top. Fix: give every product a clean square photo of 1000 × 1000 or larger, and make sure the feed carries the image's own URL.
4. Prices Meta can't reconcile
The price field needs a number and an ISO currency, 49.00 EUR, and a promotion goes in sale_price with its dates in sale_price_effective_date. If you run the Meta Pixel, Meta also compares the catalog price with what the pixel reports on the product page; a feed that drifts behind a price change earns a price-mismatch warning and, repeated, lower delivery. Fix: rebuild the feed whenever prices change, and never let a feed rule round or rewrite a price the page doesn't show.
5. Variants without a group
Every size and colour is its own item with its own id, and they only behave as one product when they share an item_group_id. Without it, Meta sees twelve near-identical items competing with each other, and dynamic ads pick one at random. With it, the ad shows the product and lets the shopper pick the variant. Fix: send the parent product's identifier as item_group_id on every variant row.
6. IDs that change between uploads
Meta identifies an item by its id, nothing else. If your export regenerates IDs — a new SKU scheme, a plugin update, a switch from product ID to variant ID — every product becomes a new item and the old ones drop out, taking their ad history and pixel matching with them. Fix: pick a stable identifier once (the variant ID your pixel already sends works best) and never change it.
7. The catalog is right and the ad still isn't
Rejections that don't come from the feed at all: the product page's domain isn't verified in Business Manager, the landing page redirects to the homepage, the title is in ALL CAPS or carries “FREE SHIPPING!!”, or the product falls under a restricted category. These show up as ad or item policy issues, not as feed errors, and the fix is in Business Manager or on the page.
What Meta enforces, and what it only lists
One honest note. Meta's specification lists description and image_link as required, but in practice a product missing either is imported and marked eligible — we have watched a 24-product feed with two imageless items come through with zero errors. Required in the spec doesn't mean rejected. It does mean the ad shows an empty tile or a title with nothing under it, which costs you the click just the same. Treat those fields as required anyway; just don't expect Commerce Manager to warn you.
How FeedRobin handles it
FeedRobin's Meta feed is the Google format Commerce Manager expects when you choose “Google Merchant Center” — verified in a real catalog, 24 of 24 items imported with zero errors and variants grouped correctly. Availability is written in the exact vocabulary each channel documents, every variant carries its item_group_id, IDs are the ones your store already uses, and the quality check flags missing descriptions and images before Meta ever sees them. The catalog re-imports hourly, so a price change on your store reaches the ad within the hour.