GET
/deals/products
1 credit
Amazon Deal Products API
Expand a single deal into its product list. Deal ids come from `/deals` and stop resolving once the deal ends, so resolve them promptly.
Known limitation. No bundled example: deal ids expire with the deal. The response mirrors
/products/search — a count plus a results array.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 |
|---|---|---|---|
|
deal_id
required |
string | — |
Deal id from /deals.
|
| 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/deals/products?deal_id=e4f9a2c1&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/deals/products",
params={
"deal_id": "e4f9a2c1",
"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/deals/products");
const params = {
deal_id: "e4f9a2c1",
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([
'deal_id' => 'e4f9a2c1',
'marketplace' => 'US',
'zip' => '10001',
]);
$ch = curl_init("https://amazoncrawler.com/v1/deals/products?$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/deals/products")
q := u.Query()
q.Set("deal_id", "e4f9a2c1")
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
{
"count": 1,
"deal_id": "e4f9a2c1",
"results": [
{
"url": "https://www.amazon.com/dp/B0GVG9DKJP",
"asin": "B0GVG9DKJP",
"image": "https://m.media-amazon.com/images/I/21HlOO4X++L.jpg",
"price": {
"amount": 23.99,
"display": "$23.99",
"currency": "USD",
"list_price": 29.99
},
"title": "Owala FreeSip Stainless Steel Water Bottle",
"rating": 4.7,
"reviews_count": 91234
}
],
"marketplace": "US"
}
Errors
Beyond the shared error codes, this endpoint returns
422 when a parameter fails validation — the
detail array names the field.
{
"detail": [
{
"loc": ["query", "deal_id"],
"msg": "Field required",
"type": "missing",
"input": null
}
]
}