Google AI Mode shopping cards schema - cloro
Shopping Cards Data Documentation
This section documents the shopping cards data returned by the Google AI Mode endpoint: product information extracted when AI Mode detects shopping intent, part of the AI Mode response so no separate API call is needed. For use cases, pricing context, and copy-paste examples, see the AI Mode shopping API page on the product site.
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.
Example request
Shopping cards are intent-detected; no flag is required.
{
"prompt": "best wireless headphones under $200",
"country": "US"
}
Shopping card structure
| 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"
}
]
}
]
}
}