# JD.com Scraper - Products, Prices, Shops (京东) (`scrapewise/jd-scraper`) Actor

Scrape JD.com (京东) products by search term without login: title, price in CNY or any currency, shop, JD self-operated flag, category, image, listing date. Search in any language, titles translated. Optional product page: brand, variants, weight, delivery.

- **URL**: https://apify.com/scrapewise/jd-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.90 / 1,000 product delivereds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## JD.com Scraper - Products, Prices, Shops (京东)

**Scrape JD.com (京东), China's largest retailer, by search term: title, price in yuan (and in USD, EUR or any currency), shop, JD self-operated flag, category, image and listing date for every product, without a JD account. Search in English, Chinese or any language, get titles translated, and add the product page (brand, variants, weight, size, delivery promise, stock) when you need it.**

For cross-border sellers and sourcing agents comparing Chinese retail prices, brands tracking their price and resellers on JD, and analysts sizing a product category in China.

### JD.com scraper at a glance

- **Price per 1,000 products, Free plan:** US$ 2.50. Product page add-on: US$ 1.50 per 1,000
- **Search in any language:** "mechanical keyboard" is searched as 机械键盘 for you; each row says how it was searched
- **Up to 1,000 products per search**, 48 per page, in JD's own order, with each product's position
- **JD self-operated (京东自营) flag** and a filter to keep only those
- **Price filters** in yuan, and converted prices in the currency you pick at the day's reference rate
- **Translated titles** next to the Chinese title, free
- **Monitoring:** deliver only products not seen before, and track price drops between runs
- **No login, no cookies, no browser.** A search with no real match returns a free `NO_RESULTS` row instead of unrelated bestsellers

### JD.com scraper quick start

Coffee machines on JD, 100 products, titles in English and prices in USD:

```json
{
  "searchTerms": ["咖啡机"],
  "maxItemsPerSearch": 100,
  "translateTitles": true,
  "currency": "USD"
}
```

English terms work too. Only JD self-operated keyboards between ¥200 and ¥2,000, with the product page:

```json
{
  "searchTerms": ["mechanical keyboard"],
  "minPrice": 200,
  "maxPrice": 2000,
  "jdSelfOperatedOnly": true,
  "includeDetails": true
}
```

A real row from a run of 2026-10-22 (title translation shortened):

```json
{
  "type": "product",
  "itemId": "10198267544393",
  "title": "Hanrose意式咖啡机小型咖域精萃02 小型咖啡机复古迷你家用办公 半自动浓缩打奶泡一体机 20Bar意式咖啡机",
  "titleEnglish": "Hanrose espresso machine small coffee field essence 02 small coffee machine retro mini home office semi-automatic concentrated milk froth all-in-one machine 20Bar espresso machine ...",
  "price": 799.0,
  "currency": "CNY",
  "priceConverted": 119.71,
  "convertedCurrency": "USD",
  "jdSelfOperated": false,
  "shopName": "汉诺茨官方旗舰店",
  "shopId": "18520622",
  "categoryIds": ["737", "752", "761"],
  "image": "https://img14.360buyimg.com/n1/jfs/t1/453529/10/18738/144593/6a3b7d83Fcaf41668/00833203207bcc9d.jpg",
  "listedAt": "2025-11-11",
  "freeShipping": true,
  "url": "https://item.jd.com/10198267544393.html",
  "searchTerm": "咖啡机",
  "position": 1,
  "page": 1
}
```

With `includeDetails`, a row also gets (from the same run):

```json
{
  "brand": "小熊（Bear）",
  "variants": ["【咖粉专用】51mm口径+可用胶囊", "【研磨一体】51mm口径+冷热双萃"],
  "weightKg": 6.54,
  "dimensionsMm": { "length": 412.0, "width": 364.0, "height": 308.0 },
  "deliveryPromise": "11:00前付款，预计今天(10月23日)送达",
  "inStock": true
}
```

### What data the JD.com scraper returns

| Field | What it is |
|---|---|
| `itemId`, `url`, `mobileUrl` | JD product id (SKU) and links to the product page |
| `title` | Title as JD shows it in search (sometimes a short promotion text; `productName` has the full name) |
| `titleEnglish` / `titleTranslated` | Translated title, with `translateTitles` |
| `price`, `currency` | Price in yuan (CNY) shown in search |
| `priceConverted`, `convertedCurrency`, `exchangeRate`, `exchangeRateDate` | Price in your currency, with `currency` |
| `jdSelfOperated` | `true` when JD itself sells and ships it (京东自营) |
| `shopName`, `shopId`, `venderId` | The shop |
| `categoryIds` | JD's three category levels |
| `image` | Main image |
| `listedAt` | Date the product went on sale (YYYY-MM-DD) |
| `freeShipping`, `presale`, `international` | Shipping and sale flags |
| `searchTerm`, `searchedAs`, `position`, `page` | Which search found it, how it was searched, and where it sat |
| `productName`, `brand`, `brandId`, `variants`, `weightKg`, `dimensionsMm`, `deliveryPromise`, `inStock` | From the product page, with `includeDetails` |
| `isNewProduct`, `firstSeenAt`, `previousPrice`, `priceChange`, `isPriceDrop` | With `onlyNew` or `trackPriceChanges` |

### JD.com data use cases

- **Sourcing and price comparison:** what a product sells for in China, in yuan and in your currency, next to the same product on Taobao, 1688 or AliExpress.
- **Brand monitoring:** your brand's listings, who sells them, and price drops, on a daily schedule.
- **Market sizing:** how many products, which shops and how many JD self-operated offers a category has.
- **Product research:** new listings in a category (`onlyNew` on a weekly Task) and their launch dates.

### JD.com scraper input

| Field | What it does |
|---|---|
| `searchTerms` | Terms in Chinese, English or any language, or JD search links |
| `maxItemsPerSearch` | Default 48, up to 1,000 per search |
| `minPrice`, `maxPrice` | Price range in yuan; products outside are not charged |
| `jdSelfOperatedOnly` | Keep only JD self-operated products |
| `includeDetails` | Add the product page fields |
| `translateTitles`, `targetLanguage` | Translated titles (default English) |
| `currency` | Add converted prices (USD, EUR, BRL...) |
| `onlyNew`, `trackPriceChanges` | Monitoring between runs |

### JD.com scraper pricing

Pay per event, no monthly fee. Error rows are free.

| Event | Free plan price |
|---|---|
| Product delivered | US$ 0.0025 (US$ 2.50 per 1,000) |
| Product page added (`includeDetails`) | US$ 0.0015 (US$ 1.50 per 1,000) |

| Job | Products | Cost at the Free plan price |
|---|---|---|
| 100 coffee machines | 100 | US$ 0.25 |
| 100 with product page | 100 | US$ 0.40 |
| Daily watch of one search, 50 new products a day for a month | 1,500 | US$ 3.75 |

### JD.com scraper FAQ

**Do I need a JD account or cookies?** No.

**Can I search in English?** Yes. A term that is not Chinese is translated to Chinese when needed, and `searchedAs` shows the Chinese term used. For the most precise results, use the Chinese term.

**What if a term has no real match?** You get one free `NO_RESULTS` row, not a list of unrelated bestsellers.

**Are reviews, ratings or sales counts included?** No. JD shows them only to logged-in users.

**Is the price the final checkout price?** It is the price JD shows in search. Coupons, membership prices and cart discounts can make the checkout price lower.

**Is it legal to scrape JD.com?** The Actor reads public product listings without logging in and collects business information about products and shops, not personal data. You are responsible for how you use the data.

### JD.com scraper limitations

- Search terms only; product links and shop pages are not supported yet.
- JD returns up to about 30 pages per search; very broad terms are cut there.
- Reviews, ratings and sales counts need a JD login and are not collected.
- Prices are in yuan; converted prices use the day's reference rate, not JD's checkout rate.

If this Actor saves you time, a short review on the Store page helps other people find it.

### Related scrapers

- [Taobao Scraper](https://apify.com/scrapewise/taobao-scraper): Taobao and Tmall products, prices and shops.
- [1688 Scraper](https://apify.com/scrapewise/alibaba-1688-scraper): wholesale prices and suppliers on 1688.com.
- [Alibaba Scraper](https://apify.com/scrapewise/alibaba-com-scraper): Alibaba.com products and suppliers.
- [AliExpress Scraper](https://apify.com/scrapewise/aliexpress-scraper): AliExpress products and prices.

### Changelog

- **2026-10-22, 0.1:** first release. Search in any language, up to 1,000 products per search, JD self-operated flag and filter, price filters, translated titles, converted prices, product page add-on, only new products and price tracking.

This Actor collects only publicly visible data from JD.com. Independent tool, not affiliated with JD.com.

# Actor input Schema

## `searchTerms` (type: `array`):

What to search on JD.com, one per line, in Chinese, English or any language (a term that is not Chinese is translated to Chinese when needed; each row says how it was searched in 'searchedAs'). A JD search link (search.jd.com/Search?keyword=...) also works.

## `maxItemsPerSearch` (type: `integer`):

Stops each search after this many products (48 per page). Default 48. Protects your budget.

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

Only products at or above this price in yuan. Products outside the range are not charged.

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

Only products at or below this price in yuan.

## `jdSelfOperatedOnly` (type: `boolean`):

Keep only products sold and shipped by JD itself.

## `includeDetails` (type: `boolean`):

Opens each product page to add brand, variants (colors and models), weight, size, delivery promise and stock. Charged as 'Product page added' on top of the product.

## `translateTitles` (type: `boolean`):

Adds 'titleEnglish' (or 'titleTranslated' for another language) next to the Chinese title. Free.

## `targetLanguage` (type: `string`):

Language code for translated titles: en, es, pt, ru, ko, ja...

## `currency` (type: `string`):

A 3-letter currency code such as USD or EUR. Adds converted prices at the day's reference rate; JD prices stay in CNY.

## `onlyNew` (type: `boolean`):

Remembers what each search already delivered (in a key-value store on your account) and delivers only products not seen before. Schedule a Task to watch a market.

## `trackPriceChanges` (type: `boolean`):

Adds previousPrice, priceChange and isPriceDrop to products seen in an earlier run. With 'Only new products' on, products whose price changed are delivered too.

## `proxyConfiguration` (type: `object`):

Apify Proxy by default. Refused requests are retried automatically.

## Actor input object example

```json
{
  "searchTerms": [
    "咖啡机"
  ],
  "maxItemsPerSearch": 48,
  "jdSelfOperatedOnly": false,
  "includeDetails": false,
  "translateTitles": false,
  "targetLanguage": "en",
  "onlyNew": false,
  "trackPriceChanges": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (type: `string`):

No description

# 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 = {
    "searchTerms": [
        "咖啡机"
    ],
    "maxItemsPerSearch": 48,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/jd-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 = {
    "searchTerms": ["咖啡机"],
    "maxItemsPerSearch": 48,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "咖啡机"
  ],
  "maxItemsPerSearch": 48,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/jd-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/jd-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GgNlczdjGUGF3VVRi/builds/0ySbuayp5udWA0iCY/openapi.json
