---
title: "Track Google Search results"
method: POST
path: "/v1/monitor/google"
---

# Track Google Search results

`POST /v1/monitor/google`

## Request

- Base URL: `https://api.answerline.dev`
- URL: `https://api.answerline.dev/v1/monitor/google`
- Auth: HTTP bearer

Get structured output from Google Search: organic listings, related searches, People Also Ask and, optionally, the AI Overview

## Request body

- union
  - object
    - `query` string, required: Query to run on Google. Mandatory when 'url' is not given; send one or the other, never both.
    - `url` string, uri: A full URL of a Google web search, executed as-is in place of a request assembled from 'query' plus the targeting fields. It has to be absolute and http(s), hosted on one of Google's web search domains (google.com, google.co.uk, www.google.de, ...), with '/search' as its path and a 'q' that is not empty. Cannot be combined with 'query', 'location', 'uule' or 'pages', since the URL already determines them. It may carry only these query parameters: 'q', 'gl', 'num' (treated as result depth), 'hl' and 'uule'; a URL with any other (such as 'start', 'tbs' or 'safe') is refused with a 400. A URL containing 'tbm' is refused: it points at a Google vertical that has a separate endpoint and price (for tbm=nws, call POST /v1/monitor/google/news).
    - `country` string, required: Country for localized search results, as an ISO 3166-1 alpha-2 code. Mandatory in the standard request form. If you send 'url' instead, the country is taken from the URL's 'gl' parameter — set it yourself to override that value, or when the URL carries no 'gl'.
    - `gl` string: Google's own name for the result-geography parameter, usable in place of `country`. Takes ISO 3166-1 alpha-2 codes, as `country` does, in upper or lower case (`us` or `US`), and the country has to be one this endpoint supports (list them with `GET /v1/countries`). Send either `country` or `gl`; if both are sent with differing values, the request fails with `400`.
    - `hl` string: Interface language, in the format of Google's `hl` parameter (for example `en`, `de`, `pt-BR`). Case-insensitive free text; Google defines which codes exist. Takes precedence over the language Answerline infers from the country, which lets interface language and result geography differ.
    - `location` string: Location name in Google's canonical comma-separated form 'City,Region,Country' (roughly 100,000 accepted locations are listed at https://developers.google.com/google-ads/api/reference/data/geotargets). Combine with 'country' to target a specific city. Cannot be sent together with 'uule' — choose one of the two. Not allowed when 'url' is set.
    - `uule` string: A ready-made Google UULE string for exact geo-targeting, in the location-name form (starting w+CAIQICI); the coordinate form (a+) is refused with a 400. Supply it when you already have an encoded UULE rather than a location name. Cannot be sent together with 'location' — pass only one of the two. Not allowed together with 'url'; in that case add 'uule' to the URL's query string.
    - `device` 'desktop' | 'mobile' | 'ios' | 'android': Device to run the search on. 'desktop' gives the desktop SERP, while 'ios' (Safari on an iPhone), 'android' (Chrome on an Android phone) and 'mobile' (same as 'android') each give the mobile SERP.
    - `pages` integer: How many pages of search results to retrieve (1-10). Not allowed together with 'url' — when 'url' is given, depth is taken from the URL's 'num' parameter (rounded up to full 10-result pages, at most 10 pages).
    - `include` object: Flags that add extra data to the response (optional)
      - `html` boolean: Not available for Google Search, so `true` is refused with a validation error.
      - `aioverview` object: Add Google's AI Overview to the response
        - `markdown` boolean: Return the AI Overview in markdown form
      - `paaAioverview` boolean: Fill People Also Ask items of the AI Overview type with markdown content and their sources. Charges nothing past the AI Overview add-on; every hydrated item needs one more fetch (usually 1-2 on a page), which makes responses slower.
      - `googleGoto` boolean: Has had no effect since 8th September 2026. Each redirect link is now always returned as `redirectLink` next to its target, so you get both without setting this flag. Requests that still include it are handled as though it were omitted.
      - `rawWire` boolean: Return the engine's upstream answer as received in result.rawWire: the answer stream, or the provider's answer record, without the provider's billing data and account traces. Free. See https://answerline.dev/docs/output-formats#raw-wire
  - object
    - `query` string, required: Query to run on Google. Mandatory when 'url' is not given; send one or the other, never both.
    - `url` string, uri: A full URL of a Google web search, executed as-is in place of a request assembled from 'query' plus the targeting fields. It has to be absolute and http(s), hosted on one of Google's web search domains (google.com, google.co.uk, www.google.de, ...), with '/search' as its path and a 'q' that is not empty. Cannot be combined with 'query', 'location', 'uule' or 'pages', since the URL already determines them. It may carry only these query parameters: 'q', 'gl', 'num' (treated as result depth), 'hl' and 'uule'; a URL with any other (such as 'start', 'tbs' or 'safe') is refused with a 400. A URL containing 'tbm' is refused: it points at a Google vertical that has a separate endpoint and price (for tbm=nws, call POST /v1/monitor/google/news).
    - `country` string: Country for localized search results, as an ISO 3166-1 alpha-2 code. Mandatory in the standard request form. If you send 'url' instead, the country is taken from the URL's 'gl' parameter — set it yourself to override that value, or when the URL carries no 'gl'.
    - `gl` string, required: Google's own name for the result-geography parameter, usable in place of `country`. Takes ISO 3166-1 alpha-2 codes, as `country` does, in upper or lower case (`us` or `US`), and the country has to be one this endpoint supports (list them with `GET /v1/countries`). Send either `country` or `gl`; if both are sent with differing values, the request fails with `400`.
    - `hl` string: Interface language, in the format of Google's `hl` parameter (for example `en`, `de`, `pt-BR`). Case-insensitive free text; Google defines which codes exist. Takes precedence over the language Answerline infers from the country, which lets interface language and result geography differ.
    - `location` string: Location name in Google's canonical comma-separated form 'City,Region,Country' (roughly 100,000 accepted locations are listed at https://developers.google.com/google-ads/api/reference/data/geotargets). Combine with 'country' to target a specific city. Cannot be sent together with 'uule' — choose one of the two. Not allowed when 'url' is set.
    - `uule` string: A ready-made Google UULE string for exact geo-targeting, in the location-name form (starting w+CAIQICI); the coordinate form (a+) is refused with a 400. Supply it when you already have an encoded UULE rather than a location name. Cannot be sent together with 'location' — pass only one of the two. Not allowed together with 'url'; in that case add 'uule' to the URL's query string.
    - `device` 'desktop' | 'mobile' | 'ios' | 'android': Device to run the search on. 'desktop' gives the desktop SERP, while 'ios' (Safari on an iPhone), 'android' (Chrome on an Android phone) and 'mobile' (same as 'android') each give the mobile SERP.
    - `pages` integer: How many pages of search results to retrieve (1-10). Not allowed together with 'url' — when 'url' is given, depth is taken from the URL's 'num' parameter (rounded up to full 10-result pages, at most 10 pages).
    - `include` object: Flags that add extra data to the response (optional)
      - `html` boolean: Not available for Google Search, so `true` is refused with a validation error.
      - `aioverview` object: Add Google's AI Overview to the response
        - `markdown` boolean: Return the AI Overview in markdown form
      - `paaAioverview` boolean: Fill People Also Ask items of the AI Overview type with markdown content and their sources. Charges nothing past the AI Overview add-on; every hydrated item needs one more fetch (usually 1-2 on a page), which makes responses slower.
      - `googleGoto` boolean: Has had no effect since 8th September 2026. Each redirect link is now always returned as `redirectLink` next to its target, so you get both without setting this flag. Requests that still include it are handled as though it were omitted.
      - `rawWire` boolean: Return the engine's upstream answer as received in result.rawWire: the answer stream, or the provider's answer record, without the provider's billing data and account traces. Free. See https://answerline.dev/docs/output-formats#raw-wire
  - object
    - `query` string: Query to run on Google. Mandatory when 'url' is not given; send one or the other, never both.
    - `url` string, uri, required: A full URL of a Google web search, executed as-is in place of a request assembled from 'query' plus the targeting fields. It has to be absolute and http(s), hosted on one of Google's web search domains (google.com, google.co.uk, www.google.de, ...), with '/search' as its path and a 'q' that is not empty. Cannot be combined with 'query', 'location', 'uule' or 'pages', since the URL already determines them. It may carry only these query parameters: 'q', 'gl', 'num' (treated as result depth), 'hl' and 'uule'; a URL with any other (such as 'start', 'tbs' or 'safe') is refused with a 400. A URL containing 'tbm' is refused: it points at a Google vertical that has a separate endpoint and price (for tbm=nws, call POST /v1/monitor/google/news).
    - `country` string: Country for localized search results, as an ISO 3166-1 alpha-2 code. Mandatory in the standard request form. If you send 'url' instead, the country is taken from the URL's 'gl' parameter — set it yourself to override that value, or when the URL carries no 'gl'.
    - `gl` string: Google's own name for the result-geography parameter, usable in place of `country`. Takes ISO 3166-1 alpha-2 codes, as `country` does, in upper or lower case (`us` or `US`), and the country has to be one this endpoint supports (list them with `GET /v1/countries`). Send either `country` or `gl`; if both are sent with differing values, the request fails with `400`.
    - `hl` string: Interface language, in the format of Google's `hl` parameter (for example `en`, `de`, `pt-BR`). Case-insensitive free text; Google defines which codes exist. Takes precedence over the language Answerline infers from the country, which lets interface language and result geography differ.
    - `location` string: Location name in Google's canonical comma-separated form 'City,Region,Country' (roughly 100,000 accepted locations are listed at https://developers.google.com/google-ads/api/reference/data/geotargets). Combine with 'country' to target a specific city. Cannot be sent together with 'uule' — choose one of the two. Not allowed when 'url' is set.
    - `uule` string: A ready-made Google UULE string for exact geo-targeting, in the location-name form (starting w+CAIQICI); the coordinate form (a+) is refused with a 400. Supply it when you already have an encoded UULE rather than a location name. Cannot be sent together with 'location' — pass only one of the two. Not allowed together with 'url'; in that case add 'uule' to the URL's query string.
    - `device` 'desktop' | 'mobile' | 'ios' | 'android': Device to run the search on. 'desktop' gives the desktop SERP, while 'ios' (Safari on an iPhone), 'android' (Chrome on an Android phone) and 'mobile' (same as 'android') each give the mobile SERP.
    - `pages` integer: How many pages of search results to retrieve (1-10). Not allowed together with 'url' — when 'url' is given, depth is taken from the URL's 'num' parameter (rounded up to full 10-result pages, at most 10 pages).
    - `include` object: Flags that add extra data to the response (optional)
      - `html` boolean: Not available for Google Search, so `true` is refused with a validation error.
      - `aioverview` object: Add Google's AI Overview to the response
        - `markdown` boolean: Return the AI Overview in markdown form
      - `paaAioverview` boolean: Fill People Also Ask items of the AI Overview type with markdown content and their sources. Charges nothing past the AI Overview add-on; every hydrated item needs one more fetch (usually 1-2 on a page), which makes responses slower.
      - `googleGoto` boolean: Has had no effect since 8th September 2026. Each redirect link is now always returned as `redirectLink` next to its target, so you get both without setting this flag. Requests that still include it are handled as though it were omitted.
      - `rawWire` boolean: Return the engine's upstream answer as received in result.rawWire: the answer stream, or the provider's answer record, without the provider's billing data and account traces. Free. See https://answerline.dev/docs/output-formats#raw-wire

## Response `200`

Google monitoring result (success)

- GoogleMonitorResponse
  - `success` boolean, required
  - `result` object, required: Results returned by Google Search
    - `organicResults` object[]: Google organic results
      - `position` number: Rank among search results (1-indexed)
      - `title` string: Search result title
      - `link` string: Link to the search result
      - `displayedLink` string: URL in the form shown on the results page
      - `snippet` string: Short text summarizing what the page contains
      - `date` string: Date of publication, if known
      - `page` number: Results page this item was found on (1-indexed)
      - `sitelinks` object: Sitelinks shown beneath the main result
        - `inline` object[]: Inline sitelinks
          - `title` string
          - `link` string
          - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `peopleAlsoAsk` object[]: Google's "People also ask" questions
      - `question` string: Text of the question
      - `type` 'AIOVERVIEW' | 'LINK' | 'UNKNOWN': Kind of question result
      - `snippet` string: Short excerpt of the answer (LINK type)
      - `title` string: Title of the result (only for type LINK)
      - `link` string: Result link URL (only for type LINK)
      - `markdown` string: Markdown of the AI Overview (AIOVERVIEW type only, when include.paaAioverview is true)
      - `sources` object[]: Sources the answer cites; present for the AIOVERVIEW type if include.paaAioverview is true
        - `label` string: Source title
        - `url` string: Link to the source
        - `description` string: Text describing the source
        - `position` number: Rank of the source (1-indexed)
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `peopleAreSaying` object[]: Items from the Google results module titled "What people are saying" or "Trending posts and discussions". When the page has no such module, `result` leaves this field out instead of returning an empty array, so treat it as optional.
      - `position` number, required: Rank inside the module (1-indexed)
      - `title` string, required: Title of the card as it appears on the results page
      - `link` string, required: URL the card links to, frequently a thread on Reddit, Quora or another community forum
      - `date` string, required: Relative time exactly as Google printed it (for example "3 hours ago", "1 month ago"). Unstructured text; not converted into a timestamp.
      - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `localResults` object[]: Businesses in Google's local pack (the map-based "3-pack" of nearby businesses shown for local-intent searches, e.g. "best ramen in seattle"). If the SERP has no local pack, `result` does not contain this field at all, so treat it as optional instead of relying on an empty array. Applies to desktop only; neither the mobile layout nor the hotels/travel pack (a separate panel) is returned.
      - `position` number, required: Rank inside the pack (1-indexed)
      - `title` string, required: Name of the business as the SERP shows it
      - `placeId` string: The place's entity identifier in Google
      - `rating` number: Mean star rating (0–5)
      - `reviews` string: Number of reviews exactly as Google shows it (e.g. "26K"). Arbitrary text, not converted to a number.
      - `price` string: Price range as Google shows it (e.g. "$20–30"). The currency symbol follows the locale.
      - `type` string: Category of the business (for example "Bakery", "Electrician")
      - `yearsInBusiness` string: Badge showing how long the business has operated, if displayed (common in service-type packs)
      - `address` string: Street address or locality exactly as the results page shows it
      - `phone` string: Phone number in local format, if shown
      - `hours` string: Opening hours exactly as shown (e.g. "Open · Closes 10 PM", "Open 24 hours")
      - `description` string: Snippet shown at the end: either a quoted review or a line listing service options
      - `links` object: Action links displayed for the place. They usually appear in packs of service businesses (plumbers, salons, …) and are missing from restaurant packs, where each place is just a plain button. A key is included only if Google showed the corresponding button.
        - `website` string: Website address of the business itself
        - `directions` string: Full URL for directions in Google Maps
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `localResultsMoreLink` string: Full URL of the "More places" / "More businesses" control shown under the local pack; it opens Google's larger Local Finder for this query. Present only together with `localResults`, and only if the SERP shows that control.
    - `relatedSearches` object[]: Suggested related searches
      - `query` string: A related search query
      - `link` string: URL of the Google results page for this related search
    - `ads` object[]: Sponsored results in Google search: text ads (`type: RESULT`), plus sponsored shopping cards (`type: SHOPPING_CARD`) drawn from the carousels at the top of the page and in the right-hand column.
      - `position` number: Rank inside the ad block (1-indexed)
      - `blockPosition` 'top' | 'bottom' | 'middle' | 'rhs': Placement of the ad on the results page. `top`/`bottom` denote text-ad blocks, `middle` means direct or in-content ads, and `rhs` means the sponsored-products carousel on the right-hand side.
      - `type` 'RESULT' | 'SHOPPING_CARD': Tells plain text ads (`RESULT`) apart from sponsored shopping-style cards (`SHOPPING_CARD`). Shopping cards come from the PLA carousel on the right-hand side, the PLA carousel at the top of the page, and the sponsored shopping-card carousels at the top of the page (vehicles, products, hotels, …).
      - `title` string: Ad title
      - `url` string, uri: URL the ad leads to. On `type: SHOPPING_CARD` items it is a URL that Google redirects through `aclk?`.
      - `page` number: Results page on which the ad appeared
      - `displayedUrl` string: URL in the form shown in the ad
      - `domain` string: Advertiser's domain name
      - `description` string: Body copy of the ad. On `type: RESULT` items it is ordinary ad text. On `type: SHOPPING_CARD` items it holds subtitle pieces that depend on the category, separated by `·` (for instance vehicle condition plus city: `Used - 94k miles · Greeley`).
      - `category` string: Heading shown above the carousel that holds shopping-card ads; values seen at present include `Sponsored products`, `Sponsored vehicles` and `Sponsored hotels`. Not set on text ads (`type: RESULT`).
      - `price` object: Price of the product on ads whose type is `SHOPPING_CARD`. `value` and `currency` are filled in only if the displayed price string can be read unambiguously as a number plus a symbol. `raw` holds the displayed text exactly as shown (e.g. `"$0 down with 24 monthly payments"` for installment offers), letting consumers tell a real zero price apart from a down-payment label.
        - `value` number, nullable: Price as a number
        - `currency` string, nullable: Currency symbol
        - `raw` string, nullable: Price text exactly as displayed
      - `oldPrice` object: Pre-sale price for ads of `type: SHOPPING_CARD` showing MSRP or sale wording. Uses the same shape as `price`.
        - `value` number, nullable: Price as a number
        - `currency` string, nullable: Currency symbol
        - `raw` string, nullable: Price text exactly as displayed
      - `store` string: Name of the merchant or dealer on a `type: SHOPPING_CARD` ad.
      - `imageUrl` string, uri: URL of the main image for `type: SHOPPING_CARD` ads, hosted on Google's `encrypted-tbn` CDN. Left out when the lazy-loaded image chain yields only a placeholder.
      - `sitelinks` object[]: Sitelinks shown beneath the ad
        - `url` string, uri: Sitelink URL
        - `title` string: Sitelink title
        - `description` string: Sitelink description
    - `aioverview` object, nullable: Data from Google's AI Overview, when requested; null if no AI Overview could be obtained after retrying.
      - `sources` object[]: Sources the AI Overview cites
        - `position` number: Position of the source, counting from 1
        - `url` string: Source URL
        - `label` string: Title of the source (the label Google shows on the sources rail)
        - `description` string: Snippet or description of the source
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `citationPills` object[]: Citation pills that appear inline in the AI Overview answer. Every element pairs one pill with one source: a pill backed by N sources (Google's `[Label +N]` chips) yields N elements with the same `citationPillId`, each holding that source's own `label`, `url` and `domain`. Grouping by `citationPillId` rebuilds the pills. Not present in `result.aioverview` if the answer has no pills.
        - `label` string, required: Title of this individual source as shown in the sources rail (e.g. `"Chase Personal Credit Cards"`). Empty string if the rail gives no title for it; then identify the source by `domain` / `url`. Entries that share a `citationPillId` each have their own per-source label.
        - `citationPillId` integer, required: One-based number common to every entry that comes from one chip. Grouping on `citationPillId` rebuilds the chip as displayed; each entry's `label` is specific to its source, so it varies inside a chip.
        - `url` string, required: Link straight to the cited source.
        - `domain` string, required: Hostname taken from `url`, useful for grouping and display.
        - `description` string: Source snippet shown in the sources rail, if Google supplies one; omitted when the source has no snippet.
        - `position` integer, required: Index of this source within the sibling `result.aioverview.sources` array, starting at 1.
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `relatedLinks` object[]: Items in the "View related links" flyout of a citation chip: URLs that Google files under the chip but that do NOT appear in the `sources` rail (a comparison link to Google Shopping, for instance). Every entry has its chip's `citationPillId`, so it can be matched with the `citationPills` of that chip; it has no `position`, since a related link is not part of `sources`. Because these links are also rendered inline in `markdown`, `markdown` can list URLs beyond those in `sources` / `citationPills`; this array accounts for the extra ones. Not present in `result.aioverview` if none of the chips has related links.
        - `label` string, required: Title taken from the related page itself. If Google provides no title this is an empty string; use `domain` / `url` to identify the page instead.
        - `citationPillId` integer, required: Same value as `citationPillId` on the chip's `citationPills` entries, which lets you attach a related link to its pill.
        - `url` string, required: URL the related link points to directly.
        - `domain` string, required: Hostname taken from `url`, useful for grouping and display.
        - `description` string: Snippet that Google provides for the related link; left out when missing.
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `text` string: Plain text of the AI Overview
      - `markdown` string: The AI Overview rendered as markdown (only when requested)
      - `videos` object[]: Videos shown inside the AI Overview
        - `url` string, uri: Link straight to the video
        - `title` string: Video title
        - `thumbnail` string, uri: URL of the thumbnail image
        - `source` string: Name of the channel or source
        - `platform` string: Video platform
        - `date` string: Upload date
        - `duration` string: Video duration
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `ads` object[]: Paid ads that Google places inside the AI Overview
        - `position` number, required: Rank of the ad (1-indexed)
        - `title` string, required: Ad title
        - `url` string, required: Landing page URL of the ad
        - `type` 'TEXT' | 'SHOPPING', required: Sub-type discriminator, always present. TEXT ads include `domain` and `description`; SHOPPING ads include `price` and `store` (and optionally `old_price`).
        - `domain` string: Advertiser's domain name; set if `type` is `TEXT`
        - `description` string: Body copy of the ad (only when `type` is `TEXT`)
        - `price` object: Price of the product (given when `type` equals `SHOPPING`). `value` and `currency` are filled in only if the displayed price string can be read unambiguously as a number plus a symbol; `raw` holds the displayed text exactly as shown.
          - `value` number, nullable: Price as a number
          - `currency` string, nullable: Currency symbol
          - `raw` string, nullable: Price text exactly as displayed
        - `old_price` object: Pre-sale price; included for ads whose `type` is `SHOPPING` if they carry sale pricing. Uses the same shape as `price`.
          - `value` number, nullable: Price as a number
          - `currency` string, nullable: Currency symbol
          - `raw` string, nullable: Price text exactly as displayed
        - `store` string: Retailer's name; included when `type` equals `SHOPPING`
        - `image` string: URL of the ad's image (the product photo on shopping ads, the hero image on text ads)
    - `shoppingCards` object[]: Product cards taken from the organic shopping grids on the results page ("Popular products" / "More products"). When the page has no shopping section, `result` does not include this field at all, so clients should handle it as optional instead of relying on an empty array. The shape reuses field names from `shopping_cards` in AI Mode for consistency across endpoints, but its keys are camelCase (`productLink`, `oldPrice`) in the Google response.
      - `title` string, required: Product title
      - `position` integer: Rank starting at 1 over the entire `shoppingCards` array, following the order on the page (one continuous sequence that does not restart at each `category` section).
      - `productLink` string, required: Link straight to the product. Where a click leads is filled in by JavaScript, so the static HTML usually yields an empty string here; clicking the card opens an overlay sidebar on Google instead of leaving the page.
      - `promoLabel` string: Discount label exactly as Google shows it, in the language of the SERP (e.g. "LOW PRICE", "OFERTA", "PROMOÇÃO", "20% OFF"), shown over the product name on cards with a discount. Set only on cards that show the label, and only for Google; AI Mode never shows it.
      - `category` string: Text of the enclosing section heading, so callers can tell cards apart from other shopping panels shown on the same SERP. Google currently emits values such as "More products" and "Popular products".
      - `price` object: Price details in structured form. `value` and `currency` are set only if the visible price text can be parsed without ambiguity into a number and a symbol; `raw` holds the visible text exactly as shown.
        - `value` number, nullable: Numeric price
        - `currency` string, nullable: Currency symbol
        - `raw` string, nullable: Price text exactly as displayed
      - `oldPrice` object: Price before the discount. Uses the same shape as `price`.
        - `value` number, nullable: Numeric price
        - `currency` string, nullable: Currency symbol
        - `raw` string, nullable: Price text exactly as displayed
      - `store` string: Merchant/store name
      - `rating` number: Product rating
      - `reviews` string: Review count
      - `thumbnail` string, uri: URL of the product image
    - `knowledgeGraph` object: Knowledge Graph panel Google shows for the entity in the query. Not included in `result` if the results page has no such panel — handle the field as optional; it is not sent as null.
      - `title` string: Name of the entity from the panel's heading
      - `type` string: Category label for the entity exactly as Google shows it (for instance "British singer", "Italian cathedral"). Any string is possible; it is not an enum.
      - `kgmid` string: The entity's ID in the Google Knowledge Graph
      - `description` string: Brief summary of the entity (can come from Wikipedia or from Google's knowledge base)
      - `imageUrl` string: Image URL for the entity, as Google delivers it
      - `website` string: The entity's official website URL
      - `menu` string: Link to the menu — given for restaurants and other food businesses
      - `trailer` string: Link to the trailer; included for movies and TV series
      - `source` object: Where the entity description comes from (usually Wikipedia)
        - `name` string: Name shown for the source
        - `link` string: Link to the source page
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `attributes` object[]: Facts from the panel as key-value pairs (such as founded, headquarters, CEO). Keys are arbitrary strings, taken as Google shows them.
        - `key` string: Attribute label
        - `value` string: Attribute value
      - `profiles` object[]: Links to the entity's social media and other external profiles
        - `name` string: Name of the platform or profile
        - `link` string: Profile URL
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `peopleAlsoSearchFor` object[]: Other entities people search for alongside this one
        - `name` string: Name of the related entity
        - `link` string: URL of a Google search for this related entity
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `thingsToKnow` object[]: Topic groups parsed from the "Things to know" panel
        - `label` string: Label of the topic cluster
        - `subtitle` string: Subtitle or extra text accompanying the topic
      - `ratings` object[]: Ratings from review platforms (e.g. Rotten Tomatoes, IMDb); included for movies and TV series
        - `platform` string: Name of the review platform
        - `rating` string: Rating exactly as shown
        - `link` string: Link to the reviews page
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `streamingOptions` object[]: Links to streaming platforms for movies and TV series
        - `platform` string: Name of the streaming platform
        - `link` string: URL where the platform hosts the content
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `webRatings` object[]: Ratings collected from online review sites; included when the result is a local business (such as Google, Tripadvisor, Yelp)
        - `platform` string: Name of the rating platform
        - `rating` string: Rating exactly as shown
        - `link` string: Link to this platform's reviews page
        - `votes` string: Vote or review count (absent when unavailable)
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `statsCard` object: Card with statistics; included for entities such as sports teams and organizations
        - `context` string: Label giving the stats their context, such as a year or season
        - `stats` object[]: Entries for each statistic
          - `label` string: Stat label
          - `value` string: Stat value
      - `socialPosts` object[]: Latest social media posts published by the entity's official accounts
        - `platform` string: Name of the social platform
        - `text` string: Text of the post
        - `link` string: Link to the post
        - `date` string: Posting date as Google displays it
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `notableAlumni` object[]: Well-known alumni — given for universities and other educational institutions
        - `name` string: Alumni name
        - `link` string: URL of a Google search for this person
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `contact` object[]: Links for contacting or ordering; included for local businesses
        - `label` string: Link label
        - `url` string: Link URL
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `weather` object: Weather right now; included for geographic entities such as cities and regions
        - `temperature` string: Temperature exactly as shown
        - `condition` string: Weather condition
      - `rating` object: Overall star rating; included for local businesses
        - `rating` string: Value of the star rating
        - `count` string: Review count
      - `admission` object[]: Ticket choices; included for museums, parks and other venues that charge entry
        - `provider` string: Name of the ticket seller
        - `price` string: Entry price exactly as shown
        - `link` string: Link for buying tickets
        - `badge` string: Badge label, if any (e.g. "Free", "Best price"); absent otherwise
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `artworks` object[]: Well-known artworks — given for artists and for art institutions
        - `title` string: Artwork title
        - `link` string: URL with further details about the artwork
        - `author` string: Name of the author or creator; absent if not shown
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `has3dModel` boolean: True if Google offers an interactive 3D view of the entity
      - `hotelOptions` object[]: Options for booking the hotel — only for hotel entities
        - `provider` string: Name of the booking provider
        - `price` string: Price exactly as shown
        - `link` string: Booking link for this provider
        - `note` string: Note text, if any (e.g. "Free cancellation"); absent otherwise
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `trendingProducts` object[]: Products currently trending; included for retail brands
        - `title` string: Product title
        - `price` string: Price exactly as shown
        - `link` string: URL of the product
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `merchantVideos` object[]: Videos from the merchant or brand — given for retail businesses
        - `title` string: Video title
        - `link` string: Video URL
        - `platform` string: Platform hosting the video; left out if unknown
        - `duration` string: Length of the video as shown; left out if unknown
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `listenOn` object[]: Links to music streaming services — given for musicians and bands
        - `platform` string: Name of the streaming platform
        - `link` string: URL of the artist's page on the platform
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `html` string[]: Raw HTML of the Google search page (when requested)

## Other responses

- `400`: Bad Request - one or more parameters are not valid
- `401`: Unauthorized - API key absent or not valid
- `403`: Forbidden - not enough balance, or access was refused
- `404`: Not Found - No such route
- `409`: Conflict - the resource is in a conflicting state
- `429`: Too Many Requests - the request went over a rate limit or concurrency limit, or the service dropped the request because it was overloaded (`SERVICE_OVERLOADED`); that case returns `Retry-After` without any limit headers
- `499`: Client Closed Request - the client cancelled the request
- `500`: Internal Server Error
- `502`: Bad Gateway - an upstream service failed

---

[API](https://skmtc.dev/answerline/apis/answerline-api.md) · [All operations](https://skmtc.dev/answerline/apis/answerline-api/llms.txt) · [OpenAPI document](https://skmtc.dev/answerline/apis/answerline-api/revisions/a9dc35794662?raw)
