Skip to main content
Product results are the merchant offers behind each product cluster in a Google AI Mode response — merchant URL, price, installment terms, and stock, delivery and returns badges. Set include.expandProducts to get them as result.productResults.
Without the flag, products are reported at cluster level only: shopping cards and inline products carry a headline price and a link to Google’s product viewer. Expansion opens that viewer and returns the offers inside it. Both arrays are unchanged either way.
Product viewer opened from an AI Mode product

Product viewer opened from an AI Mode product

Same shape as Google Search product results, where the panel is already in the SERP and needs no flag.

Limits and cost

Each entry is one product cluster, deduplicated across shoppingCards and inlineProducts, and costs one extra fetch of Google’s product viewer:
  • +1 credit per entry returned, charged after the scrape completes
  • 6 clusters expanded per scrape at most, so the surcharge tops out at +6
  • clusters that fail to fetch are dropped from the array, and not charged
See providers for the pricing table.

Product result structure

Each entry describes one product cluster and its merchant offers. Only title is guaranteed — anything Google’s panel omits is left out of the object rather than sent as null. Panels can also carry brand, rating, reviews, priceRange, typicalPrices, variants, relatedProducts, userReviews, videos, discussionsAndForums and highlights, emitted under those names when present, though most carry none of them.

Specifications

A category name mapped to a flat set of spec key/value pairs:
Category names and spec keys arrive in the response language — a country: "MX" request returns {"general": {"Marca": "Sennheiser"}}. Iterate the object; don’t read a hard-coded key like specifications.general.Brand.

Store structure

Expect the first six on most offers and the rest only occasionally. Everything beyond name is optional and omitted when absent — Google shows different combinations per merchant, so an “Out of stock” listing may have no price or link at all.
link is not validated against the cluster. Google occasionally serves a merchant URL for an unrelated SKU, so an offer’s link can point at a different product than its description names. Verify against description if link correctness matters.

Price shape

currency here is an ISO code ("USD"), while shopping cards and inline products carry the raw symbol ("$"). Normalize before comparing across surfaces.

Response example

Note the two currency conventions in the same payload: shoppingCards[].price.currency is the raw symbol ("$"), while productResults[].stores[].price.currency is an ISO code ("USD").