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

Extract public AliExpress product details from a URL: title, price, SKU variants, stock, shipping, rating, review count, and shop.
Turn any AliExpress product link into one rich dataset row: title, prices, every SKU variant with stock, shipping for your destination country, rating, review count, and the shop behind it. No login, and just $0.10 per 1,000 products.
Paste product URLs or bare product IDs, pick the ship-to country and currency, and export the rows as JSON, CSV, or Excel.
shipTo and currency to get local prices.| Field | Type | Description |
|---|---|---|
productUrls | array | Product links, or a bare product ID such as 1005006959700436. |
maxItems | integer | Stop after this many products. Default 10, no maximum. |
shipTo | string | Two-letter country code for prices, stock, and shipping, such as US, DE, GB. |
currency | string | Three-letter currency code, such as USD, EUR, GBP. |
proxyConfiguration | object | Proxy settings. Datacenter is the default. |
{
"productUrls": [
{ "url": "https://www.aliexpress.com/item/1005006959700436.html" }
],
"maxItems": 10,
"shipTo": "US",
"currency": "USD",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
One row per product. status is ok when the product loaded and unavailable_in_region when AliExpress returns no purchasable data for that ship-to country. Inputs that fail (not an AliExpress product, a product ID that does not exist, or a page that could not be read after retries) get no row: the run's OUTPUT record lists them under failedInputs with the reason, and the status message counts them.
| Field | Description |
|---|---|
productId, url, status | Product id, link, and result status. |
title, categoryId, categoryPath | Title and category. |
price, originalPrice, discountPercent, currency | Price band, original price band, discount, and currency. |
rating, reviewCount, sold | Rating, review count, and sold label. |
totalStock, skus, skuProperties | Stock and every variant. |
attributes, images, video, documents | Specs and media. |
shipping | Shipping methods, fees, and delivery estimates. |
store | Shop id, name, rating, positive rate, country, and opening date. |
A trimmed item from a real run:
{
"productId": "1005006959700436",
"url": "https://www.aliexpress.com/item/1005006959700436.html",
"status": "ok",
"title": "QCY MeloBuds Pro ANC Bluetooth 5.3 Earphones Wireless 46dB Hybrid ANC Hi-Res LDAC Earbuds 6 Mic Headphones 34H In-Ear Detection",
"currency": "USD",
"price": { "min": 26.47, "max": 32.74 },
"originalPrice": { "min": 82.43, "max": 98.1 },
"discountPercent": 68,
"rating": 4.8,
"reviewCount": 5254,
"sold": "10,000+ sold",
"totalStock": 4795,
"images": [
"https://ae-pic-a1.aliexpress-media.com/kf/Sf3383a35bac041acad10e4c903fa6804V.jpg"
],
"video": "https://video.aliexpress-media.com/play/u/ae_sg_item/2227548615/p/1/e/6/t/10301/5000117320950.mp4",
"categoryId": "63705",
"categoryPath": "44/100000306/63705",
"attributes": [{ "name": "Department", "value": "Unisex-adult" }],
"skuProperties": [
{
"id": 14,
"name": "Color",
"values": [
{
"id": 10,
"name": "BLACK",
"image": "https://ae-pic-a1.aliexpress-media.com/kf/Sf3383a35bac041acad10e4c903fa6804V.jpg",
"color": "#FF0000"
}
]
}
],
"skus": [
{
"skuId": "12000039477279755",
"attributes": { "Color": "BLACK", "Ships From": "United States" },
"price": 26.47,
"originalPrice": 82.43,
"stock": 490,
"maxBuyCount": 1,
"available": true
}
],
"shipping": [
{
"method": "Aliexpress Selection Standard",
"code": "CAINIAO_FULFILLMENT_STD",
"fee": 0,
"freeShipping": true,
"shipFrom": "China",
"shipTo": "US",
"deliveryDaysMin": 8,
"deliveryDaysMax": 13,
"estimatedDelivery": "Oct. 21 – Oct. 26",
"tracking": true
}
],
"descriptionUrl": "https://pdp.aliexpress-media.com/product/description/pc/v2/en_US/desc.htm?productId=1005006959700436",
"documents": [
{
"type": "PDF",
"url": "https://ae-pic-a1.aliexpress-media.com/kf/S70e7ebc46c1546058fc0b9b3262b293bz.pdf"
}
],
"store": {
"id": "1100955127",
"name": "QCY Official Store",
"url": "https://www.aliexpress.com/store/1100955127",
"sellerId": "221859663",
"rating": 4.9,
"positiveRate": "97.3%",
"soldLast180Days": "60,000+",
"country": "China",
"openedAt": "2014-09-23 02:02:16",
"topRatedSeller": false
},
"shipTo": "US",
"scrapedAt": "2026-10-14T00:50:00.000Z"
}
A real row includes every image, attribute, and variant. The sample above is shortened.
You pay $0.0001 per product with status ok, which is $0.10 per 1,000 products. Platform usage (compute and proxy) is billed on top at the usual rates, and on small runs compute is the larger part. Invalid URLs, missing products, and products with no purchasable data are free.
Worked example: 100 products cost 100 x $0.0001 = $0.01 in result fees, plus a small amount of compute and proxy.
Yes. shipTo and currency are sent with the product request, and prices and shipping follow what AliExpress returns for that pair.
It reads public product pages. You are responsible for following AliExpress's terms and the laws that apply to your use of the data.
Inputs that are not an AliExpress product URL or ID, IDs AliExpress has no product for, and pages that could not be read after retries are listed in the OUTPUT record under failedInputs, with the reason. They are free. When AliExpress shows its slider check, the scraper retries on fresh datacenter addresses and, as a last resort, reads the page in the hosted browser (billed as browser usage).
The public product data includes the star rating and the review count. It does not include review text.
No. If a page asks for a login, the run stops.
Yes. Schedule runs, start them through the API, and read the dataset in any export format.
If you are moving from a similar product details scraper on another platform, paste the same product URLs and set the ship-to country and currency. Each dataset row is one product.
shipTo changes the currency and price band, but the shipping option label can still show US for a DE request.maxItems has no upper limit; it only shortens the list you paste. Four products are read at a time. For now the platform only starts runs whose input is under about 7 KB, so send up to about 300 product ids or 100 full links per run and split bigger lists.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.
productUrlsarrayRequiredProduct URLs
AliExpress product pages, for example https://www.aliexpress.com/item/1005006959700436.html. A bare product ID also works.
maxItemsintegerOptionaldefault 10Maximum products
Stop after this many products from the list. No upper limit.
Prices, availability, and shipping are calculated for this destination.
shipTostringOptionaldefault "US"Ship-to country
Two-letter country code used for prices, stock, and shipping. Example: US, DE, GB.
currencystringOptionaldefault "USD"Currency
Three-letter currency code for prices. Example: USD, EUR, GBP.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter addresses are the default and pass AliExpress checks most often. Residential addresses use the ship-to country unless you pick one.
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 |
|---|---|---|
| productId | string | null | |
| url | string | null | |
| status | string | |
| title | string | null | |
| currency | string | null | |
| price | object | null | |
| originalPrice | object | null | |
| discountPercent | integer | null | |
| rating | number | null | |
| reviewCount | integer | null | |
| sold | string | null | |
| totalStock | integer | null | |
| store | object | null | |
| shipTo | string | null |
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 |
|---|---|---|
| Result | One AliExpress product with variants, price, shipping, and shop details. | $0.0001 |
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/aliexpress-scraper').call({
"productUrls": [
{
"url": "https://www.aliexpress.com/item/1005006959700436.html"
}
],
"maxItems": 10,
"shipTo": "US",
"currency": "USD",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// 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/aliexpress-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/aliexpress-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.
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.