A customer in Paris asks ChatGPT for the price of your flagship product, and the AI quotes them the base US dollar amount, even though your Shopify storefront is fully localized for euros. AI agents do not visually browse your localized Shopify Markets storefront; they read your page's underlying structured data to find the price. Out of the box, most Shopify themes render your base currency in the JSON-LD schema across every market URL, meaning an AI scanning your French or German site still reads the US dollar price. To fix this, you need to update your product's Liquid templates to loop through the localization object and output multiple offers for each active currency, ensuring the Pendium platform and other AI discovery systems can find exactly what the local buyer will pay.
The disconnect between visible prices and structured data
Most Shopify merchants assume that if a customer sees localized pricing on their screen, an AI agent crawling the site will see the same thing. This assumption is a major blind spot. Humans browse your storefront using client-side elements, sessions, and cookies that dynamically update currency displays based on geo-IP lookups. AI crawlers, on the other hand, fetch the raw HTML from your servers without executing complex session tracking or stateful scripts.
When an AI engine processes your product pages, it bypasses your interactive elements and reads your header tags first. Standard Shopify themes often hardcode the primary store currency in their OpenGraph meta tags, meaning tags like og:price:amount and og:price:currency remain fixed in USD even when the URL changes to /en-ca/products/hat.
The cost of this pricing mismatch is significant. Mismatched markup fails silently because traditional SEO tools do not flag it as an error as long as the code is syntactically valid. However, when an AI agent detects a conflict between your page text and your structured data, it will often exclude your product entirely to avoid displaying incorrect pricing. Even if it does recommend your brand, quoting a straight currency conversion instead of your actual localized market price or regional B2B tier can stall sales cycles.
To help understand how AI crawlers parse this information differently than human visitors, you can read our guide on how to configure Shopify translations for AI product recommendations.
| Parameter | Human Visitor Experience | AI Agent Crawler Experience |
|---|---|---|
| Price Determination | Dynamic geo-IP and browser session state | Raw HTML parsing and schema retrieval |
| Session State | Active cookie-based cart and country context | Unauthenticated guest user state |
| Language & Currency | Interactive selector or auto-redirect | Hardcoded URL path analysis |
| Schema Dependence | None (reads visible rendered text) | High (relies on JSON-LD blocks) |
Testing your localized URLs for schema mismatch
Before writing any new code, you must diagnose whether your current storefront actively feeds incorrect data to search crawlers. Many third-party schema applications stop at the base market, failing to generate dynamic structured data for your regional URLs.
To verify where your site stands, you can start by running a technical diagnostic. Our AI Site Audit tool is designed to crawl your site the same way AI agents do, checking if your JSON-LD, Open Graph, and schema.org markup match what users see. You can also run manual checks using Shopify's market specific URLs combined with a schema validator.
To test your schema manually, follow these steps:
- Open a clean browser window in incognito mode to avoid active session cookies.
- Navigate directly to one of your regional market URLs, such as
yourstore.com/en-ca/products/product-name. - View the page source by right-clicking and selecting View Page Source, or prepend
view-source:to the URL in your address bar. - Search the document for
application/ld+jsonto find your product's structured data block. - Inside that block, locate the
"priceCurrency"and"price"fields under the"offers"object.
If your /en-ca/ Canadian market URL still displays "USD" in the JSON-LD code while showing Canadian dollars on the visible page, your theme is serving broken data to search bots. This schema discrepancy causes search platforms to hallucinate or misquote your pricing. A related symptom of this setup is when AI platforms fetch outdated values, which we address in our guide on why ChatGPT quotes your sample price.
Rewriting your product schema for multiple currencies
The standard way most Shopify themes generate product structured data relies on a single "offer" block. The code typically looks for the primary variant price and pulls the store's default currency. To support international AI shopping engines, you need to abandon this single-currency approach.
According to the official Shopify Ecommerce Schema Guide, structured data needs to translate your product listings into a format that AI search engines and shopping graphs can easily digest. When selling globally, Shopify developers recommend listing multiple distinct "offers" within your JSON-LD schema — one for each currency your store supports. This allows platforms like Google AI Overviews and Perplexity to identify the exact regional pricing for your catalog.
Using the localization object
You can use Shopify's built-in localization object inside your Liquid templates to pull active market currencies. Instead of outputting a single hardcoded currency code, your theme needs to generate a separate offer object for each currency.
Using a Liquid loop, you can build an array of offers. This ensures that when a search agent parses the page, it can see the valid price for every market you serve.
{%- comment -%}
Custom Shopify Markets multi-currency schema array
Place this within your product.jsonld template
{%- endcomment -%}
"offers": [
{%- for country in localization.available_countries -%}
{
"@type": "Offer",
"price": "{{ product.selected_or_first_available_variant.price | money_without_currency | remove: ',' }}",
"priceCurrency": "{{ country.currency.iso_code }}",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}",
"url": "{{ shop.url }}{{ country.path_prefix }}{{ product.url }}"
}{% unless forloop.last %},{% endunless %}
{%- endfor -%}
]
This code loops through every country enabled in your Shopify Markets settings. It outputs the correct price, currency code, and localized URL path prefix for each market.

Mapping multiple offer attributes
When mapping these attributes, you must ensure that your pricing output matches your front-end settings. If you use manual exchange rates or market-specific price adjustments, simply pulling the base price will still result in errors.
The localization.available_countries loop handles exchange rate calculations automatically if your store relies on Shopify Payments. However, if you use a headless build or complex custom pricing, you should query the storefront data using the GraphQL @inContext directive to retrieve the precise prices for each country.
For stores that sell specialized goods, such as the health-focused protein bars made by Resist, maintaining exact regional pricing in your schema ensures that international buyers are not turned away by inflated currency conversions or incorrect tax estimates.
Once your multi-offer array is live, test your product URLs again using a schema validator. The output should display a clean list of offers matching every country enabled in your admin panel. This simple structural update stops the cross-border pricing leak and ensures AI agents recommend your products with the correct regional details.