Introduction

Scrapely returns product, price and stock data from the retailers you sell on — one API, one response shape, pay per item — and turns any other URL into clean HTML, Markdown, text or JSON.

Scrapely returns product, price and stock data from the retailers you sell on — one API, one response shape, pay per item — and turns any other URL into clean HTML, Markdown, text or JSON.

What Scrapely does

Send a platform and its item ids; get product, price and stock data back in one response shape, whichever retailer it came from. For any other page, send a URL and get the page back. You pay per item or per page that came back: failed lookups are free.

  • Product data — POST /v1/products with platform, marketplace and ids returns title, price, stock, seller and more for each item, in the same shape on every platform. Live: Amazon (US), Walmart (US), Target (US) and Best Buy (US). Coming soon: Google, eBay and AliExpress.

  • Watchlists — hand us item ids on any live platform, a cadence and a webhook URL, and get a signed event when anything changes. See Watchlists.

  • Scraping API — GET /v1/scrape?url=… returns the page synchronously. ScraperAPI-compatible parameters, so existing code repoints by changing the host.

  • Async jobs — queue a scrape, get a job id, and receive a signed webhook (or poll) when it finishes. Jobs wait for capacity instead of failing.

  • Batches — up to 10,000 URLs with shared options in one call.

  • Structured data (coming soon) — search and product pages as typed JSON.

Base URL

All endpoints live under one versioned root. Breaking changes ship as a new version; additions (new fields, new endpoints) do not.

https://api.scrapely.dev/v1

Your first request

Every new account gets 5,000 free credits. A standard request costs 1 credit.

cURL

curl "https://api.scrapely.dev/v1/scrape?api_key=YOUR_API_KEY&url=https://example.com"

Python

import requests

r = requests.get(
    "https://api.scrapely.dev/v1/scrape",
    params={"api_key": "YOUR_API_KEY", "url": "https://example.com"},
    timeout=70,
)
print(r.json()["content"])

Node.js

const params = new URLSearchParams({ api_key: 'YOUR_API_KEY', url: 'https://example.com' });
const res = await fetch(`https://api.scrapely.dev/v1/scrape?${params}`);
const { content } = await res.json();
console.log(content);

Next: Authentication, then the Quickstart for rendering, geotargeting and async jobs.

Conventions

  • Parameters are snake_case. GET takes them in the query string; POST takes the same names as JSON or a form.

  • Timestamps are ISO-8601 UTC. Ids are prefixed by type: job_, batch_, req_, evt_.

  • Every response carries X-Request-Id. Quote it to support.

  • Errors are always { "error": { "code", "message", "param", "docs" } }. Branch on code. See Errors.

  • The full machine-readable spec is at /v1/openapi.json (OpenAPI 3.1) and rendered in the API reference.

Updated