GET
/deals
1 credit
Amazon Deals API
The live deals feed for a marketplace with discount percentage, deal price and badge.
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 |
|---|---|---|---|
| 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?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",
params={
"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");
const params = {
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([
'marketplace' => 'US',
'zip' => '10001',
]);
$ch = curl_init("https://amazoncrawler.com/v1/deals?$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")
q := u.Query()
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": 73,
"results": [
{
"url": "https://www.amazon.com/dp/B0GVG9DKJP",
"asin": "B0GVG9DKJP",
"badge": null,
"image": "https://m.media-amazon.com/images/I/21HlOO4X++L.jpg",
"price": {
"amount": 23.99,
"display": "$23.99",
"currency": "USD"
},
"title": null,
"deal_id": null,
"discount": "20% off"
},
{
"url": "https://www.amazon.com/dp/B0B4KMZRC3",
"asin": "B0B4KMZRC3",
"badge": null,
"image": "https://m.media-amazon.com/images/I/41BU8bonGdL.jpg",
"price": {
"amount": 39.99,
"display": "$39.99",
"currency": "USD"
},
"title": null,
"deal_id": null,
"discount": "20% off"
}
],
"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", "marketplace"],
"msg": "Field required",
"type": "missing",
"input": null
}
]
}