# JD.com 京东 Jingdong Scraper - Prices & Reviews (`zen-studio/jd-com-search-scraper`) Actor

Extract JD.com 京东 (Jingdong) product prices, images, shop data, attributes, and reviews by keyword. Supports Chinese searches like 苹果手机, 笔记本电脑, 机械键盘 plus Jingdong/Jindong queries. Export JSON, CSV, Excel.

- **URL**: https://apify.com/zen-studio/jd-com-search-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## JD.com 京东 Jingdong Scraper - Prices, Details & Reviews (2026)

<blockquote style="border-left:4px solid #C91F28;background:#FFF5F5;padding:12px 16px">
<span style="font-size:16px;font-weight:700;color:#1C1917">Search JD.com (京东 / Jingdong) by keyword and extract product rows with CNY/USD prices, shop data, images, attributes, configured items, included provider reviews, and optional customer reviews.</span>
</blockquote>

![JD.com Product Scraper](https://iili.io/BmeLByl.png)

#### Copy to your AI assistant

```text
zen-studio/jd-com-search-scraper on Apify. Searches JD.com / 京东 / Jingdong by keyword and optional tested category slug, then returns one product row per result with itemId, title, titleOriginal, product URLs, CNY/USD price fields, promotion price fields, brand/category IDs, vendor/shop object, images, videos, attributes, configuredItems, deliveryCosts, promotions, relatedGroups, physical/weight data, rootPath, included providerReviews from detail enrichment, and optional explicit customer reviews. Call ApifyClient("TOKEN").actor("zen-studio/jd-com-search-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: keyword. Optional: category (all, mobile_phones, phone_cases, second_hand_phones, quasi_new_phones, laptops, laptop_accessories, keyboards, running_shoes), maxItems, sort (relevance, popularity, lowest_price, highest_price, recently_updated), minPrice, maxPrice, enrichWithDetails, fetchReviews, maxReviewsPerItem. Defaults: category=all, maxItems=20, enrichWithDetails=true, fetchReviews=false. Category searches and recently_updated scan larger search pages and filter weak keyword matches client-side before detail calls. PPE: product $5.99/1k, detail add-on $5.99/1k, review add-on $4.99/1k before Store discounts. Free tier: 5 lifetime runs, 20 products/run.
````

<table style="width:100%">
<tr>
<td colspan="3" style="padding:9px 14px;background:#C91F28;border:none;border-radius:4px 4px 0 0">
<span style="color:#FAFAF9;font-size:14px;font-weight:700;letter-spacing:0.5px">Zen Studio China Scrapers</span>
<span style="color:#FFE4E6;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;JD.com, Taobao, 1688, and Goofish product data</span>
</td>
</tr>
<tr>
<td style="padding:9px 14px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;border-right:none;border-top:none;vertical-align:top;width:33.33%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-PsAKYWM55HG4AHXjK-ItywU7Bp0s-taobao-search-scraper-logo.png" width="20" height="20" style="vertical-align:middle;border-radius:4px"> &nbsp;<a href="https://apify.com/zen-studio/taobao-search-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Taobao &#8599;</a></span><br>
<span style="color:#78716C;font-size:11px">淘宝 prices, SKUs, reviews</span>
</td>
<td style="padding:9px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33.33%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-ghXSMZcW3GxsCrkiR-5hnvsKv4Yt-1688-wholesale-scraper-logo.png" width="20" height="20" style="vertical-align:middle;border-radius:4px"> &nbsp;<a href="https://apify.com/zen-studio/1688-wholesale-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">1688 Search &#8599;</a></span><br>
<span style="color:#78716C;font-size:11px">Wholesale product data</span>
</td>
<td style="padding:9px 14px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:33.33%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5QcLc4BHaLMBUKYs3-f3CWQ60Row-goofish-search-scraper-logo.png" width="20" height="20" style="vertical-align:middle;border-radius:4px"> &nbsp;<a href="https://apify.com/zen-studio/goofish-xianyu-search-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Goofish Search &#8599;</a></span><br>
<span style="color:#78716C;font-size:11px">闲鱼 resale listings</span>
</td>
</tr>
</table>

### How to Search JD.com

Use English or Chinese JD.com / 京东 / Jingdong product keywords. Common searches include `京东商品`, `京东价格`, `京东评价`, `苹果手机`, `笔记本电脑`, `机械键盘`, `运动鞋`, `iphone 15`, `Jingdong`, `Jindong`, and brand terms.

#### Default enriched products

```json
{
  "keyword": "iphone 15"
}
```

#### Search-only rows

```json
{
  "keyword": "笔记本电脑",
  "maxItems": 50,
  "enrichWithDetails": false
}
```

#### Enriched rows with customer reviews

```json
{
  "keyword": "机械键盘",
  "maxItems": 10,
  "fetchReviews": true,
  "maxReviewsPerItem": 20
}
```

#### Price range filter

```json
{
  "keyword": "iphone 15",
  "minPrice": 500,
  "maxPrice": 1500,
  "sort": "popularity"
}
```

#### Category filter

```json
{
  "keyword": "iphone 15",
  "category": "mobile_phones",
  "maxItems": 20
}
```

Category filtering defaults to `all`. Non-default categories use tested JD.com leaf category IDs and then apply keyword post-filtering before any detail enrichment or review fetching. This avoids obvious loose matches, but JD.com category metadata is marketplace-controlled, so category runs can return fewer rows than `maxItems`.

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keyword` | string | required | JD.com product search keyword. |
| `category` | string | `all` | Optional tested category slug: `all`, `mobile_phones`, `phone_cases`, `second_hand_phones`, `quasi_new_phones`, `laptops`, `laptop_accessories`, `keyboards`, `running_shoes`. Category runs use keyword post-filtering before detail calls and may return fewer rows. |
| `maxItems` | integer | `20` | Maximum products to return. Test runs are capped at 5 products; free-tier runs are capped at 20 products. |
| `sort` | string | `relevance` | `relevance`, `popularity`, `lowest_price`, `highest_price`, or `recently_updated`. `recently_updated` uses marketplace update recency, scans larger search pages, and filters weak keyword matches client-side. It may return fewer rows when the source returns loose recent matches. |
| `minPrice` / `maxPrice` | number | blank | Optional converted USD price range. Source-side price filtering can be loose, so the actor also enforces this range locally before delivery. |
| `enrichWithDetails` | boolean | `true` | Adds attributes, configured items, delivery costs, promotions, related groups, vendor data, category path, weight data, media, and included provider reviews when available. |
| `fetchReviews` | boolean | `false` | Fetches separate customer review pages and bills only the explicitly fetched reviews. |
| `maxReviewsPerItem` | integer | `20` | Maximum explicit reviews per product when review fetching is enabled. |

### What Data Can You Extract from JD.com Search?

One dataset row represents one JD.com product.

- **Product identity:** `itemId`, `title`, `titleOriginal`, `url`, `externalUrl`, category IDs, search category slug/label, search rank, scrape timestamp.
- **Pricing:** `price`, `priceCurrency`, `priceUSD`, `priceDetails`, `promotionPrice`, `promotionPriceDetails`, promotion percentages.
- **Seller and shop:** `shop`, `vendorId`, `vendorName`, `vendorDisplayName`, `vendorScore`, provider type, location, features, featured values.
- **Media and catalog data:** `mainPictureUrl`, `pictures`, `videos`, `attributes`, `configuredItems`, `deliveryCosts`, `promotions`, `relatedGroups`, `rootPath`.
- **Reviews:** `providerReviews` are included when returned with detail enrichment and are not review-billed. `reviews` are populated only when `fetchReviews=true`.

#### Output Example

All top-level fields are shown. Large arrays are shortened with `_truncated` markers and long URLs are shortened for readability. This example shows a fully enriched row with detail enrichment and explicit reviews enabled.

```json
{
  "itemId": "jd-10030391539604",
  "url": "https://item.jd.com/10030391539604.html",
  "externalUrl": "https://item.jd.com/10030391539604.html",
  "taobaoItemUrl": "https://item.jd.com/10030391539604.html",
  "title": "东成 Brushless electric drill, electric rechargeable screwdriver, 16v",
  "titleOriginal": "东成16V无刷充电钻DCJZ24-10E电动螺丝刀充电式家用...",
  "price": "550.0",
  "priceCurrency": "CNY",
  "priceUSD": "86.42",
  "priceDetails": {
    "originalPrice": 550.0,
    "marginPrice": 550.0,
    "originalCurrencyCode": "CNY",
    "convertedPriceList": {
      "internal": {
        "price": 86.42,
        "sign": "$",
        "code": "USD"
      },
      "displayedMoneys": [
        {
          "price": 86.42,
          "sign": "$",
          "code": "USD"
        }
      ]
    },
    "convertedPrice": "86.42$",
    "convertedPriceWithoutSign": "86.42",
    "currencySign": "$",
    "currencyName": "USD",
    "isDeliverable": true,
    "deliveryPrice": {
      "originalPrice": 0.0,
      "marginPrice": 0.0,
      "originalCurrencyCode": "CNY",
      "convertedPriceList": {
        "internal": {
          "price": 0.0,
          "sign": "$",
          "code": "USD"
        },
        "displayedMoneys": [
          {
            "price": 0.0,
            "sign": "$",
            "code": "USD"
          }
        ]
      }
    },
    "oneItemDeliveryPrice": {
      "originalPrice": 0.0,
      "marginPrice": 0.0,
      "originalCurrencyCode": "CNY",
      "convertedPriceList": {
        "internal": {
          "price": 0.0,
          "sign": "$",
          "code": "USD"
        },
        "displayedMoneys": [
          {
            "price": 0.0,
            "sign": "$",
            "code": "USD"
          }
        ]
      }
    },
    "priceWithoutDelivery": {
      "originalPrice": 550.0,
      "marginPrice": 550.0,
      "originalCurrencyCode": "CNY",
      "convertedPriceList": {
        "internal": {
          "price": 86.42,
          "sign": "$",
          "code": "USD"
        },
        "displayedMoneys": [
          {
            "price": 86.42,
            "sign": "$",
            "code": "USD"
          }
        ]
      }
    },
    "oneItemPriceWithoutDelivery": {
      "originalPrice": 550.0,
      "marginPrice": 550.0,
      "originalCurrencyCode": "CNY",
      "convertedPriceList": {
        "internal": {
          "price": 86.42,
          "sign": "$",
          "code": "USD"
        },
        "displayedMoneys": [
          {
            "price": 86.42,
            "sign": "$",
            "code": "USD"
          }
        ]
      }
    }
  },
  "promotionPrice": null,
  "promotionPriceDetails": null,
  "promotionPricePercent": [],
  "categoryId": "jd-36362",
  "externalCategoryId": "36362",
  "brandId": "jd-164795",
  "brandName": "东成",
  "shop": {
    "vendorId": "jd-31572",
    "vendorName": "通宇五金专营店",
    "vendorDisplayName": "通宇五金专营店",
    "vendorScore": 19,
    "shopName": "通宇五金专营店",
    "providerType": "Jd",
    "credit": {
      "Level": 19,
      "Score": 0,
      "TotalFeedbacks": 0,
      "PositiveFeedbacks": 0
    },
    "pictureUrl": "https://img30.360buyimg.com/popshop/jfs/t21325/176/2210452309/197...",
    "displayPictureUrl": "https://img30.360buyimg.com/popshop/jfs/t21325/176/2210452309/197...",
    "email": null,
    "location": {},
    "features": [],
    "featuredValues": {
      "shopId": "30478",
      "rating": "4.8",
      "shopGoodsNum": "612",
      "shopLogo": "https://img30.360buyimg.com/popshop/jfs/t21325/176/2210452309/197...",
      "starts": "1369267200",
      "shopUrl": "https://shop.m.jd.com/?shopId=30478",
      "years": "13",
      "shopFansNum": "76689"
    },
    "updatedTime": "2026-05-06T03:16:17.405Z",
    "source": {
      "id": "jd-31572",
      "providerType": "Jd",
      "updatedTime": "2026-05-06T03:16:17.405Z",
      "name": "通宇五金专营店",
      "displayName": "通宇五金专营店",
      "shopName": "通宇五金专营店",
      "email": "",
      "pictureUrl": "https://img30.360buyimg.com/popshop/jfs/t21325/176/2210452309/197...",
      "displayPictureUrl": "https://img30.360buyimg.com/popshop/jfs/t21325/176/2210452309/197...",
      "location": {},
      "credit": {
        "level": 19,
        "score": 0,
        "totalFeedbacks": 0,
        "positiveFeedbacks": 0
      },
      "scores": {
        "deliveryScore": 4.8,
        "itemScore": 3.6,
        "serviceScore": 4.5
      },
      "features": [],
      "featuredValues": [
        {
          "name": "shopId",
          "value": "30478"
        },
        {
          "_truncated": "7 more item(s)"
        }
      ]
    }
  },
  "vendorId": "jd-31572",
  "vendorName": "通宇五金专营店",
  "vendorDisplayName": "通宇五金专营店",
  "vendorScore": 19,
  "mainPictureUrl": "https://img1.360buyimg.com/n0/jfs/t1/212230/27/7396/82186/61b37e6...",
  "pictures": [
    {
      "url": "https://img1.360buyimg.com/n0/jfs/t1/212230/27/7396/82186/61b37e6...",
      "small": {
        "url": "https://img1.360buyimg.com/n4/jfs/t1/212230/27/7396/82186/61b37e6...",
        "width": 100,
        "height": 100
      },
      "medium": {
        "url": "https://img1.360buyimg.com/n1/jfs/t1/212230/27/7396/82186/61b37e6...",
        "width": 350,
        "height": 350
      },
      "large": {
        "url": "https://img1.360buyimg.com/n0/jfs/t1/212230/27/7396/82186/61b37e6...",
        "width": 800,
        "height": 800
      },
      "isMain": true
    },
    {
      "url": "https://img1.360buyimg.com/n0/jfs/t1/208513/27/12227/82186/61b37e...",
      "small": {
        "url": "https://img1.360buyimg.com/n4/jfs/t1/208513/27/12227/82186/61b37e...",
        "width": 100,
        "height": 100
      },
      "medium": {
        "url": "https://img1.360buyimg.com/n1/jfs/t1/208513/27/12227/82186/61b37e...",
        "width": 350,
        "height": 350
      },
      "large": {
        "url": "https://img1.360buyimg.com/n0/jfs/t1/208513/27/12227/82186/61b37e...",
        "width": 800,
        "height": 800
      },
      "isMain": false
    },
    {
      "_truncated": "3 more item(s)"
    }
  ],
  "videos": [
    {
      "previewUrl": "https://jvod.300hu.com/img/2022/139178213/1/img1.jpg",
      "url": "https://vod.300hu.com/vod/product/38549ee3-12a5-4506-8019-b508223..."
    }
  ],
  "attributes": [
    {
      "pid": "款式",
      "vid": "无刷双速16V(裸机)无电池充电器",
      "propertyName": "Style",
      "value": "Brushless battery, charger, 16v",
      "originalPropertyName": "款式",
      "originalValue": "无刷双速16V(裸机)无电池充电器",
      "isConfigurator": false
    },
    {
      "pid": "颜色",
      "vid": "无刷双速16V(裸机)无电池充电器",
      "propertyName": "Color",
      "value": "Brushless battery, charger, 16v",
      "originalPropertyName": "颜色",
      "originalValue": "无刷双速16V(裸机)无电池充电器",
      "isConfigurator": false,
      "imageUrl": "https://img1.360buyimg.com/n0/jfs/t1/212230/27/7396/82186/61b37e6...",
      "miniImageUrl": "https://img1.360buyimg.com/n4/jfs/t1/212230/27/7396/82186/61b37e6..."
    },
    {
      "_truncated": "12 more item(s)"
    }
  ],
  "configuredItems": [],
  "configuredItemCount": 0,
  "deliveryCosts": [
    {
      "areaCode": "0",
      "mode": "default",
      "price": {
        "originalPrice": 0.0,
        "marginPrice": 0.0,
        "originalCurrencyCode": "CNY",
        "convertedPriceList": {
          "internal": {
            "price": 0.0,
            "sign": "$",
            "code": "USD"
          },
          "displayedMoneys": [
            {
              "price": 0.0,
              "sign": "$",
              "code": "USD"
            }
          ]
        },
        "convertedPrice": "0.00$",
        "convertedPriceWithoutSign": "0.00",
        "currencySign": "$",
        "currencyName": "USD",
        "isDeliverable": false,
        "priceWithoutDelivery": {
          "originalPrice": 0.0,
          "marginPrice": 0.0,
          "originalCurrencyCode": "CNY",
          "convertedPriceList": {
            "internal": {
              "price": 0.0,
              "sign": "$",
              "code": "USD"
            },
            "displayedMoneys": [
              {
                "price": 0.0,
                "sign": "$",
                "code": "USD"
              }
            ]
          }
        }
      },
      "startCost": 0.0,
      "startWeight": 0.0,
      "addWeight": 0.0,
      "addCost": 0.0
    }
  ],
  "promotions": [],
  "relatedGroups": [
    {
      "type": "Configurations",
      "originalName": "款式",
      "displayName": "Style",
      "items": [
        {
          "name": "【2 Electric 1 Charging】 Plastic box+multiple accessories",
          "id": "jd-10024859357175"
        },
        {
          "_truncated": "6 more item(s)"
        }
      ]
    },
    {
      "type": "Unknown",
      "originalName": "",
      "displayName": "Related items",
      "items": [
        {
          "name": "【2 Electric 1 Charging】 Plastic box+multiple accessories",
          "image": {
            "url": "https://img1.360buyimg.com/n0/jfs/t1/212230/27/7396/82186/61b37e6...",
            "small": {
              "url": "https://img1.360buyimg.com/n4/jfs/t1/212230/27/7396/82186/61b37e6...",
              "width": 100,
              "height": 100
            },
            "medium": {
              "url": "https://img1.360buyimg.com/n1/jfs/t1/212230/27/7396/82186/61b37e6...",
              "width": 350,
              "height": 350
            },
            "large": {
              "url": "https://img1.360buyimg.com/n0/jfs/t1/212230/27/7396/82186/61b37e6...",
              "width": 800,
              "height": 800
            },
            "isMain": false
          },
          "price": {
            "originalPrice": 512.0,
            "marginPrice": 512.0,
            "originalCurrencyCode": "CNY",
            "convertedPriceList": {
              "internal": {
                "price": 80.45,
                "sign": "$",
                "code": "USD"
              },
              "displayedMoneys": [
                {
                  "price": 80.45,
                  "sign": "$",
                  "code": "USD"
                }
              ]
            },
            "convertedPrice": "80.45$",
            "convertedPriceWithoutSign": "80.45",
            "currencySign": "$",
            "currencyName": "USD",
            "isDeliverable": true,
            "deliveryPrice": {
              "originalPrice": 0.0,
              "marginPrice": 0.0,
              "originalCurrencyCode": "CNY"
            },
            "oneItemDeliveryPrice": {
              "originalPrice": 0.0,
              "marginPrice": 0.0,
              "originalCurrencyCode": "CNY"
            },
            "priceWithoutDelivery": {
              "originalPrice": 512.0,
              "marginPrice": 512.0,
              "originalCurrencyCode": "CNY",
              "convertedPriceList": {
                "internal": {
                  "price": 80.45,
                  "sign": "$",
                  "code": "USD"
                },
                "displayedMoneys": [
                  {
                    "price": 80.45,
                    "sign": "$",
                    "code": "USD"
                  }
                ]
              }
            },
            "oneItemPriceWithoutDelivery": {
              "originalPrice": 512.0,
              "marginPrice": 512.0,
              "originalCurrencyCode": "CNY",
              "convertedPriceList": {
                "internal": {
                  "price": 0.0
                },
                "displayedMoneys": []
              }
            }
          },
          "id": "jd-10024859357175",
          "title": "Dongcheng 16V brushless charging drill DCJZ24-10E electric screwdriver charging household electric rotor drill drill [2 electric 1 chargi...",
          "originalTitle": "东成16V无刷充电钻DCJZ24-10E电动螺丝刀充电式家用电转钻手电钻 【2电1充】塑箱+多用附件"
        },
        {
          "_truncated": "6 more item(s)"
        }
      ]
    },
    {
      "_truncated": "1 more item(s)"
    }
  ],
  "actualWeightInfo": {
    "type": "RealByVendor",
    "displayName": "Real weight",
    "weight": 1.0
  },
  "weightInfos": [
    {
      "type": "RealByVendor",
      "displayName": "Real weight",
      "weight": 1.0
    }
  ],
  "physicalParameters": {
    "weight": 1.0,
    "length": 100.0,
    "width": 100.0,
    "height": 100.0
  },
  "location": {},
  "features": [
    "FakeQuantity",
    "Expired"
  ],
  "featuredValues": {},
  "rootPath": [
    {
      "id": "jd-36362",
      "providerType": "Jd",
      "updatedTime": "2026-04-20T19:59:35.729Z",
      "isHidden": false,
      "isVirtual": false,
      "externalId": "jd-36362",
      "name": "Electric drill",
      "isParent": true,
      "parentId": "jd-36321",
      "isInternal": false
    },
    {
      "id": "jd-36321",
      "providerType": "Jd",
      "updatedTime": "2026-05-09T21:23:59.594Z",
      "isHidden": false,
      "isVirtual": false,
      "externalId": "jd-36321",
      "name": "Electrical tools",
      "isParent": true,
      "parentId": "jd-36320",
      "isInternal": false
    },
    {
      "_truncated": "1 more item(s)"
    }
  ],
  "providerReviews": [
    {
      "externalId": "20549463947",
      "itemId": "10030391539604",
      "configurationId": "10030391539604",
      "content": "The bare metal purchased this time is not good, and the screw rods inside are not tight, and often come out!",
      "createdDate": "2024-03-06T20:04:06Z",
      "userNick": "j***a",
      "rating": 5,
      "images": [],
      "videos": [],
      "features": [],
      "featuredValues": [
        {
          "name": "likeCount",
          "value": "0"
        }
      ]
    },
    {
      "externalId": "20341200414",
      "itemId": "10030391539604",
      "configurationId": "10030391539604",
      "content": "Bad quality",
      "createdDate": "2024-01-08T16:42:50Z",
      "userNick": "j***U",
      "rating": 5,
      "images": [],
      "videos": [
        {
          "previewUrl": "https://img.300hu.com/23/4c1f7a6atransbjngwcloud1oss/08ceed917967...",
          "url": "https://vod.300hu.com/23/4c1f7a6atransbjngwcloud1oss/08ceed917967..."
        }
      ],
      "features": [],
      "featuredValues": [
        {
          "name": "likeCount",
          "value": "0"
        }
      ]
    },
    {
      "_truncated": "8 more item(s)"
    }
  ],
  "providerReviewsCount": 10,
  "providerReviewsTotalCount": 10,
  "reviews": [
    {
      "externalId": "20549463947",
      "itemId": "jd-10030391539604",
      "configurationId": "10030391539604",
      "orderId": {},
      "orderLineId": {},
      "createdTime": "2024-03-06T20:04:06Z",
      "isApproved": true,
      "userName": "j***a",
      "rating": 5,
      "answers": [],
      "imageUrls": [],
      "imagePreviewUrls": [],
      "videos": [],
      "features": [],
      "featuredValues": [
        {
          "name": "likeCount",
          "value": "0"
        }
      ],
      "text": "The bare metal purchased this time is not good, and the screw rods inside are not tight, and often come out!",
      "language": "en",
      "originalText": "这次购买的裸机不好，里面的螺丝杆夹不紧，经常出来！",
      "originalLanguage": "zh-chs"
    },
    {
      "externalId": "20341200414",
      "itemId": "jd-10030391539604",
      "configurationId": "10030391539604",
      "orderId": {},
      "orderLineId": {},
      "createdTime": "2024-01-08T16:42:50Z",
      "isApproved": true,
      "userName": "j***U",
      "rating": 5,
      "answers": [],
      "imageUrls": [],
      "imagePreviewUrls": [],
      "videos": [
        {
          "previewUrl": "https://img.300hu.com/23/4c1f7a6atransbjngwcloud1oss/08ceed917967...",
          "url": "https://vod.300hu.com/23/4c1f7a6atransbjngwcloud1oss/08ceed917967..."
        }
      ],
      "features": [],
      "featuredValues": [
        {
          "name": "likeCount",
          "value": "0"
        }
      ],
      "text": "Bad quality",
      "language": "en",
      "originalText": "质量很差",
      "originalLanguage": "zh-chs"
    },
    {
      "_truncated": "8 more item(s)"
    }
  ],
  "reviewsTotalCount": 10,
  "errorCode": "Ok",
  "hasError": false,
  "providerType": "Jd",
  "stuffStatus": "New",
  "volume": 0,
  "masterQuantity": 200,
  "firstLotQuantity": 1,
  "nextLotQuantity": 1,
  "isSellAllowed": true,
  "isFiltered": false,
  "isTitleManuallyTranslated": true,
  "hasInternalDelivery": true,
  "hasHierarchicalConfigurators": false,
  "createdTime": "2024-04-25T20:25:50.336Z",
  "updatedTime": "2025-11-24T13:27:14.984Z",
  "lastUpdatedTime": "2025-11-24T13:27:14.984Z",
  "search": {
    "requestId": "example-request-id",
    "requestTime": "2026-05-14T16:25:00.000Z",
    "translatedItemTitle": "electric drill",
    "provider": "Jd",
    "searchMethod": "SearchItems",
    "currentSort": "Default",
    "currentFrameSize": 100,
    "maximumPageCount": 1000,
    "totalCount": 1242,
    "categories": {
      "content": [
        {
          "id": "jd-9855",
          "name": "Electric drill",
          "itemCount": 1242
        }
      ]
    },
    "searchProperties": null,
    "availableSearchMethods": null
  },
  "searchKeyword": "electric drill",
  "searchSort": "relevance",
  "searchCategory": "all",
  "searchCategoryId": null,
  "searchCategoryLabel": "All categories",
  "searchRank": 1,
  "scrapedAt": "2026-05-15T10:00:00Z",
  "_detailEnriched": true,
  "_detailError": null,
  "_reviewsFetched": true,
  "_explicitReviewsFetched": true,
  "_reviewsCount": 10
}
```

### Pricing

This Actor uses pay-per-event pricing. You pay for the data level you request. Apify Store discounts may lower these unit prices.

| Output | Event | Base price |
|--------|-------|------------|
| Product row | `search-result` | `$5.99 / 1,000 products` |
| Detail enrichment add-on | `detail-enrichment` | `$5.99 / 1,000 products` |
| Customer review add-on | `review` | `$4.99 / 1,000 reviews` |

The default run returns enriched products without explicit review calls: product row + detail enrichment. Turn off `enrichWithDetails` for cheaper search-only discovery. Turn on `fetchReviews` only when review text matters.

Provider reviews already included in detail enrichment are returned for free and do not trigger the review event.

### Notes on Filters

JD.com search supports relevance, popularity, low-price, high-price, recently updated, USD price range, and tested category filtering.

`recently_updated` uses marketplace update recency, then filters weak keyword matches client-side. Category searches also use keyword post-filtering before detail calls. Both modes can return fewer rows than `maxItems` when source matching is loose.

Price filters are sent to the data source and then enforced locally against `priceUSD`, because source-side filtering can return occasional out-of-range rows.

Raw `categoryId`, `vendorId`, and image search are not exposed in this version.

### FAQ

#### Can I search in Chinese?

Yes. Use Chinese keywords such as `苹果手机`, `笔记本电脑`, `机械键盘`, or `运动鞋`.

#### Can I search in English?

Yes. English product and brand keywords such as `iphone 15`, `laptop`, `keyboard`, and `running shoes` work.

#### What is the difference between search-only and enriched output?

Search-only rows include product identity, title, URL, basic price, image, seller name, category IDs, and search metadata.

Enriched rows add attributes, configured items, delivery costs, promotions, related groups, physical dimensions, weight data, vendor/shop details, root category path, media arrays, and included provider reviews when returned.

#### Are reviews included by default?

Explicit review fetching is off by default because reviews are billed separately.

Provider reviews returned inside detail enrichment are included without review billing.

#### What happens if product detail is unavailable?

The Actor returns a partial search row with `_detailEnriched: false` and `_detailError` set. You are not charged for detail enrichment on that row.

#### Does `maxItems` always return exactly that number?

The Actor returns up to `maxItems`. Actual count depends on how many matching products JD.com returns after keyword, category, sort, price, budget, and free-tier filters.

#### What currency are prices in?

Original prices are returned in Chinese yuan (CNY). Converted USD values are exposed in `priceUSD`, `priceDetails`, delivery costs, and related item prices when conversion data is available.

#### How does the free tier work?

Free-tier users get 5 lifetime runs, capped at 20 products per run.

#### Why do some optional fields return `null` or empty arrays?

JD.com does not expose every field for every product. Empty top-level fields remain stable in the dataset schema; nested arrays can be empty when the upstream product has no data for that block.

### Support

Open an issue on the Actor page if a keyword consistently returns empty results, if a field changes type, or if a filter behaves differently than expected.

For reproducible support, include the input JSON and the run ID.

# Actor input Schema

## `keyword` (type: `string`):

Enter a JD.com / 京东 product search keyword.<br><br>Examples:<br>• <code>iphone 15</code><br>• <code>苹果手机</code> iPhone / Apple phones<br>• <code>笔记本电脑</code> laptops<br>• <code>机械键盘</code> mechanical keyboards

## `maxItems` (type: `integer`):

Set the maximum number of product rows to return. The default is <code>20</code> products. Test runs are capped at <code>5</code> products. Free-tier runs are capped at <code>20</code> products.

## `enrichWithDetails` (type: `boolean`):

Keep enabled to add rich 商品详情 data: attributes, configured items, delivery costs, promotions, related groups, vendor data, category path, weight data, media, and included provider reviews when returned.<br><br>Included provider reviews from the detail response are returned for free. Turn this off only when you want cheaper search-only rows.

## `sort` (type: `string`):

Choose how matching products are ordered. Relevance leaves the marketplace default sorting unchanged. Recently updated uses marketplace update recency and applies client-side keyword filtering because source-side recent sorting can otherwise return loose matches. It may return fewer rows when weak matches are filtered out.

## `category` (type: `string`):

Choose an optional tested JD.com category slug. Leave <b>All categories</b> for the broadest results.<br><br>Category filtering narrows JD's marketplace taxonomy, but sellers and listings can still be imperfectly categorized. The actor filters weak keyword matches before detail enrichment, so category runs may return fewer rows than Max products.

## `minPrice` (type: `number`):

Optional minimum converted USD price. Leave blank for no lower price filter.

## `maxPrice` (type: `number`):

Optional maximum converted USD price. Leave blank for no upper price filter.

## `fetchReviews` (type: `boolean`):

Fetch separate customer review pages and attach reviews as a nested <code>reviews</code> array. Reviews are billed separately. Keep off unless review text is needed.<br><br>To fetch all available reviews up to the Actor limit, enable this and set <b>每商品评价数 Reviews per product</b> to <code>1000</code>.

## `maxReviewsPerItem` (type: `integer`):

Set the maximum reviews to attach to each product when <b>买家评价 Customer reviews</b> is enabled.<br><br>Use <code>1000</code> when you want all available reviews up to the Actor limit. The actor stops earlier if the source reports fewer reviews.

## Actor input object example

```json
{
  "keyword": "iphone 15",
  "maxItems": 20,
  "enrichWithDetails": true,
  "sort": "relevance",
  "category": "all",
  "fetchReviews": false,
  "maxReviewsPerItem": 20
}
```

# Actor output Schema

## `results` (type: `string`):

Link to the dataset containing all scraped JD.com product rows.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "iphone 15"
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/jd-com-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keyword": "iphone 15" }

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/jd-com-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "iphone 15"
}' |
apify call zen-studio/jd-com-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zen-studio/jd-com-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "JD.com 京东 Jingdong Scraper - Prices & Reviews",
        "description": "Extract JD.com 京东 (Jingdong) product prices, images, shop data, attributes, and reviews by keyword. Supports Chinese searches like 苹果手机, 笔记本电脑, 机械键盘 plus Jingdong/Jindong queries. Export JSON, CSV, Excel.",
        "version": "0.0",
        "x-build-id": "6o183nrSLpaKqDfnV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/zen-studio~jd-com-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-zen-studio-jd-com-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/zen-studio~jd-com-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-zen-studio-jd-com-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/zen-studio~jd-com-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-zen-studio-jd-com-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "keyword"
                ],
                "properties": {
                    "keyword": {
                        "title": "关键词 Keyword",
                        "type": "string",
                        "description": "Enter a JD.com / 京东 product search keyword.<br><br>Examples:<br>• <code>iphone 15</code><br>• <code>苹果手机</code> iPhone / Apple phones<br>• <code>笔记本电脑</code> laptops<br>• <code>机械键盘</code> mechanical keyboards"
                    },
                    "maxItems": {
                        "title": "商品数量 Max products",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Set the maximum number of product rows to return. The default is <code>20</code> products. Test runs are capped at <code>5</code> products. Free-tier runs are capped at <code>20</code> products.",
                        "default": 20
                    },
                    "enrichWithDetails": {
                        "title": "商品详情 Detail enrichment (default on)",
                        "type": "boolean",
                        "description": "Keep enabled to add rich 商品详情 data: attributes, configured items, delivery costs, promotions, related groups, vendor data, category path, weight data, media, and included provider reviews when returned.<br><br>Included provider reviews from the detail response are returned for free. Turn this off only when you want cheaper search-only rows.",
                        "default": true
                    },
                    "sort": {
                        "title": "排序 Sort",
                        "enum": [
                            "relevance",
                            "popularity",
                            "lowest_price",
                            "highest_price",
                            "recently_updated"
                        ],
                        "type": "string",
                        "description": "Choose how matching products are ordered. Relevance leaves the marketplace default sorting unchanged. Recently updated uses marketplace update recency and applies client-side keyword filtering because source-side recent sorting can otherwise return loose matches. It may return fewer rows when weak matches are filtered out.",
                        "default": "relevance"
                    },
                    "category": {
                        "title": "分类 Category",
                        "enum": [
                            "all",
                            "mobile_phones",
                            "phone_cases",
                            "second_hand_phones",
                            "quasi_new_phones",
                            "laptops",
                            "laptop_accessories",
                            "keyboards",
                            "running_shoes"
                        ],
                        "type": "string",
                        "description": "Choose an optional tested JD.com category slug. Leave <b>All categories</b> for the broadest results.<br><br>Category filtering narrows JD's marketplace taxonomy, but sellers and listings can still be imperfectly categorized. The actor filters weak keyword matches before detail enrichment, so category runs may return fewer rows than Max products.",
                        "default": "all"
                    },
                    "minPrice": {
                        "title": "最低价 Min price (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Optional minimum converted USD price. Leave blank for no lower price filter."
                    },
                    "maxPrice": {
                        "title": "最高价 Max price (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Optional maximum converted USD price. Leave blank for no upper price filter."
                    },
                    "fetchReviews": {
                        "title": "买家评价 Customer reviews",
                        "type": "boolean",
                        "description": "Fetch separate customer review pages and attach reviews as a nested <code>reviews</code> array. Reviews are billed separately. Keep off unless review text is needed.<br><br>To fetch all available reviews up to the Actor limit, enable this and set <b>每商品评价数 Reviews per product</b> to <code>1000</code>.",
                        "default": false
                    },
                    "maxReviewsPerItem": {
                        "title": "每商品评价数 Reviews per product",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Set the maximum reviews to attach to each product when <b>买家评价 Customer reviews</b> is enabled.<br><br>Use <code>1000</code> when you want all available reviews up to the Actor limit. The actor stops earlier if the source reports fewer reviews.",
                        "default": 20
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
