Product
The bestbuy_product source is designed to retrieve Bestbuy product result pages. We can return the HTML for any Best Buy page you like. Additionally, we can deliver structured (parsed) output for Best Buy product pages.
Request samples
The samples below illustrates how you can get a parsed Best Buy product result.
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "bestbuy_product",
"product_id": "6586591",
"parse": true
}'import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'bestbuy_product',
'product_id': '6586591',
'parse': True
}
# Get response.
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'),
json=payload,
)
# Instead of response with job status and results url, this will return the
# JSON response with the result.
pprint(response.json())const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "bestbuy_product",
query: "6586591",
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();# The whole string you submit has to be URL-encoded.
https://realtime.oxylabs.io/v1/queries?source=bestbuy_product&product_id=6586591&parse=true&access_token=12345abcde<?php
$params = array(
'source' => 'bestbuy_product',
'product_id' => '6586591',
'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": "bestbuy_product",
"product_id": "6586591",
"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 = "bestbuy_product",
product_id = "6586591",
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", "bestbuy_product");
jsonObject.put("product_id", "6586591");
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": "bestbuy_product",
"product_id": "6586591",
"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
source
Sets the scraper.
universal
product_id
7-symbol product ID.
-
- mandatory parameter
Localization
Adapt results to specific domains, stores, delivery locations.
domain
Domain localization for Bestbuy. Available values: com, ca.
com
String
store_id
Specify a store.
-
Integer
delivery_zip
Set the delivery ZIP location.
-
String
E-Commerce Scraper API can extract Best Buy product results in either HTML or JSON format, providing structured data on various elements of the page.
Output example
{
"results": [
{
"content": {
"url": "https://www.bestbuy.com/site/apple-iphone-15-plus-128gb-black-verizon/6525454.p?skuId=6525454&intl=nosplash",
"price": {
"price": 25.83,
"currency": "USD"
},
"title": "Apple - iPhone 15 Plus 128GB - Black (Verizon)",
"rating": {
"count": 55,
"score": 4.3
},
"_errors": [
"'NoneType' object has no attribute 'xpath'"
],
"product_id": "6525410",
"is_sold_out": false,
"parse_status_code": 12004,
},
"created_at": "2024-06-13 11:44:20",
"updated_at": "2024-06-13 11:44:48",
"page": 1,
"url": "https://www.bestbuy.com/site/apple-iphone-15-plus-128gb-black-verizon/6525454.p?skuId=6525454&intl=nosplash",
"job_id": "7206984735770310657",
"status_code": 200,
"parser_type": "bestbuy_product"
}
]
}Output data dictionary
HTML example

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 of the Best Buy product page.
string
price
The price object, containing price and currency information.
object
price.price
The price of the product.
float
price.currency
The currency in which the price is denominated.
string
title
The title of the product.
string
rating
The rating object, containing count and score of ratings.
object
rating.count
The number of ratings received for the product.
integer
rating.score
The rating score of the product.
integer
product_id
The unique identifier for the product.
string
is_sold_out
Indicates whether the product is sold out.
boolean
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
page
The page number in the pagination of results.
integer
status_code
The status code of the scraping job. You can see the scraper status codes described here.
integer
parser_type
The type of parser used to extract the data.
integer
job_id
The ID of the job associated with the scraping job.
string
Last updated
Was this helpful?

