Offers

Every offer on a listing (price, shipping, condition, seller, fulfilment, which one holds the buy box), and whether exact offers can still be bought.

Embed
Preview of the card
<a href="https://scrapelyserp.com/reference/offers"><img src="https://scrapelyserp.com/reference/_api/public/orgs/affc5b0f-d3c2-423a-8143-9d10db5736ae/spaces/e4cbe065-c1c2-4572-b134-0292dedd9c39/pages/729ca6e0-9124-45a1-9564-89f527d00250/social-card.svg?v=3e7ae33eec8b" alt="Offers" width="600" height="315"></a>

Every offer on a listing (price, shipping, condition, seller, fulfilment, which one holds the buy box), and whether exact offers can still be bought.

Endpoints

Method

Path

Does

POST

/v1/offers

Get every offer for a list of items

POST

/v1/offers/check

Check whether exact offers can be bought

GET

/v1/products/{id}/offers

Get every offer for one item

How it works, when to use what, and what it costs: Offers & offer check. Base URL, authentication and errors: Overview.

POST /v1/offers

Get every offer for a list of items.

Every offer for 1 to 100 items on a platform and marketplace (platform default amazon, marketplace default us): price, shipping, condition, seller, FBA and which offer holds the buy box. One result per unique ASIN, in request order. Always 200 for a well-formed request.

Cost per unique ASIN: 1 credit for a listing with one offer or none (and for not_found), 3 for one with more (totalOffers says which). 3 per ASIN is reserved up front (402 if your balance cannot cover it) and the difference refunded; unavailable ASINs are refunded. X-Scrapely-Credits is the final charge.

Depth: every offer for the ASIN, up to 31 (featured offer first, then cheapest first). Duration: a 100-ASIN call usually takes well under a minute; allow up to 180 s. Uses one concurrency slot.

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[]

—

The generic name for the item list (asins on Amazon). 1 to 100 items.

asins

string[]

—

1 to 100 ASINs. Upper-cased and de-duplicated; empty strings are ignored. Duplicates are fetched and charged once.

condition

string

—

all (default), new, or used (every non-new condition: used, renewed/refurbished, collectible). One of: new, used, all.

Request

curl -X POST "https://api.scrapelyserp.com/v1/offers" \
  -H "Authorization: Bearer $SCRAPELY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "amazon",
    "marketplace": "us",
    "ids": ["B0009KNLV6", "BZZZZZZZZZ"],
    "condition": "all"
  }'

Response

{
  "platform": "amazon",
  "marketplace": "us",
  "results": [
    {
      "id": "B0009KNLV6",
      "asin": "B0009KNLV6",
      "status": "ok",
      "fetchedAt": "2026-10-16T14:02:11.402Z",
      "buyboxOfferListingId": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ=",
      "totalOffers": 14,
      "offers": [
        {
          "offerListingId": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ=",
          "price": 77.43,
          "currency": "USD",
          "priceDisplay": "$77.43",
          "shipping": 0,
          "condition": "new",
          "seller": {
            "id": "ATVPDKIKX0DER",
            "name": "Amazon.com"
          },
          "fulfillment": {
            "isFba": true,
            "fulfillerName": "Amazon.com"
          },
          "isBuybox": true,
          "delivery": "FREE delivery Tuesday, October 21"
        },
        {
          "offerListingId": "cW1aMWx0dDNPcEdnbUo2UnBQOGJzcFJIVWZPRWlqUiUyRkR1NUwlMkZPRzZTJTJCQ3J6cFk=",
          "price": 71.5,
          "currency": "USD",
          "priceDisplay": "$71.50",
          "shipping": 5.99,
          "condition": "new",
          "seller": {
            "id": "A2R2RITDJNW1Q6",
            "name": "Retro Lunch Co",
            "rating": 4.5,
            "ratingCount": 1287
          },
          "fulfillment": {
            "isFba": false,
            "fulfillerName": "Retro Lunch Co"
          },
          "isBuybox": false,
          "availability": "Only 3 left in stock - order soon.",
          "delivery": "$5.99 delivery October 24 - 28"
        }
      ]
    },
    {
      "id": "BZZZZZZZZZ",
      "asin": "BZZZZZZZZZ",
      "status": "not_found",
      "fetchedAt": "2026-10-16T14:02:10.977Z",
      "offers": []
    }
  ],
  "stats": {
    "requested": 2,
    "ok": 1,
    "partial": 0,
    "notFound": 1,
    "unavailable": 0,
    "elapsedMs": 2210
  },
  "credits": 4
}

Responses

Status

Meaning

200

One result per unique ASIN, 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

—

marketplace

string

—

results

object[]

One per unique requested ASIN, in request order.

results[].id

string

The item id (the ASIN on Amazon).

results[].asin

string

—

results[].status

string

ok: the offer list was read (charged; may be empty). not_found: Amazon has no such product (charged). unavailable: we could not get an answer this time, or the call ran out of time (refunded; retry later). One of: ok, not_found, unavailable.

results[].fetchedAt

string (date-time)

When this item was read.

results[].buyboxOfferListingId

string

The featured offer, when there is one (reported even if condition filters it out of offers).

results[].totalOffers

integer

Offers on the listing in every condition, the buy box included. 1 or less: charged the single-offer rate. At least 0.

results[].offers

object[]

Featured offer first, then the rest cheapest first. Every offer for the ASIN, up to 31.

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.

credits

integer

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

POST /v1/offers/check

Check whether exact offers can be bought.

For 1 to 2000 offers ({ asin, offerListingId } from /v1/products or /v1/offers): can each exact offer be bought right now. A yes/no per offer: no price, no stock level (use lite for those). Always 200 for a well-formed request.

Cost: 0.5 credit per offer answered, rounded up once per call; reserved up front (402 if your balance cannot cover it), unavailable offers refunded. Duration: 2000 offers usually take 15–20 s; allow up to 120 s. Uses one concurrency slot.

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.

offers

object[]

yes

1 to 2000 offers, each its ASIN and offer listing id as /v1/products (asin + buybox.offerListingId) or /v1/offers (asin + offers[].offerListingId) returned them. Both are required. ids is accepted too. 1 to 2,000 items.

offers[].asin

string

yes

—

offers[].offerListingId

string

yes

—

Request

curl -X POST "https://api.scrapelyserp.com/v1/offers/check" \
  -H "Authorization: Bearer $SCRAPELY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "amazon",
    "marketplace": "us",
    "offers": [
      {
        "asin": "B0009KNLV6",
        "offerListingId": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ="
      },
      {
        "asin": "0060094664",
        "offerListingId": "cW1aMWx0dDNPcEdnbUo2UnBQOGJzcFJIVWZPRWlqUiUyRkR1NUwlMkZPRzZTJTJCQ3J6cFk="
      }
    ]
  }'

Response

{
  "platform": "amazon",
  "marketplace": "us",
  "results": [
    {
      "id": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ=",
      "asin": "B0009KNLV6",
      "offerListingId": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ=",
      "status": "ok",
      "fetchedAt": "2026-10-16T19:02:11.402Z",
      "buyable": true
    },
    {
      "id": "cW1aMWx0dDNPcEdnbUo2UnBQOGJzcFJIVWZPRWlqUiUyRkR1NUwlMkZPRzZTJTJCQ3J6cFk=",
      "asin": "0060094664",
      "offerListingId": "cW1aMWx0dDNPcEdnbUo2UnBQOGJzcFJIVWZPRWlqUiUyRkR1NUwlMkZPRzZTJTJCQ3J6cFk=",
      "status": "ok",
      "fetchedAt": "2026-10-16T19:02:11.402Z",
      "buyable": false
    }
  ],
  "stats": {
    "requested": 2,
    "ok": 2,
    "partial": 0,
    "notFound": 0,
    "unavailable": 0,
    "elapsedMs": 1210
  },
  "credits": 1
}

Responses

Status

Meaning

200

One result per unique offer, 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

—

marketplace

string

—

results

object[]

One per unique requested id, in request order.

results[].id

string

The offer listing id.

results[].asin

string

—

results[].offerListingId

string

—

results[].status

string

ok: answered (charged). unavailable: no answer this time (refunded; retry later). One of: ok, unavailable.

results[].fetchedAt

string (date-time)

When this item was read.

results[].buyable

boolean

On ok: Amazon accepts this exact offer for purchase right now. Scarce, backorder and pre-order offers are buyable; no price or stock level. false does not say why (a gone offer and a mistyped id read the same).

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.

credits

integer

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

GET /v1/products/{id}/offers

Get every offer for one item.

A convenience alias for a single-item POST /v1/offers: same response (results holds one entry), same price (1 or 3 credits, nothing when unavailable). A malformed id is a 400 whose param names the platform's id (asin on Amazon).

Path parameters

Name

Type

Required

Description

id

string

yes

The item id: on Amazon, the ASIN (10 letters or digits).

Query parameters

Name

Type

Required

Description

condition

string

—

all (default), new, or used (every non-new condition: used, renewed/refurbished, collectible). One of: new, used, all.

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.

Request

curl -G "https://api.scrapelyserp.com/v1/products/B0009KNLV6/offers" \
  -H "Authorization: Bearer $SCRAPELY_API_KEY" \
  -d condition=new \
  -d platform=amazon \
  -d marketplace=us

Response

{
  "platform": "amazon",
  "marketplace": "us",
  "results": [
    {
      "id": "B0009KNLV6",
      "asin": "B0009KNLV6",
      "status": "ok",
      "fetchedAt": "2026-10-16T14:02:11.402Z",
      "buyboxOfferListingId": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ=",
      "totalOffers": 14,
      "offers": [
        {
          "offerListingId": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ=",
          "price": 77.43,
          "currency": "USD",
          "priceDisplay": "$77.43",
          "shipping": 0,
          "condition": "new",
          "seller": {
            "id": "ATVPDKIKX0DER",
            "name": "Amazon.com"
          },
          "fulfillment": {
            "isFba": true,
            "fulfillerName": "Amazon.com"
          },
          "isBuybox": true,
          "delivery": "FREE delivery Tuesday, October 21"
        },
        {
          "offerListingId": "cW1aMWx0dDNPcEdnbUo2UnBQOGJzcFJIVWZPRWlqUiUyRkR1NUwlMkZPRzZTJTJCQ3J6cFk=",
          "price": 71.5,
          "currency": "USD",
          "priceDisplay": "$71.50",
          "shipping": 5.99,
          "condition": "new",
          "seller": {
            "id": "A2R2RITDJNW1Q6",
            "name": "Retro Lunch Co",
            "rating": 4.5,
            "ratingCount": 1287
          },
          "fulfillment": {
            "isFba": false,
            "fulfillerName": "Retro Lunch Co"
          },
          "isBuybox": false,
          "availability": "Only 3 left in stock - order soon.",
          "delivery": "$5.99 delivery October 24 - 28"
        }
      ]
    }
  ],
  "stats": {
    "requested": 1,
    "ok": 1,
    "partial": 0,
    "notFound": 0,
    "unavailable": 0,
    "elapsedMs": 1630
  },
  "credits": 3
}

Responses

Status

Meaning

200

One result, for the ASIN in the path.

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

—

marketplace

string

—

results

object[]

One per unique requested ASIN, in request order.

results[].id

string

The item id (the ASIN on Amazon).

results[].asin

string

—

results[].status

string

ok: the offer list was read (charged; may be empty). not_found: Amazon has no such product (charged). unavailable: we could not get an answer this time, or the call ran out of time (refunded; retry later). One of: ok, not_found, unavailable.

results[].fetchedAt

string (date-time)

When this item was read.

results[].buyboxOfferListingId

string

The featured offer, when there is one (reported even if condition filters it out of offers).

results[].totalOffers

integer

Offers on the listing in every condition, the buy box included. 1 or less: charged the single-offer rate. At least 0.

results[].offers

object[]

Featured offer first, then the rest cheapest first. Every offer for the ASIN, up to 31.

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.

credits

integer

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

Updated