# Shopping Search

The `google_shopping_search` source returns search results from Google Shopping. Each rendered result includes a **product token** which is required to collect product data using the `google_shopping_product` [source](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets/google/shopping/shopping-product).

## Request samples

In the code example below, we search for "Nvidia RTX" to obtain the product `token` in the response.

{% tabs %}
{% tab title="cURL" %}

```shell
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
    "source": "google_shopping_search",
    "query": "nvidia rtx",
    "render": "html",
    "parse": true
    }'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
from pprint import pprint


# Structure payload.
payload = {
    "source": "google_shopping_search",
    "query": "nvidia rtx",
    "render": "html",
    "parse": True
}

# Get response.
response = requests.request(
    "POST",
    "https://realtime.oxylabs.io/v1/queries",
    auth=("USERNAME", "PASSWORD"),
    json=payload,
)

# Print prettified response to stdout.
pprint(response.json())
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const https = require("https");

const username = "USERNAME";
const password = "PASSWORD";
const body = {
    source: "google_shopping_search",
    query: "nvidia rtx",
    render: "html",
    parse: true
};

const options = {
    hostname: "realtime.oxylabs.io",
    path: "/v1/queries",
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        Authorization:
            "Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
    },
};

const request = https.request(options, (response) => {
    let data = "";

    response.on("data", (chunk) => {
        data += chunk;
    });

    response.on("end", () => {
        const responseData = JSON.parse(data);
        console.log(JSON.stringify(responseData, null, 2));
    });
});

request.on("error", (error) => {
    console.error("Error:", error);
});

request.write(JSON.stringify(body));
request.end();
```

{% endtab %}

{% tab title="HTTP" %}

```http
https://realtime.oxylabs.io/v1/queries?source=google_shopping_search&query=nvidia+rtx&render=html&parse=true&access_token=12345abcde
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$params = array(
    'source' => 'google_shopping_search',
    'query' => 'nvidia rtx',
    'render' => 'html',
    'parse' => true
);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");

$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
echo $result;

if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
```

{% endtab %}

{% tab title="Golang" %}

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	const Username = "USERNAME"
	const Password = "PASSWORD"

	payload := map[string]interface{}{
		"source": "google_shopping_search",
		"query":  "nvidia rtx",
		"render": "html",
		"parse":  true,
	}

	jsonValue, _ := json.Marshal(payload)

	client := &http.Client{}
	request, _ := http.NewRequest("POST",
		"https://realtime.oxylabs.io/v1/queries",
		bytes.NewBuffer(jsonValue),
	)

	request.SetBasicAuth(Username, Password)
	response, _ := client.Do(request)

	responseText, _ := ioutil.ReadAll(response.Body)
	fmt.Println(string(responseText))
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

namespace OxyApi
{
    class Program
    {
        static async Task Main()
        {
            const string Username = "USERNAME";
            const string Password = "PASSWORD";

            var parameters = new {
                source = "google_shopping_search",
                query = "nvidia rtx",
                render = "html",
                parse = true
            };

            var client = new HttpClient();

            Uri baseUri = new Uri("https://realtime.oxylabs.io");
            client.BaseAddress = baseUri;

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
            requestMessage.Content = JsonContent.Create(parameters);

            var authenticationString = $"{Username}:{Password}";
            var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.ASCIIEncoding.UTF8.GetBytes(authenticationString));
            requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);

            var response = await client.SendAsync(requestMessage);
            var contents = await response.Content.ReadAsStringAsync();

            Console.WriteLine(contents);
        }
    }
}
```

{% endtab %}

{% tab title="Java" %}

```java
package org.example;

import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;

public class Main implements Runnable {
    private static final String AUTHORIZATION_HEADER = "Authorization";
    public static final String USERNAME = "USERNAME";
    public static final String PASSWORD = "PASSWORD";

    public void run() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("source", "google_shopping_search");
        jsonObject.put("query", "nvidia rtx");
        jsonObject.put("render", "html");
        jsonObject.put("parse", true);

        Authenticator authenticator = (route, response) -> {
            String credential = Credentials.basic(USERNAME, PASSWORD);
            return response
                    .request()
                    .newBuilder()
                    .header(AUTHORIZATION_HEADER, credential)
                    .build();
        };

        var client = new OkHttpClient.Builder()
                .authenticator(authenticator)
                .readTimeout(180, TimeUnit.SECONDS)
                .build();

        var mediaType = MediaType.parse("application/json; charset=utf-8");
        var body = RequestBody.create(jsonObject.toString(), mediaType);
        var request = new Request.Builder()
                .url("https://realtime.oxylabs.io/v1/queries")
                .post(body)
                .build();

        try (var response = client.newCall(request).execute()) {
            if (response.body() != null) {
                try (var responseBody = response.body()) {
                    System.out.println(responseBody.string());
                }
            }
        } catch (Exception exception) {
            System.out.println("Error: " + exception.getMessage());
        }

        System.exit(0);
    }

    public static void main(String[] args) {
        new Thread(new Main()).start();
    }
}
```

{% endtab %}

{% tab title="JSON" %}

```json
{
    "source": "google_shopping_search",
    "query": "nvidia rtx",
    "render": "html",
    "parse": true
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**Note:** Only rendered parsed jobs will return product tokens.
{% endhint %}

We use synchronous [**Realtime**](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/integration-methods/realtime) integration method in our examples. If you would like to use [**Proxy Endpoint**](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/integration-methods/proxy-endpoint) or asynchronous [**Push-Pull**](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/integration-methods/push-pull) integration, refer to the [**integration methods**](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/integration-methods) section.

## Request parameter values

### Generic

<table><thead><tr><th width="222">Parameter</th><th width="330.3333333333333">Description</th><th>Default Value</th></tr></thead><tbody><tr><td><mark style="background-color:green;"><strong><code>source</code></strong></mark></td><td>Sets the scraper.</td><td><code>google_shopping_search</code></td></tr><tr><td><mark style="background-color:green;"><strong><code>query</code></strong></mark></td><td>The keyword or phrase to search for.</td><td>-</td></tr><tr><td><mark style="background-color:green;"><strong><code>render</code></strong></mark></td><td>Enables JavaScript rendering. Must be set to <code>html</code> to get product <strong>tokens</strong>. <a href="../../../features/js-rendering-and-browser-control/javascript-rendering"><strong>More info</strong></a><strong>.</strong></td><td>-</td></tr><tr><td><code>parse</code></td><td>Returns parsed data when set to <code>true</code>. Explore output <a href="#output-data-dictionary"><strong>data dictionary</strong></a>.</td><td><code>false</code></td></tr><tr><td><code>callback_url</code></td><td>URL to your callback endpoint. <a href="../../../../integration-methods/push-pull#callback"><strong>More info</strong></a>.</td><td>-</td></tr><tr><td><code>user_agent_type</code></td><td>Device type and browser. The full list can be found <a href="../../../features/http-context-and-job-management/user-agent-type"><strong>here</strong></a>.</td><td><code>desktop</code></td></tr></tbody></table>

&#x20;   \- mandatory parameter

### Localization

<table><thead><tr><th width="218">Parameter</th><th width="336.3333333333333">Description</th><th>Default Value</th></tr></thead><tbody><tr><td><code>geo_location</code></td><td>The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested <code>geo_location</code> parameter structures <a href="../../../../features/localization/serp-localization#google"><strong>here</strong></a><strong>.</strong></td><td>-</td></tr><tr><td><code>locale</code></td><td><code>Accept-Language</code> header value which changes your Google search page web interface language. <a href="../../../../features/localization/domain-locale-results-language#locale-1"><strong>More info</strong></a>.</td><td>-</td></tr><tr><td><code>context</code>:<br><code>results_language</code></td><td>Results language. List of supported Google languages can be found <a href="../../../../features/localization/domain-locale-results-language#results-language"><strong>here</strong></a>.</td><td>-</td></tr></tbody></table>

{% hint style="warning" %}
**Note:** make sure your localization parameters for `google_shopping_product` and `google_shopping_search` sources are the same (none if not defined). Regional misalignment between the sources may result in incomplete or inaccurate data.
{% endhint %}

### Pagination

Controls for managing the pagination and retrieval of search results.

<table><thead><tr><th width="222">Parameter</th><th width="350.3333333333333">Description</th><th width="167">Default Value</th></tr></thead><tbody><tr><td><code>start_page</code></td><td>Starting page number.</td><td><code>1</code></td></tr><tr><td><code>pages</code></td><td>Number of pages to retrieve.</td><td><code>1</code></td></tr></tbody></table>

### Context parameters

Advanced options for tailoring the search context or controls for specialized requirements. Context parameters should be added to a context array as shown below:

```json
...
"context": [
    {
        "key": "filter",
        "value": "0"
    }
]
...
```

<table><thead><tr><th width="222">Parameter</th><th width="350.3333333333333">Description</th><th>Default Value</th></tr></thead><tbody><tr><td><code>context</code>:<br><code>sort_by</code></td><td>Sort product list by a given criteria. <code>r</code> applies default Google sorting, <code>rv</code> - by review score, <code>p</code> - by price ascending, <code>pd</code> - by price descending.</td><td><code>r</code></td></tr><tr><td><code>context</code>:<br><code>min_price</code></td><td>Minimum price of products to filter.</td><td>-</td></tr><tr><td><code>context</code>:<br><code>max_price</code></td><td>Maximum price of products to filter.</td><td>-</td></tr><tr><td><code>context</code>:<br><code>nfpr</code></td><td><code>true</code> will turn off spelling auto-correction.</td><td>-</td></tr></tbody></table>

## Structured data

Below you can find a **structured output example** for `google_shopping_search`.

{% file src="<https://63892162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FwdPGjAxSYXIVy6fxCRhR%2Fgoogle_shopping_search-output.json?alt=media&token=28f851cf-527c-4619-a81a-c8f5fa6478fa>" %}

## Output data dictionary

**HTML example**

<figure><img src="https://63892162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FFVGJfaQ1B7tj2WcvNPWO%2FScreenshot%202025-10-15%20at%2015.24.16.png?alt=media&#x26;token=5e390c87-35ad-4d49-81fc-eb998643371f" alt=""><figcaption></figcaption></figure>

#### JSON structure

The table below presents a detailed list of each search page element we parse, along with its description and data type. The table also includes some metadata.

<table><thead><tr><th width="240">Key</th><th width="373">Description</th><th width="143">Type</th></tr></thead><tbody><tr><td><code>url</code></td><td>The URL to the Google Shopping search page for the query.</td><td>string</td></tr><tr><td><code>page</code></td><td>The current page number of the search results.</td><td>integer</td></tr><tr><td><code>results</code></td><td>An object containing detailed search results.</td><td>object</td></tr><tr><td><code>pla</code> (optional)</td><td>A list of product listing ads with their respective details.</td><td>array</td></tr><tr><td><code>filters</code> (optional)</td><td>List of various filters.</td><td>array</td></tr><tr><td><code>organic</code></td><td>A list of unpaid listings with their respective details.</td><td>array</td></tr><tr><td><code>search_information</code></td><td>A list of details for the submitted search query.</td><td>object</td></tr><tr><td><code>search_information.query</code></td><td>The original search term.</td><td>string</td></tr><tr><td><code>search_information.showing_results_for</code></td><td>The search term the search results are shown for. `query` and `showing_results_for` may differ if Google auto-corrected the provided search term.</td><td>string</td></tr><tr><td><code>last_visible_page</code></td><td>Value identifying the maximum page number visible in the search query results page. (-1 when loading of more results is initiated by scrolling).</td><td>integer</td></tr><tr><td><code>parse_status_code</code></td><td>The status code of the parsing job. You can see the parser status codes described <a href="https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/shopping/broken-reference/README.md"><strong>here</strong></a>.</td><td>integer</td></tr><tr><td><code>created_at</code></td><td>The timestamp when the scraping job was created.</td><td>timestamp</td></tr><tr><td><code>updated_at</code></td><td>The timestamp when the scraping job was finished.</td><td>timestamp</td></tr><tr><td><code>status_code</code></td><td>The status code of the scraping job. You can see the scraper status codes described <a href="https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/shopping/broken-reference/README.md"><strong>here</strong></a>.</td><td>integer</td></tr><tr><td><code>job_id</code></td><td>The ID of the job associated with the scraping job.</td><td>string</td></tr></tbody></table>

{% hint style="info" %}
In the following sections, parsed JSON code snippets are shortened where more than one item for the result type is available.
{% endhint %}

### Paid Listing Ads

An array of objects containing Product Listing Ads (PLA) for the product. (Illustrative example)

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfkje7GDLS8Q67yEA9wX9tcFSZpI79pun9D5XUsoaHoOPqmVM9-eAAHoNd8n_pi46NKy648vV5yB_2GvzXZEhh7p8JRBV73GBVHiczC71v6haNGkdZqgYYnR8I44UdtzqzIGzdt3wp1dB0SG-xaR0sHCYj8?key=dCZ5EAYTk7rLOr8OSUpsuw" alt=""><figcaption></figcaption></figure>

```json
...
  "pla": [
    {
        "items": [
            {
                "pos": 1,
                "url": "/aclk?sa=l&ai=DChcSEwiY8fLUi9OGAxVtj1AGHYnVBj0YABABGgJkZw&gclid=EAIaIQobChMImPHy1IvThgMVbY9QBh2J1QY9EAQYASABEgKpS_D_BwE&sig=AOD64_2DguiyFTR4GRY6Ww9o__l9HgJC_A&ctype=5&q=&ved=0ahUKEwj-6ezUi9OGAxWiWUEAHdbxAgsQww8I2xA&adurl=",
                "price": "$2,199.00",
                "title": "Polycade Sente: Black",
                "seller": "Polycade",
                "thumbnail": "https://encrypted-tbn0.gstatic.com/shopping?q=tbn:ANd9GcS59ZNOrZH96cy_cOgzxL52VoJYq9iPl7q8g26f9odcuG8pY8ZRxe9YMhkZDPnFAZDyP04lu29gy57ObwsKpWHb_pzQBja34tkErnSAz3nw&usqp=CAE"
            },
            {
                "pos": 2,
                "url": "/aclk?sa=l&ai=DChcSEwiY8fLUi9OGAxVtj1AGHYnVBj0YABADGgJkZw&gclid=EAIaIQobChMImPHy1IvThgMVbY9QBh2J1QY9EAQYAiABEgJwHvD_BwE&sig=AOD64_0LFB8jrHwNdEkmOdjcjGOdhQ9ZVg&ctype=5&q=&ved=0ahUKEwj-6ezUi9OGAxWiWUEAHdbxAgsQww8I3hA&adurl=",
                "price": "$2,199.00",
                "title": "Polycade Sente: White",
                "seller": "Polycade",
                "thumbnail": "https://encrypted-tbn2.gstatic.com/shopping?q=tbn:ANd9GcQ2onFg_aXbg8LTX3qJT9f9XdiFrl_SNLXlpKhSjCQQ2c5EmQcrNXPwCMphjugJUhWctBpRVC0BiS4OUnq0FRAeQ4BXEWI6FuvZvGERsLc&usqp=CAE"
            },
                                ...
        ],
        "pos_overall": 1
    }
],
...
```

<table><thead><tr><th width="188">Key (pla)</th><th width="434">Description</th><th>Type</th></tr></thead><tbody><tr><td><code>items</code></td><td>All PLAs available within the page.</td><td>array</td></tr><tr><td><code>pos</code></td><td>An indicator denoting the position of a given item among PLA results.</td><td>integer</td></tr><tr><td><code>url</code></td><td>The URL of the product.</td><td>string</td></tr><tr><td><code>price</code></td><td>The price of the product in the listing ad.</td><td>string</td></tr><tr><td><code>title</code></td><td>The title of the product in the listing ad.</td><td>string</td></tr><tr><td><code>rating</code></td><td>The rating of the product.</td><td>integer</td></tr><tr><td><code>seller</code></td><td>The seller of the product in the listing ad.</td><td>string</td></tr><tr><td><code>thumbnail</code></td><td>The URL of the thumbnail image of the product.</td><td>string</td></tr><tr><td><code>reviews_count</code></td><td>The count of reviews for the product.</td><td>optional</td></tr><tr><td><code>pos_overall</code></td><td>An indication of the position of the result within the SERP.</td><td>integer</td></tr></tbody></table>

### Filters

<figure><img src="https://63892162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FbQA38FgDLSPjyisdPCfx%2FScreenshot%202025-10-15%20at%2016.29.04.png?alt=media&#x26;token=fb4173e0-f084-4371-addd-640228026a35" alt=""><figcaption></figcaption></figure>

```json
...
"filters": [
    {
        "name": "Show only",
        "values": [
            {
                "url": "/search?sca_esv=bbd3241cb3940ce2&sca_upv=1&gl=us&hl=en&tbm=shop&q=adidas&tbs=mr:1,sales:1&sa=X&ved=0ahUKEwikoMX_iNOGAxVvFbkGHV6uDZcQ7KEGCJ4WKAA",
                "value": "On sale"
            }
        ]
    },
    {
        "name": "Price",
        "values": [
            {
                "url": "/search?sca_esv=bbd3241cb3940ce2&sca_upv=1&gl=us&hl=en&tbm=shop&q=adidas&tbs=mr:1,price:1,ppr_max:40&sa=X&ved=0ahUKEwikoMX_iNOGAxVvFbkGHV6uDZcQvSsIohYoAA",
                "value": "Up to $40"
            },
                                ...
                                {
                "url": "/search?sca_esv=bbd3241cb3940ce2&sca_upv=1&gl=us&hl=en&tbm=shop&q=adidas&tbs=mr:1,price:1,ppr_min:90&sa=X&ved=0ahUKEwikoMX_iNOGAxVvFbkGHV6uDZcQvSsIpRYoAw",
                "value": "Over $90"
            }
        ]
    },
    {
        "name": "Color",
        "values": [
            {
                "url": "/search?sca_esv=bbd3241cb3940ce2&sca_upv=1&gl=us&hl=en&tbm=shop&q=adidas&tbs=mr:1,color:specific,color_val:black&sa=X&ved=0ahUKEwikoMX_iNOGAxVvFbkGHV6uDZcQtSsIrBYoAA",
                "value": "Black"
            },
                                ...
                                {
                "url": "/search?sca_esv=bbd3241cb3940ce2&sca_upv=1&gl=us&hl=en&tbm=shop&q=adidas&tbs=mr:1,color:specific,color_val:pink&sa=X&ved=0ahUKEwikoMX_iNOGAxVvFbkGHV6uDZcQtSsIshYoBg",
                "value": "Pink"
            }
        ]
    },
                        ...
]
```

<table><thead><tr><th width="238">Key (filters)</th><th width="402">Description</th><th width="113">Type</th></tr></thead><tbody><tr><td><code>name</code></td><td>The name of the filter category</td><td>string</td></tr><tr><td><code>values</code></td><td>Filter options available within the category.</td><td>array</td></tr><tr><td><code>values.url</code></td><td>The URL representing the filtered search query for this filter option.</td><td>string</td></tr><tr><td><code>values.value</code></td><td>The display name of the filter option</td><td>string</td></tr><tr><td><code>values.merchant_id</code> (optional)</td><td>The ID of the merchant associated with this filter option.</td><td>string</td></tr></tbody></table>

### Organic

An array of objects containing details of organic search results.

<figure><img src="https://63892162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FzYqsLANm9HZ9DMfeVQNc%2FScreenshot%202025-10-15%20at%2016.34.10.png?alt=media&#x26;token=2de4c379-ddac-4648-a42d-a6f6b9957662" alt=""><figcaption></figcaption></figure>

<figure><img src="https://63892162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FsmE3qjM6CkyUsWlZIVBK%2FScreenshot%202025-10-15%20at%2016.26.24.png?alt=media&#x26;token=9ee312a4-eaf0-4056-8086-53247a3337da" alt=""><figcaption></figcaption></figure>

```json
...
"organic": [
    {
        "pos": 1,
        "url": "https://www.google.com/shopping/product/16307418470740744792?q=nvidia+rtx&hl=en&udm=28&sei=j5fsaPC2FYWQur8P293m8A8&gl=us",
        "type": "grid",
        "price": 3090,
        "title": "NVIDIA GeForce RTX 5090 32GB GDDR7 Graphics Card",
        "token": "eyJjYXRhbG9naWQiOiAiMTYzMDc0MTg0NzA3NDA3NDQ3OTIiLCAiZ3BjaWQiOiAiMjM4NTIwNzk2NTI4MjUxMzUzOSIsICJpbWFnZURvY2lkIjogIjkyMjY0MjkwODMxMzQ4NDkwNDUiLCAibWlkIjogIiIsICJwdm8iOiAiMjMiLCAicHZ0IjogImhnIiwgInJkcyI6ICJQQ18yMzg1MjA3OTY1MjgyNTEzNTM5fFBST0RfUENfMjM4NTIwNzk2NTI4MjUxMzUzOSIsICJwcm9kdWN0aWQiOiAiIiwgInF1ZXJ5IjogIm52aWRpYSBydHgifQ==",
        "rating": 4.6,
        "currency": "USD",
        "delivery": "Free delivery by Fri",
        "merchant": {
            "name": "eBay"
        },
        "price_str": "$3,090.00",
        "thumbnail": "<THUMBNAIL_STR>",
        "product_id": "1503163696221055935",
        "pos_overall": 1,
        "reviews_count": 311
    },
]
...
```

<table><thead><tr><th width="266">Key (organic)</th><th width="360">Description</th><th>Type</th></tr></thead><tbody><tr><td><code>pos</code></td><td>The position of the product in the search results.</td><td>integer</td></tr><tr><td><code>url</code></td><td>The URL of the product page.</td><td>string</td></tr><tr><td><code>type</code></td><td>The type of listing layout.</td><td>string</td></tr><tr><td><code>price</code></td><td>The price of the product in the specified currency.</td><td>float</td></tr><tr><td><code>title</code></td><td>The title of the product listing.</td><td>string</td></tr><tr><td><code>token</code></td><td>The product token.</td><td>string</td></tr><tr><td><code>rating</code> (optional)</td><td>The average user rating of the product, typically out of 5.</td><td>integer</td></tr><tr><td><code>currency</code></td><td>The currency code for the product price.</td><td>string</td></tr><tr><td><code>delivery</code></td><td>Delivery details, including estimated delivery date and return policy.</td><td>string</td></tr><tr><td><code>merchant</code> (optional)</td><td>An object containing details about the merchant selling the product.</td><td>object</td></tr><tr><td><code>merchant.url</code></td><td>The URL of the merchant's page.</td><td>string</td></tr><tr><td><code>merchant.name</code></td><td>The name of the merchant.</td><td>string</td></tr><tr><td><code>price_str</code></td><td>The product price as a string, including the currency symbol.</td><td>string</td></tr><tr><td><code>thumbnail</code></td><td>The URL of the product's thumbnail image.</td><td>string</td></tr><tr><td><code>product_id</code></td><td>A unique identifier for the product.</td><td>string</td></tr><tr><td><code>pos_overall</code></td><td>The overall position of the product in the search results.</td><td>integer</td></tr><tr><td><code>reviews_count</code> (optional)</td><td>The total number of reviews for the product.</td><td>integer</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets/google/shopping/shopping-search.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
