# Búsqueda de Shopping

El `google_shopping_search` source devuelve resultados de búsqueda de Google Shopping. Cada resultado renderizado incluye un **token de producto** que es necesario para recopilar datos del producto usando el `google_shopping_product` [source](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/targets/google/shopping/shopping-product).

## Muestras de solicitud

En el ejemplo de código a continuación, buscamos "Nvidia RTX" para obtener el producto `token` en la respuesta.

{% 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" %}
**Nota:** Solo los trabajos renderizados y parseados devolverán tokens de producto.
{% endhint %}

Usamos [**Realtime**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/integration-methods/realtime) método de integración en nuestros ejemplos. Si desea usar [**Proxy Endpoint**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/integration-methods/proxy-endpoint) o asincrónico [**Push-Pull**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/integration-methods/push-pull) integración, consulte el [**métodos de integración**](https://developers.oxylabs.io/documentation/es/soluciones-de-scraping/web-scraper-api/integration-methods) sección.

## Valores de parámetros de la solicitud

### Genérico

<table><thead><tr><th width="222">Parámetro</th><th width="330.3333333333333">Descripción</th><th>Valor predeterminado</th></tr></thead><tbody><tr><td><mark style="background-color:green;"><strong><code>source</code></strong></mark></td><td>Establece el 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>La palabra clave o frase para buscar.</td><td>-</td></tr><tr><td><mark style="color:predeterminado;background-color:green;"><strong><code>render</code></strong></mark></td><td>Habilita el renderizado de JavaScript. Debe establecerse en <code>html</code> para obtener <strong>tokens</strong>. <a href="../../../features/js-rendering-and-browser-control/javascript-rendering"><strong>Más información</strong></a><strong>.</strong></td><td>-</td></tr><tr><td><code>parse</code></td><td>Devuelve datos analizados cuando se establece en <code>true</code>. Explorar el <a href="#output-data-dictionary"><strong>diccionario de datos</strong></a>.</td><td><code>false</code></td></tr><tr><td><code>callback_url</code></td><td>URL de su endpoint de callback. <a href="../../../../integration-methods/push-pull#callback"><strong>Más información</strong></a>.</td><td>-</td></tr><tr><td><code>user_agent_type</code></td><td>Tipo de dispositivo y navegador. La lista completa se puede encontrar <a href="../../../features/http-context-and-job-management/user-agent-type"><strong>aquí</strong></a>.</td><td><code>desktop</code></td></tr></tbody></table>

&#x20;   \- parámetro obligatorio

### Localización

<table><thead><tr><th width="218">Parámetro</th><th width="336.3333333333333">Descripción</th><th>Valor predeterminado</th></tr></thead><tbody><tr><td><code>geo_location</code></td><td>La ubicación geográfica para la cual se deben adaptar los resultados. Usar este parámetro correctamente es extremadamente importante para obtener los datos correctos. Para más información, lea sobre nuestras sugeridas <code>geo_location</code> estructuras de parámetros <a href="../../../../features/localization/serp-localization#google"><strong>aquí</strong></a><strong>.</strong></td><td>-</td></tr><tr><td><code>locale</code></td><td><code>Accept-Language</code> valor del encabezado que cambia el idioma de la interfaz web de la página de búsqueda de Google. <a href="../../../../features/localization/domain-locale-results-language#locale-1"><strong>Más información</strong></a>.</td><td>-</td></tr><tr><td><code>context</code>:<br><code>results_language</code></td><td>Idioma de los resultados. La lista de idiomas de Google soportados se puede encontrar <a href="../../../../features/localization/domain-locale-results-language#results-language"><strong>aquí</strong></a>.</td><td>-</td></tr></tbody></table>

{% hint style="warning" %}
**Nota:** asegúrate de que tus parámetros de localización para `google_shopping_product` y `google_shopping_search` las fuentes sean los mismos (ninguno si no está definido). El desajuste regional entre las fuentes puede resultar en datos incompletos o inexactos.
{% endhint %}

### Paginación

Controles para gestionar la paginación y la recuperación de resultados de búsqueda.

<table><thead><tr><th width="222">Parámetro</th><th width="350.3333333333333">Descripción</th><th width="167">Valor predeterminado</th></tr></thead><tbody><tr><td><code>start_page</code></td><td>Número de página inicial.</td><td><code>1</code></td></tr><tr><td><code>pages</code></td><td>Número de páginas a recuperar.</td><td><code>1</code></td></tr></tbody></table>

### Parámetros de contexto

Opciones avanzadas para adaptar el contexto de búsqueda o controles para requisitos especializados. Los parámetros de contexto deben añadirse a un arreglo context como se muestra a continuación:

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

<table><thead><tr><th width="222">Parámetro</th><th width="350.3333333333333">Descripción</th><th>Valor predeterminado</th></tr></thead><tbody><tr><td><code>context</code>:<br><code>sort_by</code></td><td>Ordenar la lista de productos por un criterio dado. <code>r</code> aplica el orden predeterminado de Google, <code>rv</code> - por puntuación de reseñas, <code>p</code> - por precio ascendente, <code>pd</code> - por precio descendente.</td><td><code>r</code></td></tr><tr><td><code>context</code>:<br><code>min_price</code></td><td>Precio mínimo de los productos para filtrar.</td><td>-</td></tr><tr><td><code>context</code>:<br><code>max_price</code></td><td>Precio máximo de los productos para filtrar.</td><td>-</td></tr><tr><td><code>context</code>:<br><code>nfpr</code></td><td><code>true</code> desactivará la autocorrección ortográfica.</td><td>-</td></tr></tbody></table>

## "key": "filter",

A continuación puedes encontrar un **ejemplo de salida estructurada** para `google_shopping_search`.

{% file src="<https://338917265-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>" %}

## Diccionario de datos de salida

**Ejemplo HTML**

<figure><img src="https://338917265-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>

#### Estructura JSON

La tabla a continuación presenta una lista detallada de cada elemento de la página de búsqueda que analizamos, junto con su descripción y tipo de dato. La tabla también incluye algunos metadatos.

<table><thead><tr><th width="240">Clave</th><th width="373">Descripción</th><th width="143">Tipo</th></tr></thead><tbody><tr><td><code>url</code></td><td>La URL de la página de búsqueda de Google Shopping para la consulta.</td><td>string</td></tr><tr><td><code>Raspe múltiples páginas usando la misma dirección IP y sesión (conjunto de cookies). Al especificar los números de página en un array JSON con la</code></td><td>El número de página actual de los resultados de búsqueda.</td><td>integer</td></tr><tr><td><code>resultados</code></td><td>Un objeto que contiene resultados de búsqueda detallados.</td><td>object</td></tr><tr><td><code>pla</code> (opcional)</td><td>Una lista de anuncios de listado de productos con sus detalles respectivos.</td><td>array</td></tr><tr><td><code>filters</code> (opcional)</td><td>Lista de varios filtros.</td><td>array</td></tr><tr><td><code>organic</code></td><td>Una lista de listados no pagados con sus detalles respectivos.</td><td>array</td></tr><tr><td><code>search_information</code></td><td>Una lista de detalles para la consulta de búsqueda enviada.</td><td>object</td></tr><tr><td><code>search_information.query</code></td><td>El término de búsqueda original.</td><td>string</td></tr><tr><td><code>search_information.showing_results_for</code></td><td>El término de búsqueda para el que se muestran los resultados. `query` y `showing_results_for` pueden diferir si Google autocorrigió el término de búsqueda proporcionado.</td><td>string</td></tr><tr><td><code>last_visible_page</code></td><td>Valor que identifica el número máximo de página visible en la página de resultados de la consulta de búsqueda. (-1 cuando la carga de más resultados se inicia por desplazamiento).</td><td>integer</td></tr><tr><td><code>parse_status_code</code></td><td>El código de estado del trabajo de análisis. Puede ver los códigos de estado del parser descritos <a href="https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/shopping/broken-reference/README.md"><strong>aquí</strong></a>.</td><td>integer</td></tr><tr><td><code>created_at</code></td><td>La marca de tiempo cuando se creó el trabajo de scraping.</td><td>timestamp</td></tr><tr><td><code>updated_at</code></td><td>La marca de tiempo cuando se finalizó el trabajo de scraping.</td><td>timestamp</td></tr><tr><td><code>status_code</code></td><td>El código de estado del trabajo de scraping. Puede ver los códigos de estado del scraper descritos <a href="https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/google/shopping/broken-reference/README.md"><strong>aquí</strong></a>.</td><td>integer</td></tr><tr><td><code>job_id</code></td><td>El ID del trabajo asociado con el trabajo de scraping.</td><td>string</td></tr></tbody></table>

{% hint style="info" %}
En las secciones siguientes, los fragmentos de código JSON analizados se acortan cuando hay más de un elemento disponible para el tipo de resultado.
{% endhint %}

### Paid Listing Ads

Un arreglo de objetos que contiene Product Listing Ads (PLA) para el producto. (Ejemplo ilustrativo)

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

```json
...
  "pla": [
    {
        "results": {
            {
                "pla": {
                "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"
            },
                                ...
        ],
        "url_image": "https://encrypted-tbn3.gstatic.com/shopping?q=tbn:ANd9GcSTCgTZ1im_6ZX9YSCrjQfjVEnTmpmiqqYAHAhXzA9VhJdrokOeOnWsbEOxqA8zPkaos192xPF5ogA&usqp=CAc",
    }
],
...
```

<table><thead><tr><th width="188">Clave (pla)</th><th width="434">Descripción</th><th>Tipo</th></tr></thead><tbody><tr><td><code>elementos</code></td><td>Todos los PLA disponibles dentro de la página.</td><td>array</td></tr><tr><td><code>pos</code></td><td>Un indicador que denota la posición de un elemento dado entre los resultados PLA.</td><td>integer</td></tr><tr><td><code>url</code></td><td>La URL del producto.</td><td>string</td></tr><tr><td><code>price</code></td><td>El precio del producto en el anuncio de listado.</td><td>string</td></tr><tr><td><code>title</code></td><td>El título del producto en el anuncio de listado.</td><td>string</td></tr><tr><td><code>rating</code></td><td>La calificación del producto.</td><td>integer</td></tr><tr><td><code>seller</code></td><td>El vendedor del producto en el anuncio de listado.</td><td>string</td></tr><tr><td><code>thumbnail</code></td><td>La URL de la imagen en miniatura del producto.</td><td>string</td></tr><tr><td><code>reviews_count</code></td><td>El conteo de reseñas del producto.</td><td>opcional</td></tr><tr><td><code>pos_overall</code></td><td>Una indicación de la posición del resultado dentro del SERP.</td><td>integer</td></tr></tbody></table>

### Filtros

<figure><img src="https://338917265-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">Clave (filters)</th><th width="402">Descripción</th><th width="113">Tipo</th></tr></thead><tbody><tr><td><code>name</code></td><td>El nombre de la categoría de filtro</td><td>string</td></tr><tr><td><code>values</code></td><td>Opciones de filtro disponibles dentro de la categoría.</td><td>array</td></tr><tr><td><code>values.url</code></td><td>La URL que representa la consulta de búsqueda filtrada para esta opción de filtro.</td><td>string</td></tr><tr><td><code>values.value</code></td><td>El nombre de visualización de la opción de filtro</td><td>string</td></tr><tr><td><code>values.merchant_id</code> (opcional)</td><td>El ID del comerciante asociado con esta opción de filtro.</td><td>string</td></tr></tbody></table>

### Orgánico

Un arreglo de objetos que contiene detalles de los resultados de búsqueda orgánicos.

<figure><img src="https://338917265-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://338917265-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
...
"source": "https://www.shutterstock.com/search/adidas"
    {
        "pla": {
        "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">Clave (organic)</th><th width="360">Descripción</th><th>Tipo</th></tr></thead><tbody><tr><td><code>pos</code></td><td>La posición del producto en los resultados de búsqueda.</td><td>integer</td></tr><tr><td><code>url</code></td><td>La URL de la página del producto.</td><td>string</td></tr><tr><td><code>tipo</code></td><td>El tipo de diseño del anuncio.</td><td>string</td></tr><tr><td><code>price</code></td><td>El precio del producto en la moneda especificada.</td><td>float</td></tr><tr><td><code>title</code></td><td>El título del anuncio del producto.</td><td>string</td></tr><tr><td><code>token</code></td><td>El token del producto.</td><td>string</td></tr><tr><td><code>rating</code> (opcional)</td><td>La calificación media de usuario del producto, típicamente sobre 5.</td><td>integer</td></tr><tr><td><code>currency</code></td><td>El código de moneda para el precio del producto.</td><td>string</td></tr><tr><td><code>delivery</code></td><td>Detalles de la entrega, incluyendo la fecha estimada de entrega y la política de devoluciones.</td><td>string</td></tr><tr><td><code>merchant</code> (opcional)</td><td>Un objeto que contiene detalles sobre el comerciante que vende el producto.</td><td>object</td></tr><tr><td><code>merchant.url</code></td><td>La URL de la página del comerciante.</td><td>string</td></tr><tr><td><code>merchant.name</code></td><td>El nombre del comerciante.</td><td>string</td></tr><tr><td><code>price_str</code></td><td>El precio del producto como cadena, incluyendo el símbolo de la moneda.</td><td>string</td></tr><tr><td><code>thumbnail</code></td><td>La URL de la imagen en miniatura del producto.</td><td>string</td></tr><tr><td><code>product_id</code></td><td>Un identificador único para el producto.</td><td>string</td></tr><tr><td><code>pos_overall</code></td><td>La posición global del producto en los resultados de búsqueda.</td><td>integer</td></tr><tr><td><code>reviews_count</code> (opcional)</td><td>El número total de reseñas del producto.</td><td>integer</td></tr></tbody></table>
