An Offer ID is the unique identifier a retailer assigns to each product in a shopping feed, and in ChatGPT Ads it is the handle that ties a catalog item to its ads, clicks, and conversions. It is not the product's title, GTIN, or landing page URL; it is the stable identifier that stays constant even when those details change.
If you run product feed campaigns in ChatGPT Ads, your Offer IDs decide whether performance data maps back to the right products or scatters across duplicates you can't optimize. Get them wrong and you lose the ability to see which items sell, pause poor performers, or reconcile spend against revenue.
The Offer ID functions as the primary key for a single product across a retailer's shopping feed and its ChatGPT Ads campaigns. When you upload a catalog, every item carries an Offer ID that the platform uses to match reporting, billing, and eligibility back to that exact product. Because it stays fixed, you can update a title, price, or image without breaking its performance record.
An Offer ID is a string you control, usually the SKU or internal code you already send to Google Merchant Center. For it to work, each value has to be unique within the feed and stable over time. ChatGPT Ads, which uses a feed structure close to Google Shopping, reads the Offer ID alongside the content language and feed label to build the full product reference it stores.
The Offer ID sits below the campaign and above the individual ad: campaigns set budget and targeting rules, while the Offer ID identifies the product each generated ad points to. Keeping these identifiers clean is what lets AirOps and other visibility tools connect the products you advertise to how often answer engines surface your brand.
Resources: see how to structure and launch ChatGPT Ads campaigns that actually perform
An Offer ID earns its value through the feed lifecycle, from the moment you assign it to the moment it shows up in a conversion report. Here is the sequence it runs in.
Assign: You give each product a unique Offer ID in your catalog, usually reusing the SKU already in your Google Merchant Center feed.
Ingest: ChatGPT Ads reads the feed and indexes every product by its Offer ID, combining it with language and feed label to form the full reference.
Match: When a shopper's question signals buying intent, the system matches a relevant product and generates a sponsored card tied to that Offer ID.
Track: Clicks, impressions, and conversions are recorded against the Offer ID, so each metric rolls up to the right item.
Reconcile: You pull reporting by Offer ID to compare spend and revenue per product, then adjust eligibility or bids.
Reporting keyed to the Offer ID tells you which products drive clicks and sales. It does not tell you why a product underperforms; for that you still need creative, pricing, and landing page analysis.
Whether you commit budget to ChatGPT Ads partly depends on whether you can trust the numbers coming back, and that trust rests on clean Offer IDs. When identifiers are unique and stable, every dollar of spend attaches to a real product you can evaluate. Get the identifiers right once and the rest of your reporting stays reliable as the catalog changes.
Accurate attribution: Offer IDs are how spend, clicks, and conversions map to specific products, so you can judge return at the item level instead of guessing from campaign totals.
Clean optimization: With stable IDs you can pause losers and scale winners confidently; duplicate or shifting IDs split one product's data into fragments that each look too small to act on.
Feed portability: Reusing the Offer IDs already in your Google Shopping feed lets you launch in ChatGPT Ads without rebuilding your catalog or reconciling two identifier systems.
SEO managers use Offer IDs to align the product identifiers in their ChatGPT Ads feed with the ones already indexed for organic shopping results.
Growth marketers use Offer IDs to isolate which catalog items drive profitable conversions and shift budget toward them.
Demand gen leads use Offer IDs to reconcile ChatGPT Ads spend against revenue in the same product-level reporting they use for other channels.
An Offer ID must be distinct for every product in the feed, because the platform treats two items that share an ID as the same offer and silently merges their clicks, spend, and conversions into one record you cannot trust.
The value should stay constant across every feed update, since changing an Offer ID creates a brand-new record in the system and cuts the product off from the performance history it built under the old identifier.
The Offer ID only resolves to a specific product when it is combined with the content language and feed label, and those three values together form the full product reference that ChatGPT Ads stores and reports against.
Attribute clicks, spend, and conversions to individual products instead of whole campaigns.
Reuse the same identifiers you already send to Google Merchant Center, so launching in ChatGPT Ads takes little extra feed work.
Spot underperforming items fast and pause or re-bid them before they drain budget.
Keep performance history intact when you refresh titles, prices, or images.
Connect paid product visibility to organic shopping presence through one consistent identifier.
Reuse your existing SKUs as Offer IDs so the same identifier spans your Google Shopping feed and ChatGPT Ads, keeping reporting consistent across channels.
Lock each Offer ID once assigned, because changing it orphans the product's history and restarts its performance record.
Keep every value unique, since duplicates cause the platform to merge separate products into one unreadable row.
Avoid encoding changeable data like price or season into the ID, so you never have to alter it later.
Audit your feed for duplicate or missing IDs before launch, catching problems before they corrupt live reporting.
Document your ID scheme so everyone touching the catalog assigns new values the same way.
Avoid treating the Offer ID as a throwaway field generated fresh on each export. Competent teams often let their feed tool mint new IDs every sync, which quietly resets performance history and makes week-over-week comparison impossible.
AirOps: tracks whether ChatGPT and other answer engines surface your brand and products when shoppers ask buying questions, connecting feed presence to AI visibility.
Google Merchant Center: the catalog hub where most retailers assign and manage the offer IDs they reuse for ChatGPT Ads feeds.
Shopify: syncs your product catalog, including each item's identifier, into ChatGPT Ads Manager so Offer IDs stay consistent with your store.
Inventory your IDs: Open your existing product feed and confirm every item already carries a unique, stable identifier you can reuse. This takes an afternoon, needs no budget, and tells you whether your foundation is already solid.
Standardize the scheme: Decide on one naming convention, usually your SKU, and remove any IDs that encode price, stock, or seasonal data likely to change over time.
Deduplicate and clean: Scan the feed for repeated or blank Offer IDs and fix them, since these corrupt reporting the moment your campaigns go live.
Map to ChatGPT Ads: Connect your catalog to ChatGPT Ads Manager, confirming the Offer ID field maps correctly to the identifier you standardized, so no products get dropped or mismatched.
Validate reporting: After a short test run, pull performance by Offer ID and check that clicks and conversions land on the right products before scaling spend.
An Offer ID is the unique, merchant-assigned identifier that ties each product in a shopping feed to its ChatGPT Ads performance.
Performance is read by pulling clicks, spend, and conversions grouped by Offer ID at the individual product level.
The main constraint is that every ID must be both unique and unchanging for the data to hold together.
The biggest risk is auto-generated or duplicated IDs that silently scramble reporting and erase history.
The leverage sits in reusing your existing Google Shopping identifiers, which turns feed hygiene into reliable cross-channel measurement.
An Offer ID is the identifier you assign, while a GTIN is a global barcode number tied to the manufactured product itself. You control the Offer ID, so it can be your internal SKU or any unique string, and it stays yours even if you sell the same item as another retailer. A GTIN, by contrast, is shared by every seller of that exact product and comes from the manufacturer; you do not create it. In ChatGPT Ads, the Offer ID is what the platform uses to track and report your specific listing, and the GTIN helps match your product to a broader catalog of known items. You need both doing different jobs: the Offer ID keeps your reporting clean and unique to your account, and the GTIN improves how accurately the platform understands what you are selling. Treat the Offer ID as your private key and the GTIN as a public product fingerprint.
Change your Offer IDs as rarely as possible, ideally never once a product is live. The whole value of the identifier comes from staying fixed, so the right cadence for changing it is close to zero. You will update other feed attributes like price, availability, title, and images frequently, sometimes several times a day, and none of those edits should touch the Offer ID. The only time a new Offer ID is appropriate is when you genuinely add a new product that has never existed in your catalog before. Retiring a product means marking it unavailable and keeping its existing ID in place. If you find yourself wanting to change an existing ID, that usually signals a problem upstream, such as a feed tool regenerating identifiers on every export. Fix that process instead of accepting churn, because each changed ID resets the product's performance history and breaks any trend you were tracking.
Offer IDs usually change on their own because something in your feed pipeline is generating them dynamically instead of pulling a stored, permanent value. Common causes include a feed management tool configured to hash product attributes into an ID, a platform export that renumbers rows sequentially, or a catalog migration that reassigns identifiers in bulk. The variation is rarely random; it traces back to a rule somewhere that treats the Offer ID as derived data when it should be a fixed key. Seasonal catalogs make this worse, since products that drop out and return can get fresh IDs each time. Multi-region setups add another layer, because the same product under different feed labels can look like separate offers. To find the source, export two consecutive feeds and compare the ID column row by row. Wherever values shift for products you did not intend to change, that is the process you need to pin down and lock to a stable source field.
Yes, you set your Offer IDs directly; they are one of the few feed values entirely under your control. ChatGPT Ads reads the identifier you provide in your product feed and does not overwrite it or assign its own, so whatever you submit is what the platform tracks against. That control is exactly why discipline matters: because no one else enforces uniqueness or stability for you, the quality of your IDs is entirely your responsibility. You decide the naming scheme, whether to reuse your Google Shopping SKUs, and how new products get numbered. The one thing you cannot control is how the identifier behaves after it reaches the platform, meaning you cannot merge two IDs into one history retroactively or recover the history of an ID you already abandoned. So the practical answer is that you have full control going forward and almost none looking backward, which is why getting the scheme right before launch pays off more than any later cleanup.
A healthy set of Offer IDs is one hundred percent unique, fully stable across syncs, and consistent with the identifiers you use elsewhere. Concretely, that means zero duplicate values, zero blank or missing IDs, and no change in any product's ID from one feed export to the next unless you deliberately added a new item. A good scheme also uses the same SKU across your Google Shopping feed and ChatGPT Ads, so a product carries one identity everywhere you sell it. Length and format matter less than consistency; a clean set might use short numeric SKUs or structured alphanumeric codes, as long as every product follows the same pattern. The practical benchmark is simple: if you can export two consecutive feeds and diff the ID column with no unexpected changes, and if every row has a populated, unique value, your Offer IDs are in good shape. Anything short of that is a reporting risk waiting to surface.