> ## Documentation Index
> Fetch the complete documentation index at: https://cloro.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Shopping cards

> Shopping product information returned by the Google Search endpoint when 'Popular products' or 'More products' panels appear on the SERP.

This section documents the **shopping cards** data returned by the [Google Search endpoint](/api-reference/endpoint/monitor-google). Shopping cards are part of the same response, so no separate API call is needed.

## Overview

Shopping cards are extracted from Google's organic shopping grids ("Popular products" and "More products") when they appear on the SERP. When a section header can be parsed, each card includes a `category` field naming its parent section, so callers can distinguish cards from coexisting shopping panels on the same SERP.

The wire shape mirrors AI Mode's `shoppingCards` for cross-API familiarity, with the same camelCase keys (`productLink`, `oldPrice`) emitted by the Google mapper. The `shoppingCards` field is omitted from `result` when no shopping section is present — treat it as optional rather than expecting an empty array.

<Frame caption="Shopping cards on the Google SERP ('More products' grid)">
  <img src="https://mintcdn.com/cloro/M-UPJPsx4tqYJ0J-/images/google/search-shopping-cards.webp?fit=max&auto=format&n=M-UPJPsx4tqYJ0J-&q=85&s=43d4ddd84a38ca68987891203b5deb34" alt="Shopping cards on the Google SERP" width="701" height="705" data-path="images/google/search-shopping-cards.webp" />
</Frame>

<Note>
  `productLink` is JS-hydrated by Google, so it is usually an empty string in the static HTML response — the card opens a Google-side sidebar overlay rather than navigating externally. The `title`, `price`, `store`, and other static fields remain populated.
</Note>

## Shopping card structure

| Field         | Type   | Description                                                                                                               |
| ------------- | ------ | ------------------------------------------------------------------------------------------------------------------------- |
| `title`       | string | Product title                                                                                                             |
| `position`    | number | 1-indexed rank in the shopping grid, flat across the whole `shoppingCards` array (does not reset per `category` section). |
| `productLink` | string | Direct product URL (usually empty due to JS-hydration)                                                                    |
| `category`    | string | Parent section header (e.g., `"Popular products"`, `"More products"`)                                                     |
| `price`       | object | Structured pricing (see [Price shape](#price-and-oldprice) below)                                                         |
| `oldPrice`    | object | Original price before discount (same shape as `price`)                                                                    |
| `store`       | string | Merchant/store name                                                                                                       |
| `rating`      | number | Product rating                                                                                                            |
| `reviews`     | string | Review count (e.g., "384", "2.3k")                                                                                        |
| `thumbnail`   | string | Product image URL                                                                                                         |

### `price` and `oldPrice`

Both fields carry a parsed and a raw representation:

| Field      | Type   | Description                                                                         |
| ---------- | ------ | ----------------------------------------------------------------------------------- |
| `value`    | number | Numeric price. Present when the visible string parses unambiguously into a number.  |
| `currency` | string | Currency symbol (e.g. `$`, `£`, `€`). Present when a recognized symbol is detected. |
| `raw`      | string | Visible price text verbatim (e.g. `"$169.99"`).                                     |

`raw` is always present when `price` is emitted; `value` and `currency` only when the string parses unambiguously.

## Response example

```json theme={null}
{
  "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"
      }
    ]
  }
}
```
