Structured data
CRITICALOffer 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- Bind price to `{{ product.price | money_without_currency | json }}` — a number, not the formatted currency string.
- Add `"priceCurrency": "{{ shop.currency }}"`.
- For multi-currency: switch to Shopify Markets and use `cart.currency.iso_code`.
BigCommerce
Developer- Bind price to `{{product.calculated_price.value}}` (decimal value), not `formatted` (the prefixed string).
- Set `"priceCurrency": "{{currency_selector.active_currency_code}}"`.
WooCommerce
A few minutes- Update Yoast / RankMath / your schema plugin to the latest version — older versions wrap price in HTML, breaking JSON parsing.
- Settings → General: confirm currency is set (plugins emit whatever you have here as `priceCurrency`).
Custom / headless
Developer- Render `price` as a raw number from your product model.
- 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, …).
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.