string identifier

id

The unique identifier for a product in your feed. Every other field hangs off this one — it's how channels track, match, and report on individual SKUs.

Also known as: product_id , offer_id , sku

Channel support

Channel Status Field name Notes
Google Merchant Center Required id Must be unique per item; max 50 characters; case-sensitive. Once set, don't change — Google uses it as the persistent identity. Docs →
Meta Commerce Manager Required id Meta matches this against `content_ids` in your Pixel and Conversions API events. Mismatches break DPA / Advantage+ optimisation. Docs →
TikTok Shop Required sku_id Uses `sku_id` in the schema but the concept is identical.
Pinterest Catalog Required id
Amazon Required sku
Bing Merchant Center Required id

Why it matters

The `id` field is the join key between your catalog feed and your tracking pixel. When pixel events report `content_ids` that don't match the `id` field in your feed, the algorithm can't link user behaviour to specific products and ad performance falls apart. Get this right or nothing else matters.

Almost every operational catalog failure traces back to the id field at some point. The id is what your pixel sends, what your sale_price updates target, what your audit reports key against, what your refund flow looks up. When two systems disagree on what an id means — Shopify variant IDs in the pixel, parent product IDs in the feed, for instance — every other piece of catalog hygiene downstream suffers. The pixel match rate drops below 90%, Advantage+ optimisation degrades, retargeting audiences misfire, and the symptoms look like creative problems or audience problems when the root cause is upstream in the id layer.

The Shopify-specific id problem deserves its own paragraph because it's so common. Shopify ships pixel events with variant IDs as content_ids by default, but many feed-generation tools default to product IDs (the parent SKU). The two formats look similar but never join. The Catalog Match Rate in Meta's Events Manager drops to whatever percentage of your traffic happens to also match by coincidence — typically 40-70%, not the 95%+ that healthy DPA optimisation requires. The fix is to align both ends: either configure the pixel to send product IDs, or change the feed to use variant IDs. WooCommerce and Magento have similar but channel-specific variants of this problem.

For multi-region catalogs, the id needs to handle the same SKU appearing across regions. Two patterns work. Region-scoped feeds (one feed per country with the same id across them) treat the same SKU as one item that ships to multiple destinations; this is cleanest but only works when product attributes are genuinely identical across regions. Region-suffixed ids (`SKU-001-UK`, `SKU-001-US`) treat each as a distinct item, which is the right answer when the same product genuinely has different specs per region — different size labels, different regulatory compliance, different bundles.

Length matters in subtle ways. Google's 50-character limit on id is universally enforced; longer ids get truncated, which silently breaks pixel matching. Stay under 50 with margin. Avoid spaces (channels accept them but the URL-encoding causes downstream issues with pixel pings), avoid case mixing (`SKU-001` and `sku-001` are different items), avoid special characters beyond hyphens and underscores. A 20-30 character alphanumeric-with-hyphens id has all the advantages and none of the failure modes.

The canonical fix is to decide on one id format and enforce it everywhere. That format should be stable (don't include data that changes — sale_price, stock state, anything time-sensitive), unique (no collisions across variants), and consistent across channels (the same SKU has the same id in Google, Meta, TikTok, Pinterest). Most teams that have wrestled this into shape end up using a deterministic format like `{brand-prefix}-{variant-suffix}`, which gives them a visible logical structure plus easy debugging when something goes wrong.

The other often-overlooked rule: once an id is in use, never reuse it. Even after a product is discontinued and removed from the feed, channels retain historical performance data tied to that id for 6-12 months. Reusing a discontinued product's id for a new product starts the new product with the old one's signal — almost always negative because discontinuing usually means it underperformed. The cost of suffixing new SKUs with version numbers is rounding error compared to the cost of inheriting bad signal.

Format rules

  • Must be unique across the entire feed — no duplicates

    Applies to: Google Merchant Center, Meta Commerce Manager, TikTok Shop, Pinterest Catalog, Amazon, Bing Merchant Center

  • Maximum 50 characters

    Applies to: Google Merchant Center, Meta Commerce Manager, Pinterest Catalog, Bing Merchant Center

  • Case-sensitive — 'SKU-001' and 'sku-001' are treated as different items

    Applies to: Google Merchant Center, Meta Commerce Manager, TikTok Shop, Pinterest Catalog, Amazon, Bing Merchant Center

  • Use only alphanumeric characters, hyphens, and underscores — avoid spaces and special characters

    Applies to: Google Merchant Center, Meta Commerce Manager, TikTok Shop, Pinterest Catalog, Amazon, Bing Merchant Center

  • Don't change the `id` once set — channels treat a changed id as a brand-new product, losing all historical learning

    Applies to: Google Merchant Center, Meta Commerce Manager, TikTok Shop, Pinterest Catalog, Amazon, Bing Merchant Center

Valid examples

SKU-12345

Internal SKU code — clean, unique, easy to debug

dress-blue-medium-v2

Human-readable slug with variant context

PROD-2026-001

Sequential identifier scoped by year

Common mistakes

(blank)

Empty ids cause the whole row to be dropped

https://store.com/products/blue-dress

URLs as ids — works on day one but breaks the moment the URL changes

12345

Numeric-only ids are accepted but collide easily with variant ids in pixel events

FAQ

Can I reuse an id after a product is discontinued?

Best practice: don't. Even after a product is removed from the feed, channels retain the id's historical performance data for months. Reusing it for a new product means the algorithm starts the new product with the old product's signal — almost always negative.

Should id match my Shopify variant id, product id, or SKU?

Match whatever your pixel sends in `content_ids`. Shopify defaults to sending variant ids in pixel events, so if your feed uses parent product ids, the pixel and feed never join. Either change the pixel to send product ids, or change the feed to use variant ids — but pick one and be consistent.

What's the difference between id, sku, and item_group_id?

`id` is the unique identifier for one specific item (e.g. medium blue dress). `sku` is the same concept in most channels' alternate naming. `item_group_id` groups variants — the medium blue dress, large blue dress, and small blue dress all share one `item_group_id` but each has its own `id`.

Can ids be numeric only?

Yes, but be careful. Numeric ids can collide with channel-generated variant ids in pixel events, and they're harder to debug at a glance. Prefer alphanumeric with a clear prefix (`SKU-`, `PROD-`, etc.).

Last reviewed: 26 May 2026

Free plan · No card

Why wait? Try it free today.

Stop managing feeds manually. Start optimising with AI in 30 seconds.

  • Free plan, no credit card required
  • 1 brand, 1 feed, 100,000 products per feed
  • Full AI Product Optimisation, Rule Engine, and 200+ channel exports
  • Pay only for AI credits when you need them