A

Structured data

CRITICAL

Offer price + priceCurrency valid

Each Offer carries a parseable numeric `price` (≥ 0) and a 3-letter ISO 4217 `priceCurrency`. Agents need a price with a currency to show and compare your product.

What this check looks for

Even when `offers` is present, agents still need a parseable `price` and a 3-letter currency code to surface the product. `price: 0` is accepted (free trials, samples, free digital goods are valid per schema.org and Google merchant listing). On an AggregateOffer we accept `lowPrice` as a price fallback. Coverage ≥ 95% across PDPs with Product JSON-LD passes; ≥ 70% partial; otherwise fail.

Which AI surfaces it affects

  • Google AI Mode (UCP)100
  • ChatGPT (ACP)90
  • Microsoft Copilot70
  • Meta AI70
  • Perplexity60

Weighted against the live specs — ACP 2026-04-17, UCP 2026-04-08.

How to fix it

Set price as a number and priceCurrency as an ISO 4217 code

Shopify

Developer
  1. Bind price to `{{ product.price | money_without_currency | json }}` — a number, not the formatted currency string.
  2. Add `"priceCurrency": "{{ shop.currency }}"`.
  3. For multi-currency: switch to Shopify Markets and use `cart.currency.iso_code`.

BigCommerce

Developer
  1. Bind price to `{{product.calculated_price.value}}` (decimal value), not `formatted` (the prefixed string).
  2. Set `"priceCurrency": "{{currency_selector.active_currency_code}}"`.

WooCommerce

A few minutes
  1. Update Yoast / RankMath / your schema plugin to the latest version — older versions wrap price in HTML, breaking JSON parsing.
  2. Settings → General: confirm currency is set (plugins emit whatever you have here as `priceCurrency`).

Custom / headless

Developer
  1. Render `price` as a raw number from your product model.
  2. Render `priceCurrency` as the ISO 4217 code (uppercase, 3 letters).
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Example Hat",
  "offers": {
    "@type": "Offer",
    "price": 49.99,
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>

The spec it's pinned to

  • Google merchant listing — price + priceCurrency required

    Google's merchant listing requires `price` (numeric) plus `priceCurrency` (ISO 4217 three-letter code) on every Offer. Missing either disqualifies the listing.

  • schema.org/Offer.price + priceCurrency

    schema.org/Offer.price is a number; `priceCurrency` is an ISO 4217 3-letter code (USD, EUR, GBP, …).

schema.org/Offer

Does your store pass this check?

Run the full audit — 82 checks across five AI shopping surfaces. Most tools only check whether you get mentioned; we check whether an agent can buy from you.

Related structured data checks

← All 82 checks