GET
/products/offers
1 credit
Amazon Product Offers API
Every offer on a listing — the Buy Box plus all competing sellers. Returns price, condition, shipping promise, seller identity and FBA/Prime flags. This is the endpoint to poll for Buy Box tracking and repricing.
Try it
You are not signed in, so this runs against sample data and costs nothing.
Create a free account to run it against your own key.
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
|
asin
required |
string | — | Amazon Standard Identification Number. |
| marketplace | string | US | Two-letter marketplace code (US, UK, DE, FR, IT, ES, CA, JP, IN, AU, …). |
| zip | string | — | Delivery postcode. Without one, many listings report “cannot be shipped to your location” and come back with no price or images. Always send it for price-accurate data. |
Request
curl -sS "https://amazoncrawler.com/v1/products/offers?asin=B07CMS5Q6P&marketplace=US&zip=10001" \
-H "x-api-key: YOUR_API_KEY"
import requests
API_KEY = "YOUR_API_KEY"
response = requests.get(
"https://amazoncrawler.com/v1/products/offers",
params={
"asin": "B07CMS5Q6P",
"marketplace": "US",
"zip": "10001",
},
headers={"x-api-key": API_KEY},
timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
const API_KEY = "YOUR_API_KEY";
const url = new URL("https://amazoncrawler.com/v1/products/offers");
const params = {
asin: "B07CMS5Q6P",
marketplace: "US",
zip: "10001",
};
Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
const response = await fetch(url, {
headers: { "x-api-key": API_KEY },
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
<?php
$apiKey = 'YOUR_API_KEY';
$query = http_build_query([
'asin' => 'B07CMS5Q6P',
'marketplace' => 'US',
'zip' => '10001',
]);
$ch = curl_init("https://amazoncrawler.com/v1/products/offers?$query");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["x-api-key: $apiKey"],
CURLOPT_TIMEOUT => 30,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://amazoncrawler.com/v1/products/offers")
q := u.Query()
q.Set("asin", "B07CMS5Q6P")
q.Set("marketplace", "US")
q.Set("zip", "10001")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data)
}
Response
{
"url": "https://www.amazon.com/gp/offer-listing/B07CMS5Q6P",
"asin": "B07CMS5Q6P",
"count": 4,
"offers": [
{
"price": {
"amount": 29.99,
"display": "$29.99",
"currency": "USD"
},
"is_fba": true,
"seller": {
"id": null,
"name": "Amazon.com"
},
"is_prime": false,
"position": 1,
"shipping": "FREE delivery Monday, August 10 on orders shipped by Amazon over $35",
"condition": "New",
"seller_rating": null
},
{
"price": {
"amount": 25.82,
"display": "$25.82",
"currency": "USD"
},
"is_fba": true,
"seller": {
"id": null,
"name": "Amazon Resale"
},
"is_prime": false,
"position": 2,
"shipping": "FREE delivery Tuesday, August 11 on orders shipped by Amazon over $35",
"condition": "Used - Acceptable",
"seller_rating": null
}
]
}
Errors
Beyond the shared error codes, this endpoint returns
422 when a parameter fails validation — the
detail array names the field.
{
"detail": [
{
"loc": ["query", "asin"],
"msg": "Field required",
"type": "missing",
"input": null
}
]
}