Pendium
The Optimization Playbook

How to map Shopify duty and tax schemas for global AI search recommendations

Claude

Claude

·7 min read
How to map Shopify duty and tax schemas for global AI search recommendations

Shoppers in Europe and Australia expect taxes included in the price, while US buyers expect them at checkout. If ChatGPT cannot read your international pricing correctly, it will recommend a competitor who made the total cost clearer. To address this friction, the Pendium AI visibility platform provides a clear path to map Shopify Markets Pro duty and tax objects into JSON-LD schema so conversational engines can parse your global catalogs accurately. By extracting the MarketPriceInclusions logic and exposing it directly in your page markup, you ensure AI agents like Claude and Gemini recommend your products with the correct fully landed costs in every region. This guide walks through the step-by-step process of accessing the necessary GraphQL objects, aligning your JSON-LD with regional expectations, and avoiding the submarket inheritance traps that drop international stores from AI search results in 2026.

Because we monitor thousands of real conversations potential customers have with AI daily, we see exactly why AI engines hesitate to recommend certain international products. When an AI agent cannot confidently determine the total cost of a product for a specific region, it defaults to recommending a competitor with transparent, easily parsed pricing data. Our visibility monitoring dashboard runs 50+ real customer queries per business to trace how these platforms make recommendations. To make sure you do not lose international visibility, you must expose your back-end Shopify Markets Pro logic to frontend schema crawlers.

Account for regional pricing expectations in your data

International buyer expectations vary wildly depending on geography, and your store data must reflect these differences if you want AI engines to recommend your products. According to the Shopify Help Center documentation on duties and taxes, consumers in the United Kingdom, Europe, and Australia expect prices to display inclusive of tax. Conversely, shoppers in the United States and Canada expect tax to be added as a separate line item during the checkout process.

AI search agents do not guess. If GPTBot or ClaudeBot crawls a product page targeting a UK consumer but only finds a raw, tax-exclusive price with no schema indicating that tax is already included, it may report an incorrect price to the user or skip recommending the product entirely.

To manage this across your global catalog, you can use the following table to organize your schema logic by target market:

RegionCustomer Tax ExpectationRequired Schema StrategyLiquid Context
United States / CanadaAdded at checkoutTax-exclusive price in UnitPriceSpecificationcart.taxes_included == false
United Kingdom / EUIncluded in priceTax-inclusive price, setting valueAddedTaxIncluded to truecart.taxes_included == true
AustraliaIncluded in priceTax-inclusive price, setting valueAddedTaxIncluded to truecart.taxes_included == true

When an AI engine processes these structured details, it can present your product as a direct answer to localized search requests like "Where can I buy a waterproof backpack in London with VAT included in the price?"

Extracting the required Shopify GraphQL objects

To construct an accurate schema, you must pull data directly from Shopify's back-end database. The default liquid objects on the front end do not always expose the full tax and duty configurations of your configured markets. You will need to query the Shopify GraphQL Admin API to extract the true settings for each market.

The MarketPriceInclusions object

The MarketPriceInclusions GraphQL object defines the pricing rules for a specific region. Querying this object requires read_markets access scope. It exposes three primary fields that are useful for your schema logic:

  • adaptivePricingEnabled: A boolean indicating whether dynamic checkout pricing is active.
  • inclusiveDutiesPricingStrategy: Identifies if duties are baked directly into the displayed price.
  • inclusiveTaxPricingStrategy: Identifies if taxes are baked directly into the displayed price.

You can query these configurations across your active markets using the following GraphQL query:

query {
  markets(first: 10) {
    edges {
      node {
        id
        handle
        priceInclusions {
          adaptivePricingEnabled
          inclusiveDutiesPricingStrategy
          inclusiveTaxPricingStrategy
        }
      }
    }
  }
}

The Duty line item

Calculating duties requires understanding the product's classification. The Duty object relies on the harmonized system code and country of origin of your products. Duties are estimates based on these details, and some countries apply a de minimis threshold under which no duties are charged.

When mapping these back-end configurations, you should expose these attributes directly in your product schema. This allows AI shopping crawlers to calculate whether a specific buyer will cross the de minimis threshold in their country, providing an accurate, localized recommendation.

Structuring your JSON-LD for cross-border context

Once you have queried the correct pricing strategies, you must construct the frontend JSON-LD block. To coordinate these structured data efforts across your store, you can also read our guide on how to Map Shopify payment methods to JSON-LD for AI search visibility to ensure your transactional details are completely covered.

For cross-border commerce, you should structure the offers array inside your Product schema to represent each localized market. Instead of outputting a single default offer, output an offer for each Shopify Market region you support.

Mapping inclusive strategies

If a market uses tax-inclusive pricing, your JSON-LD must declare this. You do this by nesting a UnitPriceSpecification within your Offer schema.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Global Explorer Backpack",
  "offers": {
    "@type": "AggregateOffer",
    "priceCurrency": "GBP",
    "lowPrice": "120.00",
    "highPrice": "120.00",
    "offerCount": "1",
    "offers": [
      {
        "@type": "Offer",
        "price": "120.00",
        "priceCurrency": "GBP",
        "eligibleRegion": {
          "@type": "Place",
          "name": "GB"
        },
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "120.00",
          "priceCurrency": "GBP",
          "valueAddedTaxIncluded": true
        }
      }
    ]
  }
}

By explicitly setting valueAddedTaxIncluded to true, you tell AI platforms that the price is fully landed. They do not have to perform additional calculations or warn users about hidden costs.

Handling managed markets and adaptive pricing

When using Shopify Markets Pro (Managed Markets), the MarketPriceInclusionsInput configuration shows that enabling adaptivePricingEnabled forces specific defaults. It forces the state of INCLUDES_TAXES_IN_PRICE_BASED_ON_COUNTRY, INCLUDE_DUTIES_IN_PRICE, and DDP (Delivered Duty Paid).

When these flags are active, your Liquid template must output a schema that includes both taxes and duties in the base price for the applicable regions.

{%- if market.priceInclusions.adaptivePricingEnabled -%}
  {%- comment -%} Managed Markets logic when adaptive pricing is active {%- endcomment -%}
  "priceSpecification": {
    "@type": "UnitPriceSpecification",
    "price": "{{ product.price | money_without_currency }}",
    "priceCurrency": "{{ cart.currency.iso_code }}",
    "valueAddedTaxIncluded": true,
    "additionalType": "https://schema.org/DeliveryChargeSpecification",
    "description": "DDP - Delivered Duty Paid"
  }
{%- endif -%}

Using this structured layout ensures AI bots read the absolute final price, which is the exact metric they look for when building comparative tables for prospective buyers.

A patterned array of industrial shipping containers stacked in a storage terminal.

Avoiding the submarket inheritance trap in Pendium audits

When configuring regional schemas, a common bug we find during Pendium audits is the assumption that every submarket behaves identically to its parent market. Shopify Markets allows submarkets to inherit duties and tax configurations from their parent market by default. However, if you apply custom tax settings directly on a submarket, those customizations override the parent settings.

If a submarket has multiple parents with different tax displays, Shopify defaults to using the setting best suited to the customer's location. If your JSON-LD code relies on static parent variables, the schema will output incorrect data for those nested regions.

To prevent this inheritance trap, avoid hardcoding tax rules in your Liquid template based on general parent regions. Instead, use the active checkout session variables (cart.taxes_included and localization.country.iso_code) to dynamically generate your JSON-LD. This guarantees that whatever overrides are happening in your Shopify Markets backend are instantly reflected in the structured data that AI search bots scrape.

{
  "@type": "Offer",
  "price": "{{ variant.price | money_without_currency }}",
  "priceCurrency": "{{ localization.country.currency.iso_code }}",
  "eligibleRegion": {
    "@type": "Country",
    "name": "{{ localization.country.iso_code }}"
  },
  "priceSpecification": {
    "@type": "UnitPriceSpecification",
    "price": "{{ variant.price | money_without_currency }}",
    "priceCurrency": "{{ localization.country.currency.iso_code }}",
    "valueAddedTaxIncluded": {% if cart.taxes_included %}true{% else %}false{% endif %}
  }
}

This active approach ensures that regardless of how intricate your nested submarket tax rules are, the frontend schema matches the actual checkout experience.

Validating global AI search optimization with Pendium

Optimizing your structured data is only half the battle. You must verify that conversational agents are actually reading your updates and recommending your products to international customers. AI crawlers do not behave like standard search engines, and they do not index updates instantly.

Our AI visibility platform helps you close this loop. By simulating multiple buyer types, we track how search engines perceive your brand across different platforms, regional preferences, and topics. We monitor conversations during research, vendor comparisons, and purchase journeys to see if your store is being recommended or if competitors are winning those placements.

To verify your international catalog readiness:

  • Execute a localized curl test to ensure your initial HTML payload contains the correct regional price structures before any client-side scripts run.
  • Confirm that your eligibleRegion properties align with your Shopify Markets Pro shipping zones.
  • Audit your schemas regularly to confirm that submarket inheritance changes have not broken your data structure.

If you are unsure whether your international pricing details are fully visible to search crawlers, we can help. Run a free Scan Your AI Visibility | Pendium | Pendium.ai to analyze how ChatGPT, Claude, and Gemini perceive your brand in minutes. If you want a deeper look at your competitor landscape and a prioritized fix list for your global storefront, you can also book a custom demonstration with our team at See your Visibility Scan Preview — Pendium | Pendium.ai. Ensure your data is machine-readable so you do not lose your next global customer to a brand with clearer schema markup.

how-toguideshopifyschemacross-border-ecommerce

Get the latest from The Citation Report delivered to your inbox each week