Products
Product, price and stock data on every live retailer and marketplace (GET /v1/platforms lists them, with what is coming soon), in one response shape. Send item ids for a `platform`; limits and prices are per platform and tier.
Product, price and stock data on every live retailer and marketplace (GET /v1/platforms lists them, with what is coming soon), in one response shape. Send item ids for a platform; limits and prices are per platform and tier.
Endpoints
Method | Path | Does |
|---|---|---|
|
|
How it works, when to use what, and what it costs: Product data. Base URL, authentication and errors: Overview.
POST /v1/products
Get products.
Product data for a list of item ids on one platform and marketplace (defaults amazon and us; GET /v1/platforms lists what is live, each platform's id field, tiers, prices and per-call limits). Send the ids as ids (asins is accepted on Amazon). One result per unique id, in request order, each with a status. Always 200 for a well-formed request, even when every item is unavailable.
Billing: per unique item at the tier's rate. The whole call is reserved up front, rounded up once per call (402 if your balance cannot cover it); partial and unavailable items are refunded, so you pay for ok and not_found. X-Scrapely-Credits is the final charge. Allow up to 300 s; smaller calls are proportionally faster. Uses one concurrency slot.
Amazon (asins, 1 to 2,000 per call, 10,000 at pulse): per ASIN pulse 0.25, lite 1, full 5; delivery dates are included in lite and full at no extra cost. Typical: pulse 10–20 s for 10,000 ASINs; lite 35–45 s for 2,000 ASINs; full 60–90 s for 2,000 ASINs.
Walmart (platform: "walmart", marketplace us): send 1 to 100 numeric item ids (from walmart.com/ip/<slug>/<id>) as ids; 1 credit per ok or not_found item. Results carry the neutral fields plus walmart (list price, offer, seller type, shipping, brand, UPC, rating, category). Typical: 3–10 s for 100 items.
Best Buy (platform: "bestbuy", marketplace us): send 1 to 1,000 numeric SKUs as ids; 1 credit per ok or not_found SKU (not_found also covers SKUs Best Buy no longer sells). Results carry the neutral fields plus bestbuy (state, regular price, savings, brand, condition, category). Typical: 10–15 s for 1,000 SKUs.
Target (platform: "target", marketplace us): send 1 to 1,000 TCINs (the number after /A- in a product URL) as ids; 1 credit per ok or not_found TCIN. A variation parent answers with its featured variant (target.tcin). Results carry the neutral fields plus target (regular price, shipping, store pickup). Typical: 5–15 s for 1,000 TCINs.
Request body
Name | Type | Required | Description |
|---|---|---|---|
| string | — | Which platform to read. Platforms: |
| string | — | The platform's regional storefront ( |
| string[] | — | Required (on Amazon, this or |
| string[] | — | 1 to 2,000 ASINs; up to 10,000 at tier |
| string | — | Required on Amazon; elsewhere optional (default |
| string[] | — | Accepted and ignored: lite and full always include delivery dates and pulse never does, so |
Request
- cURL
- Python
- Node.js
curl -X POST "https://api.scrapelyserp.com/v1/products" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"platform": "walmart",
"marketplace": "us",
"ids": ["931920073", "5129928603", "1000000404"]
}'import os
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCRAPELY_API_KEY']}"}
r = requests.post(
"https://api.scrapelyserp.com/v1/products",
headers=HEADERS,
json={
"platform": "walmart",
"marketplace": "us",
"ids": ["931920073", "5129928603", "1000000404"],
},
timeout=300,
)
r.raise_for_status()
data = r.json()const res = await fetch('https://api.scrapelyserp.com/v1/products', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SCRAPELY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
platform: 'walmart',
marketplace: 'us',
ids: ['931920073', '5129928603', '1000000404'],
}),
signal: AbortSignal.timeout(300_000),
});
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();Response
- 200 OK
- 400 Bad Request
{
"platform": "walmart",
"marketplace": "us",
"tier": "standard",
"results": [
{
"id": "931920073",
"status": "ok",
"fetchedAt": "2026-10-16T14:02:37.118Z",
"title": "Mainstays 20\" 3-Speed Box Fan, White",
"url": "https://www.walmart.com/ip/931920073",
"price": {
"amount": 30,
"currency": "USD"
},
"availability": {
"inStock": true,
"message": "Available"
},
"seller": {
"name": "Walmart.com"
},
"fulfillment": {
"byPlatform": true,
"name": "Walmart"
},
"images": [
"https://i5.walmartimages.com/asr/box-fan-1.jpeg",
"https://i5.walmartimages.com/asr/box-fan-2.jpeg"
],
"walmart": {
"brand": "Mainstays",
"upc": "810004819238",
"modelNumber": "FB50-16HW",
"parentId": "931920073",
"listPrice": {
"amount": 24.99,
"currency": "USD"
},
"offerId": "F8CF2B7A1E2D4C6A9B0E3D5F7A1C2B4D",
"offerType": "ONLINE_AND_STORE",
"thirdPartySeller": false,
"onlineAvailable": true,
"shipping": {
"standard": {
"amount": 0,
"currency": "USD"
},
"twoDayEligible": true,
"freeOverThreshold": true
},
"maxPerOrder": 12,
"clearance": false,
"preOrder": false,
"condition": "New",
"category": "Home Improvement/Heating, Cooling, & Air Quality/Fans/Box Fans",
"rating": 4.4,
"reviewsCount": 1250,
"color": "White"
}
},
{
"id": "5129928603",
"status": "ok",
"fetchedAt": "2026-10-16T14:02:37.118Z",
"title": "Stainless Steel Electric Kettle, 1.7 L",
"url": "https://www.walmart.com/ip/5129928603",
"availability": {
"inStock": false,
"message": "Not available"
},
"seller": {
"name": "Kitchen Outlet LLC"
},
"fulfillment": {
"byPlatform": false
},
"images": ["https://i5.walmartimages.com/asr/kettle-1.jpeg"],
"walmart": {
"brand": "Generic",
"listPrice": {
"amount": 39.99,
"currency": "USD"
},
"offerType": "ONLINE_ONLY",
"thirdPartySeller": true,
"onlineAvailable": false,
"condition": "New",
"category": "Home/Kitchen & Dining/Small Appliances/Kettles"
}
},
{
"id": "1000000404",
"status": "not_found",
"fetchedAt": "2026-10-16T14:02:37.118Z"
}
],
"stats": {
"requested": 3,
"ok": 2,
"partial": 0,
"notFound": 1,
"unavailable": 0,
"elapsedMs": 1840
},
"credits": 3
}{
"error": {
"code": "INVALID_PARAM",
"message": "ids[0] (\"ip/931920073\") is not an item id: expected the numeric Walmart item id, e.g. 5129928603.",
"param": "ids[0]",
"docs": "/docs/errors#invalid_param"
}
}Responses
Status | Meaning |
|---|---|
| One result per unique id, in request order. |
|
|
|
|
|
|
|
|
|
|
| The platform or marketplace is coming soon. Nothing is charged. |
Response fields
Field | Type | Description |
|---|---|---|
| string | The platform that was read. |
| string | The marketplace that was read; every price is in its currency. |
| string | The tier that answered ( |
| string[] | Echoes the request's |
| object[] | One per unique requested id, in request order. Every id appears exactly once. |
| string | Amazon only: the ASIN, equal to |
| string | The item id as the platform knows it (the ASIN on Amazon). |
| object | The featured (buy-box) price, with its currency. |
| object | — |
| object | — |
| object | — |
| string | The product page on the marketplace. |
| string[] | — |
| string |
|
| string (date-time) | When this item was read. |
| object | Present for |
| string | lite + full. |
| string | lite + full: the brand Amazon shows under the title. |
| string | lite + full: Amazon's display category. |
| string[] | full only: one entry per paragraph. |
| object | Every tier. pulse has |
| object | lite + full. |
| boolean | lite: a PARENT_ASIN option; full: also no buyable option while the listing lists children. |
| object | full only. |
| object | Best Buy only ( |
| object | Walmart only ( |
| object | Target only ( |
| object or null | lite + full, at no extra cost. null when there is no promise (see |
| string | Only when |
| object | — |
| integer | Unique items after de-dup. |
| integer | Answered in full (charged). |
| integer | Answered with fields missing (refunded). Always 0 where an answer cannot be partial (offers). |
| integer | The platform says the item does not exist (charged). |
| integer | No answer this time (refunded; retry later). |
| integer | How long the call took, in milliseconds. |
| object | lite + full. |
| integer | Credits charged for the call (also |