Shopping cards
Product tiles that cloro lifts from Google's organic shopping grids and returns alongside the rest of a Google Search response.
Overview
When a query surfaces Google's merchandise grids — the "Popular products" and "More products" panels — cloro parses each visible tile and collects them under the shoppingCards array inside result. Every tile carries the product's name, its position in the grid, structured pricing, and the merchant behind it.
Whenever cloro can read a section heading, it stamps the originating panel onto each card's category field. That lets you keep tiles from different grids apart even when several shopping panels share the same page. If no shopping grid renders for the query, shoppingCards is left out of result entirely, so treat the field as optional rather than assuming an empty array will be present.
The keys follow camelCase (productLink, oldPrice) to match the mapper that produces Google Search output. Note that productLink is filled in by Google's client-side scripts, so in the raw HTML it usually comes back as an empty string — the tile opens an in-page Google overlay instead of linking out. The static fields such as title, price, and store stay populated.
Shopping card structure
| Field | Type | Description |
|---|---|---|
title | string | Name of the product shown on the tile. |
position | number | 1-based rank within the shopping grid. Numbering runs continuously across the whole shoppingCards array and does not restart at each category boundary. |
productLink | string | Destination URL for the product. Typically empty because Google hydrates it with client-side scripts. |
category | string | Heading of the grid the tile came from, e.g. "Popular products" or "More products". |
price | object | Current price in structured form. See the price shape below. |
oldPrice | object | Pre-discount price, using the same shape as price. |
store | string | Name of the merchant or retailer offering the product. |
rating | number | Average star rating for the product. |
reviews | string | Number of reviews as displayed, e.g. "384" or "2.3k". |
thumbnail | string | URL of the product image. |
Price shape
Both price and oldPrice pair a machine-readable reading with the exact text as it appeared on the page.
| Field | Type | Description |
|---|---|---|
value | number | Numeric amount. Included when the visible text resolves cleanly to a single number. |
currency | string | Currency symbol such as $, £, or €. Included when a known symbol is recognized. |
raw | string | The price string exactly as rendered, e.g. "$169.99". |
raw is always emitted whenever a price object is present; value and currency appear only when the source string can be parsed without ambiguity.
Response example
{
"success": true,
"result": {
"shoppingCards": [
{
"title": "ASICS Women's Gel-Nimbus 28",
"position": 1,
"productLink": "",
"category": "More products",
"price": {
"value": 169.99,
"currency": "$",
"raw": "$169.99"
},
"store": "DICK'S Sporting Goods",
"rating": 4.5,
"reviews": "384"
}
]
}
}
Notes
Because shoppingCards only appears when a shopping grid is present, guard against its absence before iterating. If you need to reconstruct per-panel ordering, group cards by category while relying on position for the global sequence. Questions about parsing behavior can go to [email protected].