
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Extract public Amazon product and search data: prices, ASINs, ratings, sellers, and images from product or category URLs.
Extract public Amazon product data without an account: title, ASIN, price, brand, rating, review count, images, variants and the featured seller. Paste product, search, category or bestseller URLs and get one clean row per product, ready for JSON, CSV or Excel.
Results cost $0.70 per 1,000 products, and the extras (offers, seller ratings, delivery pricing) are optional and charged only when you switch them on.
/dp/, /gp/product/), search and category URLs, bestsellers, and a.co / amzn.to short links.https://www.amazon.com/s?k=keyboard, a category or a bestsellers page).| Field | Type | Description |
|---|---|---|
categoryOrProductUrls | array (required) | Search, category, bestsellers or product URLs. |
maxItemsPerStartUrl | integer | Stop after this many products for each URL. Default 10. |
maxSearchPagesPerStartUrl | integer | Search or category pages to open per URL. Default 1. |
scrapeProductDetails | boolean | Open each product page. On by default; turn off to keep only the search-card fields. |
maxProductVariantsAsSeparateResults | integer | Also save this many sibling variants of each product as their own rows. |
scrapeProductVariantPrices | boolean | Open each variant page to fill its price. |
maxOffers | integer | Other seller offers to attach to each product. Charged per offer. |
scrapeSellers | boolean | Add the featured seller's rating and rating count. |
countryCode / zipCode | string | Delivery country or ZIP code, set the way Amazon's "Deliver to" dialog sets it. |
language, proxyCountry | string | Storefront language and proxy exit country. |
useCaptchaSolver | boolean | Ask the challenge solver when a page is blocked. |
proxyConfiguration | object | Datacenter by default; residential is used automatically when a datacenter exit is blocked. |
{
"categoryOrProductUrls": [
{ "url": "https://www.amazon.com/dp/B09X7MPX8L" }
],
"maxItemsPerStartUrl": 10,
"scrapeProductDetails": true,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
Each product is one dataset row. A URL that cannot be read saves no row: it is listed with the reason in the run's status message and in the OUTPUT record under failedInputs.
| Field | Description |
|---|---|
title, url, asin | Product name, page URL and ASIN. |
brand | Brand name. |
price | Object with value and currency. |
inStock, inStockText | Availability. |
stars, reviewsCount | Average rating and number of ratings. |
breadCrumbs | Category path. |
thumbnailImage, galleryThumbnails, highResolutionImages | Image URLs. |
features, productOverview | Bullet features and overview key/value pairs. |
variantAsins, variantDetails | Sibling variants with names, images and ASINs. |
shipsFrom, returnPolicy, support | Buy-box "Ships from", "Returns" and "Support" rows (e.g. Amazon, FREE 30-day refund/replacement). |
monthlyPurchaseVolume | The "bought in past month" text, e.g. 500+ bought in past month (also on search rows, with the product url). |
locationText | The page's "Deliver to" text. |
deliveryLocationApplied, deliveryLocationShown | Only when you set a delivery country or ZIP: true when the page showed your location, and the location the page actually showed (e.g. New York 10001). |
Example item (trimmed):
{
"title": "SANDISK 1TB Extreme microSD Card + Adapter, Up to 190MB/s Read Speeds",
"url": "https://www.amazon.com/dp/B09X7MPX8L",
"asin": "B09X7MPX8L",
"price": { "value": 199.75, "currency": "$" },
"inStock": true,
"inStockText": "In Stock",
"brand": "SANDISK",
"stars": 4.8,
"reviewsCount": 149718,
"breadCrumbs": "Electronics > Computers & Accessories > Computer Accessories & Peripherals > Memory Cards > Micro SD Cards",
"thumbnailImage": "https://m.media-amazon.com/images/I/716kSUlHouL._AC_SY300_SX300_QL70_FMwebp_.jpg",
"highResolutionImages": [
"https://m.media-amazon.com/images/I/716kSUlHouL._AC_SL1500_.jpg"
],
"features": [
"Compatible with Nintendo-Switch (NOT Nintendo-Switch 2)"
],
"variantAsins": ["B0G8M2FH2G", "B09X7C2GBC"]
}
You pay per event, plus platform usage (compute and proxy traffic).
| Event | When it is charged | Price |
|---|---|---|
| Result | One product row | $0.0007 |
| Offer | One extra seller offer, only if you set maxOffers | $0.001 |
| Seller | The featured seller's rating page, only if scrapeSellers is on | $0.001 |
| Delivery location | One product whose page showed the delivery country or ZIP you set (deliveryLocationApplied: true) | $0.04 |
Worked example: 1,000 products with default settings cost $0.70 in result events. Failed URLs are not charged. Platform usage is extra: compute at $0.30 per GB-hour, datacenter proxy at $1 per GB, and residential proxy at $2 per GB (used only when a datacenter exit is blocked).
Is it legal to scrape Amazon? The actor reads publicly visible pages only. You are responsible for using the data in line with applicable law and Amazon's terms.
Do I need a login or a proxy? No login. Proxies are included and selected for you.
Which URLs work?
Search and category URLs containing /s or /b/, bestsellers URLs, product URLs containing /dp/ or /gp/product/, and short links on a.co or amzn.to. Other hosts return an invalid_url row.
Why is a price missing? Amazon hides the featured price when a product does not ship to the proxy's location. Set a matching proxy country or a delivery ZIP.
What if my delivery ZIP cannot be applied?
Each product page is checked after the location is set. If Amazon rejects the ZIP (for example an invalid one) or a page still shows another place, the product is saved with deliveryLocationApplied: false and the location it showed in deliveryLocationShown, and the delivery-location event is not charged for it. The status message and the OUTPUT record say how many results got your location.
How many products can one URL return? Up to the limit you set. Search pages often stop after a few pages on Amazon's side, so narrow the category if you need more.
Can I schedule it or use the API? Yes. Use schedules for price monitoring and the API to start runs and read results.
invalid_url row with a "blocked" description.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
categoryOrProductUrlsarrayRequiredAmazon URLs
Search, category, bestsellers, or product URLs. Example search: https://www.amazon.com/s?k=keyboard. Example product: https://www.amazon.com/dp/B09X7MPX8L. A different Amazon domain, such as amazon.de, selects that store.
maxItemsPerStartUrlintegerOptionaldefault 10Max results per URL
Stop after this many products for each start URL.
Limit how far a search or category page is followed.
maxSearchPagesPerStartUrlintegerOptionaldefault 1Max search pages per URL
How many search or category pages to open for each start URL. The run also stops at Max results, and when Amazon has no next page (about 20 pages per search).
languageenumOptionalLanguage
Storefront language. Each Amazon domain only supports some of these. An unsupported choice falls back to that domain's default.
maxProductVariantsAsSeparateResultsintegerOptionaldefault 0Variants as separate results
Also open this many sibling variants of each product and save each one as its own row. Variant names are already included on the main row.
Extra requests. Leave these off for a faster listing.
scrapeProductDetailsbooleanOptionaldefault trueOpen each product page
On by default. Turn it off to keep only the title, price, rating, and image shown on the search or category page.
scrapeProductVariantPricesbooleanOptionaldefault falsePrices for each variant
Open each variant page and fill its price. This adds one request per variant.
maxOffersintegerOptionaldefault 0Offers per product
How many other seller offers to attach to each product. Each offer is charged separately.
scrapeSellersbooleanOptionaldefault falseSeller ratings
Open the featured seller page and add their rating and rating count. Charged separately from the product.
useCaptchaSolverbooleanOptionaldefault falseSolve bot challenges
When a page is blocked by a bot challenge, ask the challenge solver before giving up. The run already retries a blocked datacenter exit through residential addresses.
Optional. Set a delivery country or ZIP when you need prices and shipping for a specific place. Each product whose page shows that location is charged an extra delivery event.
proxyCountrystringOptionaldefault "AUTO_SELECT_PROXY_COUNTRY"Proxy country
ISO country code for the proxy exit, such as US or DE. Leave empty, or use AUTO_SELECT_PROXY_COUNTRY, to follow the Amazon domain.
countryCodestringOptionalDelivery country
ISO country code to set as the delivery location on Amazon, such as US.
zipCodestringOptionalDelivery ZIP code
ZIP or postal code for a more specific delivery location. Used instead of the delivery country when both are set.
locationDeliverableRoutesarrayOptionaldefault ["PRODUCT","SEARCH","OFFERS"]Where to apply the delivery location
Page types that should use the delivery country or ZIP. Defaults to all of them.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter addresses are the default. Residential is used automatically when a datacenter exit is blocked, unless you pick a pool here.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| title | string | null | Product title |
| asin | string | null | Amazon Standard Identification Number |
| brand | string | null | Brand name |
| stars | number | null | Average star rating |
| reviewsCount | number | null | Number of customer ratings |
| thumbnailImage | string | null | Main product image |
| breadCrumbs | string | null | Category path |
| description | string | null | Product description |
| price | object | null | Current price |
| url | string | null | Product page URL |
| inStock | boolean | null | Whether the featured offer is in stock |
| locationText | string | null | The page's "Deliver to" text |
| deliveryLocationApplied | boolean | null | Only when a delivery country or ZIP is set: true when the page showed the requested location (the delivery-location event is charged only then) |
| deliveryLocationShown | string | null | Only when a delivery country or ZIP is set: the delivery location the page actually showed, e.g. New York 10001 |
| shipsFrom | string | null | Who ships the featured offer (the buy box "Ships from" row), e.g. Amazon |
| returnPolicy | string | null | Return policy shown in the buy box, e.g. FREE 30-day refund/replacement |
| monthlyPurchaseVolume | string | null | The "bought in past month" text, e.g. 500+ bought in past month |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Delivery location | A delivery country or ZIP applied to one product. | $0.04 |
| Offer | One extra seller offer. | $0.001 |
| Result | One product row. | $0.0007 |
| Seller | Seller rating page for one product. | $0.001 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/amazon-product-scraper').call({
"categoryOrProductUrls": [
{
"url": "https://www.amazon.com/dp/B09X7MPX8L"
}
],
"maxItemsPerStartUrl": 10
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/amazon-product-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/amazon-product-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Full product details with prices for every variant.
Product rows from an Amazon search page.
Product details from amazon.co.uk.
Product details with prices and delivery for New York.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.