JD.com Product & Reviews Scraper avatar

JD.com Product & Reviews Scraper

Pricing

from $5.00 / 1,000 product scrapeds

Go to Apify Store
JD.com Product & Reviews Scraper

JD.com Product & Reviews Scraper

Scrape JD.com (京东 / Jingdong) product details and customer reviews by product URL or SKU. Returns title, price, shop, stock, images, and review text/ratings. Cookieless HTTP Impit + managed review recovery. MCP-ready.

Pricing

from $5.00 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

56

Total users

21

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

Scrape public JD.com (京东 / Jingdong) product details and customer reviews by product URL or numeric SKU. Paste item.jd.com/{sku}.html links (or mobile product URLs) and get flat dataset rows for title, brand, price when JD exposes it, shop, stock signals, images, and optional review text with ratings — built for China ecommerce researchers, price-monitoring teams, and AI agents on Apify.

Reviews need your own JD.com sign-in. JD now shows customer reviews only to signed-in users. Product details work without any login. To get reviews, paste your own JD.com session cookie into the optional jdCookie input (see Getting reviews). Without it, review jobs are reported as blocked and never billed.

What data can you extract from JD.com?

One dataset row per product or review, with provenance on every item.

FieldDescription
recordTypeproduct or review
skuId / productId / title / brand / productUrlProduct identity
price / priceDisplay / priceMasked / currencyCNY price when JD exposes it; priceMasked flags hidden prices
shopId / shopName / stockStatus / imageUrlOffer and media signals
reviewId / content / rating / userNickname / createdAtCustomer review fields
source / scrapedAtProvenance and freshness

Best fit

Use this Actor when you already have JD product URLs or SKU IDs and need structured product rows and optional customer reviews for monitoring, assortment research, or MCP/agent pipelines. It stays focused on mainland JD.com product pages you supply — keyword search and shop catalogs are a different workflow.

When you need Alibaba.com B2B listing cards instead of JD SKUs, route to Alibaba Listings Scraper. For AliExpress search and product detail, use AliExpress All-in-One Scraper. For Amazon catalog intelligence after a China-market pull, continue with Amazon Product Intelligence.

Workflow story

A sourcing analyst pastes one hoodie SKU URL, sets mode to product+reviews, maxReviewsPerProduct to 5, pastes her own JD.com session cookie into jdCookie, and keeps Residential proxy on. The run returns one product row plus up to five review rows. She exports JSON for a weekly price-and-sentiment sheet, notes any priceMasked: true SKUs as price-unavailable, and schedules the same input for monitor-style checks.

How it works

  1. Normalizes item.jd.com / item.m.jd.com URLs and bare numeric SKUs
  2. Fetches the mobile product page over HTTP (Impit Chrome-TLS) and parses embedded window._itemOnly catalog fields
  3. Optionally collects customer reviews from JD's comment feed. JD shows reviews only to signed-in users, so the request carries your own jdCookie when you supply one. Without it (or when JD refuses the cookie), the review job is reported in OUTPUT.warnings and the status message, and no review rows are billed; product rows from the same run are kept
  4. Deduplicates SKUs, charges named PPE events, and writes product and review rows to the dataset
  5. Writes OUTPUT and RUN_SUMMARY with outcome, counts, and charged events

Input example

{
"productUrls": [{ "url": "https://item.jd.com/100066291366.html" }],
"mode": "product+reviews",
"maxProducts": 1,
"maxReviewsPerProduct": 5,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
FieldTypeWhat it controls
productUrlsarrayitem.jd.com or item.m.jd.com/product URLs
skuIdsarrayBare numeric SKU IDs
modeenumproduct, reviews, or product+reviews
maxProductsintegerCap on distinct SKUs (default 10)
maxReviewsPerProductintegerCap on reviews per SKU (default 20)
jdCookiesecret stringOptional. Your own JD.com session cookie; needed for reviews
preferManagedReviewsbooleanNo longer used (kept for saved inputs)
proxyConfigurationobjectRecommended Apify Residential

Example output

{
"recordType": "product",
"skuId": "100066291366",
"title": "回力卫衣男秋季长袖t恤简约圆领休闲运动跑步健身上衣套头衫男装",
"brand": "回力",
"currency": "CNY",
"shopName": "示例店铺",
"stockStatus": "in_stock",
"productUrl": "https://item.jd.com/100066291366.html",
"source": "mobile_pdp",
"scrapedAt": "2026-09-30T10:00:00.000Z"
}

You can download the dataset as JSON, CSV, Excel, or HTML. Every run also writes OUTPUT and RUN_SUMMARY.

Pricing

This Actor uses Pay per event with platform usage passed through to the caller. Current event prices:

  • apify-actor-start: $0.00005 per run
  • product-scraped: $0.005 per validated product row (primary)
  • review-scraped: $0.012 per validated review row

For example, one product with five review rows costs about $0.065 in named events plus small platform usage. Only validated product and review rows receive those named charges. Treat the live Pricing tab on the Actor page as the current source of truth for event prices and platform usage before budgeting a production run.

Outcomes

Every run writes OUTPUT and RUN_SUMMARY with one of:

COMPLETE | PARTIAL | VALID_EMPTY | INVALID_INPUT | UPSTREAM_FAILED | CONFIG_ERROR

  • PARTIAL: products saved while reviews were blocked (for example no jdCookie), or the reverse
  • INVALID_INPUT: no usable URLs or SKUs after normalization
  • UPSTREAM_FAILED: JD did not return usable data and nothing billable was saved. A reviews-only run without a working jdCookie ends here, with no review charges
  1. Sign in to your own account at jd.com in your browser.
  2. Open the browser developer tools on any jd.com page, go to the Network tab, click any request to jd.com, and copy the full value of the Cookie request header.
  3. Paste it into jdCookie and run with mode set to reviews or product+reviews.

The cookie is stored encrypted as a secret input, sent only to JD.com to request reviews during your run, and never written to the log, the dataset, or RUN_SUMMARY. Cookies expire; if the status message says JD refused the cookie, copy a fresh one. Use only your own account. RUN_SUMMARY.reviewsAuth shows whether a cookie was used.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~jd-com-product-reviews-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"productUrls":[{"url":"https://item.jd.com/100066291366.html"}],"mode":"product","maxProducts":1}'

Then read the dataset and the OUTPUT record for outcome, row counts, and charged events.

MCP / agent prompt card

Scrape JD.com product https://item.jd.com/100066291366.html for title, price (note if masked), shop, and stock (and up to 5 customer reviews when the user supplies their own jdCookie). Tool: khadinakbar/jd-com-product-reviews-scraper. Return flat rows with skuId and recordType. Cost is $0.005 per product row and $0.012 per review row plus platform usage.

Tips for best results

  • Prefer Chinese-market SKUs on item.jd.com (mainland product pages)
  • Start with maxProducts: 1 and maxReviewsPerProduct: 5 for a cheap quality check
  • When priceMasked is true, treat price as unavailable and keep the display string for audit
  • Keep Apify Residential enabled for steadier mobile PDP yield
  • For reviews, supply a fresh jdCookie from your own signed-in browser session

Builder's note

I built this Actor after probing JD's desktop PDP from outside China and finding a risk-control shell instead of catalog HTML. The mobile product page (item.m.jd.com) still embeds window._itemOnly with usable title, shop, stock, and image fields, so the runtime is cookieless Impit against that path. JD's comment feed now answers logged-out callers with a busy or forbidden response, so reviews need the customer's own session cookie (jdCookie). When reviews are refused, the job is reported as blocked and no review rows are billed.

FAQ

What input do I need to provide?

Add JD product links (item.jd.com/{sku}.html or mobile product URLs) to productUrls, or numeric SKU IDs to skuIds. Choose mode as product, reviews, or product+reviews, and cap work with maxProducts and maxReviewsPerProduct.

Do I need a JD.com login?

Product details need no login. Reviews do, because JD shows them only to signed-in users, so paste your own JD.com session cookie into jdCookie; it is stored encrypted and never written to the log, dataset, or RUN_SUMMARY.

The review job is reported as blocked and no review rows are billed. With product+reviews, product rows are still saved and the outcome is PARTIAL; a reviews-only run ends as UPSTREAM_FAILED with no review charges.

How much does it cost?

Events are $0.00005 per run start, $0.005 per validated product row, and $0.012 per validated review row, with platform usage passed through to the caller. For example, one product with five reviews costs about $0.065 in named events plus small platform usage.

Why is the price missing on some products?

JD sometimes hides the price. In that case priceMasked is true, so treat the price as unavailable and keep priceDisplay for audit.

Use only on public JD.com pages and data you are authorized to process. Respect JD.com terms, applicable privacy laws, and Apify Store policies. The Actor reads public product pages, and reviews only through the session cookie you supply for your own account. JD.com / 京东 are trademarks of their respective owners. This independent Actor is not affiliated with, associated with, or endorsed by JD.com.