Skip to main content
This section documents the shopping cards data returned by the Google AI Mode endpoint. Shopping cards are part of the AI Mode response, so no separate API call is needed.

Example request

Shopping cards are intent-detected. Send a prompt that expresses shopping intent (for example, asking for products, prices, or where to buy). No flag is required.
{
  "prompt": "best wireless headphones under $200",
  "country": "US"
}
This produces a response containing the shoppingCards array documented below.

Overview

Shopping product information extracted from the response when AI Mode detects shopping intent.
Shopping cards in AI Mode
For individual product references embedded inline within the AI response text (rather than in a dedicated carousel), see inline products. Both arrays may appear in the same response.

Shopping card structure

FieldTypeDescription
titlestringProduct title
positionnumber1-indexed rank across the shoppingCards array in DOM/render order.
priceobjectStructured pricing with value, currency, and raw
storestringMerchant/store name (conditionally populated — may be absent)
ratingnumberProduct rating
reviewsstringReview count in Google’s abbreviated format (e.g., "2.3k", "1m"). Parse as a string; convert client-side if you need a numeric value.
thumbnailstringProduct image URL
productLinkstringDirect product URL (conditionally populated — may be absent)
oldPriceobjectOriginal price before discount (conditionally populated — absent when no discount)
snippetstringProduct description snippet
snippet_linksarrayLinks found within the product snippet
store, productLink, and oldPrice are conditionally populated — not every item includes all fields. Build your pipeline to handle missing fields on any individual shopping card.

price and oldPrice

FieldTypeDescription
valuenumber | nullParsed numeric price. null when the visible text can’t be unambiguously parsed.
currencystring | nullCurrency symbol (e.g. "$", "£", "R$", "€"). null when no symbol was found.
rawstringVisible card text verbatim (e.g. "$149.99", "R$ 4,40/mês"). Always present when the parser had any input text.
The raw field captures the price string exactly as Google rendered it. Use it as a fallback display when value is null (installment offers, locale-ambiguous numerics) — see the inline products docs for the full price-shape contract; it’s shared across all AI Mode price-bearing fields.
FieldTypeDescription
textstringLink text
linkstringLink URL

Response example

{
  "success": true,
  "result": {
    "text": "Here are highly-rated wireless headphones under $200...",
    "shoppingCards": [
      {
        "title": "Sony WH-CH720N Noise Cancelling Headphones",
        "position": 1,
        "price": {
          "value": 149.99,
          "currency": "$",
          "raw": "$149.99"
        },
        "oldPrice": {
          "value": 199.99,
          "currency": "$",
          "raw": "$199.99"
        },
        "store": "Amazon",
        "rating": 4.5,
        "reviews": "2.3k",
        "thumbnail": "https://example.com/product.jpg",
        "productLink": "https://www.amazon.com/sony-wh-ch720n",
        "snippet": "Noise-canceling wireless headphones with 30-hour battery life",
        "snippet_links": [
          {
            "text": "noise canceling",
            "link": "https://www.google.com/search?q=noise+canceling"
          }
        ]
      }
    ]
  }
}