Quickstart
Fetch product data, switch platforms and watch for changes: three calls, five minutes.
Fetch product data, switch platforms and watch for changes: three calls, five minutes.
1. Get an API key
Sign up and create a key under Dashboard → Developers → API keys. New accounts get 5,000 free credits. Export the key so the samples below can read it:
export SCRAPELY_API_KEY="sk_live_…"2. Fetch products
Send a platform and its item ids. This asks Walmart for two items; one of them does not exist.
cURL
curl -X POST "https://api.scrapelyserp.com/v1/products" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"platform":"walmart","ids":["931920073","1000000404"]}'Python
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", "ids": ["931920073", "1000000404"]},
timeout=120,
)
r.raise_for_status()
data = r.json()
for item in data["results"]:
print(item["id"], item["status"], item.get("price"))Node.js
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', ids: ['931920073', '1000000404'] }),
signal: AbortSignal.timeout(120_000),
});
const data = await res.json();
for (const item of data.results) console.log(item.id, item.status, item.price);Response
{
"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"
},
"walmart": {
"…": "Walmart-only fields"
}
},
{
"id": "1000000404",
"status": "not_found",
"fetchedAt": "2026-10-16T14:02:37.118Z"
}
],
"stats": {
"requested": 2,
"ok": 1,
"partial": 0,
"notFound": 1,
"unavailable": 0,
"elapsedMs": 1840
},
"credits": 2
}Every item comes back exactly once with a status. The missing item is not_found, a definitive answer, so it is charged like ok. Items we could not answer this time come back unavailable and are refunded. See Responses & statuses.
3. Switch platform
The same call works on every live platform: change platform and the ids. Some platforms offer several tiers; Amazon asks you to pick one.
Target
{
"platform": "target",
"ids": ["83887639"]
}Best Buy
{
"platform": "bestbuy",
"ids": ["6505727"]
}Amazon
{
"platform": "amazon",
"ids": ["B0009KNLV6"],
"tier": "lite"
}4. Watch for changes
Register a webhook endpoint once, then create a watchlist. Every 15 minutes we read the items and send a signed watchlist.product.changed event when a price or stock level moves.
Register an endpoint (save the secret)
cURL
curl -X POST "https://api.scrapelyserp.com/v1/webhook_endpoints" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks/scrapely"}'Python
import os
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCRAPELY_API_KEY']}"}
r = requests.post(
"https://api.scrapelyserp.com/v1/webhook_endpoints",
headers=HEADERS,
json={"url": "https://example.com/hooks/scrapely"},
)
r.raise_for_status()
data = r.json()
print(data["id"], data["secret"]) # the secret is shown only onceNode.js
const res = await fetch('https://api.scrapelyserp.com/v1/webhook_endpoints', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SCRAPELY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: 'https://example.com/hooks/scrapely' }),
});
const data = await res.json();
console.log(data.id, data.secret); // the secret is shown only onceCreate a watchlist
cURL
curl -X POST "https://api.scrapelyserp.com/v1/watchlists" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"name": "Headphones",
"platform": "bestbuy",
"ids": ["6505727"],
"every": "15m",
"webhook_url": "https://example.com/hooks/scrapely"
}'Python
import os
import uuid
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCRAPELY_API_KEY']}"}
r = requests.post(
"https://api.scrapelyserp.com/v1/watchlists",
headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
json={
"name": "Headphones",
"platform": "bestbuy",
"ids": ["6505727"],
"every": "15m",
"webhook_url": "https://example.com/hooks/scrapely",
},
)
r.raise_for_status()
data = r.json()Node.js
const res = await fetch('https://api.scrapelyserp.com/v1/watchlists', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SCRAPELY_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify({
name: 'Headphones',
platform: 'bestbuy',
ids: ['6505727'],
every: '15m',
webhook_url: 'https://example.com/hooks/scrapely',
}),
});
const data = await res.json();Next: verify signatures in your receiver, and read Watchlists for custom pipelines.