Questions & Answers
Due to changes implemented by Amazon, the amazon_questions source is no longer available. Q&As can now only be retrieved via Amazon's live search using query-based URLs. We are currently exploring the creation of a new source based on this method and provide updates as necessary.
The amazon_questions data source is designed to retrieve any particular product's Questions & Answers pages. To see the response example with retrieved data, download this sample output file in HTML format or check structured data output here.
Request samples
In the code examples below, we make a request to retrieve the Q&A page for ASIN B00004SU18 on amazon.nl marketplace.
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "amazon_questions",
"domain": "nl",
"query": "B00004SU18",
"parse": true
}'import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'amazon_questions',
'domain': 'nl',
'query': 'B00004SU18',
'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: "amazon_questions",
domain: "nl",
query: "B00004SU18",
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=amazon_questions&domain=nl&query=B00004SU18&parse=true&access_token=12345abcde<?php
$params = array(
'source' => 'amazon_questions',
'domain' => 'nl',
'query' => 'B00004SU18',
'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": "amazon_questions",
"domain": "nl",
"query": "B00004SU18",
"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 = "amazon_questions",
domain = "nl",
query = "B00004SU18",
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", "amazon_questions");
jsonObject.put("domain", "nl");
jsonObject.put("query", "B00004SU18");
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": "amazon_questions",
"domain": "nl",
"query": "B00004SU18",
"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 Amazon product Q&A pages.
source
Sets the scraper.
amazon_questions
query
10-symbol ASIN code.
-
- mandatory parameter
Localization
Adapt results to specific geographical locations, domains, and languages.
domain
Domain localization for Amazon. The full list of available domains can be found here.
com
locale
Accept-Language header value, which sets the interface language of the Amazon page. More info.
-
IMPORTANT: On most page types, Amazon tailors the returned results based on the delivery location of their customers. Therefore, we advise using the geo_location parameter to set your preferred delivery location. You can read more about using geo_location with Amazon here.
Structured data
Below you can find a structured output example for amazon_questions.
Data dictionary
HTML sample

JSON structure
The amazon_questions data provides detailed information about questions asked and answers provided by users regarding a specific product listed on Amazon. The table below presents a detailed list of each field we parse, along with its description and data type. The table also includes some metadata.
url
The URL of the Questions and Answers page of a selected Amazon product.
string
asin
Amazon Standard Identification Number.
string
page
The current page number.
integer
page_type
The type of the Amazon page.
string
questions
A list of questions with their respective details.
array
asin_in_url
Amazon Standard Identification Number extracted from the URL.
string
questions_total
The total number of questions submitted for the selected Amazon product.
integer
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
update_at
The timestamp when the scraping job was finished.
timestamp
job_id
The ID of the job associated with the scraping job.
string
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 for parsing the data.
string
Questions
questions contains multiple questions asked by users about a specific product, along with their respective details such as title and votes. Each question may also include a list of answers provided by users, including the author, content, and timestamp of each answer.
...
"questions": [
{
"title": "I bought these and a couple of the filters the water goes through the filter very fast. Is this a defect in the filter? Is the water still filtering",
"votes": 32,
"answers": [
{
"author": "bbbb3",
"content": "Came here to report the same problem/.../I am hesitant to reorder these filters via Amazon again.",
"timestamp": "October 9, 2022"
}
]
},
]
...title
The question submitted in the questions and answers page of the product.
string
votes
The number of votes.
integer
answers
A list of details available about the answer.
array
answers.author
Indication of the user who has submitted the answer.
string
answers.content
The content of the answer.
string
answers.timestamp
Indicates when the answer has been submitted.
timestamp
Last updated
Was this helpful?

