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

# Immersive product detail

> Get deep product details from Google's immersive product page.

## Identifying the product

This endpoint does **not** take an arbitrary `product_id`. To look a product up you must supply its **`gpcid`** — Google's Shopping product identifier — together with the original search query `q` that surfaced it. Pass the `gpcid` value in the `product_id` parameter:

```bash cURL theme={null}
curl "https://scrapebadger.com/v1/google/products/detail?product_id=12337842083609640743&q=wireless+earbuds" \
  -H "x-api-key: YOUR_API_KEY"
```

<Note>
  The `gpcid` is returned as the `gpcid` (also surfaced as `product_id`) field on every [`/v1/google/shopping/search`](/api-reference/google/google-shopping/search-products) result tile. The `q` is required because Google's RPC re-renders the SERP for that exact query to mint the session tokens used to fetch the detail page — so the product must be discoverable via `q`.
</Note>

<Tip>
  **Prefer `page_token` for new integrations.** Each `/v1/google/shopping/search` tile also returns a bundled `page_token` that encodes the `gpcid`, `q`, `gl`, `hl`, and `domain` for you. Passing `page_token` alone takes precedence over the legacy `product_id` + `q` form, so you don't have to track the original query yourself.
</Tip>


## OpenAPI

````yaml GET /v1/google/products/detail
openapi: 3.1.0
info:
  title: ScrapeBadger Google Scraper
  description: >-
    Dedicated API for scraping Google products (SERP, Maps, News, Hotels,
    Trends, Jobs, Shopping, Patents, Scholar, Autocomplete, Images, Videos,
    Finance, AI Mode, Lens, Products).
  version: 1.0.0
servers:
  - url: https://scrapebadger.com
    description: Production
security:
  - apiKeyAuth: []
paths:
  /v1/google/products/detail:
    get:
      tags:
        - Google Products
      summary: Google immersive product detail
      description: |-
        Get deep product details from Google's immersive product page.

        Two-step fetch: render the Shopping SERP for ``q`` to extract
        session-bound tokens, then call ``/async/oapv`` with them. Returns
        404 when the product isn't on the SERP — the caller's query has to
        surface the tile because the tokens are session-scoped.

        Response time: ~3 s warm (cached SERP), ~6 s cold (SERP + RPC).
        Credits: 5 per call (matches the Shopping product-detail cost).
      operationId: get_product_detail_api_v1_products_detail_get
      parameters:
        - name: product_id
          in: query
          required: true
          schema:
            type: string
            description: >-
              Google Shopping product identifier (``gpcid``). Returned as
              ``product_id``/``gpcid`` on ``/shopping/search`` tiles.
            title: Product Id
          description: >-
            Google Shopping product identifier (``gpcid``). Returned as
            ``product_id``/``gpcid`` on ``/shopping/search`` tiles.
        - name: q
          in: query
          required: true
          schema:
            type: string
            description: >-
              Original search query that surfaced the product. Required by
              Google's ``/async/oapv`` RPC — the page-level ``ei``/``xsrf`` and
              per-tile ``oapvfc`` tokens are extracted from the SERP Google
              renders for this exact query, so the product must be discoverable
              via this query.
            title: Q
          description: >-
            Original search query that surfaced the product. Required by
            Google's ``/async/oapv`` RPC — the page-level ``ei``/``xsrf`` and
            per-tile ``oapvfc`` tokens are extracted from the SERP Google
            renders for this exact query, so the product must be discoverable
            via this query.
        - name: gl
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Country code (ISO 3166 alpha-2). Defaults to the country implied
              by ``domain`` (e.g. ``google.com.au`` → ``au``), falling back to
              ``us`` when domain doesn't carry a country hint.
            title: Gl
          description: >-
            Country code (ISO 3166 alpha-2). Defaults to the country implied by
            ``domain`` (e.g. ``google.com.au`` → ``au``), falling back to ``us``
            when domain doesn't carry a country hint.
        - name: hl
          in: query
          required: false
          schema:
            type: string
            description: Language code.
            default: en
            title: Hl
          description: Language code.
        - name: domain
          in: query
          required: false
          schema:
            type: string
            description: >-
              Google domain ("google.com" / "google.co.uk" / …) — used to
              localise the SERP render that produces the session tokens.
            default: google.com
            title: Domain
          description: >-
            Google domain ("google.com" / "google.co.uk" / …) — used to localise
            the SERP render that produces the session tokens.
        - name: include_offers
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              When true, return the full merchant-offer list with deep product
              URLs for every merchant Google ships an offer-block for. Offers
              come from the primary oapv response (top ~5 panel merchants:
              DICK'S, Kohl's, Zappos, etc.) plus a parallel paginated fan-out of
              ``/async/oapv`` with ``async_context=MORE_STORES`` at offsets
              sori=5..60 — which surfaces an additional ~50 sellers including
              GOAT, eBay sub-sellers, Macy's, StockX, Poshmark, Flight Club,
              etc. (+5 parallel RPCs, ~1 s wall-clock).
            default: false
            title: Include Offers
          description: >-
            When true, return the full merchant-offer list with deep product
            URLs for every merchant Google ships an offer-block for. Offers come
            from the primary oapv response (top ~5 panel merchants: DICK'S,
            Kohl's, Zappos, etc.) plus a parallel paginated fan-out of
            ``/async/oapv`` with ``async_context=MORE_STORES`` at offsets
            sori=5..60 — which surfaces an additional ~50 sellers including
            GOAT, eBay sub-sellers, Macy's, StockX, Poshmark, Flight Club, etc.
            (+5 parallel RPCs, ~1 s wall-clock).
        - name: include_variants
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              When true, also fetch size/colour variants via ``/async/toy_v``
              (+1 secondary RPC, ~1 s).
            default: false
            title: Include Variants
          description: >-
            When true, also fetch size/colour variants via ``/async/toy_v`` (+1
            secondary RPC, ~1 s).
        - name: resolve_deep_urls
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              When true (only meaningful with ``include_offers=true``),
              browser-render the Shopping SERP so additional merchant deep URLs
              surface from the rendered HTML. Best-effort: catalog-feed
              retailers (DSW / Famous Footwear / Shoe Carnival / Myer / rebel)
              get deep URLs; paid-Shopping-Ads merchants (Zappos, GOAT, Academy,
              etc.) still get their homepage because their click-through URLs
              are signed by Google's aclk redirect and can't be reproduced
              server-side. Adds ~5–8 s latency.
            default: false
            title: Resolve Deep Urls
          description: >-
            When true (only meaningful with ``include_offers=true``),
            browser-render the Shopping SERP so additional merchant deep URLs
            surface from the rendered HTML. Best-effort: catalog-feed retailers
            (DSW / Famous Footwear / Shoe Carnival / Myer / rebel) get deep
            URLs; paid-Shopping-Ads merchants (Zappos, GOAT, Academy, etc.)
            still get their homepage because their click-through URLs are signed
            by Google's aclk redirect and can't be reproduced server-side. Adds
            ~5–8 s latency.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductDetailResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ProductDetailResponse:
      properties:
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        brand:
          anyOf:
            - type: string
            - type: 'null'
          title: Brand
        rating:
          anyOf:
            - type: number
            - type: 'null'
          title: Rating
        reviews_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Reviews Count
        price_range:
          anyOf:
            - type: string
            - type: 'null'
          title: Price Range
        sellers:
          items:
            $ref: '#/components/schemas/ProductSeller'
          type: array
          title: Sellers
        specs:
          additionalProperties:
            type: string
          type: object
          title: Specs
        images:
          items:
            type: string
          type: array
          title: Images
        product_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Product Id
      type: object
      title: ProductDetailResponse
      description: Response for GET /api/v1/products/detail.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ProductSeller:
      properties:
        name:
          type: string
          title: Name
        price:
          anyOf:
            - type: string
            - type: 'null'
          title: Price
        link:
          anyOf:
            - type: string
            - type: 'null'
          title: Link
        shipping:
          anyOf:
            - type: string
            - type: 'null'
          title: Shipping
      type: object
      required:
        - name
      title: ProductSeller
      description: A seller offering the product.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````