# JD.com Scraper: Products, Shops, Stock by SKU (`themineworks/jd-com-scraper`) Actor

Read JD.com (Jingdong) products by SKU id or link: title, brand, model, barcode, shop, self operated or third party, stock, delivery, images, variants, category ids and sales rank. JD hides the exact price from visitors; the masked price and its range are returned. No login.

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

## Pricing

from $1.68 / 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/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, Shops, Stock by SKU

[![5 JD.com products with shop type, stock and delivery in 9 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/jd-com-scraper-hero.png)](https://console.apify.com/actors/lig2wQsAgBlajRXNg/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works E-commerce and marketplaces family:** [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [AliExpress Scraper](https://apify.com/themineworks/aliexpress-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Kleinanzeigen.de Scraper](https://apify.com/themineworks/kleinanzeigen-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

Updated 23 Oct 2026: first release. JD.com (京东, Jingdong) products by SKU id or product link: brand, model, barcode, shop and shop type, stock, delivery promise, images, colour and size variants, category ids, sales rank and specs, one flat row per SKU. Bookmark this Actor on its Store page so it is one click away next time.

### Why choose this actor?

- **The product record, in columns.** Title, short title, brand and brand id, model, barcode, weight and dimensions, origin, listing date, the three category ids, every image at full size and the full list of colour and size variants with their own SKU ids. In our test runs `title`, `brand`, `shop_name`, `shop_type`, `image_url` and `category_ids` were filled on 16 of 16 rows.
- **Who sells it, and how.** Shop name, shop id and shop link, and `shop_type`: `self_operated`, `third_party` or `key_account` (JD's KA stores such as Moutai's). Filter a whole list to JD-run stock, or to marketplace sellers, in one column.
- **Stock and delivery as a shopper sees them.** Stock state, the delivery promise for JD's default address, the shipping-fee note, the service badges (7-day returns, JD Logistics, price protection) and the sales ranking JD shows for the product.
- **Pay per product, nothing for errors.** Removed SKUs, links that are not JD products, the summary row and duplicates are never charged. No JD account, cookies or API key.

**What JD does not show a signed-out visitor, said plainly.** JD masks the shopper price: a visitor sees `1??9`, not the number. This actor returns that text as `price_masked` and the range it allows as `price_hint_low` and `price_hint_high` (1009 to 1999 for `1??9`). The exact `price` is filled only when the page prints it in full, which it usually does not. Reviews, the rating and the comment count come from JD calls that need JD's own signed app parameters, so they are not in the rows. Keyword search on JD sits behind JD's verification page; see "Keywords" below.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/lig2wQsAgBlajRXNg/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Try it in one minute

Paste this into the input (JSON view) and press Start. It reads five products (a Moutai liquor, two Huawei phones, an iPhone and a Huawei foldable) from their mobile product pages. It took 9 seconds in our test run:

```json
{
  "skuIds": ["100012043978", "100248562389", "100038004353", "100224133297", "100156131721"],
  "maxItems": 20
}
```

Put your own SKU ids, or full product links, one per line. The SKU id is the number in a JD link: `item.jd.com/100012043978.html`.

Apify's free plan includes $5 of credit every month, which covers about 2,500 products at this actor's price.

#### Copy to your AI assistant

```text
themineworks/jd-com-scraper on Apify. Reads JD.com (京东) products by SKU id or product link and returns one flat row per SKU with title, brand, model, barcode, shop, shop_type (self_operated, third_party, key_account), stock, delivery promise, images, variants, category ids, sales rank and specs, with no login. Call ApifyClient("TOKEN").actor("themineworks/jd-com-scraper").call(run_input={"skuIds": ["100012043978"], "maxItems": 50}), then client.dataset(run["defaultDatasetId"]).list_items().items. Give skuIds (list of SKU ids or JD product links) and/or startUrls (list of JD product links). Optional: maxItems (default 50, 1 to 5000), includeVariants (default false; also reads the other colour and size SKUs of each product), searchQueries with keywordSource "web-index" (default "off"; finds a few products per keyword through a web search index). JD hides the shopper price from signed-out visitors, so price is usually null and price_masked (for example 1??9), price_hint_low and price_hint_high carry what is shown. Product rows have no _type field and carry sku_id, product_id, title, short_title, selling_point, url, mobile_url, brand, brand_id, model, barcodes, barcode, shop_id, shop_name, shop_url, shop_type, shop_type_label, is_self_operated, is_third_party, price, price_currency, price_masked, price_hint_low, price_hint_high, price_reference_amount, price_note, in_stock, stock_state, stock_state_code, delivery_promise, shipping_note, services, category_ids, category_id_path, image_url, image_count, images, variant_count, variants, color, size, specifications, weight_kg, origin, listed_at, sales_rank, sales_rank_position, sales_rank_title, is_reservation, is_presale, seven_day_return, is_cross_border, is_jd_express, sale_status, source, keyword, parent_sku_id, position, scraped_at. Each run also writes one row with _type "summary", one with _type "info" when products were delivered, and a row with _type "error" for each input that could not be read; none of these is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~jd-com-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **SKU ids or links.** Paste SKU ids, or `item.jd.com`, `item.m.jd.com` or `npcitem.jd.hk` links. A SKU that appears twice is delivered once.
- **Variants.** Every product row lists its colour and size variants with their SKU ids and photos (`variants`). Turn on `includeVariants` to read those SKUs as rows too, up to `maxItems`. One iPhone model can be 20 or more SKUs.
- **Shop type.** `self_operated` is JD's own flag for JD-run and JD-flagship stores, `third_party` is a marketplace seller, `key_account` is a JD KA store. `shop_type_label` keeps JD's own wording when it gives one.
- **Barcodes.** The UPC or EAN JD stores for the product (`barcode`, `barcodes`), when it has one. 13 of 16 rows in our test had one. Use it to match a JD listing to your own catalogue.
- **Fast and light.** One page per product, about 280 KB, read over the Apify datacenter proxy. No China proxy is needed: the mobile product page answers from any region.
- **Stops cleanly.** Eight failed or blocked pages in a row end the run; the run stops before its time limit and keeps every row it read. The summary row says why.

### How to use it

#### Basic: a list of SKUs

```json
{
  "skuIds": ["100012043978", "https://item.jd.com/100248562389.html"],
  "maxItems": 100
}
```

#### Every colour and size of a product

```json
{
  "skuIds": ["100038004353"],
  "includeVariants": true,
  "maxItems": 60
}
```

Each variant is its own row with its own stock and delivery promise.

#### Keywords (opt-in)

```json
{
  "searchQueries": ["华为手机"],
  "keywordSource": "web-index",
  "maxItems": 20
}
```

JD's own search (`search.jd.com`, `so.m.jd.com`) answers every request with JD's verification page, which this actor does not solve or get around. The one keyword route that works without it is a public web search index: the keyword is searched as `site:item.jd.com <keyword>` and the JD product ids in the answer are then read from JD. It finds about 4 to 8 products per keyword, the order is the index's, not JD's, and the index's robots.txt disallows automated queries, which is why it is off by default. Use it to find SKU ids to start from, not as a catalogue crawl.

#### Track stock and delivery

Run the same SKU list daily and compare `stock_state`, `delivery_promise` and `sales_rank` between runs.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `skuIds` | array of strings | empty | JD SKU ids or full product links, one per line. Up to 2,000. |
| `startUrls` | array of strings | empty | JD product links copied from your browser. Same as `skuIds`. |
| `searchQueries` | array of strings | empty | Keywords. Used only when `keywordSource` is `web-index`. |
| `keywordSource` | string | `off` | `off` or `web-index`. See "Keywords (opt-in)". |
| `maxItems` | integer | `50` | Most products in the run, 1 to 5,000. |
| `includeVariants` | boolean | `false` | Also reads the other colour and size SKUs listed on each page. |

Give `skuIds`, `startUrls`, `searchQueries` or a mix.

### What data do you get?

One row per SKU, with no `_type` field. Missing values are left out of the row rather than filled with placeholders.

| Group | Fields |
|---|---|
| Identity | `sku_id`, `product_id`, `title`, `short_title`, `selling_point`, `url`, `mobile_url` |
| Product | `brand`, `brand_id`, `model`, `barcode`, `barcodes`, `color`, `size`, `specifications`, `weight_kg`, `origin`, `listed_at`, `category_ids`, `category_id_path` |
| Shop | `shop_id`, `shop_name`, `shop_url`, `shop_type`, `shop_type_label`, `is_self_operated`, `is_third_party` |
| Price | `price` (usually null), `price_currency`, `price_masked`, `price_hint_low`, `price_hint_high`, `price_reference_amount`, `price_note` |
| Stock and delivery | `in_stock`, `stock_state`, `stock_state_code`, `delivery_promise`, `shipping_note`, `services`, `seven_day_return`, `is_reservation`, `is_presale`, `is_cross_border`, `is_jd_express`, `sale_status` |
| Media and variants | `image_url`, `image_count`, `images`, `variant_count`, `variants` |
| Ranking | `sales_rank`, `sales_rank_position`, `sales_rank_title` |
| Run context | `source`, `keyword`, `parent_sku_id`, `position`, `scraped_at` |

`price_reference_amount` is an amount JD embeds in the page for some products. On a Moutai SKU it was 1041 while the masked price was `1??9`, and on a phone it was 380 against `1??9`, so it is not the shop price. It is kept because some users compare it across runs.

#### Stable fields for automations

`sku_id` never changes and is the key to join runs on. `shop_type` takes one of `self_operated`, `third_party`, `key_account`. `stock_state` takes one of `in_stock`, `out_of_stock`, `pre_order`, `in_transit`, `available_to_order`, or `code_N` for a state this actor does not know yet; `stock_state_code` always has JD's raw number.

#### Output example

```json
{
  "sku_id": "100248562389",
  "title": "华为畅享 90 Plus 128GB星海蓝 麒麟8系芯片关怀模式鸿蒙AI防诈6620mAh巨鲸大电池柔光护眼直屏手机",
  "brand": "华为（HUAWEI）",
  "model": "畅享 90 Plus",
  "barcode": "6942103189135",
  "shop_id": "1000004259",
  "shop_name": "华为京东自营旗舰店",
  "shop_type": "self_operated",
  "is_self_operated": true,
  "price_currency": "CNY",
  "price_masked": "1??9",
  "price_hint_low": 1009,
  "price_hint_high": 1999,
  "in_stock": true,
  "stock_state": "in_stock",
  "delivery_promise": "11:10前付款，预计今天(10月24日)送达",
  "category_id_path": "9987,653,655",
  "image_url": "https://img14.360buyimg.com/n0/jfs/t1/542073/2/8519/166879/6ad61434F114043f0/00835a05a0bce48c.jpg",
  "variant_count": 6,
  "variants": [{ "sku_id": "100331677410", "color": "羽沙白", "size": "128GB", "image_url": "https://img14.360buyimg.com/n0/jfs/t1/548220/25/3470/172272/6ad61433F0e0f1ae4/00835a05a00cddc4.jpg" }],
  "sales_rank": "10月『11.11华为超级金榜』TOP20",
  "sales_rank_position": 4,
  "source": "input",
  "position": 2,
  "scraped_at": "2026-10-23T18:20:24.053Z"
}
```

### Pricing

Pay per event: you pay for the products you receive, plus a flat $0.003 per run, whatever memory you choose.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `product-scraped` | Once per product row stored in your dataset | $1.97 per 1,000 | $1.87 per 1,000 | $1.77 per 1,000 | $1.68 per 1,000 |
| `run-start` | Once per run, after the first product page returned a product | $0.003 | $0.003 | $0.003 | $0.003 |

The price of one product is the price per 1,000 divided by 1,000.

Never charged:

- inputs that are not JD products (each gets an error row);
- a SKU that is removed or never existed;
- a SKU found twice in one run;
- products past your `maxItems`;
- the summary, info and error rows;
- a run with no valid input, or one where no product page returned a product: the start fee is charged only once a product has been read;
- anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

### Run it on a schedule

1. Open the actor in Apify Console, set your input and click **Save as a new task**.
2. In the task, open **Schedules**, click **Add schedule** and pick how often (every day, every Monday at 08:00 and so on).
3. Compare runs on `sku_id`, `stock_state` and `delivery_promise` to see what sold out or came back.
4. Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.

### FAQ

#### What does this actor read?

JD.com's public mobile product page for each SKU (`item.m.jd.com`), as a signed-out visitor sees it. It does not log in, place orders or read anything behind a sign in.

#### Why is the price masked?

JD shows signed-out visitors the first and last digit of the price (`1??9`) and asks them to log in. This actor does not log in and does not guess. You get the mask, the lowest and highest price it allows, and `price` only when the page prints the number in full. If you need exact prices, tell us in the Issues tab; we will look at a route that does not need an account.

#### Can I search by keyword?

Not on JD's own search: it ends on JD's verification page, which this actor does not solve. The opt-in `web-index` source finds a few SKUs per keyword through a public web search index; see "Keywords (opt-in)". For large lists, bring SKU ids from your own sheet, a shop, a ranking or a feed.

#### Are reviews, ratings and sales counts included?

No. JD serves them to its own app through calls that need JD's signed parameters. The row has `sales_rank` (the ranking JD prints on the page, for example "纪念日白酒热卖榜第12名") when the product is ranked, and nothing for ratings.

#### How many products can I get?

As many SKUs as you give, up to 5,000 per run. One page is read per SKU, about 280 KB. In our test 16 SKUs took 23 seconds with no blocked page.

#### Why do some rows have no barcode or delivery promise?

JD lists them only for some products, and a sold-out product has no delivery promise. A field JD does not print is left out.

#### Do I need an account, cookies or a proxy?

No. The actor reads public pages over Apify Proxy, which is included. The page answers from any region, so no China proxy is needed.

#### Are the texts in Chinese?

Titles, shop names and delivery promises are as JD prints them, in Chinese. Field names, `shop_type` and `stock_state` are English.

#### Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has three ready views: Products, Shops and stock, and Catalogue data.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/jd-com-scraper

- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http jd-com-scraper "https://mcp.apify.com/?tools=themineworks/jd-com-scraper"`

#### Is it legal to scrape JD.com?

The actor reads only pages that anyone can open without logging in. You are responsible for how you use the data, including JD's terms and data protection law. This is general information, not legal advice.

### Integrations

- **Google Sheets**: send each run's products to a sheet with Apify's Google Sheets integration; one row per SKU fits a sheet as is.
- **Make, Zapier and n8n**: start a run and read its dataset with the Apify apps and nodes, for example "stock check on our SKU list every morning to Slack".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [AliExpress Scraper](https://apify.com/themineworks/aliexpress-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Kleinanzeigen.de Scraper](https://apify.com/themineworks/kleinanzeigen-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Carsales.com.au Scraper](https://apify.com/themineworks/carsales-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [eBay Product Listings Scraper](https://apify.com/themineworks/ebay-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Shopify Store Scraper](https://apify.com/themineworks/shopify-store-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [🛒 TikTok Shop Scraper](https://apify.com/themineworks/tiktok-shop-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Walmart Product & Price Scraper](https://apify.com/themineworks/walmart-product-price-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Vinted Scraper](https://apify.com/themineworks/vinted-listings-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a SKU that returns nothing, or a field that comes back empty? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.

*Read JD.com products by SKU id or link and get one row each, with brand, model, barcode, shop and shop type, stock, delivery promise, images, variants and category ids, no login.*

# Actor input Schema

## `skuIds` (type: `array`):

JD SKU ids (the number in a JD product link, 6 to 15 digits) or full product links, one per line. Example: 100012043978 or https://item.jd.com/100012043978.html. Up to 2,000 per run.

## `startUrls` (type: `array`):

JD product links from your browser: item.jd.com, item.m.jd.com or npcitem.jd.hk product pages. Same as skuIds, for convenience.

## `searchQueries` (type: `array`):

Product keywords in English or Chinese, one per line, for example 华为手机. JD's own search is behind JD's verification page, so keywords only work when Keyword source is set to web-index, and then give a few products per keyword.

## `keywordSource` (type: `string`):

off (default): keywords are not searched and you get an info row. web-index: finds JD product ids through a public web search index (site:item.jd.com), about 4 to 8 products per keyword, then reads each from JD. The web index's robots.txt disallows automated queries, so this is opt-in.

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

The most products to return in this run, 1 to 5,000. Example: 100.

## `includeVariants` (type: `boolean`):

On: the other colour and size SKUs JD lists on each product page are read too, as their own rows, until maxItems. Off: only the SKUs you give. Same price per row either way.

## Actor input object example

```json
{
  "skuIds": [
    "100012043978",
    "100248562389",
    "100038004353",
    "100224133297",
    "100156131721"
  ],
  "keywordSource": "off",
  "maxItems": 20,
  "includeVariants": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "skuIds": [
        "100012043978",
        "100248562389",
        "100038004353",
        "100224133297",
        "100156131721"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/jd-com-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 = {
    "skuIds": [
        "100012043978",
        "100248562389",
        "100038004353",
        "100224133297",
        "100156131721",
    ],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/jd-com-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 '{
  "skuIds": [
    "100012043978",
    "100248562389",
    "100038004353",
    "100224133297",
    "100156131721"
  ],
  "maxItems": 20
}' |
apify call themineworks/jd-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/jd-com-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/lig2wQsAgBlajRXNg/builds/0WU8Dzj2c7ziEuX3O/openapi.json
