JD.com Product Scraper — Search, Detail, Reviews avatar

JD.com Product Scraper — Search, Detail, Reviews

Pricing

from $1.50 / 1,000 product search results

Go to Apify Store
JD.com Product Scraper — Search, Detail, Reviews

JD.com Product Scraper — Search, Detail, Reviews

Scrape JD.com (Jingdong) into clean structured datasets — keyword search with real prices, product details, customer reviews, shop catalogs, and bulk price lookups. Five operations in one actor. No account, no API key, no setup.

Pricing

from $1.50 / 1,000 product search results

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

1

Bookmarked

8

Total users

1

Monthly active users

a day ago

Last modified

Share

JD.com Product Scraper — Search, Prices, Reviews & Shop Catalogs 🚀

SIÁN Agency Store SIÁN Taobao & Tmall SIÁN Kwai & Kuaishou SIÁN Xiaohongshu RedNote

🎉 Five scrapers in one — keyword search with real prices, deep product data, reviews, shop catalogs, and bulk price lookups

Built for China e-commerce researchers, dropshippers, brand analysts, and pricing teams who need clean JD.com (Jingdong) data without scraping headaches


📋 Overview

Stop fighting JD.com's anti-bot defenses. This actor turns Jingdong (京东) — China's largest B2C marketplace — into a clean, structured data feed across five complementary operations.

Why thousands of professionals choose us:

  • Real CNY prices via Product Search: 48 products per page with live sale prices, sales counts, ratings, and shop info — no decoding required
  • Dedicated bulk price endpoint: refresh prices on thousands of SKUs for the cheapest per-row rate on the market
  • 🎯 Transparent detail data: when JD masks unit prices, we expose a priceMasked flag so you know to switch to Search or Price endpoints
  • 💰 Pay-per-result pricing: only charged for successful rows, never for errors or empty pages
  • 💎 No account, no API key, no setup: paste your input, hit Start, get JSON
  • NEW: Bulk Product Price operation — the fastest, cheapest way to keep an SKU catalog in sync with live JD pricing

✨ Features

  • 🔎 Keyword Search: 48 real-price products per page with shop, sales, rating, and canonical URLs
  • 📦 Product Detail: deep SKU, stock, dimensions, category, shop floor, and variant data
  • 💬 Product Comments: customer reviews with rating, content, appended review, reviewer profile, and photo URLs
  • 🏬 Shop Catalog: a merchant's full product list by Shop ID
  • 💱 Bulk Product Price: dedicated single-product price lookup — the cheapest endpoint in the actor
  • 🇨🇳 Native Chinese support: handles 中文 keywords, titles, and review content cleanly
  • 📸 Normalized image URLs: JD CDN paths upgraded to fully-qualified HTTPS URLs
  • 📄 HTML run report: every run drops a report.html summary into the key-value store
  • 🧾 Apify-native dataset: export to JSON, CSV, Excel, RSS, or XML in one click
  • 🛡️ Error rows never charged: invalid IDs, removed products, and rate limits are flagged in the dataset but cost nothing

🎬 Quick Start

Pick an operation, plug in a keyword or item ID, and run. No login, no proxy setup, no captcha solving.

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~jd-com-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"productSearch","keyword":"华为手机","maxPages":1}'

🚀 Getting Started (3 Simple Steps)

Step 1: Choose an operation

Pick one of productSearch, productDetail, productComments, shopCatalog, or productPrice based on what you need.

Step 2: Plug in the input

  • Keyword or item ID
  • Optional maxPages (for paginated operations: search, comments, catalog)

Step 3: Hit Start and grab the dataset

Export to JSON, CSV, or Excel — or pull rows live through the Apify API.

That's it! In under 60 seconds, you'll have:

  • Clean, flat rows ready for analytics
  • Real CNY prices, sales counts, and shop info
  • Normalized image URLs you can hotlink directly

📥 Input Configuration

One operation per run. Fields required depend on which operation you pick.

FieldTypeRequiredDescription
operationenumYesOne of productSearch, productDetail, productComments, shopCatalog, productPrice
keywordstringIf productSearchSearch term (supports Chinese, e.g. 华为手机)
itemIdstringIf detail / comments / priceJD product ID (e.g. 100012043978)
shopIdstringIf shopCatalogJD shop ID
maxPagesintegerNoCap pages fetched for paginated ops (search / comments / catalog). Default 1.

Example — Keyword Search:

{
"operation": "productSearch",
"keyword": "iPhone 16 Pro",
"maxPages": 3
}

Example — Bulk Price Refresh:

{
"operation": "productPrice",
"itemId": "100012043978"
}

Example — Customer Reviews:

{
"operation": "productComments",
"itemId": "100012043978",
"maxPages": 5
}

📤 Output

Results land in the Apify dataset with curated camelCase fields plus the raw upstream payload spread alongside, so you never lose data.

FieldTypeDescription
operationstringWhich operation produced the row
itemIdstringJD product ID
productTitlestringProduct name
pricenumberCurrent sale price in CNY (Search + Price ops only)
priceCentsnumberPrice in cents — bulk Price endpoint returns this raw
priceYuannumberPrice converted to ¥ (Price endpoint)
priceMaskedbooleantrue when JD masks the price on the detail endpoint
salesTextstringSales count text (e.g. 5万+)
goodRatenumberPositive review rate percentage
shopId / shopNamestringMerchant identifiers
itemUrlstringCanonical JD product URL
reviewContentstringReview body (comments op)
reviewPhotosarrayReviewer-uploaded photo URLs
availablebooleanfalse when JD has delisted or hidden the SKU
statusstringsuccess or error

Example — Product Search row:

{
"operation": "productSearch",
"itemId": "100012043978",
"productTitle": "华为 HUAWEI Mate 60 Pro 12GB+512GB",
"price": 6499.00,
"salesText": "10万+",
"goodRate": 99,
"shopId": "1000004259",
"shopName": "华为京东自营官方旗舰店",
"itemUrl": "https://item.jd.com/100012043978.html",
"status": "success"
}

Important — JD price masking: JD.com masks unit prices on its detail endpoint as an anti-scraping countermeasure (you'll see strings like 1??9, 4??9). For real prices, use Product Search (returns 48 priced rows per call) or Bulk Product Price (cheapest way to refresh a known SKU). Detail is best for SKU specs, stock, dimensions, and shop info.


💼 Use Cases & Examples

1. Competitor Price Monitoring on JD.com

E-commerce managers tracking rivals' pricing on Jingdong's biggest categories.

Input: category keyword (e.g. 蓝牙耳机), maxPages 5 Output: 240+ priced products per run with shop, sales, and rating data Use: schedule daily, diff against yesterday's snapshot, alert on price drops

2. Dropshipping Product Sourcing

Drop-ship operators discovering hot products and trustworthy shops.

Input: keyword like 家用智能投影仪 Output: real prices, sales volumes, and shop ratings to spot winners Use: export the dataset, sort by sales × rating, and import into your store

3. Customer Review Mining at Scale

Brand analysts running sentiment analysis on Chinese reviews.

Input: itemId for a flagship SKU, maxPages 20 Output: review text, ratings, reviewer profiles, and photo URLs Use: pipe into an LLM for theme extraction and competitive teardowns

4. Brand Catalog Mapping

Researchers mapping a Chinese brand's full JD.com footprint.

Input: shopId for the brand's flagship store Output: every itemId + title + product URL the shop currently lists Use: combine with Product Detail to enrich each row with specs

5. Bulk SKU Price Refresh

Pricing teams keeping internal CRM/ERP product feeds in sync with JD.

Input: loop a list of itemIds through productPrice (one ID per run, fanned out) Output: current CNY price + available flag for delisted SKUs Use: cheapest endpoint we offer — built for thousands of SKUs

6. Dropshipper SKU Variant Mapping

Sellers cataloging variants and stock per color/storage.

Input: itemId via productDetail Output: SKU table, stock state, category breadcrumbs, shop floor metadata Use: generate variant matrices for your storefront

7. China Market Intelligence

Analysts benchmarking Chinese brands against Western alternatives.

Input: keyword searches across the target category Output: sales counts and price bands across the JD long tail Use: weight by sales volume to build a true market-share view


🔗 Integration Examples

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/jd-com-product-scraper').call({
operation: 'productSearch',
keyword: 'iPhone 16 Pro',
maxPages: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/jd-com-product-scraper').call(
run_input={
'operation': 'productPrice',
'itemId': '100012043978',
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['priceYuan'], item['available'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~jd-com-product-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"productComments","itemId":"100012043978","maxPages":2}'

Automation Workflows (N8N / Zapier / Make)

  1. Trigger: schedule or webhook (new SKU added, weekly refresh, etc.)
  2. HTTP Request: call the actor's run endpoint with your input JSON
  3. Process: read the dataset items via the Apify API
  4. Action: write to your DB, alert Slack on price drops, or push into a BI dashboard

📊 Performance & Pricing

Pay-per-event pricing — only charged for successful rows. Error rows never cost anything.

FREE Tier (Try It Now)

  • Full access to all five operations with your monthly Apify FREE credit
  • No credit card required
  • Perfect for testing keywords, validating IDs, and prototyping
  • Unlimited rows per run with tier-volume discounts that auto-apply as you scale
  • Faster turnaround on bulk batches
  • Pay only for successful, deduped rows

💰 Best-in-class per-row pricing on JD.com data, with a dedicated cheap bulk Product Price operation built for SKU refresh workflows at scale.

🔗 View current pricing


❓ Frequently Asked Questions

Q: Why are prices missing on Product Detail rows? A: JD.com masks unit prices on its product-detail endpoint as an anti-scraping defense (you'll see 1??9, 4??9, etc.). Use Product Search for real prices across a category, or Bulk Product Price to refresh a known SKU. We expose a priceMasked: true flag on detail rows so you always know which path to take.

Q: Do I need a JD.com account or API key? A: No. Paste your input, hit Start, get rows. We handle authentication, retries, and CDN normalization for you.

Q: Can I search in Chinese? A: Yes — keyword accepts Chinese characters natively (e.g. 华为手机, 蓝牙耳机). Results return Chinese titles, sales text (e.g. 5万+), and review content as-is.

Q: How many results does Product Search return per page? A: 48 products per page. Use maxPages to fan out further.

Q: What output formats are available? A: JSON, CSV, Excel, RSS, or XML — export directly from the Apify dataset UI or pull live via the API.

Q: Can I bulk-process a list of product IDs? A: Yes — loop your IDs into the productPrice operation (one ID per run, fanned via the Apify API). It's our cheapest endpoint by design and built exactly for that workflow.

Q: How fast is processing? A: Most runs finish in seconds. Bulk catalog or comment scrapes scale linearly with maxPages.

Q: Is this legal? A: We only extract publicly available data. See the legal section below.


🐛 Troubleshooting

No rows returned from Product Search

  • Double-check your keyword spelling (Chinese characters preferred for Chinese categories)
  • Confirm maxPages is at least 1
  • Some niche queries return zero results — try a broader keyword

"Item not found" or empty Product Detail / Price

  • The SKU may have been delisted by JD — check available: false in the response
  • Verify your itemId is a numeric JD product ID (not a Tmall ID)

Prices look masked on Detail

  • Expected behavior — JD masks prices on the detail endpoint. Switch to productSearch or productPrice for real numbers. The priceMasked flag confirms this on every detail row.

Shop Catalog returns thin rows

  • By design — the catalog endpoint returns itemId + title + URL only. Fan each itemId out to productDetail or productPrice to enrich.

Run was charged but I see error rows

  • Error rows are never charged. Only status: success rows count toward billing.

⚠️ Trademark Disclaimer

This is an independent scraping tool for publicly available JD.com data. It is not affiliated with, endorsed by, or sponsored by JD.com, Inc., 京东 (Jingdong), or any of their subsidiaries or affiliates. All product names, brand names, trademarks, and logos referenced are the property of their respective owners. The JD.com® and Jingdong® names appear under nominative fair use solely to describe the public source of the data this tool helps you access.


Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.


🤝 Support

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools