Products

POST /v1/products returns price, stock, seller and product details for a list of item ids on one platform and marketplace.

Embed
Preview of the card
<a href="https://scrapelyserp.com/docs/products"><img src="https://scrapelyserp.com/docs/_api/public/orgs/affc5b0f-d3c2-423a-8143-9d10db5736ae/spaces/981e6275-da3f-446c-82de-889f59c83b6f/pages/953f1054-74ca-4c1e-a6e3-eb104d1171ed/social-card.svg?v=3e7ae33eec8b" alt="Products" width="600" height="315"></a>

POST /v1/products returns price, stock, seller and product details for a list of item ids on one platform and marketplace.

Request

POST https://api.scrapelyserp.com/v1/products
Authorization: Bearer $SCRAPELY_API_KEY
Content-Type: application/json

{
  "platform": "amazon" | "walmart" | "target" | "bestbuy",
  "marketplace"?: "us",
  "ids": string[],
  "tier"?: string
}

Field

Type

Description

platform

string

The retailer: amazon, walmart, target, bestbuy. Default amazon; send it explicitly.

marketplace

string

The storefront. Default us. See Platforms & marketplaces.

ids

string[], required

The platform's item ids. Duplicates are fetched and charged once. On Amazon, asins is accepted instead.

tier

string

The level of detail (Tiers). Required on Amazon (pulse, lite, full); elsewhere optional, default standard.

include

string[]

Amazon only, kept for compatibility: ["delivery"] is accepted and echoed back. Delivery dates are part of lite and full.

Example

cURL

curl -X POST "https://api.scrapelyserp.com/v1/products" \
  -H "Authorization: Bearer $SCRAPELY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"target","ids":["83887639","54191097"]}'

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": "target", "ids": ["83887639", "54191097"]},
    timeout=300,
)
r.raise_for_status()
data = r.json()
for item in data["results"]:
    print(item["id"], item["status"], (item.get("price") or {}).get("amount"))

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: 'target', ids: ['83887639', '54191097'] }),
  signal: AbortSignal.timeout(300_000),
});
const data = await res.json();
for (const item of data.results) console.log(item.id, item.status, item.price?.amount);

Response

{
  "platform": "target",
  "marketplace": "us",
  "tier": "standard",
  "results": [
    {
      "id": "83887639",
      "status": "ok",
      "fetchedAt": "2026-10-16T21:27:22.940Z",
      "title": "Nintendo Switch - OLED Model with White Joy-Con",
      "url": "https://www.target.com/p/nintendo-switch-oled-model-with-white-joy-con/-/A-83887639",
      "price": {
        "amount": 399.99,
        "currency": "USD"
      },
      "availability": {
        "inStock": true,
        "message": "In stock"
      },
      "target": {
        "tcin": "83887639",
        "regularPrice": 399.99,
        "…": "…"
      }
    },
    {
      "id": "54191097",
      "status": "not_found",
      "fetchedAt": "2026-10-16T21:27:22.940Z"
    }
  ],
  "stats": {
    "requested": 2,
    "ok": 1,
    "partial": 0,
    "notFound": 1,
    "unavailable": 0,
    "elapsedMs": 1345
  },
  "credits": 2
}

Results come back in the order you sent the ids, one per unique id. The envelope, statuses and common fields are described in Responses & statuses; what each platform adds is on its own page.

Per platform

Platform

platform

Item id

Tiers (credits per item)

Ids per call

Typical full-size call

Amazon

amazon

ASIN

pulse (0.25), lite (1), full (5)

10,000 at pulse, 2,000 at lite, 2,000 at full

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

walmart

item id

standard (1)

100

3–10 s for 100 items

Target

target

TCIN

standard (1)

1,000

5–15 s for 1,000 TCINs

Best Buy

bestbuy

SKU

standard (1)

1,000

10–15 s for 1,000 SKUs

More ids than the limit is a 400; split the list across calls. Each call uses one concurrency slot, so for the lowest latency send several smaller calls in parallel. Allow 300 seconds client-side.

Billing

The call reserves unique ids × the tier rate up front (402 if your balance cannot cover it), then refunds every partial and unavailable item. You pay for ok and not_found. See What you pay for.

Errors

HTTP

Code

When

400

MISSING_PARAM

ids (or Amazon's tier) is missing.

400

INVALID_PARAM

An unknown platform, marketplace or tier; ids empty or over the limit; an entry that is not a valid id (param is ids[i]).

401

UNAUTHORIZED

Missing or invalid API key.

402

INSUFFICIENT_CREDITS

Your balance cannot cover the reservation. Nothing was charged.

429

CONCURRENCY_LIMIT, RATE_LIMITED

All your slots are busy, or too many calls per second. Honour Retry-After.

501

NOT_IMPLEMENTED

The platform or marketplace is coming soon ("coming_soon": true). Nothing was charged.

An item we could not read is never an HTTP error: it comes back unavailable inside a 200.

Updated