# Changelog of JD.com Product Scraper — Search, Detail, Reviews (`sian.agency/jd-com-product-scraper`) Actor

- **URL**: https://apify.com/sian.agency/jd-com-product-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/sian.agency/jd-com-product-scraper.md

## Changelog

All notable changes to JD.com Product Scraper will be documented in this file.

### \[2026-09-12]

#### 🔑 API runs now need a paid Apify plan

- **The Console stays free** — running this Actor from the Apify Console is unchanged, and so is starting it from an AI agent over MCP. Free plans keep their daily allowance and their result limit exactly as before.
- **Starting a run through the Apify API now requires a paid plan** — free-plan API runs stop immediately with a message explaining why, before anything is fetched or billed. Nothing is charged for a run that stops this way.
- **Why** — scripted free-plan API traffic was consuming the capacity paying customers rely on. Keeping it out protects run speed and availability for everyone on a paid plan.
- **If this affects you** — add credits or a payment method in Apify Console → Billing, and your existing API calls work again with no change to your input.

### \[2026-09-04]

#### 🐛 Reviews Now Actually Land in Your Dataset

- **Fixed: `productComments` runs finished with an empty dataset** — reviews were fetched correctly, then every row was rejected on the way in because JD returns a few values in a different shape than the dataset expects (an empty list where a follow-up review would go, a rating sent as text). Rows are now converted to the declared type before they are saved, so all of them arrive
- **This was never only about reviews** — the same mismatch could silently empty a search, detail, catalog or price run whenever JD changed a field's shape. Every operation is now protected by the same conversion, driven by the Actor's own output schema
- **You were never charged for the lost rows** — billing only counts rows that are actually saved

#### 💬 A Reviews View You Can Read

- **New "💬 Reviews" tab in the Output view** — date, rating, review text, follow-up review, reviewer, colour/size bought, helpful count and photo count, side by side. Sort by date to read a product's reviews chronologically
- **New `_totalCount` field** — how many reviews the product has in total, so you know how much is left to page through

#### 🗣️ Clearer Failure Messages

- **Failures now explain themselves in English** — a delisted item, a closed shop or a rate limit each say what happened and what to check, instead of passing through JD's raw Chinese error text

#### 💎 User Benefits

- A comments run returns its reviews instead of an empty dataset
- Read and sort reviews straight in the Output tab, no export step
- When something does fail, the row tells you why in plain English

#### 🎯 Use Cases

- Brand teams tracking review sentiment on a JD.com listing over time
- Sellers reading the most recent complaints on a competitor's product
- Analysts paging through a product's full review history with `_totalCount` as the guide

### \[2026-08-24]

#### 🧾 A Run Report Worth Opening

- **Every run now explains itself** — the HTML report shows what you got, a preview of the rows, what failed, and what each row cost, so a short run is never a mystery
- **Failed requests come with a fix** — each one says what JD returned and what to do next, plus a one-click copy of the input to retry just those
- **Chinese renders properly** — product titles, shop names and review text in the report no longer come out as garbled characters
- **Run it again from the report** — copy-paste API and MCP snippets for this exact input are built into every report

#### 🎁 FREE Tier, Spelled Out

- **25 rows on the house** — FREE runs return up to 25 rows on any of the five operations, with every field and the same data quality included. The run log and the report both say so up front instead of stopping without explanation
- **Daily free-run allowance** — free plans get a fixed number of unbilled runs per day on this Actor, resetting at 00:00 UTC. Add credits or a payment method in Apify Console → Billing to run uncapped
- **No silent overspend** — a run whose account cannot be billed, or that reaches the max-total-charge limit set in its run options, stops and says which one it hit

#### 🛡️ Reliability

- **Hardened retry on slow JD responses** — five attempts with backoff and jitter across roughly a 20-second budget, so a brief hiccup on JD.com no longer ends a run
- **Run-and-go from an empty input** — start the Actor with no configuration at all and it runs a sample keyword search

#### 💎 User Benefits

- Know exactly what a run produced and what it cost, without opening the dataset
- Recover a partial run in one paste instead of rebuilding the input by hand
- FREE-tier limits are stated before you hit them, not after

#### 🎯 Use Cases

- Pricing teams auditing a scheduled JD.com price refresh from the run report alone
- Agencies handing a client the report as proof of what a competitor scan covered
- Developers wiring JD.com data into their own stack straight from the report's API snippet

### \[2026-06-20]

#### 🛡️ Reliability

- **Sturdier on slow or busy responses** — runs now automatically retry and fail over to a secondary data source when the primary is slow or briefly unavailable, instead of erroring out. Far fewer failed runs on large jobs.
- **Smarter primary data source** — each operation now leads with its most reliable source and only reaches for the secondary on a hiccup, cutting latency and failed runs.
- **Cleaner recovery from brief outages** — these no longer surface as confusing parsing errors. The run retries and carries on.
- **Cleaner handling of oversized product IDs** — long numeric fields no longer trip up parsing.
- **Run-and-go Product Search** — a sample keyword is prefilled so you can hit Start and see real results immediately.

### \[2026-05-15]

#### 🎉 JD.com Product Scraper - Launch!

- **Keyword Product Search with REAL Prices** - 48 priced JD.com (Jingdong) products per page with sales counts, shop info, ratings, and canonical URLs — no decoding required
- **Deep Product Detail** - Full SKU, stock, dimensions, category, shop floor, and variant data per JD itemId, with a transparent `priceMasked` flag when JD obfuscates unit prices
- **Customer Review Mining** - Extract review text, ratings, appended reviews, reviewer profiles, purchased variant info, and review photo URLs for sentiment analysis at scale
- **Shop Catalog Mapping** - Pull every itemId + title + URL from a JD merchant by Shop ID — perfect for brand catalog mapping and competitive teardowns
- **Bulk Product Price Refresh** - Dedicated cheap operation for refreshing live CNY prices across thousands of SKUs, with an `available` flag for delisted items
- **Native Chinese Input** - Search and surface Chinese keywords, titles, and review content (中文) cleanly end-to-end
- **Normalized Image URLs** - JD CDN paths upgraded to fully-qualified HTTPS URLs ready for hotlinking
- **Error Rows Never Charged** - Invalid IDs, removed products, and rate limits are flagged in the dataset but cost nothing
- **HTML Run Report** - Every run drops a `report.html` summary into the Apify key-value store for quick audits

#### 💎 User Benefits

- **No JD.com account, no API key, no captcha solving** — paste input, hit Start, get clean rows
- **Cheapest bulk price refresh on the market** — purpose-built operation for SKU sync workflows
- **Transparent price-masking guidance** — `priceMasked` flag tells you when to switch from Detail to Search or Price
- **Pay-per-result pricing** — only charged for successful rows, never errors
- **Tier-volume discounts auto-apply** — scale up without renegotiating per-event pricing

#### 🎯 Use Cases

- E-commerce managers running daily JD.com competitor price monitoring across major categories
- Dropshipping operators sourcing winning products by sales × rating on Chinese marketplaces
- Brand analysts mining JD.com customer reviews for sentiment analysis and product feedback themes
- China market researchers mapping a brand's full JD merchant catalog by Shop ID
- Pricing teams keeping CRM/ERP feeds in sync with live JD.com CNY prices on thousands of SKUs
- Dropshippers cataloging JD SKU variants, stock, and shop floor metadata into their own storefronts
