cloro WebsiteAPI Get an API key
API Reference › Google › Shopping cards

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

FieldTypeDescription
titlestringName of the product shown on the tile.
positionnumber1-based rank within the shopping grid. Numbering runs continuously across the whole shoppingCards array and does not restart at each category boundary.
productLinkstringDestination URL for the product. Typically empty because Google hydrates it with client-side scripts.
categorystringHeading of the grid the tile came from, e.g. "Popular products" or "More products".
priceobjectCurrent price in structured form. See the price shape below.
oldPriceobjectPre-discount price, using the same shape as price.
storestringName of the merchant or retailer offering the product.
ratingnumberAverage star rating for the product.
reviewsstringNumber of reviews as displayed, e.g. "384" or "2.3k".
thumbnailstringURL 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.

FieldTypeDescription
valuenumberNumeric amount. Included when the visible text resolves cleanly to a single number.
currencystringCurrency symbol such as $, £, or . Included when a known symbol is recognized.
rawstringThe 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].