cloro WebsiteAPI Get an API key
API Reference › AI Mode › Shopping cards

Shopping cards

Structured product listings surfaced inside a Google AI Mode response whenever cloro detects that the prompt carries shopping intent.

Overview

Shopping cards are not a standalone endpoint. They are delivered as part of the AI Mode extraction payload, so there is no extra request to make once you already call the Google AI Mode endpoint. When the underlying answer includes a product carousel, cloro parses it into a shopping_cards array with normalized pricing, ratings, and merchant details.

Detection is automatic. To make a card carousel likely, phrase the prompt with a clear commercial angle, for example asking about specific products, comparing prices, or looking for a place to buy. No dedicated parameter or flag has to be set.

Individual products that Google weaves directly into the prose of the answer are reported separately under inline products. Both collections can be present in a single response, so it is worth reading each one.

Shopping card structure

FieldTypeDescription
titlestringName of the product as shown on the card.
positionnumberOne-based rank of the card within shopping_cards, following the rendered order.
priceobjectNormalized current price (see the shape below).
old_priceobjectPre-discount price, using the same shape as price.
storestringMerchant or retailer offering the item.
ratingnumberAverage product rating.
reviewsstringReview count as displayed, for example "2.3k".
thumbnailstringURL of the product image.
product_linkstringDirect link to the product page.
snippetstringShort descriptive blurb attached to the card.
snippet_linksarrayAny hyperlinks embedded inside the snippet text.

price and old_price

Both price fields share one contract. cloro tries to parse the visible text into a clean number, but always preserves the original string so nothing is lost when the text is ambiguous.

FieldTypeDescription
valuenumber | nullThe parsed numeric amount. Returns null when the on-screen text cannot be resolved to a single unambiguous number.
currencystring | nullDetected currency symbol such as "$", "£", "€", or "R$". null when no symbol is present.
rawstringThe price text exactly as rendered, for example "$149.99" or "R$ 4,40/mês". Populated whenever the parser received any input text.

Fall back to raw for display when value is null — this covers installment plans and locale-specific number formats. The same price shape is reused across every price-bearing field in AI Mode.

snippet_links

FieldTypeDescription
textstringAnchor text of the link.
linkstringDestination URL.

Response example

{
  "success": true,
  "result": {
    "text": "Here are a few well-reviewed wireless headphones under $200...",
    "shopping_cards": [
      {
        "title": "Sony WH-CH720N Noise Cancelling Headphones",
        "position": 1,
        "price": { "value": 149.99, "currency": "$", "raw": "$149.99" },
        "old_price": { "value": 199.99, "currency": "$", "raw": "$199.99" },
        "store": "Amazon",
        "rating": 4.5,
        "reviews": "2.3k",
        "thumbnail": "https://cdn.example.com/products/wh-ch720n.jpg",
        "product_link": "https://www.amazon.com/sony-wh-ch720n",
        "snippet": "Lightweight over-ear headphones with active noise canceling and 30-hour battery life",
        "snippet_links": [
          {
            "text": "noise canceling",
            "link": "https://www.google.com/search?q=noise+canceling"
          }
        ]
      }
    ]
  }
}

Notes