Opens in a new tabSkip to content
Agent LighthouseAgent Lighthouse

    Searches the text of every published page. The evidence sources themselves are not in this index — search all of them on the trusted sources page.

    GitHub ↗
    Browse checks and page contents
    agentic-commerce/checkout-offer-field-mapping

    Checkout-eligible offer field mapping

    What it checks

    Audits one product page against the required fields of the OpenAI product feed spec that a product page can supply, plus the format rules the spec states for those fields. The merchant learns why a row would be rejected or misread before uploading a feed.

    The page judged is the first scanned product page that carries Product markup. Other product pages are not judged here. machine-discovery/agent-commerce-feed-parity reports field coverage across the sampled product pages instead.

    The url field must be an absolute HTTP or HTTPS URL. It is taken from the Product url, or from the page address when the markup has none. It is not compared with the page’s canonical link. The spec asks for the product page with the variant selected, so a variant URL such as ?variant=123 whose canonical names the parent product is a valid row.

    Why it matters

    The OpenAI format requires nine fields on every row: item_id, title, description, url, brand, seller_name, image_url, availability and price. Price is a decimal amount with an uppercase ISO 4217 code. Availability is one of five enum values. An omitted, empty or unrecognised availability rejects the row. A sale price that is not strictly below the regular price is not used. A GTIN, when supplied, must be 8, 12, 13 or 14 digits with a valid check digit.

    Validation is row-by-row, so one product can be rejected while the rest of the feed processes. A product page that cannot supply these values forces the merchant to hand-author or scrape them, which is where price mismatch enters. Disproof condition: rows with no availability, or with a price that has no ISO 4217 currency, being accepted into discovery.

    Evidence

    • OpenAI Product Feed Specification — OpenAI (vendor-doc, URL verified 2026-10-17)
    • The Stable schema, OpenAI format, lists nine required fields: item_id, title, description, url, brand, seller_name, image_url, availability and price.
    • Titles and descriptions: “aim for at most 150 and 5,000 characters, respectively”. The Google-compatible profile states the same numbers as limits.
    • item_id and brand carry no character limit.
    • Availability is in_stock, out_of_stock, pre_order, backorder or unknown. “Omitted, empty, or unrecognized values reject the row.”
    • Price is written as a decimal amount, a space and an uppercase three-letter ISO 4217 code.
    • sale_price must be “strictly less than price”. A higher or equal sale price “is not used”.
    • gtin and mpn are optional in the OpenAI format. A supplied gtin must be exactly 8, 12, 13 or 14 digits with a valid check digit.
    • “gtin or mpn unless identifier_exists=no” and “availability_date required for preorder and backorder” apply only to the Google-compatible profile. The OpenAI format says availability dates do not schedule stock changes.
    • target_countries is optional and needs market setup. Standard uploads target the US.
    • seller_privacy_policy and seller_tos are conditionally required for checkout.
    • URLs are absolute HTTP or HTTPS; HTTPS is preferred: “Use UTF-8 text and absolute HTTP or HTTPS URLs; prefer HTTPS.”
    • The url field reads: “Product detail page for the item, with the variant selected when possible. Keep it stable.” Its example carries variant parameters: https://example.com/products/trail?color=black&size=10. Each variant row “carries its own price, availability, URL, and images.” No rule ties url to the page’s canonical link (verified 2026-10-17).
    • “A malformed row can be rejected while valid rows continue processing.”
    • Merchant listing (Product) structured data — Google (vendor-doc, URL verified 2026-08-20)
    • Required: name, image, offers; within offers price (or priceSpecification.price) and priceCurrency (3-letter ISO 4217). Recommended: gtin|gtin8|gtin12|gtin13|gtin14, mpn, sku, availability, priceValidUntil (ISO 8601), itemCondition, url, validFrom/validThrough, hasMerchantReturnPolicy, shippingDetails (OfferShippingDetails), aggregateRating, review, description, brand. Policies are recommended at Organization level.
    • OpenAI Agentic Commerce documentation index — OpenAI (vendor-doc, URL verified 2026-08-20)
    • Four specs: Product Feed (specs/spec.md), Agentic Checkout (specs/checkout.md), Delegated Payment (specs/payment.md), Feeds API (specs/api/feeds.md). Feed delivery via API (products, promotions endpoints) or File Upload/SFTP. No public feed-URL convention and no discovery file is defined. Feeds let ChatGPT ‘accurately index and display your products with up-to-date price and availability’.
    • OpenAI Commerce: Get Started (feed onboarding) — OpenAI (vendor-doc, URL verified 2026-08-20)
    • Product feed onboarding in ChatGPT is currently limited to approved partners via an application form. Confirms feed ingestion is push/upload-based (file upload or API), not a merchant-hosted public URL that OpenAI discovers — reinforcing that site-side audit checks must test the DATA a feed would be built from rather than the feed transport.

    How it scores

    Tier per evidence policy: scored — grade A meets the A/B bar required for scored audits.

    Grade A holds against the spec as re-read on 2026-10-17. OpenAI documents the required fields and the row-level rejection of a missing or unrecognised availability. Every rule this audit applies is stated on that page.

    Example finding

    A 900-SKU store has clean Product markup but no sku, mpn or productID anywhere, and prices rendered as the string ‘$1,299.00’ inside offers.price. No row has an item_id or a decimal price with its own currency, so the catalogue cannot be derived from the pages. The merchant finds out only when Upload History reports the rejected rows.

    Sources