Shopping Product
The google_shopping_product source retrieves detailed product information (title, description, pricing, sellers, related items, reviews, etc.) from Google Shopping using a product token acquired from google_shopping_search source.
Request samples
In the code example below, we make a request to retrieve the product page for a Google Shopping product using a valid token.
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "google_shopping_product",
"query": "<PRODUCT_TOKEN>",
"render": "html",
"parse": true
}'import requests
from pprint import pprint
# Structure payload.
payload = {
"source": "google_shopping_product",
"query": "[product_token_string]",
"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())const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "google_shopping_product",
query: "[product_token_string]",
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();https://realtime.oxylabs.io/v1/queries?source=google_shopping_product&query=[product_token_string]&parse=true&access_token=12345abcde<?php
$params = array(
'source' => 'google_shopping_product',
'query' => '[product_token_string]',
'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);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_product",
"query": "[product_token_string]",
"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))
}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_product",
query = "[product_token_string]",
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);
}
}
}package org.example;
import okhttp3.*;
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_product");
jsonObject.put("query", "[product_token_string]");
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();
}
}{
"source": "google_shopping_product",
"query": "[product_token_string]",
"render": "html",
"parse": true
}We use synchronous Realtime integration method in our examples. If you would like to use Proxy Endpoint or asynchronous Push-Pull integration, refer to the integration methods section.
Request parameter values
Generic
Basic setup and customization options for scraping Google Shopping product pages.
source
Sets the scraper.
google_shopping_product
query
The product token from google_shopping_search
-
render
Enables JavaScript rendering when set to html. Required to receive additional pricing results from "More stores" section. More info.
-
- mandatory parameter
Localization
Adapt results to specific geographical locations, domains, and languages.
geo_location
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 geo_location parameter structures here.
-
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.
Structured data
Below you can find a structured output example for google_shopping_product.
Output data dictionary
HTML sample

JSON structure
The table below presents a detailed list of each product page element we parse, along with its description and data type. The table also includes some metadata.
url
The URL to the Google Shopping product page.
string
title
The title of the product listing.
string
description
A detailed description of the product.
string
images
An object containing images of the product.
object
images.full_size
An array of URLs for full-sized images of the product.
array
images.thumbnails
An array of URLs for thumbnail images of the product.
array
pricing
An array containing all online pricing information.
array
reviews
An object containing review information. (US only)
object
variants
An array of objects containing product variants. (colors, sizes, etc.)
array
related_items
An array of objects containing related items.
array
specifications
An array of objects containing product specifications.
array
parse_status_code
The status code of the parsing job. You can see the parser status codes described here.
integer
created_at
The timestamp when the scraping job was created.
timestamp
updated_at
The timestamp when the scraping job was finished.
timestamp
status_code
The status code of the scraping job. You can see the scraper status codes described here.
integer
job_id
The ID of the job associated with the scraping job.
string
Pricing
An object containing pricing information for the product.

...
"pricing": {
"online": [
{
"price": 559,
"seller": "Walmart - Seller",
"details": "Pny GeForce RTX 4070 GPU 12gb Xlr8 Gaming Verto Epic-x RGB Triple Fan Dlss 3 Graphics Card",
"currency": "USD",
"condition": "New",
"seller_link": "https://www.walmart.com/ip/PNY-GeForce-RTX-4070-GPU-12GB-XLR8-Gaming-VERTO-EPIC-X-RGB-Triple-Fan-DLSS-3-Graphics-Card/1396859462?wmlspartner=wlpa&selectedSellerId=101035116&selectedOfferId=159733DADC653E1891C050148D16D747&conditionGroupCode=1",
"price_shipping": 22.05
},
...
]
},
...online
An array of objects containing details of pricing for the product.
array
online.price
The price of the product in the specified currency.
float
online.seller
The name of the seller or merchant offering the product.
string
online.details
Additional details about the product, purchase, such as delivery and return policies.
string
online.currency
The currency code for the product price.
string
online.condition
The condition of the product.
string
online.price_tax
The amount of tax applied to the product price.
float
online.price_total (optional)
The total price of the product, including tax.
float
online.seller_link
The URL to the seller's page for the product.
string
online.price_shipping
The shipping cost for the product.
float
Reviews
An object containing reviews and ratings information for the product.

...
"reviews": {
"rating": 4.7,
"top_review": {
"text": "My computer is a Dell Optiplex 9020, i7-4770, 32mb, 500gb SSD. The 3 fan card is a long, and the hard drive cage had to be removed to fit in the Optiplex case. The power supply was upgraded to 750 watts which required an adapter for the Dell motherboard. With those modifications out of the way, installation of the card was drama free, but you have use Google to find the driver in the Nvidia website. I am using this GPU for 3D animation in Blender. I am very pleased with the speed of the rendering with ray tracing in EEVEE and Cycles. As this is an old computer, the computer's CPU never runs at 100%, and I haven't been able to max out this card's capacity yet. I don't hear the fans running but I have never put a high load enough on it yet, I guess. It does have a little electronic buzz when it is rendering.\u00a0Less",
"author": "walmart.com Shopper",
"rating": 5,
"source": "Reviewed on walmart.com"
},
"rating_stars": 4.7,
"reviews_count": 51,
"reviews_by_stars": {
"1": {
"reviews_count": 2
},
"2": {
"reviews_count": 0
},
"3": {
"reviews_count": 2
},
"4": {
"reviews_count": 3
},
"5": {
"reviews_count": 44
}
},
},
...rating
The average rating of the product, typically out of 5.
float
top_review
An object containing details of the top review for the product.
object
top_review.text (optional)
The text content of the top review
string
top_review.title (optional)
The title of the top review.
string
top_review.author
The author of the top review.
string
top_review.rating
The rating given by the top review's author, typically out of 5.
float
top_review.source
The source or website where the top review was posted.
string
rating_stars
The average rating of the product, typically out of 5 stars.
float
reviews_count (optional)
The total number of reviews for the product.
integer
reviews_by_stars
An object containing the count of reviews for each star rating.
object
reviews_by_stars.url (optional)
An object containing details of X-star reviews.
string
reviews_by_stars.reviews_count
The count of X-star reviews.
integer
Related Items (More options)
An array of objects containing related items for the target product.

...
"related_items": [
{
"items": [
{
"url": "/search?ibp=oshop&prds=catalogid:1368129371371338580,gpcid:14975392695437189622,headlineOfferDocid:2388507960063782588,imageDocid:1618178582933849531,productid:7780474142858650836,pvo:2,pvt:hg,rds:PC_14975392695437189622%7CPROD_PC_14975392695437189622&q=nvidia+rtx&gl=us&hl=en&pvorigin=2",
"image": "https://encrypted-tbn3.gstatic.com/shopping?q=tbn:ANd9GcScO-LIdlqj1WjcLznMECFXNo4qbZ1TRbkfHdDsDPoIYxx7S9TjKhnQX7Ah6QsKI-zPBKFrC54H0wGZC60Q_NdRebesvYUXwRhQFuZRwvtWmx4_0xoxbylM",
"price": 639.99,
"title": "NVIDIA GeForce RTX 5070 12GB GDDR7 Graphics Card",
"currency": "USD",
"reviews_count": 228
},
...
],
"title": "More options"
}
],
...items
An array of objects containing details of each related item.
array
items.url
The URL to the related product page.
string
items.image
The URL of the related product's image.
string
items.price
The price of the related product in the specified currency.
float
items.title (optional)
The title of the related product listing.
string
items.rating (optional)
The average user rating of the related product, typically out of 5.
integer
items.store (optional)
The name of the store or merchant offering the related product.
string
items.currency
The currency code for the product price.
string
items.reviews_count
The total number of reviews for the related product.
integer
title
The title or heading for the related items section
string
Specifications
An array of objects containing specification details for the product.

...
"specifications": [
{
"items": [
{
"title": "Manufacturer",
"value": "PNY"
},
{
"title": "Output",
"value": "HDMI, DisplayPort"
},
{
"title": "Interface",
"value": "PCI Express"
},
{
"title": "Brand",
"value": "PNY"
},
...
],
"section_title": "attributes"
}
],
...items
An array of objects containing individual specification details.
array
items.title
The title of the specification.
string
items.value
The value of the specification.
string
section_title
The title or heading for the section of specifications.
string
Last updated
Was this helpful?

