Amazon deals
Today's Amazon deals as JSON: deal price, list price, percent off, lightning deal end times, ratings and reviews, by department, brand or rating.
Today's Amazon deals as JSON: deal price, list price, percent off, lightning deal end times, ratings and reviews, by department, brand or rating.
At a glance
GET /v1/structured/amazon/deals answers { endpoint, url, credits, duration_ms, data } with one page of today's deals, in Amazon's own order. Each call is charged for the data it moves: about 2 million deals per credit is typical. A call that fails is 502 TARGET_FAILED and costs nothing.
Per page | Up to 100 deals ( |
The list | About 500 deals in all, the same list as the deals page. Past the end a page is empty, with |
Search | Deals take no keyword. To price ASINs you already have, use |
Marketplace | Amazon US. |
- cURL
- Python
- Node.js
curl -G "https://api.scrapelyserp.com/v1/structured/amazon/deals" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
-d department=electronics \
-d min_rating=4 \
-d limit=20import os
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCRAPELY_API_KEY']}"}
r = requests.get(
"https://api.scrapelyserp.com/v1/structured/amazon/deals",
headers=HEADERS,
params={"department": "electronics", "min_rating": "4", "limit": "20"},
timeout=30,
)
r.raise_for_status()
data = r.json()
for d in data["data"]["deals"]:
print(d["asin"], d["price"], d["percent_off"], d["title"])const res = await fetch(`https://api.scrapelyserp.com/v1/structured/amazon/deals?${new URLSearchParams({ department: 'electronics', min_rating: '4', limit: '20' })}`, {
headers: { Authorization: `Bearer ${process.env.SCRAPELY_API_KEY}` },
signal: AbortSignal.timeout(30_000),
});
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();
for (const d of data.data.deals) console.log(d.asin, d.price, d.percent_off, d.title);Parameters
Parameter | Type | Default | Description |
|---|---|---|---|
| string | — | Only deals in one department: our slug (e.g. |
| string | — | Only deals of one brand: its id from |
|
| — |
|
|
| — |
|
| integer |
| Page, 1–100. The list runs to about 500 deals; |
| integer |
| Deals per page, 1–100. Pages are |
| boolean |
| Also return |
Filters combine. Brand ids come from filters.brands: call once with include_filters=true (in a department, to get that department's top brands), then pass the id as brand. An unknown department is a free 400 INVALID_PARAM.
| Amazon name |
|---|---|
| Appliances |
| Arts, Crafts & Sewing |
| Audible Books & Originals |
| Automotive |
| Baby Products |
| Beauty & Personal Care |
| Books |
| CDs & Vinyl |
| Cell Phones & Accessories |
| Clothing, Shoes & Jewelry |
| Collectibles & Fine Art |
| Electronics |
| Everything Else |
| Gift Cards |
| Grocery & Gourmet Food |
| Health & Household |
| Home & Kitchen |
| Industrial & Scientific |
| Movies & TV |
| Musical Instruments |
| Office Products |
| Patio, Lawn & Garden |
| Pet Supplies |
| Software |
| Sports & Outdoors |
| Tools & Home Improvement |
| Toys & Games |
| Video Games |
What comes back
data has page, limit, next_page (null on the last page) and deals. Each deal has position (its place in the whole list), asin, title, url, image, brand and brand_id, price (the deal price) and list_price, percent_off, deal_type (best_deal or lightning_deal), badge (the deal's message, such as Limited time deal or Limited Prime deal), deal_state, ends_at and claimed_percent for lightning deals, rating, reviews_count and variations (how many ASINs the product family has). A value Amazon does not show is null.
With include_filters=true, filters lists the departments, brands (the top 20), ratings and access programs of the deals that match, each as { id, label }, where id is what the parameter takes. Prices are the deal page's: a Limited Prime deal price is for Prime members. Deals carry no stock count; for the buy box, stock and delivery, send the ASINs to POST /v1/products.
Full reference → GET /v1/structured/amazon/deals