Quickstart

Fetch product data, switch platforms and watch for changes: three calls, five minutes.

Embed
Preview of the card
<a href="https://scrapelyserp.com/docs/quickstart"><img src="https://scrapelyserp.com/docs/_api/public/orgs/affc5b0f-d3c2-423a-8143-9d10db5736ae/spaces/981e6275-da3f-446c-82de-889f59c83b6f/pages/001f09f1-8a88-40f1-a156-a29efbb9325c/social-card.svg?v=3e7ae33eec8b" alt="Quickstart" width="600" height="315"></a>

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 once

Node.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 once

Create 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.

Updated