Back to blogBarcode scanner used to control inventory and quality for a product feedAI Commerce

    ChatGPT Product Feed: How Merchants Build and Maintain It

    2026-08-30·18 min read

    A product can be perfectly described in your ecommerce store and still reach an AI surface incorrectly. Its name changes between systems, a size disappears from the variant, the price retains an expired promotion, or stock updates hours late. This is not only a content problem. It is a data-contract problem.

    OpenAI documents a structured feed so ChatGPT can index and display products with current price and availability. The Stable specification defines the supported file-upload path; the Google-compatible profile is available only when OpenAI confirms that a registered feed supports it. The OpenAI Merchant Feed Terms also make the merchant responsible for the content and require it to remain complete, correct, and current.

    This guide does not attribute demand to an exact Google Search Console query. The topic is prioritized because the specification and terms published in 2026 create a new operational job for ecommerce teams. The broader strategy for making a store understandable to AI belongs in GEO for ecommerce; here we will build the system that delivers and maintains a valid catalog.

    What a Feed Solves and What It Does Not

    A feed transports product data in a format the recipient can validate. It can declare identity, description, URLs, images, price, availability, variants, and eligibility controls. It also creates an auditable point: every export can be tied to a source, timestamp, version, and processing result.

    It does not replace every other system:

    Layer Job Do not confuse it with
    Product page Explain and convert on your site The file delivered to OpenAI
    Product schema Mark up data on the page A registered, processed feed
    Feed Deliver structured, current catalog data A guarantee of appearance or recommendation
    Measurement Observe what each surface shows Technical upload validation
    Ads and checkout Activate programs with their own rules A non-Ads organic feed

    The schema markup and structured data guide covers the page layer. Keep it aligned with the feed, but do not treat a schema test as proof that OpenAI accepted an upload.

    Start With the Registration and Terms Gate

    Before writing an exporter, confirm through the applicable integration channel:

    1. that a feed is registered for the merchant;
    2. which format and schema that feed accepts;
    3. which markets and currencies are configured;
    4. which delivery method and cadence are agreed;
    5. which merchant identity will be displayed;
    6. which policies and terms the legal owner must review;
    7. which processing history or report will be available.

    Do not assume that a publicly accessible CSV is onboarded just because it exists. The Google-compatible documentation explicitly requires OpenAI confirmation for the registered feed. Preserve that confirmation, the internal owner, and the specification date in the runbook.

    The terms published on June 15, 2026 make the merchant responsible for content, policy compliance, and product legality. They grant OpenAI a license to use the content in its services and state that submission does not require OpenAI to display it. This is an operational guide, not a substitute for legal review of the applicable terms.

    Choose One Schema Contract, Not a Mixture

    OpenAI presents Stable and Draft views. Stable is the supported path for file-upload integrations; Draft is published for planning and feedback, not production. Pin the Stable revision in your internal specification and review any change before updating the exporter.

    If your registered feed supports the Google-compatible profile, the documented path accepts:

    • UTF-8 TXT or TSV delimited by tabs;
    • UTF-8 CSV delimited by commas;
    • the same extensions compressed with gzip;
    • one header row with canonical lowercase field names;
    • one product or variant per row.

    JSON, spreadsheets, XML, RSS, and Atom are not part of that compatibility path. Your source may live in a database or spreadsheet, but it must export one of the accepted delimited formats.

    The Parser Is Selected Per Upload

    The specification says OpenAI samples files, checks the OpenAI schema first, and then the Google-compatible profile when applicable. One parser is selected for the whole upload; it does not switch from row to row. An accepted sample does not guarantee that every row is valid because each product is validated during processing.

    Do not mix OpenAI and Google headers or export files with different contracts in the same upload. Make the preflight reject the batch when headers, delimiter, or encoding do not match the expected version.

    Design the Architecture From the Source of Truth

    A reliable feed does not come from copying what is visible on the website. Build a traceable chain:

    PIM or master catalog -> normalization -> market rules -> validation -> versioned file -> delivery -> processing report -> reconciliation

    Each stage should produce evidence:

    Stage Minimum evidence Typical owner
    Extraction Source version and time Data or catalog
    Normalization Transformation rules and fields Feed engineering
    Validation Errors by row and rule Catalog QA
    Delivery Hash, rows, date, and destination Operations
    Processing Accepted, rejected, and causes Operations + platform
    Reconciliation Differences against source Catalog + ecommerce

    Use a stable item_id or id. Title, URL, and price can change; the key must let you compare the same variant across exports and remove the correct one when it is no longer eligible.

    Cover Required Fields First

    In the Google-compatible profile, OpenAI requires every row to contain:

    Field QA control Failure it prevents
    id Nonempty, stable, and unique Duplicates and lost history
    title Plain text and identifiable product Ambiguous or promotional titles
    description Plain, factual, current text Stale claims
    link Accessible canonical HTTP(S) URL Broken or wrong-market destination
    image_link Public HTTP(S) product image Broken or wrong-variant image
    availability Allowed and coherent value Showing an unpurchasable item
    price Amount and three-letter currency Invalid price or currency
    brand Real, consistent brand Misattributed product entity

    If the product has an identifier, provide a valid GTIN or MPN. Set identifier_exists=no only when no identifier genuinely exists. Include availability_date for preorder or backorder according to the current rules.

    Do not try to fill every optional field before securing required coverage. A controlled launch can begin with one category and market, but it needs measurable coverage without rows that appear successful while omitting critical data.

    Model Variants Without Duplicating Products

    A parent product is not always a sellable unit. Size, color, capacity, or material can change image, price, stock, and eligibility. Export one sellable variant per row and retain stable grouping.

    The compatibility path maps item_group_id to group_id and indicates that the listing has variations. In the Stable schema, group_id, listing_has_variations, and variant_dict express the relationship. Define rules such as:

    • a distinct id for every sellable variant;
    • one shared group_id for the family;
    • normalized values for color, size, and material;
    • a variant-specific image and URL when they differ;
    • independently verified stock and price;
    • an explicit policy for retired variants.

    Do not generate combinations that do not exist. A phantom variant can pass syntax checks and still create an incorrect experience. Compare the exported set with the sellable source set before delivery.

    Treat Price, Promotion, and Availability as Volatile Data

    The terms require information, including price, to remain complete, correct, and current. Turn that obligation into measurable controls.

    For price:

    • use a positive amount and three-letter currency code;
    • verify that the currency belongs to the configured market;
    • require sale_price to be lower than price in the same currency;
    • validate promotion start and end times;
    • remove expired promotions in the next export;
    • compare a sample against the destination page.

    For availability:

    • map only allowed states;
    • require a date for preorder or backorder when applicable;
    • quickly remove or update an out-of-stock SKU;
    • use expiration_date when the lifecycle requires it;
    • record the actual time of the last inventory read.

    Set a freshness objective by risk. Fast-moving stock may need a shorter limit than an editorial description. The meaningful metric is accepted upload time - source change time, not only the scheduled job frequency.

    Validate URLs, Images, and Factual Content

    A row can be formally correct and still send a user to a poor destination. Before delivery, check:

    • valid response from link and image_link;
    • no credentials embedded in URLs;
    • product-page canonical and market;
    • match between image, product, and variant;
    • no placeholders in title or description;
    • coherent brand, model, attributes, and warnings;
    • genuine, lawful, permitted product;
    • sufficient rights to text, images, marks, and other content;
    • no personal data except the narrow case covered by the terms.

    Do not automatically copy reviews, customer names, or third-party content. The terms give the merchant obligations around rights, privacy, warnings, and compliance. Define an allowlist of sources and a specific review for fields that may contain user-generated text.

    Build a Preflight That Fails Before Delivery

    Run validation in layers:

    1. File: encoding, delimiter, header, compression, and size.
    2. Schema: required fields, types, enums, and dependencies.
    3. Row: unique ID, URLs, currency, identifiers, and dates.
    4. Catalog: variants, categories, market, stock, and lifecycle.
    5. Content: accuracy, rights, policies, and warnings.
    6. Reconciliation: exported rows against eligible source rows.

    Produce three outputs: approved batch, quarantined rows, and error report. Do not silently drop rows to achieve a high acceptance rate. If an eligible product is excluded, the report should show its reason, owner, and correction deadline.

    A minimum gate set can be:

    Gate Blocking condition
    Coverage Eligible SKUs are missing without documented exclusion
    Identity Duplicate ID or incoherent variant group
    Offer Invalid price, currency, or stock
    Destination Inaccessible URL or image
    Policy Prohibited product or unconfirmed rights
    Freshness Critical data exceeds the agreed limit

    This article covers the direct feed OpenAI can ingest. If your catalog lives in Shopify, syndication and checkout are handled per channel instead: see the Shopify Agentic Storefronts runbook.

    Reconcile Every Upload Result

    Job success does not equal product acceptance. Preserve for each delivery:

    • file ID and hash;
    • schema revision;
    • extraction, delivery, and processing times;
    • expected, sent, accepted, and rejected rows;
    • errors by code, field, category, and market;
    • products removed or missing from the previous batch;
    • owner and status of every quarantine.

    The documentation says one malformed row can be rejected while other valid rows continue processing. A completed upload can therefore contain partial loss. Calculate coverage over the eligible catalog, not only over the rows the exporter chose to send.

    Use Internal Diffs Even When Delivering Snapshots

    Even if the agreed mechanism delivers a full file, calculate an internal diff against the previous version. Classify additions, identity changes, offer changes, removals, and market movements. An unexpected jump in any class should block or escalate the batch.

    Keep immutable snapshots for the period needed to investigate. Without them, you cannot prove whether an incorrect price originated in the source, transformation, delivery, or processing stage.

    Separate Acceptance, Eligibility, and Appearance

    Do not collapse the funnel into one label:

    State Question
    Source eligible Should the SKU have been exported?
    Exported Was it in the correct file?
    Valid Did it pass internal preflight?
    Accepted Did the platform process the row?
    Eligible Is the relevant use enabled?
    Visible Did it appear in a specific experience?
    Recommended Did an answer propose it for an intent?
    Converted Did it produce an attributable commercial action?

    The SKU-level AI recommendation monitoring guide starts at the later stages and observes answers. This article ends at the delivery contract and its controls. Connecting them supports investigation without claiming that acceptance caused a recommendation.

    Do Not Mix Organic, Ads, and Checkout

    For non-Ads feeds, follow the Required and Optional fields in the applicable specification. Ads uses the same base schema with additional requirements; OpenAI documents is_ads_eligible for products Ads should process. That control does not automatically turn an organic feed into a campaign.

    In the Google-compatible profile, the documentation says accepted products enable search and disable checkout. The broader schema contains separate eligibility flags for search, checkout, and Ads. Use only the values and capabilities agreed for your registered feed.

    The broader journey is covered in AI no longer just recommends, it sells. The rule here is stricter: document each program separately and never present accepted as a synonym for purchasable inside ChatGPT.

    Define an Operational Dashboard

    Measure the system with explicit denominators:

    • exported coverage over eligible catalog;
    • acceptance rate over sent rows;
    • quarantine rate by cause;
    • age of price and availability data;
    • time to accepted upload after a change;
    • feed-to-product-page discrepancies;
    • retired SKUs still present;
    • ungrouped variants or incomplete attributes;
    • repeated errors by pipeline and owner.

    Do not compress these indicators into an opaque score. A 99% acceptance rate can hide the 1% of products that drives margin or a promotion. Report absolute count, percentage, affected categories, and commercial risk.

    Operate Incidents With Cause and Recovery

    Open an incident when a complete upload fails, coverage drops, quarantine rises, the freshness SLO is breached, or a critical price, stock, or policy discrepancy appears.

    The ticket should preserve:

    1. affected batch and version;
    2. first known time;
    3. impacted rows, markets, and categories;
    4. last healthy version;
    5. likely cause and evidence;
    6. containment action;
    7. owner and deadline;
    8. recovery proof in a later upload.

    Do not close the incident because the job reran. Close it when the later batch is accepted, coverage returns to the expected level, and a sample matches the source and destination pages.

    Launch Checklist

    • [ ] OpenAI has confirmed the registered feed, format, and markets.
    • [ ] Legal and policy owners have reviewed the applicable terms.
    • [ ] The exporter uses a documented Stable revision.
    • [ ] Every product or variant has a stable ID.
    • [ ] Required fields have full coverage or an approved exclusion.
    • [ ] GTIN, MPN, and identifier_exists follow verifiable rules.
    • [ ] Variants, groups, images, price, and stock match the source.
    • [ ] URLs respond and lead to the correct market.
    • [ ] Preflight produces a batch, quarantine, and report.
    • [ ] Every delivery retains hash, timing, and counts.
    • [ ] Processing results are reconciled by row.
    • [ ] Freshness SLOs and owned alerts exist.
    • [ ] Organic, Ads, and checkout are measured separately.
    • [ ] Acceptance is not presented as guaranteed visibility.

    FAQ

    Can I reuse my Google Merchant Center feed for ChatGPT?

    Only if OpenAI confirms that your registered feed supports the Google-compatible profile. That path accepts a delimited TXT, TSV, or CSV core subset, not every Google representation or program. Without that confirmation, use the field names and rules in the OpenAI stable schema.

    Which minimum fields does a compatible product feed need?

    In the Google-compatible profile, every row needs id, title, description, link, image_link, availability, price, and brand. You also need a GTIN or MPN when the product has an identifier and availability_date for preorder or backorder. Every URL, currency, value, and dependency must pass the current specification's validation.

    Should I use OpenAI's Stable or Draft schema?

    Use Stable for supported production file-upload integrations. OpenAI publishes Draft for planning and feedback but says it is not yet supported for production integrations. Version your exporter against the stable revision your registered feed actually accepts.

    How often should I update price and availability?

    There is no universal frequency. Set a freshness objective based on price, inventory, promotion, and market volatility, then measure the time from a source change to an accepted upload. An out-of-stock SKU or expired price should be corrected before a low-risk editorial attribute.

    Does an accepted product have guaranteed visibility in ChatGPT?

    No. An accepted row confirms that it passed the applicable ingestion contract, not that it will be displayed, recommended, or ranked. The Merchant Feed Terms allow OpenAI to use the content but do not require OpenAI to use or surface it. Measure acceptance, eligibility, appearance, and commercial outcome as separate stages.

    How do organic feeds, Ads, and checkout differ?

    They are separate controls. A non-Ads feed follows its specification's required and optional fields; Ads uses the same base schema with additional requirements such as is_ads_eligible. In the Google-compatible path, accepted products enable search and disable checkout. Do not present an organic upload as automatic activation of ads or in-ChatGPT purchasing.

    This contract covers the catalog you send to OpenAI. For the transactional side with Google, the UCP ecommerce readiness audit evaluates the /.well-known/ucp profile, the checkout state machine, and the split between token and charge.

    Turn the Feed Into an Observable Contract

    A feed is not an export that someone reviews only after it fails. It is a data product with a source, contract, controls, versions, SLOs, and owners.

    Start with one confirmed category and market. Pin the Stable schema, validate before delivery, reconcile every row, and separate acceptance from appearance. When price, stock, or catalog changes, the system should prove when it happened, which version transported it, and whether the platform accepted it.

    Mentio helps observe mentions, positions, answers, and competitors after delivery. Start measuring your AI visibility and connect catalog state with what AI surfaces actually show.

    Official sources reviewed on August 30, 2026: Products - Agentic Commerce, OpenAI and OpenAI Merchant Feed Terms of Service.

    Want to know if AI mentions your brand?

    Discover your visibility in ChatGPT, Claude and Gemini in minutes.

    Related articles