A product ID / item ID is the stable, unique code you assign to each item or variant in a ChatGPT Ads product feed, and it is the value OpenAI uses to recognize that product across every upload. The title, price, and GTIN describe the item; the product ID names it so the system tracks the same offer over time.
If you sell through ChatGPT Ads, the product ID decides whether price and stock updates attach to the right item or spawn a duplicate catalog entry. Reuse or regenerate those IDs and you can orphan performance history, break conversion tracking, and make a live catalog read as new to OpenAI.
Within a product feed, the product ID / item ID is the primary key that uniquely identifies one sellable offer so ChatGPT Ads Manager can store, match, and update it. It is the value an answer engine keys on to decide which catalog row an ad represents.
Each feed row represents one purchasable item or variant, and the product ID pins that row to a real offer in your store. OpenAI marks it as a required field, so a row without one cannot be displayed. The value can be your internal SKU or any string you control, provided it stays stable and is never reused for another product.
Google Shopping feeds call the same field "id", and manufacturer identifiers like GTIN or MPN sit alongside it as separate attributes. The offer ID is a related concept for a specific sellable offer, so keep the two straight when building product sets and filters. In AirOps, you can track which product ads surface on the prompts you care about and tie that back to your feed items.
Resources: Read best practices for targeting, creative specs, and ad policy in ChatGPT Ads
A product ID works as a lookup key from the moment you build your catalog to the moment an ad reports a conversion. Here is the path it travels.
Assign: give each purchasable item or variant one permanent ID in your catalog, PIM, or commerce platform.
Map: place that value in the item_id field on every feed row before you upload or host the file.
Ingest: ChatGPT Ads Manager reads the feed over a hosted URL or SFTP and keys each product to its ID.
Reference: product filters, product sets, and the generated product ads all point to items by that ID.
Reconcile: on each refresh, OpenAI matches incoming rows to existing products by ID and updates price and stock in place.
The product ID tells you exactly which offer every impression, click, and sale maps to, which is what makes catalog-level reporting possible. It does not confirm the item is eligible to serve; separate eligibility flags and complete content fields decide that.
Getting product IDs right is a buying decision in itself: it determines whether your ChatGPT Ads spend is measured against real inventory or wasted on duplicate and mismatched records. Marketers who treat IDs as disposable pay for it in lost history and broken optimization, and the cost compounds every time the feed refreshes.
Measurement stays intact: stable IDs keep spend, clicks, and conversions attached to the same item across weeks, so your return-on-ad-spend numbers actually mean something and you can compare items fairly.
Duplicates drain budget: when an ID changes, OpenAI sees a new product, resets its learning, and can run two versions of the same item against each other, so you end up paying twice to relearn what you already knew.
Catalogs scale cleanly: a disciplined ID scheme lets you filter products into sets and target ad groups without hand-matching thousands of rows every time your inventory shifts.
SEO managers use product IDs to reconcile their ChatGPT Ads feed with the same catalog that powers organic shopping listings, so both surfaces describe one consistent set of offers.
Growth marketers use product IDs to build product sets and filters that isolate high-margin items into their own ad groups and budgets.
Demand gen leads use product IDs to tie ChatGPT Ads conversions back to specific items, proving which products actually drive pipeline.
A product ID must stay constant for the life of an item or variant, because OpenAI recognizes products by this value and treats any change as a brand-new entry that loses every signal the old one had earned.
Each feed row maps to a single purchasable item or variant, so the product ID has to be granular enough to separate a black size 42 shoe from a blue size 40 without the two values ever colliding in the file.
Beyond the product ID, manufacturer codes like GTIN and MPN help OpenAI confirm that your item is the same product sold elsewhere, which strengthens matching and display eligibility across the catalog.
Keep ChatGPT Ads performance data attached to the right item across every feed refresh.
Prevent duplicate catalog entries that split learning and inflate costs.
Enable product sets and filters so ad groups target exactly the items you choose.
Connect conversions in ChatGPT Ads back to individual SKUs for cleaner reporting.
Reuse one disciplined ID scheme across OpenAI and Google Shopping feeds.
Assign a permanent ID to every item and variant before you build the feed, so nothing ships without one.
Derive IDs from a system of record like your PIM or commerce platform, so they stay consistent as the catalog grows.
Keep each ID unique to a single offer, so a color or size variant never shares a value with another.
Retire an ID with the product and never recycle it for something new, so history stays clean.
Mirror the same IDs across your ChatGPT Ads and Google Shopping feeds, so reporting lines up across channels.
Validate the item_id field on every row before upload, so a missing value never drops a product from display.
Avoid regenerating product IDs during a platform migration or feed rebuild. Competent teams do this to produce clean export files, but to OpenAI it reads as a full catalog turnover that wipes performance history and forces matching to start over.
AirOps: tracks which product ads appear on the ChatGPT prompts you care about and connects that activity to the items in your feed.
ChatGPT Ads Manager: OpenAI's console where you upload or host the product feed and the item_id field is read, validated, and matched.
Google Merchant Center: manages the Shopping feed whose "id" field maps to your ChatGPT Ads product ID, giving you one identifier source to reuse.
Audit your IDs: export your current catalog and confirm every item and variant already carries a unique, stable identifier you can reuse. You can do this today from your existing store data, with no budget approval needed.
Pick a source of truth: decide which system, usually your PIM or commerce platform, owns the canonical ID so every downstream feed pulls the same value and nothing drifts.
Map to the feed: place that identifier in the item_id field and line up the other required fields OpenAI expects on each row before you validate the file.
Host and upload: publish the feed to a hosted URL or SFTP in ChatGPT Ads Manager so items refresh automatically instead of expiring after a manual upload.
Build on the IDs: use the stable IDs to create product sets, apply filters, and launch product feed campaigns against the exact items you want to promote.
A product ID / item ID is the stable, unique key that identifies each item or variant in a ChatGPT Ads product feed.
You set it in the item_id field on every feed row and OpenAI uses it to match products across uploads.
The core constraint is permanence: an ID must stay fixed and never be recycled for a different item.
The main risk is regenerating IDs, which orphans performance history and spawns duplicate products.
The leverage is clean identity, which powers product sets, filters, and trustworthy conversion reporting.
A product ID is the identifier you assign to a specific sellable item in your feed, while a GTIN is the global barcode number a manufacturer or GS1 registers for that product, and an offer ID points to a particular offer on that item. They answer different questions. The product ID is how OpenAI tracks your row across uploads and attaches performance to it. The GTIN helps OpenAI confirm your item matches the same product sold elsewhere, which can strengthen display eligibility, though many products have no GTIN and the field can be left empty. The offer ID becomes useful when one item carries several distinct offers, such as a rental and a sale. Keep the product ID as your durable internal key, treat the GTIN as external corroboration, and reach for offer IDs only when a single item genuinely has multiple commercial offers to separate.
Almost never. The whole point of a product ID is permanence, so the right cadence for changing one is close to zero for the life of the item it names. You update the other fields in that row as often as your prices and stock move, sometimes several times a day, but the ID itself should hold steady while the product exists. Change it only when the underlying item genuinely becomes a different product, for example a new model that replaces the old one, and in that case you assign a fresh ID and let the old one retire with the discontinued item. If you find yourself rewriting IDs during routine feed rebuilds or platform migrations, that is a process problem to fix, because each change makes OpenAI treat a known product as new and resets everything attached to it.
Because OpenAI matches products by the product ID itself and ignores file name or row position, a stable ID is what lets the system recognize the same item from one upload to the next. When the ID holds steady, every price change, stock update, impression, click, and conversion stacks onto one continuous record. When it changes, that chain breaks: OpenAI sees a product it has never encountered, starts its learning over, and can leave the old entry lingering as a duplicate. This is why variance in IDs is so costly even when the underlying catalog has barely moved. Feeds that regenerate identifiers on every export, or that derive them from volatile values like URLs or positions, create churn that looks like constant catalog turnover. A product ID sourced from a stable system of record avoids that, keeping your reporting and optimization intact across weeks and months of feed refreshes.
Yes, and you should. OpenAI lets you decide the product ID values, so you control the scheme as long as each one is unique within the feed and stays stable over time. Most merchants use their existing SKU or an internal catalog code, which keeps the ChatGPT Ads feed aligned with the systems they already run. The freedom comes with responsibility: because you own the values, you also own the discipline of never reusing or regenerating them. A good practice is to let one system, usually your PIM or commerce platform, mint the canonical ID so every feed and channel pulls the same value. Steer clear of letting a feed tool invent IDs on the fly, since those tend to shift whenever the export logic changes. You have direct influence here, which means a few minutes of planning up front saves you from the matching problems that undisciplined IDs cause later.
A good product ID is unique, stable, and tied to a single purchasable item or variant, which is the benchmark every feed should meet before it goes live. Practically, that means one value per offer, derived from a durable source like your SKU, with no duplicates anywhere in the file and no reuse after an item retires. Length and format matter less than consistency; a short internal code works as well as a long structured string as long as it never changes. You can sanity-check your feed by confirming that every row has a non-empty item_id, that no two rows share one, and that the IDs match what your system of record holds. If those three conditions hold across the whole catalog, your IDs are in good shape. The failure signs are blank identifiers, collisions between variants, and values that drift each time you regenerate the feed.