Product Feeds for AI

How to build and audit a product feed AI shopping agents can read and transact against — the three formats (Merchant Center, OpenAI ACP, schema.org), real-time accuracy, and the feed-quality failures that break agentic checkout.

First published: Jul 3, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #6 in AI Commerce#33 in Ecommerce SEO#426 on the site

A product feed for AI is the structured data file — identifiers, price, availability, policies — that AI shopping agents read directly. There's no single universal 'AI feed': OpenAI's docs describe the feed as the way you supply ChatGPT commerce data with no stated crawling fallback, while Google's docs describe combining crawling, on-page structured data, and your Merchant Center feed together. Serious merchants reconcile three parallel formats: the Google Merchant Center feed (which now has six optional AI-facing Conversational Attributes), OpenAI's ACP feed spec (Parquet/JSONL by SFTP, a daily full snapshot plus an intraday API for price/stock/promos), and schema.org Product/Offer markup as a cross-verification channel. Identifiers (GTIN, or brand + MPN) are the backbone across all three — never fabricate one. The thing that's genuinely different from Shopping-ads feed work is tolerance for staleness: a human double-checks a price on the page before buying, but an agent commits programmatically, so a feed/checkout price mismatch or phantom stock is a real risk to the transaction. One myth to drop: OpenAI's docs don't state a '15-minute update' rule — the documented model is a daily snapshot plus an intraday API. Instant Checkout in ChatGPT is currently partner-approved, not open to everyone. And feed quality gets you discovered and eligible; it doesn't guarantee conversion.

TL;DR — There’s no single universal “AI feed” — each provider’s contract differs. For ChatGPT’s commerce flows, OpenAI documents the feed as the way you supply product data, with no stated crawling fallback; Google’s own docs describe combining crawling, on-page structured data, and your Merchant Center feed together, not one replacing the other. Reconcile three formats: the Google Merchant Center feed (now with six optional AI-only Conversational Attributes), OpenAI’s ACP feed spec (Parquet/JSONL over SFTP — a daily full snapshot plus an intraday API for price, stock, and promotions), and schema.org Product/Offer markup as a cross-verification layer. Identifiers (GTIN, or brand + MPN) are the backbone across all three; never fabricate one. The real differentiator versus a Shopping-ads feed is staleness tolerance: a human double-checks a price before buying, an agent commits programmatically — so feed/checkout price mismatch, phantom stock, a missing return policy blocking checkout eligibility, or an unstable item_id is a real risk to the transaction. Drop the “OpenAI requires 15-minute updates” claim — it isn’t in OpenAI’s docs. Instant Checkout is currently partner-approved, not open to everyone. And feed quality drives discovery and eligibility, not conversion.

Evidence for this claim OpenAI publishes a merchant product-feed specification for supplying structured catalog data to supported commerce experiences. Scope: OpenAI commerce integrations; a feed supplements rather than universally replaces crawled pages. Confidence: high · Verified: OpenAI Commerce: Product feeds Evidence for this claim Google Merchant Center product data uses identifiers, price, availability, and other attributes to represent offers in Google surfaces. Scope: Google Merchant Center; requirements vary by destination, country, and product type. Confidence: high · Verified: Google Merchant Center: Product data specification

There’s no one universal “AI feed” — providers differ

I keep coming back to one framing because it reorganizes everything else, but it needs a caveat I didn’t give it strongly enough before: this isn’t one universal behavior, it’s a provider-specific contract.

For ChatGPT’s commerce flows, OpenAI’s own docs describe the feed as the way merchants supply product data — there’s no documented fallback to crawling your rendered page for that flow. For Google, it’s genuinely different: Google’s Search Central docs are explicit that Google combines crawling, on-page structured data, and your Merchant Center feed — “Google may at times use other approaches to extract data from pages” alongside both of the others — so the feed doesn’t replace your HTML there, it’s one of three channels Google cross-checks against each other. The Agentic Commerce Protocol piece covers the ACP-specific mechanics in depth and I won’t re-derive that here. This article is the practical layer under it: what you actually put in the file, across the formats that matter, and what breaks a sale when you get it wrong.

The mechanism is still worth stating plainly because it changes your priorities, even with that caveat. Jason Barnard put it well in his AI-engine pipeline piece: structured feeds — Google Merchant Center and OpenAI’s Product Feed Specification — “bypass discovery, selection, crawling, and rendering altogether, delivering your content to the competitive phase with minimal attenuation.” That’s Barnard’s own framing of how a good feed can skip most of the SEO funnel, not a claim either platform makes in its docs — but it’s a useful mental model. The downside is that everything now rides on data quality, and there’s no rendered page for a human to sanity-check against mid-transaction the way there is with a search result.

Three formats, not one

A serious merchant doesn’t choose between these — they run all three at once, because each reaches a different set of agents and they cross-verify each other.

Google Merchant Center feedOpenAI ACP feed specschema.org Product/Offer
OwnerGoogleOpenAI (Agentic Commerce Protocol)Schema.org (open vocabulary)
Primary consumerShopping Graph → Shopping ads, free listings, AI Overviews, AI Mode, GeminiChatGPT search + Instant CheckoutAny crawler/agent reading page markup
FormatXML, TXT/CSV, Sheets, or Content APIParquet (zstd) preferred; jsonl.gz, csv.gz, tsv.gzJSON-LD (or Microdata/RDFa) in page HTML
DeliveryScheduled fetch, upload, or Content APISFTP push; stable filenames, overwriteRendered in the page, server- or client-side
IdentifiersGTIN where it exists, else brand + MPNgtin recommended; mpn fallbackgtin/gtin13/mpn/sku properties
FreshnessDaily minimum; hourly/API for fast moversFull snapshot ≥ daily + intraday APINo cadence defined — depends on page freshness
CheckoutFeeds listings; checkout happens elsewhereis_eligible_checkout + Agentic Checkout APIcheckoutPageURLTemplate routes an agent
Owned in depth on this sitemerchant-center-feed-optimizationagentic-commerce-protocolthis article

The synthesis point: these aren’t competing choices. Google explicitly blends feed data and on-page structured data — “Providing both structured data on web pages and a Merchant Center feed maximizes your eligibility to experiences and helps Google correctly understand and verify your data,” and some experiences will pull, say, pricing from your feed when it’s missing from your markup. Which also means a mismatch between the two — feed price says one thing, on-page schema says another — is a trust-erosion and disapproval risk in every one of these systems. Google/Shopify’s UCP leans on the same Merchant Center feed as its data backbone, so this work pays off there too.

The OpenAI ACP feed spec, field by field

This is the part most competing write-ups paraphrase secondhand. Here’s what OpenAI’s own product-feed spec actually requires (verified against the live docs):

Required fields

  • item_id — max 100 chars, and it must stay stable over time. This is the continuity key between snapshots; change it and the agent thinks the old product vanished and a new one appeared.
  • title — max 150 chars, avoid all-caps.
  • description — max 5,000 chars, plain text only.
  • url — must resolve 200; HTTPS preferred.
  • brand — max 70 chars.
  • image_url — JPEG/PNG, HTTPS preferred.
  • price — with an ISO 4217 currency code.
  • availability — enum: in_stock, out_of_stock, pre_order, backorder, unknown.
  • seller_name (max 70), seller_url.
  • target_countries and store_country — ISO 3166-1 alpha-2.
  • is_eligible_search — boolean, defaults false. You have to explicitly flip this to true to appear in ChatGPT search at all.
  • is_eligible_checkout — boolean; requires is_eligible_search = true.

Conditional requirements

  • availability_date is required if availability = pre_order.
  • seller_privacy_policy and seller_tos are required if is_eligible_checkout = true.
  • A return policy is required for checkout eligibility.

One scope caveat worth flagging: flipping is_eligible_checkout to true makes a product checkout-eligible in the feed, but it doesn’t by itself get you into ChatGPT checkout. Per OpenAI’s own docs, Instant Checkout in ChatGPT is currently limited to approved partners — you apply to participate — and even once approved, the merchant (not OpenAI) still performs order validation, determines fulfillment, calculates and charges tax, runs its own risk checks, charges the payment method through its own processor, and accepts or declines the order. OpenAI’s UI renders the session; your systems still own the transaction.

Field list confirmed live against the current spec on 2026-07-18. This schema is dynamic and versioned, though, so treat this as a snapshot, not a permanent list — recheck the live required-field table before you build to it, especially months from now.

Identifiers. gtin (numeric, 8–14 digits, no dashes or spaces — it accepts GTIN/UPC/ISBN in one field) is optional but strongly recommended; mpn (alphanumeric, max 70) is the fallback when GTIN is unavailable. Neither is “required” the way brand is, but OpenAI’s framing is that supplying them improves catalogue matching and reduces errors — functionally the same logic as Google’s GTIN-or-brand+MPN rule, just phrased as a strong recommendation.

The “15-minute update” myth — what OpenAI actually documents

Here’s a number I couldn’t verify, and I’d rather flag it than repeat it. Across trade coverage — and, I’ll admit, in an earlier version of our own ACP article — you’ll see the claim that OpenAI requires feeds to update every 15 minutes. I went looking for it in OpenAI’s current commerce docs and couldn’t find that figure stated anywhere.

What the docs actually describe is a two-channel model, not a flat interval:

  • A full feed snapshot at least once a day, delivered as a file upload over SFTP using stable filenames that you overwrite (not versioned new files each time).
  • An API channel for intraday incremental updates — this is how price, stock, and (specifically) promotions changes propagate faster than the daily snapshot. Promotions data is API-only.

OpenAI’s own wording is roughly: provide the entire feed once a day via file upload, then send updates throughout the day via the API. There’s no separate “delete” call either — to pull a product you set is_eligible_search = false or drop it from the next full snapshot.

So “15 minutes” is best treated as a practitioner rule-of-thumb for how fresh your fast-moving SKUs should be, not a documented OpenAI requirement. The spec is versioned and moving fast, so check the current version before you quote any number — but the mechanism you should actually build for is daily snapshot + intraday API, and that’s more useful than the myth anyway.

Why real-time accuracy is non-negotiable for agents

This is the real difference between AI-feed work and Shopping-ads-feed work, and it’s worth being precise about why. A cached search snippet tolerates a little staleness because there’s a human in the loop who lands on your page and re-checks before paying. An agent completing a transaction has no such buffer — it acts on the price and stock state your feed asserts, so a stale value there is a real risk to the transaction in a way a stale search snippet isn’t. No official spec states that every stale value automatically breaks every transaction, and providers add validation steps of their own on top of the feed — but the mechanism itself (no human re-check before committing) is exactly why freshness matters more here than it does for an ad snippet.

Kate Ragotte, in Shopify’s enterprise guidance on preparing product data for AI channels, puts the consequence bluntly: “Price, availability, and return windows must be accurate and synced across every channel where they appear. Inconsistent or stale data is one of the fastest ways to get filtered out.” And on why structure matters at all: “AI agents can only recommend what they can understand, and that depends entirely on how well-structured your product data is” — machines can technically find loosely-structured information, “but they won’t confidently act on it. AI agents prefer structured, labeled data they can extract and trust.”

That’s the whole game: the agent has to trust the number enough to transact on it. The daily-snapshot-plus-intraday-API model is OpenAI’s concrete answer to closing the gap; on the Google side it’s the Shopping Graph, which Google says now includes “more than 50 billion product listings, 2 billion of which are updated every hour” — that hourly refresh benchmark is the pace the system expects your data to move at. (The Shopping Graph as a system is its own topic; this article just assumes your feed populates it.)

Google’s Conversational Attributes — the concrete “new for AI” layer

On the Google side, the specific thing that’s new for AI is a set of optional Merchant Center attributes announced at Google Marketing Live in May 2026, covered by Search Engine Land. The point of them is that Google’s AI systems “use that structured data to better match products with conversational shopping queries across AI Mode, Gemini and other AI-powered surfaces.” Google’s own attribute-help wording, as reported, is that these are “primarily intended for use in conversational experiences such as AI Mode in Google Search.”

Google’s Merchant Center Help documents six conversational attributes: question and answer, document link, related product, item group title, variant option, and popularity rank. product_highlight and product_detail are existing, pre-existing complementary fields — not two additional members of the new conversational set, despite that being how some trade coverage (including an earlier version of this article) grouped them.

Evidence for this claim Google currently documents six conversational attributes—question_and_answer, document_link, related_product, item_group_title, variant_option and popularity_rank—as optional complements to primary product data; product_highlight and product_detail are existing fields, not two additional conversational attributes. Scope: product data Confidence: high · Verified: How to use conversational attributes

Google is explicit that these are optional and that adding them doesn’t affect your existing product-approval status; the framing is that they can help product understanding and discovery in conversational surfaces, not that they’re required or that they guarantee inclusion, ranking, or citation in any AI Mode/Gemini response.

Evidence for this claim Google says adding conversational attributes does not affect existing product approval status and can help product understanding or discovery; this is not a guarantee of AI Mode inclusion, ranking or citation. Scope: product data Confidence: high · Verified: How to use conversational attributes Attribute count and names confirmed against this site’s research packet (sourced from Google’s live Merchant Center Help page, captured 2026-07-16). A direct same-day refetch of support.google.com’s conversational-attributes page was attempted for this pass and blocked by Google’s bot-detection each time — treat this as verified against a recent capture rather than a same-day live refetch, and recheck before quoting exact wording.

Frame these as enrichment, not a replacement. They sit on top of your required attributes. If your base feed is disapproved for a bad price or a fabricated GTIN, a beautiful Q&A attribute doesn’t save you.

schema.org Product/Offer as the agent-facing markup layer

There is no “AI edition” of schema.org — the properties agents rely on are ordinary ecommerce vocabulary being read by a new class of consumer. Three matter most:

  • Offer.availability — “The availability of this item — for example In stock, Out of stock, Pre-order, etc.” The stock state an agent reads from your markup.
  • Offer.checkoutPageURLTemplate — “A URL template (RFC 6570) for a checkout page for an offer.” This is the property that lets an agent route a shopper to a pre-filled checkout from your markup alone.
  • Offer.acceptedPaymentMethod — the payment methods you accept, which an agent may check before attempting a transaction.

Keep this markup’s price and availability in lockstep with your feed. Google blends the two and cross-verifies them, so a divergence between on-page schema and feed is exactly the kind of inconsistency that erodes trust across all these surfaces.

Feed-quality failures that break agentic discovery and checkout

This is the practical payoff. These are the specific things that break an AI sale — not just an ad disapproval:

  1. Feed/checkout price mismatch. The feed says $40, checkout says $45. For ads it’s a disapproval; for an agent mid-transaction it’s a broken purchase.
  2. Phantom or stale stock. in_stock in the feed, sold out at checkout. The agent commits to buying something that isn’t there.
  3. Missing or wrong identifiers. No GTIN/MPN, or a fabricated one, causes the agent to mismatch you against the wrong product across formats. Google’s rule: don’t make up, guess, or copy identifiers from similar products; use identifier_exists = false for genuinely identifier-less goods.
  4. Missing return policy or seller ToS. In the ACP spec these are required for is_eligible_checkout = true. Omit them and you’re discoverable but can’t transact.
  5. Unstable item_id/SKU. If the identity key changes between snapshots, the agent loses continuity — the old product looks deleted and the new one looks unknown, wiping any accumulated matching.
  6. ALL-CAPS or promotional text in titles. A policy violation across Google and OpenAI alike (OpenAI’s spec says avoid all-caps outright).
  7. AI-generated images or descriptions with drift. Descriptions that invent specs not on the landing page, or AI-generated images missing required IPTC disclosure metadata, break the cross-verification between feed and page. (The feed-optimization guide covers the “don’t invent facts” rule in depth.)

What feed quality does and doesn’t guarantee

One honest caveat so you don’t overclaim internally: a great feed gets you discovered and eligible. It does not guarantee conversion. Walmart’s own reported experience is the cleanest data point here — per Search Engine Land, its in-chat ChatGPT checkout converted at roughly one-third the rate of click-out transactions after testing around 200,000 items. Read the reporting carefully: the cited cause was checkout UX and trust (fear of split shipments, single-item-only checkout) — not feed data staleness. So don’t use it as evidence that feeds fail; use it as the reminder that getting into the feed is necessary, not sufficient. Discovery and checkout conversion are separate problems.

It’s worth keeping the whole chain separate in your head, because “my feed is accepted” answers a much narrower question than it sounds like: ingestion (the platform accepted your file) is not validation (it passed the field/policy checks), which is not eligibility (is_eligible_search/is_eligible_checkout are set and approved), which is not display (an agent actually surfaces the product), which is not ranking or citation (it’s the one recommended), which is not checkout approval (you’re an approved Instant Checkout partner), which is not conversion (the shopper buys). A clean feed raises your odds at every step; it doesn’t collapse the chain into one guaranteed outcome.

Where this fits

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin an expert quote first.