TL;DR
A catalog ad can only show the product someone viewed if the ID in the event is an ID the catalog knows. Shopify gives every item three candidates, and catalogs are built from different ones, depending on which app or feed created them. So check the catalog first, then set the event side to match, one channel at a time. Meta's documentation adds a second rule on top of the ID itself, and Google's Merchant Center says never to change a product's ID once it's set.
Key Takeaways
- Read the ID and group ID of one product with variants in each catalog (Commerce Manager, Merchant Center) before you change anything in the app.
- In the app, the setting is "Product identifier sent in events" under
Advanced Settings, per channel, with Variant ID, Product ID and SKU as the options. It's on the Plus plan. - Defaults: Variant ID for GA4, TikTok, Reddit and Pinterest; Product ID for Meta, Snapchat and OpenAI Ads. Google Ads, Klaviyo and theMarketer aren't in the setting.
- Meta asks for
productwith item-level IDs andproduct_groupwith group IDs, and says not to useproduct_groupwith AddToCart or Purchase [1]. - Google's dynamic remarketing matches an event ID against the feed's
id,item_group_idordisplay_ads_id[3]. If your Merchant Center IDs are composites, check the item group ID column. - Changing the option "makes existing items appear as new ones in reports." Decide before your BFCM freeze and change one channel at a time.
- Give every variant a SKU before choosing SKU: variants without one fall back to the channel's default.
What has to match, exactly?
A string. The ID in the event has to be, character for character, an ID the retargeting catalog holds for that item. Google's help page on dynamic remarketing is blunt about it: "The entries in your feed attributes and the corresponding parameters in the event snippet should always match" [3]. Meta's catalog reference says the same for dynamic ads: the item's ID "must exactly match the content ID for the same item in your Meta Pixel" [11].
This is product matching. Matching people, which is what event match quality measures, is a separate problem covered in why Meta's funnel events score lower than Purchase.
Follow one illustrative product through it. A T-shirt has the Shopify product ID 8012345678901 and three size variants; the Medium variant has the variant ID 45012345678902 and the SKU TEE-BLU-M. Those are three different strings for one thing a shopper can buy:
| Identifier | Value for the Medium tee | What it names |
|---|---|---|
| Product ID | 8012345678901 |
The T-shirt, all sizes |
| Variant ID | 45012345678902 |
The Medium only |
| SKU | TEE-BLU-M |
The Medium, in your own naming |
A catalog item for the Medium may have one of those as its ID, or an ID built from them, and its group ID may be the product ID. An event that says 8012345678901 while the catalog's items are keyed 45012345678902 is talking about an item the catalog doesn't list at that level.
Read your catalog's ID columns before anything else
The format each sales channel writes into its catalog isn't something we could find stated in Shopify's help for any of the channel apps. So read it off your own catalogs.
- In Shopify, open a product that has variants. The number at the end of the page's URL, after
/products/, is the product ID. - Click one variant. The URL now ends
/products/<product ID>/variants/<variant ID>[12]. Note the variant ID, and the SKU in the variant's inventory section. - In Meta Commerce Manager, open the catalog your ads use and find the same item. Note its content ID and its item group ID.
- In Google Merchant Center, open the same product and note its
idanditem_group_id. Google defines the item group ID as the attribute that groups variants differing only in details like colour and size [6]. - Do the same in any other catalog you run ads from: TikTok, Pinterest, Snapchat, Reddit, OpenAI Ads.
- Write the result down per catalog: "item ID = variant ID, group = product ID", or whatever you found.
You'll usually find the item IDs are your variant IDs, your product IDs, your SKUs, or something built from them, like a prefix plus both numbers. The first three have an option that matches. The last is covered further down.
What the app sends, channel by channel
WeltPixel Conversion Tracking has one setting for this, "Product identifier sent in events", in each channel's section of Advanced Settings. It decides which identifier goes into that channel's item list, "in browser events and server-side purchases alike", so the product view, the add to cart and the server-side purchase all carry the same kind of ID.
| Channel | Default | Where the ID goes |
|---|---|---|
| GA4 | Variant ID | items[].item_id |
| Meta | Product ID |
content_ids and contents[].id, plus content_type
|
| TikTok | Variant ID | contents[].content_id |
| Variant ID |
content_ids and contents[].id
|
|
| Variant ID | products[].id |
|
| Snapchat | Product ID |
content_ids and contents[].id
|
| OpenAI Ads | Product ID | contents[].id |
The defaults are the identifiers the app sent before the setting existed, so nothing changes unless you pick something else. Google Ads isn't in the list because the app sends it conversions without item data, and Klaviyo events already carry both the product ID and the variant ID.
The setting is on the Plus plan. On the free plan, which covers GA4, GA4 sends the variant ID and the row shows as locked. With SKU selected, a variant with no SKU falls back to the channel's default.
For TikTok, Pinterest, Reddit and Snapchat, none of the documentation we could read (September 30, 2026) states a matching rule beyond asking for your product IDs; Snapchat describes content_ids as "International Article Number (EAN) when applicable, or other product or category identifier" [10]. OpenAI's product feed has both an item_id and a group_id and asks you to "keep product identifiers stable between uploads" [9]; the app sends OpenAI Ads the item ID only, no group ID. So on those five, the rule is the one from the walkthrough: send whatever your catalog uses as the item ID. Each channel's own setup is in its guide, for example TikTok's Events API on Shopify and Pinterest conversions on Shopify.
Why does Meta need more than a matching ID?
Because Meta also wants to know what kind of ID it's looking at. Its pixel reference says content_type is "Either product or product_group": product when the IDs are IDs of products, product_group when they're product group IDs [2]. The catalog-ads guide adds that a page about "a specific SKU (specific size, color, and so on)" should use product, that "It's important that the content_type matches the type of ID(s)" in the event, and, in its own words, "Do not use product_group with AddToCart or Purchase" [1].
In the app, the Meta option moves the ID and the content_type together:
-
Product ID (the default) sends the product ID with
content_typeproduct_group, on the browser product events (ViewContent, AddToCart, InitiateCheckout and the others that carry products) and on the server-side Purchase. -
Variant ID sends the variant ID with
content_typeproduct. -
SKU sends the SKU with
content_typeproduct.
So the choice comes down to your catalog. If its item IDs are your Shopify variant IDs, Variant ID sends those IDs as product, which is what Meta's catalog guide asks for on AddToCart and Purchase. If its item IDs are SKUs and every variant has one, SKU does the same. If you keep Product ID, the events carry the product ID, which in a catalog grouped by product is the group ID. Neither Meta page we read says what happens to a Purchase sent as product_group against a catalog keyed by variant, and we haven't measured it, so we won't guess.
What if Merchant Center uses IDs none of the options produce?
Then the match has to happen at the group level, or not at all.
If your dynamic remarketing runs on GA4 data, the event ID that matters is GA4's item_id. GA4 can "transfer dynamic attributes, such as product IDs or price values, directly to Google Ads for dynamic remarketing campaigns", once Google signals or user-provided data collection and ads personalization are on [4]. Google Ads then matches that ID against one of three feed attributes: id, item_group_id or display_ads_id [3].
One caveat if WeltPixel Conversion Tracking sends your GA4 product events. The app sends GA4 your product views, adds to cart and checkout steps from its server, tagged with the same GA4 browser ID your Google tag set. Google documents both halves of that route (dynamic attributes from GA4, and remarketing for server-sent events), but doesn't say whether product details sent this way make the trip. Switch it on, then check.
Some Merchant Center catalogs use composite IDs. Search Engine Roundtable reported on July 6, 2026 that merchants were worried the Google & YouTube app's move to the Merchant API was changing IDs from a Shopify_US_12345_67890 shape to Shopify_ZZ_12345_67890, and that Google's Ads Liaison said Google was looking into it [8]. The article doesn't report a resolution. The timing fits: Google's migration guide says the Content API for Shopping "was sunset on August 18, 2026" [7].
None of the app's three options produces an ID in that shape. If your Merchant Center id column is composite, look at item_group_id. If it equals the Shopify product ID, setting GA4 to Product ID (a Plus option) lines the events up with the groups. If it's composite too, no event setting will match, and the fix sits in the feed. Don't reach for it lightly: Google's rule is "Use a stable ID for each product. Once you've assigned an ID to a product, don't change it", because a change will "overwrite your product and its history" [5]. How the app and the Google & YouTube channel share a store is covered in running a tracking app alongside Shopify's Google & YouTube channel.
Change it once, outside the season
The app's help text under the setting says it plainly: "Changing it makes existing items appear as new ones in reports." Item-level reports split at the change date. That's the cost, and it's why the timing matters as much as the choice.
Retargeting audiences for the season are built from the traffic before it, which is the argument in getting your tracking ready for BFCM retargeting, and the Black Friday tracking freeze sets the date after which tracking settings stay put. If the mismatch you found is real, fix it now, one channel at a time, and give each a day of traffic before the next.
You've probably got at least one catalog you set up years ago and haven't opened since. That's the one to check first.
For GA4, confirm the new item_id values in DebugView, which is the check at the end of the GA4 ecommerce events canon for Shopify. For Meta, give it a day of traffic and look at the catalog's diagnostics in Commerce Manager.
FAQ
Should I send the variant ID or the product ID to Meta?
Whichever your Meta catalog uses as the item ID. If the catalog's items are keyed by Shopify variant IDs, Variant ID matches them and sends content_type product, which Meta's catalog guide asks for on AddToCart and Purchase [1].
Why doesn't my GA4 item_id match my Merchant Center ID?
GA4 sends the Shopify variant ID by default, and Merchant Center catalogs built by a channel app can use composite IDs. Google's dynamic remarketing can also match on item_group_id [3], so check whether that column holds the Shopify product ID.
Can I change the Google Ads product ID in WeltPixel Conversion Tracking?
No. The app sends Google Ads purchase conversions without item data, so there's no product ID to set. For dynamic remarketing through GA4, the GA4 setting is the one that counts.
Does changing the product identifier keep my report history?
No. The app warns that "changing it makes existing items appear as new ones in reports", so item-level history splits at the change date.
Match each catalog, then leave it alone
WeltPixel Conversion Tracking lets you choose, per channel on the Plus plan, whether GA4, Meta, TikTok, Pinterest, Reddit, Snapchat and OpenAI Ads receive the variant ID, the product ID or the SKU, in browser events and server-side purchases alike.
Sources
- Meta for Developers, Marketing API "Dynamic Product Audiences" (
productvsproduct_group; notproduct_groupwith AddToCart or Purchase), developers.facebook.com/docs/marketing-api/audiences/guides/dynamic-product-audiences/, accessed September 30, 2026 - Meta for Developers, "Meta Pixel Reference" (
content_typeandcontent_ids), developers.facebook.com/docs/meta-pixel/reference, accessed September 30, 2026 - Google Ads Help, "Dynamic remarketing events and parameters" (
id,item_group_idordisplay_ads_id), support.google.com/google-ads/answer/7305793, accessed September 30, 2026 - Google Analytics Help, "Enable remarketing with Google Analytics data", support.google.com/analytics/answer/9313634, accessed September 30, 2026
- Google Merchant Center Help, "ID [id]" (use a stable ID; don't change it), support.google.com/merchants/answer/6324405, accessed September 30, 2026
- Google Merchant Center Help, "Item group ID [item_group_id]", support.google.com/merchants/answer/6324507, accessed September 30, 2026
- Google for Developers, "Migrate from Content API for Shopping to Merchant API" (Content API sunset August 18, 2026), developers.google.com/merchant/api/guides/compatibility/overview, accessed September 30, 2026
- Search Engine Roundtable, "Google & YouTube Shopify App Sync May Cause Mess After August 18th API Change", July 6, 2026, seroundtable.com/google-youtube-shopify-app-sync-merchant-concerns-41627.html, accessed September 30, 2026
- OpenAI Developers, "Product Feeds", developers.openai.com/ads/product-feeds, accessed September 30, 2026
- Snap for Developers, Conversions API "Parameters" (
content_ids), developers.snap.com/api/marketing-api/Conversions-API/Parameters, accessed September 30, 2026 - Meta for Developers, Marketing API "Reference - Catalog" (
id: must exactly match the content ID in your Meta Pixel for dynamic ads;item_group_id), developers.facebook.com/docs/marketing-api/catalog/reference/, accessed September 30, 2026 - Shopify Help Center, "Find a variant ID" (the number after
/variants/in the admin URL), help.shopify.com/en/manual/products/variants/find-variant-id, accessed September 30, 2026