# Questions & Answers

{% hint style="danger" %}
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.
{% endhint %}

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**](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiwDdoZGfMbUe5cRL2417%2Fuploads%2F1i8qUTsaifrfTht9VdXK%2Famazon_questions.json?alt=media\&token=a59d9850-d79b-40bc-a2a6-bdd802eafd6b) file in HTML format or check structured data output [**here**](#structured-data).

{% hint style="info" %}
Explore output [**data dictionary**](#data-dictionary) for Questions & Answers, offering a brief description, screenshot, parsed JSON code snippet, and a table defining each parsed field. Navigate through the details using the right-side navigation or scrolling down the page.
{% endhint %}

## Request samples

In the code examples below, we make a request to retrieve the Q\&A page for ASIN `B00004SU18` on `amazon.nl` marketplace.

{% tabs %}
{% tab title="cURL" %}
```shell
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
    }'
```
{% endtab %}

{% tab title="Python" %}
```python
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())
```
{% endtab %}

{% tab title="Node.js" %}
```javascript
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();
```
{% endtab %}

{% tab title="HTTP" %}
```http
https://realtime.oxylabs.io/v1/queries?source=amazon_questions&domain=nl&query=B00004SU18&parse=true&access_token=12345abcde
```
{% endtab %}

{% tab title="PHP" %}
```php
<?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);
```
{% 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": "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))
}

```
{% 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 = "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);
        }
    }
}
```
{% endtab %}

{% tab title="Java" %}
```java
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();
    }
}
```
{% endtab %}

{% tab title="JSON" %}
```json
{
    "source": "amazon_questions", 
    "domain": "nl", 
    "query": "B00004SU18",
    "parse": true
}
```
{% endtab %}
{% endtabs %}

We use synchronous [**Realtime**](../../integration-methods/realtime) integration method in our examples. If you would like to use [**Proxy Endpoint**](../../integration-methods/proxy-endpoint) or asynchronous [**Push-Pull**](../../integration-methods/push-pull) integration, refer to the [**integration methods**](../../integration-methods) section.

## Request parameter values

### Generic

Basic setup and customization options for scraping Amazon product Q\&A pages.

<table><thead><tr><th width="222">Parameter</th><th width="331.3333333333333">Description</th><th>Default Value</th></tr></thead><tbody><tr><td><mark style="background-color:green;"><strong>source</strong></mark></td><td>Sets the scraper.</td><td><code>amazon_questions</code></td></tr><tr><td><mark style="background-color:green;"><strong>query</strong></mark></td><td>10-symbol ASIN code.</td><td>-</td></tr><tr><td><code>render</code></td><td>Enables JavaScript rendering when set to <code>html</code>. <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

Adapt results to specific geographical locations, domains, and languages.

| Parameter      | Description                                                                                                                                                                                                                                        | Default Value |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| `geo_location` | The _Deliver to_ location. See our guide to using this parameter [**here**](../../features/localization/e-commerce-localization)**.**                                                                                                              | -             |
| `domain`       | Domain localization for Amazon. The full list of available domains can be found [**here**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/amazon/broken-reference/README.md).            | `com`         |
| `locale`       | `Accept-Language` header value, which sets the interface language of the Amazon page. [**More info**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/amazon/broken-reference/README.md). | -             |

{% hint style="warning" %}
**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**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/amazon/broken-reference/README.md).
{% endhint %}

## Structured data

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

<details>

<summary><code>Amazon_questions</code> <strong>structured output</strong></summary>

```json
{
    "results": [
        {
            "content": {
                "url": "https://www.amazon.com/ask/questions/asin/B07VGRJDFY/1?isAnswered=all",
                "asin": "B07VGRJDFY",
                "page": 1,
                "page_type": "Question",
                "questions": [
                    {
                        "title": "Every where sold out the first days will they restock them this special edition.",
                        "votes": 138,
                        "answers": [
                            {
                                "author": "KIWIBEARSHARE",
                                "content": "Since it’s been months I’ll post an update for everyone trying to get one after X-mas & New Years. So, they will be “restocking” and selling PRE-ORDERS. But they sell out in 20 min or less (at least it was that long for me). I was lucky and was awake at 3am (PST) for the pre-order sale and bought mine. I bought from SHIP & SOLD BY AMAZON, not a 3rd party, bc there’s been problems and reports of them switching out the battery for older versions. And paying $350+ ain’t worth it no matter how desperate you are. No this is NOT limited, it’s SPECIAL edition. Meaning there will be restocks in the future! If your lucky like me, my purchase was pre-ordered & expected to come next month but it got changed to this week? A welcomed surprise nonetheless. This means there’s a chance for everyone to get their pre-ordered switch earlier than expected! Good luck on getting your switch!",
                                "timestamp": "January 6, 2021"
                            }
                        ]
                    },
                    {
                        "title": "Is this the Switch that has the better battery life?",
                        "votes": 119,
                        "answers": [
                            {
                                "author": "Alex P.",
                                "content": "Animal Crossing: New Horizons is set to be released on Switch on March 20, 2020. ... This is the newer model of Switch console - the HAC-001(-01) - meaning it will come with a battery life range of 4.5 to 9 hours. The original Switch model released in 2017 has an expected battery life of 2.5 to 6.5 hours.",
                                "timestamp": "August 5, 2021"
                            }
                        ]
                    },
                    {
                        "title": "Can you hack this switch?",
                        "votes": 65,
                        "answers": [
                            {
                                "author": "Daniel Loeb",
                                "content": "maybe some day, but current known RCM payload exploit is patched on all HAC-001-01 model switches. \"Fusée Gelée\" is patched.",
                                "timestamp": "October 14, 2020"
                            }
                        ]
                    },
                    {
                        "title": "Will there be a restock ?",
                        "votes": 60,
                        "answers": [
                            {
                                "author": "Amazon Customer",
                                "content": "If you can catch it right when Amazon restocks, they sell at MSRP ($299.99) for about a minute or two, then the price skyrockets.",
                                "timestamp": "April 1, 2020"
                            }
                        ]
                    },
                    {
                        "title": "Why so expensive now ?",
                        "votes": 36,
                        "answers": [
                            {
                                "author": "Donald Louie",
                                "content": "Because no one has seemed to have ever heard of supply and demand. If there's 0 retail stock I'd rather have the option to get one for $450 than not have one at all. That being said, Google \"Stock Informer\" and sign up for all the browser and/or Discord alerts. I ordered mine at MSRP from Amazon.com by being a bit patient. Also- Craiglist people are worse than the internet markets- Used Switches with 2 games and 2 controllers for ~$750!!!",
                                "timestamp": "August 9, 2020"
                            }
                        ]
                    },
                    {
                        "title": "Is it necessary to buy a memory card?",
                        "votes": 31,
                        "answers": [
                            {
                                "author": "Elisabeth",
                                "content": "Eventually yes. With the onboard memory you will be able to download the updates (Wolfenstein 2 had upwards of a 13 gig update..\rEven Spyro requires a download to play the games not included on cartridge .) If you stick to physical only games and are vigilant with managing your data- ie deleting update data etc when done playing you can theoretically avoid buying a memory card. However there are so many good eshop games and a 64 gig card is like $10 and that should suffice for an individual who mostly buys physical games but still wants to download every once in awhile.",
                                "timestamp": "October 7, 2019"
                            }
                        ]
                    },
                    {
                        "title": "Does this come with a digital download code for the game?",
                        "votes": 28,
                        "answers": [
                            {
                                "author": "Alicia S. Ingram",
                                "content": "No, it does not come with a game.",
                                "timestamp": "February 28, 2020"
                            }
                        ]
                    },
                    {
                        "title": "Does this switch have the upgraded battery life?",
                        "votes": 15,
                        "answers": [
                            {
                                "author": "Dce",
                                "content": "Sounds like this is version 2, so yes.",
                                "timestamp": "February 5, 2020"
                            }
                        ]
                    },
                    {
                        "title": "Why so much? $299 In stores. I can wait if its not in stock.",
                        "votes": 13,
                        "answers": [
                            {
                                "author": "Rita",
                                "content": "$299 is the best price that i have seen this console at.",
                                "timestamp": "January 3, 2021"
                            }
                        ]
                    },
                    {
                        "title": "Does the charger for The Switch V2 support both 110v-220v?",
                        "votes": 12,
                        "answers": [
                            {
                                "author": "RDH",
                                "content": "Yes it will, just remember it’s got a 110 plug",
                                "timestamp": "September 13, 2019"
                            }
                        ]
                    }
                ],
                "asin_in_url": "B07VGRJDFY",
                "questions_total": 1000,
                "parse_status_code": 12000
            },
            "created_at": "2022-05-09 06:56:31",
            "updated_at": "2022-05-09 06:56:34",
            "page": 1,
            "url": "https://www.amazon.com/ask/questions/asin/B07VGRJDFY/1?isAnswered=all",
            "job_id": "6929323198081155073",
            "status_code": 200,
            "parser_type": ""
        }
    ]
}s
```

</details>

## Data dictionary

#### HTML sample

<figure><img src="https://63892162-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FbJvdVVDBAFoc19yOjtu4%2Famazon_qna.png?alt=media&#x26;token=08784259-da85-4365-9172-07749dc810ca" alt=""><figcaption></figcaption></figure>

#### 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.

| Key                 | Description                                                                                                                                                                                                                                 | Type      |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
| `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**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/amazon/broken-reference/README.md).   | 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**](https://github.com/oxylabs/gitbook-public-english/blob/master/scraping-solutions/web-scraper-api/targets/amazon/broken-reference/README.md). | integer   |
| `parser_type`       | The type of parser used for parsing the data.                                                                                                                                                                                               | string    |

{% 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 %}

### 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.

<figure><img src="https://lh7-us.googleusercontent.com/TIcM993VdXMrIM1a34u2M6OXY-_t7Y3Sk_B-_TsNdwM2_OZShLvtMB_5TQ0yPcUCXqC4NgWPa9CNsJ-HdtES6zg0flasYf_uSB1gIZKZs9dGZ8rcDjbC-82eaTXxsYOrAzXnQCsovwwN9uCC_5o1_iI" alt=""><figcaption></figcaption></figure>

```
... 
"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"
            }
        ]
    },
]
...
```

<table><thead><tr><th width="222">Key (questions)</th><th width="361">Description</th><th>Type</th></tr></thead><tbody><tr><td><code>title</code></td><td>The question submitted in the questions and answers page of the product.</td><td>string</td></tr><tr><td><code>votes</code></td><td>The number of votes.</td><td>integer</td></tr><tr><td><code>answers</code></td><td>A list of details available about the answer.</td><td>array</td></tr><tr><td><code>answers.author</code></td><td>Indication of the user who has submitted the answer.</td><td>string</td></tr><tr><td><code>answers.content</code></td><td>The content of the answer.</td><td>string</td></tr><tr><td><code>answers.timestamp</code></td><td>Indicates when the answer has been submitted.</td><td>timestamp</td></tr></tbody></table>
