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.
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.
| Field | Type | Description |
|---|
title | string | Product title |
position | number | 1-indexed rank across the shoppingCards array in DOM/render order. |
price | object | Structured pricing with value, currency, and raw |
store | string | Merchant/store name (conditionally populated — may be absent) |
rating | number | Product rating |
reviews | string | Review count in Google’s abbreviated format (e.g., "2.3k", "1m"). Parse as a string; convert client-side if you need a numeric value. |
thumbnail | string | Product image URL |
productLink | string | Direct product URL (conditionally populated — may be absent) |
oldPrice | object | Original price before discount (conditionally populated — absent when no discount) |
snippet | string | Product description snippet |
snippet_links | array | Links 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
| Field | Type | Description |
|---|
value | number | null | Parsed numeric price. null when the visible text can’t be unambiguously parsed. |
currency | string | null | Currency symbol (e.g. "$", "£", "R$", "€"). null when no symbol was found. |
raw | string | Visible 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.
snippet_links
| Field | Type | Description |
|---|
text | string | Link text |
link | string | Link 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"
}
]
}
]
}
}