Optimization Guide

Ecommerce Payment Method Accepted Schema for AI Shopping Agents

AI shopping agents filter purchase recommendations by payment method. "Stores with Klarna for outdoor furniture", "buy now pay later mattress", "which brands accept Apple Pay" — these queries exclude every store without machine-readable payment method signals, regardless of whether you actually accept those payment methods.

TL;DR Add acceptedPaymentMethod to your Organization/LocalBusiness block for store-level methods (cards, PayPal, Apple Pay). For BNPL (Afterpay, Klarna, Shop Pay Installments), add a dedicated Offer to each eligible product's offers array with installment price and provider name. Use paymentAccepted text property for human-readable summary.

Payment as a Purchase Filter

Payment method acceptance has always been a purchase filter, but AI shopping agents have amplified its importance by making it a searchable, filterable signal. Shoppers now explicitly include payment preferences in conversational queries:

Shopify renders payment method icons in the footer and checkout page for human visitors. But these icons are images — not structured data. AI shopping agents that don't render JavaScript cannot parse your footer icons. The only machine-readable path is acceptedPaymentMethod and BNPL Offer schema in your JSON-LD.

Payment method schema signal matrix

Payment typeSchema propertySchema value / approach
Credit / debit cards acceptedPaymentMethod on Organization https://schema.org/CreditCard
PayPal acceptedPaymentMethod on Organization https://purl.org/goodrelations/v1#PayPal
Apple Pay / Google Pay acceptedPaymentMethod on Organization Custom paymentMethodId: "ApplePay" or "GooglePay"
BNPL (Afterpay, Klarna) Separate Offer per product with installment details description naming BNPL provider + installment price
Shop Pay Installments Offer in offers array + PaymentChargeSpecification Per-installment price, installment count, eligible total range
Crypto (Bitcoin, ETH) acceptedPaymentMethod on Organization Custom paymentMethodId: "Bitcoin", "Ethereum"
Gift cards acceptedPaymentMethod on Organization https://schema.org/PaymentCard + description: "Gift cards accepted"
Bank transfer / ACH acceptedPaymentMethod https://purl.org/goodrelations/v1#BankTransfer

Organization-Level Payment Schema

Declare store-wide payment acceptance in the Organization or OnlineStore block (typically in theme.liquid):

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "OnlineStore",
  "name": "Your Store Name",
  "url": "https://yourdomain.com",
  "paymentAccepted": "Visa, Mastercard, American Express, PayPal, Apple Pay,
    Google Pay, Shop Pay, Afterpay, Klarna, gift cards",
  "acceptedPaymentMethod": [
    {
      "@type": "PaymentMethod",
      "paymentMethodId": "CreditCard",
      "name": "Credit and debit cards (Visa, Mastercard, Amex, Discover)"
    },
    {
      "@type": "PaymentMethod",
      "paymentMethodId": "PayPal",
      "name": "PayPal"
    },
    {
      "@type": "PaymentMethod",
      "paymentMethodId": "ApplePay",
      "name": "Apple Pay"
    },
    {
      "@type": "PaymentMethod",
      "paymentMethodId": "GooglePay",
      "name": "Google Pay"
    },
    {
      "@type": "PaymentMethod",
      "paymentMethodId": "ShopPay",
      "name": "Shop Pay"
    },
    {
      "@type": "PaymentMethod",
      "paymentMethodId": "Afterpay",
      "name": "Afterpay — 4 interest-free payments"
    },
    {
      "@type": "PaymentMethod",
      "paymentMethodId": "Klarna",
      "name": "Klarna — pay in 4 or pay in 30 days"
    }
  ]
}
</script>

BNPL Offer for individual products

For products eligible for BNPL, add a dedicated Offer to the offers array with installment details:

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Apex Pro Standing Desk",
  "offers": [
    {
      "@type": "Offer",
      "price": "449.00",
      "priceCurrency": "USD",
      "availability": "https://schema.org/InStock",
      "name": "Full price"
    },
    {
      "@type": "Offer",
      "price": "112.25",
      "priceCurrency": "USD",
      "availability": "https://schema.org/InStock",
      "name": "Afterpay — 4 interest-free payments of $112.25",
      "description": "Pay in 4 interest-free installments of $112.25 with Afterpay.
        First payment at checkout. Available for orders $35–$2000.",
      "priceSpecification": {
        "@type": "PaymentChargeSpecification",
        "price": "112.25",
        "priceCurrency": "USD",
        "billingIncrement": 1,
        "eligibleTransactionVolume": {
          "@type": "PriceSpecification",
          "minPrice": "35.00",
          "maxPrice": "2000.00",
          "priceCurrency": "USD"
        }
      }
    }
  ]
}

Shopify Theme Implementation

Add the Organization block with acceptedPaymentMethod to theme.liquid — once, site-wide. It only needs to change when your payment provider lineup changes.

For BNPL Offers, add to product.liquid conditionally — check if the product price is within the BNPL eligible range before injecting the installment Offer:

{% if product.price >= 3500 and product.price <= 200000 %}
  {
    "@type": "Offer",
    "name": "Afterpay — 4 payments of {{ product.price | divided_by: 4 | money }}",
    "price": {{ product.price | divided_by: 4.0 | money_without_currency | json }},
    "priceCurrency": {{ cart.currency.iso_code | json }},
    "description": "4 interest-free payments with Afterpay"
  }
{% endif %}

Note: Shopify money_without_currency outputs 2 decimal format. Divide by 4.0 (float) to avoid integer truncation. Verify BNPL minimum/maximum with your provider — ranges vary by country.

Checklist

FAQ

Does Google use acceptedPaymentMethod for rich results?

Google's product rich results (Merchant Center feed-based) show BNPL options as a rich snippet — for example, "4 interest-free installments of $X with Afterpay" — when the installment data is present in the structured data or the product feed. This is most reliably implemented via Google Merchant Center's installment attribute, but JSON-LD Offer installment schema provides the underlying signal that feeds into it when your product feed is linked. The acceptedPaymentMethod on Organization is less used by Google but is read by AI shopping agents like Perplexity and ChatGPT.

How do I handle payment methods that vary by country in Shopify Markets?

Use Shopify Markets to serve separate product pages per market, and vary the acceptedPaymentMethod array in JSON-LD based on the active market context. In Liquid, use localization.market to conditionally include country-specific payment methods. For example, include iDEAL only for the Netherlands market, Klarna only for markets where it operates, and Boleto only for Brazil. AI agents respect geographic payment method declarations when the country context is set in Offer.eligibleRegion or the LocalBusiness addressCountry.

Should I declare crypto payment methods even if only a small percentage of customers use it?

Yes — it's a filter signal, not a prediction of usage. A Shopify merchant who accepts Bitcoin via BitPay or Coinbase Commerce should declare it in acceptedPaymentMethod. The set of shoppers searching "crypto-accepting online stores for X" is niche but high-intent — they have selected payment method as a binary filter and your store either passes or fails. If you accept it, declaring it costs nothing and captures every query in that segment.

Check Your Payment Method Schema Coverage

CatalogScan audits your Shopify store for missing payment method structured data, including BNPL Offer signals and Organization-level acceptedPaymentMethod declarations. Run a free scan to see what your store is signaling to AI shopping agents.

Scan your store free