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

Scrape JD.com (京东) search results and product pages: live CNY prices, shops, positive-review rates, review counts, brands, images, variants and stock. No login needed.
Turn JD.com (京东, Jingdong), China's largest online retailer, into clean product data. Search by keyword or paste product links and get the live CNY price, shop, positive-review rate, review count, brand, images, variants and stock for each product. No JD account, no cookies, no setup: a 20-product search finishes in about 10 seconds.
华为手机) and/or Product URLs or ids (for example https://item.jd.com/100012043978.html).| Field | Description |
|---|---|
searchQueries | Keywords to search. Chinese keywords give the best results; English brand names work too. |
productUrls | JD product URLs (item.jd.com, item.m.jd.com, item.jd.hk) or numeric product ids. |
maxResults | Max unique products per keyword (default 20). |
minPrice / maxPrice | Price range in CNY for keyword searches. |
jdLogisticsOnly | Only products delivered by JD Logistics (京东物流). |
includeDetails | Add brand, images, variants, stock, delivery, weight and dimensions to search results. |
proxyConfiguration | Datacenter by default; refused requests are retried on residential exits in China, then Hong Kong. |
{
"searchQueries": ["蓝牙耳机"],
"productUrls": ["https://item.jd.com/100012043978.html"],
"maxResults": 20,
"minPrice": 100,
"maxPrice": 300,
"jdLogisticsOnly": true,
"includeDetails": false
}
One row per product. Search rows and product rows share the main fields.
| Field | Description |
|---|---|
itemId, title, url | JD product id (SKU), title and product page |
price, currency | Live price in CNY |
imageUrl | Main image |
shopId, shopName, shopUrl, venderId | Seller |
isJdSelfOperated | JD self-operated (京东自营) listing |
goodRatePercent, reviewCountText, reviewTags | Share of positive reviews, review count as JD shows it (e.g. 20万+), review highlights |
installmentTag, isPresale, isNewArrival, isLowestPrice | Offer labels (search rows) |
categoryIds, brandId, listedAt | Category ids, brand id and listing date |
searchQuery, position, page | Where the product was found (search rows) |
brand, images, variants, variantCount | Product details |
stockState, deliveryPromise | in_stock, out_of_stock, pre_order; delivery promise for Beijing |
weightKg, dimensions, model, upc, warranty, productArea, spuId | Product details |
goodReviewCountText | Number of positive reviews (product lookups) |
Example search row (trimmed):
{
"itemId": "100331677354",
"title": "华为畅享 90 Pro Max 256GB 飞天青 8500mAh巨鲸大电池 鸿蒙AI 关怀模式 直屏华为手机",
"price": 2099,
"currency": "CNY",
"url": "https://item.jd.com/100331677354.html",
"imageUrl": "https://img14.360buyimg.com/n0/jfs/t1/537470/34/13128/143305/6acfa9f9Fa7d27732/00835a05a070031c.jpg",
"shopId": "1000004259",
"shopName": "华为京东自营旗舰店",
"isJdSelfOperated": true,
"reviewCountText": "20万+",
"goodRatePercent": 98,
"reviewTags": ["色彩饱满", "手感一流", "高端大气"],
"installmentTag": "6期免息",
"categoryIds": ["9987", "653", "655"],
"listedAt": "2026-05-20T15:39:22Z",
"searchQuery": "华为手机",
"position": 1,
"page": 1
}
Example product row (trimmed):
{
"itemId": "100012043978",
"title": "茅台飞天 53%vol 500ml 贵州茅台酒(带杯)【需预约购买】",
"price": 1759,
"currency": "CNY",
"shopName": "贵州茅台",
"isJdSelfOperated": true,
"brand": "茅台",
"categoryIds": ["12259", "12260", "9435"],
"variants": [{"skuId": "100153291833", "attributes": {"规格": "2026年", "其他信息": "单瓶装"}}],
"stockState": "in_stock",
"weightKg": 1.1,
"dimensions": {"lengthMm": 238, "widthMm": 90, "heightMm": 88},
"reviewCountText": "200万+",
"goodRatePercent": 99
}
Platform usage (compute and proxy traffic) is billed on top and is small: a 20-result search used about $0.0004. Example: 1,000 search results cost about $7.00 in result fees plus a few cents of usage. Inputs that return nothing (unknown ids, keywords without matches) are not charged.
Is it legal to scrape JD.com? The actor reads only public pages that any visitor can open without logging in. Check JD's terms and the laws that apply to you before you use the data, especially for personal data.
Do I need a JD account or my own proxy? No. The default datacenter proxy works; requests JD refuses are retried on residential exits in China (then Hong Kong) automatically. If you pick residential yourself and those exits fail to connect, the run switches to a backup pool instead of failing.
How many results can one keyword return? JD lists up to about 160 result pages of 48 products per keyword. Repeats across pages are removed, so a broad keyword yields several thousand unique products (5,000 for 手机壳 in our test, in about 3 minutes). When JD has fewer, the run says so in its status message.
Why is a field empty? Not every listing has every field: brand ids, installment labels or selling points appear only when JD shows them. Product lookups need the product page, so detail fields are empty only if that page could not be loaded.
Why do search results differ from what I see on jd.com? JD personalises and localises results for logged-in shoppers. This actor reads JD's public search pages (京东热卖), which include promoted placements, so the order can differ.
Can I schedule it or use the API? Yes. Schedule runs in the console, or start them over the API and read the dataset as JSON, CSV or Excel.
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.
searchQueriesarrayOptionalSearch keywords
Keywords to search on JD.com. Chinese keywords give the best results (for example 华为手机, 蓝牙耳机, 茅台), English brand names work too. Each keyword returns up to Max results products.
productUrlsarrayOptionalProduct URLs or ids
JD.com product URLs (item.jd.com, item.m.jd.com, item.jd.hk) or numeric product ids, for example https://item.jd.com/100012043978.html or 100012043978. Each returns one detailed product row with the live price, brand, images, variants and stock.
maxResultsintegerOptionaldefault 20Max results per keyword
Stop each keyword search after this many unique products. Product URLs are always all processed. JD lists about 160 pages of 48 products per keyword.
Narrow keyword searches and choose how much data each search result carries. Product URL lookups always include details.
minPriceintegerOptionalMin price (CNY)
Only keep search results that cost at least this much, in Chinese yuan. Leave empty for no lower bound.
maxPriceintegerOptionalMax price (CNY)
Only keep search results that cost at most this much, in Chinese yuan. Leave empty for no upper bound.
jdLogisticsOnlybooleanOptionaldefault falseShipped by JD Logistics only
Only keep products delivered by JD's own logistics network (京东物流).
includeDetailsbooleanOptionaldefault falseAdd product details to search results
Also open each search result's product page and add brand, all images, variants (colors, sizes), stock state, delivery promise, weight and dimensions. Slower, and each row is billed as a detailed product.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter exits are the default. Requests that JD refuses are retried on residential exits in China (then Hong Kong) automatically. With residential selected, exits that fail to connect are replaced by a backup pool.
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 |
|---|---|---|
| itemId | string | JD.com product id (SKU). |
| title | string | null | Product title. |
| price | number | null | Live price in CNY. |
| currency | string | Always CNY. |
| url | string | Product page URL. |
| imageUrl | string | null | Main image URL. |
| shopId | string | null | JD shop id. |
| shopName | string | null | Shop name. |
| shopUrl | string | null | Shop page URL. |
| isJdSelfOperated | boolean | null | True for JD self-operated (京东自营) listings. |
| reviewCountText | string | null | Review count as JD shows it, e.g. 20万+. |
| goodRatePercent | number | null | Share of positive reviews, in percent. |
| brand | string | null | Brand name (product details). |
| stockState | string | null | in_stock, out_of_stock, pre_order or unknown (product details). |
| searchQuery | string | null | Keyword that found this product. |
| position | number | null | Position in the keyword's results. |
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 |
|---|---|---|
| Detailed product | One product with full details (brand, images, variants, stock) saved to the dataset, from a product URL or a search with details on. | $0.04 |
| Search result | One product from a keyword search saved to the dataset. | $0.007 |
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/jd-scraper').call({
"searchQueries": [
"华为手机"
],
"maxResults": 20,
"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/jd-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/jd-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.
15 Bluetooth earbuds (蓝牙耳机) priced 100 to 300 CNY and delivered by JD Logistics.
Live CNY price, brand, images, variants and stock for two JD products.
10 mechanical keyboards (机械键盘) with brand, variants, stock and delivery details.
120 unique phone case (手机壳) listings with prices, shops and ratings.
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.