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.

Embed
Preview of the card
<a href="https://scrapelyserp.com/reference/products"><img src="https://scrapelyserp.com/reference/_api/public/orgs/affc5b0f-d3c2-423a-8143-9d10db5736ae/spaces/e4cbe065-c1c2-4572-b134-0292dedd9c39/pages/7b444a7a-9711-4321-8c47-b099672f24e5/social-card.svg?v=3e7ae33eec8b" alt="Products" width="600" height="315"></a>

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

POST

/v1/products

Get products

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

platform

string

—

Which platform to read. Platforms: amazon (live: us; coming soon: uk, de, fr, it, es, ca, mx, jp, au, in, br, nl, se, pl), walmart (live: us), ebay (coming soon), target (live: us), bestbuy (live: us; coming soon: ca), aliexpress (coming soon). A coming-soon platform or marketplace answers 501 NOT_IMPLEMENTED with "coming_soon": true (nothing charged); an unknown one is a 400 listing the valid values. GET /v1/platforms has the full list. Default amazon.

marketplace

string

—

The platform's regional storefront (us, uk, de…); default the platform's main one. Prices come back in its currency.

ids

string[]

—

Required (on Amazon, this or asins). The item ids of platform (Amazon ASINs, Walmart item ids, Target TCINs, Best Buy SKUs…). De-duplicated; duplicates are fetched and charged once. On Amazon asins is accepted instead: send one or the other. At least 1 item.

asins

string[]

—

1 to 2,000 ASINs; up to 10,000 at tier pulse. Upper-cased and de-duplicated; empty strings are ignored. Duplicates are fetched and charged once.

tier

string

—

Required on Amazon; elsewhere optional (default standard). pulse (0.25 credits per ASIN): New-offer count and lowest new price. The cheapest way to sweep a whole catalogue for change. lite (1 credit per ASIN): Everything about the offer: buy-box price and list price, stock, seller, FBA, offer listing id, offer counts, rating and delivery dates. full (5 credits per ASIN): Lite plus the listing: description, images, attributes, binding, other editions and offer summaries for every condition. Pulse returns no buy box: its lowest new price equals the buy-box price for ~92% of ASINs, so use it to detect change, not as a price. standard was merged into lite: it is still accepted and answered as lite. Walmart has one tier, standard (1 credit per item, the default there): Title, price and list price, stock, seller, fulfilment, shipping, images, brand, UPC, rating and category. Best Buy has one tier, standard (1 credit per SKU, the default there): Title, current and regular price, stock, brand, condition and category. Target has one tier, standard (1 credit per TCIN, the default there): Title, current and regular price, stock, shipping and store pickup. One of: pulse, lite, full, standard.

include

string[]

—

Accepted and ignored: lite and full always include delivery dates and pulse never does, so ["delivery"] changes nothing and costs nothing. Echoed back as include in the response. Any other entry is a 400. One of: delivery.

Request

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"]
  }'

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"
      },
      "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
}

Responses

Status

Meaning

200

One result per unique id, in request order.

400

MISSING_PARAM or INVALID_PARAM; param names the culprit.

401

UNAUTHORIZED: missing, unknown or revoked key.

402

INSUFFICIENT_CREDITS: nothing was charged.

429

RATE_LIMITED or CONCURRENCY_LIMIT. Honour Retry-After.

500

INTERNAL: our fault, not charged. Quote X-Request-Id.

501

The platform or marketplace is coming soon. Nothing is charged.

Response fields

Field

Type

Description

platform

string

The platform that was read.

marketplace

string

The marketplace that was read; every price is in its currency.

tier

string

The tier that answered (standard on one-tier platforms). One of: pulse, lite, full, standard.

include

string[]

Echoes the request's include; absent without it. It changes nothing. One of: delivery.

results

object[]

One per unique requested id, in request order. Every id appears exactly once.

results[].asin

string

Amazon only: the ASIN, equal to id.

results[].id

string

The item id as the platform knows it (the ASIN on Amazon).

results[].price

object

The featured (buy-box) price, with its currency.

results[].availability

object

—

results[].seller

object

—

results[].fulfillment

object

—

results[].url

string

The product page on the marketplace.

results[].images

string[]

—

results[].status

string

ok: returned with no errors (charged). partial: returned, but some fields could not be read: do not trust price or stock, re-fetch at a higher tier (refunded). not_found: the retailer says the item does not exist: delist, do not retry (charged). unavailable: we could not get an answer this time: retry later, not evidence the item is gone (refunded). One of: ok, partial, not_found, unavailable.

results[].fetchedAt

string (date-time)

When this item was read.

results[].buybox

object

Present for ok and partial at lite and full. Never at pulse.

results[].title

string

lite + full.

results[].brand

string

lite + full: the brand Amazon shows under the title.

results[].category

string

lite + full: Amazon's display category.

results[].description

string[]

full only: one entry per paragraph.

results[].offers

object

Every tier. pulse has newCount and newMinPrice only (lowest new price from any seller, not necessarily the buy box); lite adds used; refurbished and collectible are full only.

results[].reviews

object

lite + full.

results[].isParent

boolean

lite: a PARENT_ASIN option; full: also no buyable option while the listing lists children.

results[].full

object

full only.

results[].bestbuy

object

Best Buy only (platform: "bestbuy"): what Best Buy says beyond the neutral fields.

results[].walmart

object

Walmart only (platform: "walmart"): what Walmart says beyond the neutral fields. Every field is optional: absent when Walmart does not say.

results[].target

object

Target only (platform: "target"): what Target says beyond the neutral fields. Stock and pickup are for one reference store.

results[].delivery

object or null

lite + full, at no extra cost. null when there is no promise (see deliveryError). Never at pulse.

results[].deliveryError

string

Only when delivery is null. not_fetched: the product was not ok/partial. no_offer: no buy-box offer. no_promise: the offer had no delivery date. fetch_failed: we could not get the promise this time (retry later). deadline: the call ran out of time. One of: not_fetched, no_offer, no_promise, fetch_failed, deadline.

stats

object

—

stats.requested

integer

Unique items after de-dup.

stats.ok

integer

Answered in full (charged).

stats.partial

integer

Answered with fields missing (refunded). Always 0 where an answer cannot be partial (offers).

stats.notFound

integer

The platform says the item does not exist (charged).

stats.unavailable

integer

No answer this time (refunded; retry later).

stats.elapsedMs

integer

How long the call took, in milliseconds.

stats.delivery

object

lite + full.

credits

integer

Credits charged for the call (also X-Scrapely-Credits).

Updated