Meta Dynamic Product Ads Showing the Wrong Products? How to Fix Catalog Mismatches
Most wrong-product problems come from the pixel and the catalogue using different IDs, a stale feed or one campaign setting. Here is how to find which, and fix it.
What "wrong products" usually means
Meta now calls dynamic product ads Advantage+ catalog ads, but they work the same way. Your pixel and Conversions API send a product ID with every ViewContent, AddToCart and Purchase. Meta looks that ID up in your catalogue and builds the ad from the matching item. If the two IDs do not line up, Meta cannot tell what a shopper looked at, so it fills the ad with whatever it can find.
Start by naming the symptom you see. Each one points to a different cause.
| What you see | Most likely cause |
|---|---|
| Retargeting ads show random products, not the ones people viewed | Pixel content_ids do not match catalogue IDs |
| Ads show the right product but the wrong colour or size image | Variant images missing, or IDs matched at product level only |
| Out of stock or deleted products keep appearing | Feed is not syncing, or the product set does not filter stock |
| Old price or old MRP in the ad | Stale feed, or a sale price field not passed |
| People see products they already bought | No purchase exclusion, or Purchase event IDs do not match |
| New visitors see bestsellers, not what they browsed | Broad audience option, which works this way by design |
Step 1: check the catalogue match rate first
Before you change anything, open Commerce Manager, pick your catalogue and go to its Events section. It shows which pixel is connected and how many content IDs from each event matched an item in the catalogue. Events Manager also flags catalogue match problems under Diagnostics.
If the match rate for ViewContent or AddToCart is low, you have an ID problem. Nothing else on this page will fix the ads until that is solved. If the match rate is close to full, skip to the feed and campaign sections.
To see the actual IDs being sent, use the Test Events tab in Events Manager or the Meta Pixel Helper browser extension. Open a product page, note the content_ids value, then search for that exact value in your catalogue. If it is not there, you have found the problem.
Step 2: fix the ID mismatch
The pixel ID and the catalogue ID have to be the same string, character for character. A prefix, an underscore or a different ID level is enough to break the match.
Most store platforms keep two IDs for every item: the product ID for the parent product and the variant ID for each size or colour. The official Facebook and Instagram sales channel apps normally put the variant ID in the catalogue id field and the product ID in item_group_id, and send variant IDs from the pixel. Trouble starts when a second app, a custom theme script or a feed tool changes one side and not the other.
- Product ID on one side, variant ID on the other. This is the most common cause. Use the variant ID on both sides, since that is what lets Meta show the exact colour someone viewed.
- SKU in the feed, numeric ID in the pixel. Feed apps often export SKU by default. Change the feed or the pixel so both use the same field.
- Prefixes or country codes. Some feed tools add text before the ID. Either remove it from the feed or add the same prefix in the pixel settings.
- Two pixels firing. A theme snippet plus the app can send duplicate events with different ID formats. Remove the manual code and keep one source.
- Purchase events from a third-party checkout. One-click and COD checkout tools often fire their own Purchase event. Check that it sends the same variant IDs as your store pixel, or your purchase exclusions will not work.
Step 3: make sure the right pixel and catalogue are linked
Brands that have changed agencies, rebuilt the store or opened a second Business Manager often end up with two pixels and two catalogues. The ad set can be pointing at a catalogue that the live pixel is not even connected to.
Check three things. The catalogue is connected to the pixel that actually fires on your store. The ad set uses that same catalogue. The product set chosen in the ad set is the one you meant, not an old test set like "All products" that still has discontinued items in it.
Step 4: keep the feed fresh
Meta can only show what the catalogue says is true. If the feed last synced a week ago, the ads still show last week's stock, prices and images.
With a sales channel app, products sync automatically, but sync can stop if the app loses permissions or the channel is disconnected. With a scheduled feed file, check the schedule and the last upload time in the Data sources tab.
- Pass availability correctly so sold-out variants are marked out of stock, and build product sets that filter to in stock only.
- Send a sale_price when you run an offer, so the ad shows the right strike-through.
- Give each variant its own image. Without it, a red kurta ad can show the blue one.
- Fix rejected items in Commerce Manager. Rejected items drop out without any warning in the ads, and Meta shows the next best thing.
- Hide draft, archived and test products from the sales channel so they never reach the catalogue.
Step 5: rule out campaign settings that look like a bug
Sometimes the ads are doing exactly what they were told to do. Check the audience and creative settings before you blame the tracking.
- Retargeting option. "Viewed or added to cart but not purchased" shows the products people viewed. The "upsell" and "cross-sell" options deliberately show different products.
- Broad audience with catalogue ads. When you target new people, Meta picks products it expects each person to buy. They will not match anything those people browsed, because they never browsed.
- Retention window. A long window means people see products from weeks ago. Shorten it if your range changes often.
- Purchase exclusion. Exclude recent buyers and check the Purchase event match rate, or buyers keep seeing what they already own.
- Creative template. A carousel set to a fixed card, or a collection with a manual hero product, will always show that product first.
Step 6: check Conversions API is sending the same IDs
Most Indian D2C stores now send events from both the browser pixel and the server through Conversions API. Both need the same content_ids and the same event_id so Meta can deduplicate them. If the server event uses product IDs and the browser uses variant IDs, you get two events pointing at different items and the catalogue match drops.
Compare one browser event and one server event for the same action in Test Events. The content_ids should be identical. Our Meta CAPI tracking setup guide covers the full setup. Better customer data also helps, as explained in how to improve Event Match Quality.
A quick monthly check
Catalogue problems come back after theme updates, app installs and big sale seasons. A short routine catches them before they waste spend.
- Look at the catalogue match rate for ViewContent, AddToCart and Purchase.
- Open one product page and confirm its content_ids value matches the catalogue item.
- Check the last feed sync time and the count of rejected items.
- Confirm sold-out items are excluded from live product sets.
- Preview each live catalogue ad and check the images, prices and product shown.
- After any new app or theme change, run the ID check again the same day.
How Monastic Media helps
One in-house team in Surat scripts, shoots and edits the ads videos and runs the Meta and Google campaigns they go into, so the people who see the numbers make the next ad. See our performance marketing
Read next
Questions
Why are my Meta catalogue ads showing products the customer never viewed?+
Either the pixel IDs do not match the catalogue, so Meta cannot tell what was viewed, or the ad set uses a broad audience or a cross-sell option, which shows other products by design. Check the catalogue match rate first.
Should content_ids use the product ID or the variant ID?+
Use the variant ID on both the pixel and the catalogue id field, with the product ID in item_group_id. What matters most is that both sides use the same one.
How long does it take for fixes to show in the ads?+
Feed changes usually show after the next sync. ID fixes only apply to new events, so retargeting audiences fill up with correct product data over the following days as people visit again.
Why do out of stock products still appear in my dynamic ads?+
Either the feed is not syncing availability or your product set does not filter for in stock items. Fix the availability field and add an in stock filter to the product set.
Do I need to restart the campaign after fixing the catalogue?+
Usually not. Fix the IDs and the feed, then keep the campaign running. Swapping catalogues or product sets in the ad set is a bigger edit and can reset learning.

“MM helped us scale from 0 to ₹2.6 CR/month in just 6 months with clear communication and industry expertise!”Rakesh Naidu GM @ Naaptol
Ready to work with one team?
Book a call. If we can help you hit your goals, we will tell you how; if we cannot, we will tell you that too.
