# Made-in-China Ranking Scraper (`xtracto/made-in-china-ranking-scraper`) Actor

Pull Made-in-China.com top-ranking best-seller and trending product lists (Most Popular, Best Selling, New Releases, Movers & Shakers) for any category keyword.

- **URL**: https://apify.com/xtracto/made-in-china-ranking-scraper.md
- **Developed by:** [Farhan Febrian Nauval](https://apify.com/xtracto) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Made-in-China Ranking Scraper

Pull the [Made-in-China.com](https://www.made-in-china.com/) top-ranking best-seller and trending product lists — **Most Popular, Best Selling, New Releases, and Movers & Shakers** — as structured JSON. Each ranked product comes with its rank, demand signal, price, minimum order, and supplier.

### Why use this actor

- **Spot what is trending** — the Movers & Shakers and New Releases lists surface fast-rising and brand-new B2B products before they are everywhere.
- **Real rank + demand signals** — every product carries its ranking position and a demand value (e.g. `9999 in Demand`, `138% UP`).
- **B2B pricing built in** — captures the price (single value or range) and the minimum order quantity for each ranked product.
- **Supplier on every row** — each product links to its supplier and supplier id.
- **No account, no key** — works straight from the public ranking lists.
- **Stable JSON output** — the same field names every run, ready for spreadsheets, databases, or pipelines.

### How it works

1. You provide one or more category keywords (or leave it empty for the overall lists).
2. You pick which ranking lists to collect: Most Popular, Best Selling, New Releases, Movers & Shakers.
3. For each keyword and list, the actor pulls the ranked products across every category it covers.
4. Each product is saved as a `RANKING_PRODUCT` record with its rank, demand, price, minimum order, and supplier.
5. If a keyword and list returns nothing, the actor still writes one diagnostic record so nothing is silently dropped.
6. Everything lands in your dataset, exportable as JSON, CSV, or Excel.

Rankings are a top-20 per category by nature — there is no deeper page to load. The actor gets its breadth by covering every category in every selected list, for every keyword. You don't need to manage any browsers or scrapers.

### Input

```json
{
    "keywords": [
        "earbuds",
        "power bank"
    ],
    "rankingTypes": [
        "movers-shakers",
        "new-releases"
    ],
    "maxProductsPerRanking": 20,
    "maxConcurrency": 4,
    "maxRequestRetries": 5,
    "proxyConfiguration": { "useApifyProxy": true }
}
````

| Field | Type | Description |
| --- | --- | --- |
| `keywords` | array | Category keywords to rank (one per entry). Leave empty for the overall top-ranking lists with no category filter. |
| `rankingTypes` | array | Which lists to collect: `most-popular`, `best-selling`, `new-releases`, `movers-shakers`. Defaults to all four. |
| `maxProductsPerRanking` | integer | Max ranked products kept per category (`1`–`20`). The source publishes a top-20, so higher values have no effect. Default `20`. |
| `maxConcurrency` | integer | Parallel requests across all keywords and lists (`1`–`20`). Default `4`. |
| `maxRequestRetries` | integer | Retries per keyword-and-list before giving up (`1`–`15`). Default `5`. |
| `proxyConfiguration` | object | Apify Proxy or a custom proxy list. Datacenter proxies work fine for this source. |

### Output

Each ranked product is one record (`recordType: "RANKING_PRODUCT"`):

```json
{
    "recordType": "RANKING_PRODUCT",
    "rankingType": "Movers & Shakers",
    "category": "Chemical Reagent",
    "categoryTotal": "Up to 138%",
    "rank": 1,
    "demand": "138% UP",
    "demandValue": 138.0,
    "change": 0,
    "changeLabel": null,
    "prodName": "Peptides Therapy Research Peptide 10mg Wholesale Peptide Lyophilized Peptide 15mg Skin Care Ghk-Cu Ss31 Peptide",
    "price": "US$15.00-20.00",
    "priceUnit": "Piece",
    "minOrder": "10",
    "minOrderUnit": "Pieces",
    "productUrl": "https://m.made-in-china.com/product/Peptides-Therapy-Research-Peptide-10mg-Wholesale-Peptide-Lyophilized-Peptide-15mg-Skin-Care-Ghk-Cu-Ss31-Peptide-2154433882.html",
    "supplier": "shappletong",
    "supplierId": "JbIxsHgXYTih",
    "image": "https://image.made-in-china.com/201f0j00ZfDeiHhACqzu/Peptides-Therapy-Research-Peptide-10mg-Wholesale-Peptide-Lyophilized-Peptide-15mg-Skin-Care-Ghk-Cu-Ss31-Peptide.webp",
    "tags": ["OEM/ODM", "Sample Order", "Laboratory Reagents"],
    "rankingPageUrl": "https://m.made-in-china.com/best-sale/products-list/Movers-Shakers_tQnEqRfJdmHV/Chemical-Reagent_nLgGmJQOKfEx.html",
    "keyword": "earbuds",
    "scrapedAt": "2026-06-10T18:52:11Z"
}
```

If a keyword and list returns no ranked products, the actor writes a single diagnostic record instead:

```json
{
    "recordType": "RANKING_PRODUCT",
    "_input": "earbuds",
    "error": "NO_RESULTS",
    "scrapedAt": "2026-06-10T18:52:11Z"
}
```

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | string | Always `"RANKING_PRODUCT"`. |
| `rankingType` | string | The list this row came from: `Most Popular`, `Best Selling`, `New Releases`, or `Movers & Shakers`. |
| `category` | string | Product category for this ranking group, e.g. `Bluetooth Headset`. |
| `categoryTotal` | string | The category-level headline, e.g. `82,000+ Inquiries` or `Up to 138%`. |
| `rank` | integer | The product's position within its category ranking. |
| `demand` | string | Demand signal as shown, e.g. `9999 in Demand`, `138% UP`. |
| `demandValue` | number | Numeric form of the demand signal. |
| `change` | integer | Movement in rank versus the previous period. |
| `changeLabel` | string | Movement label as shown (may be empty). |
| `prodName` | string | Product name. |
| `price` | string | Price exactly as shown, e.g. `US$15.00-20.00`. |
| `priceUnit` | string | Price unit, e.g. `Piece`, `Vial`. |
| `minOrder` | string | Minimum order quantity, e.g. `10`. |
| `minOrderUnit` | string | Minimum order unit, e.g. `Pieces`. |
| `productUrl` | string | Full product detail URL. |
| `supplier` | string | Supplier identity (their own subdomain). |
| `supplierId` | string | Supplier company id. |
| `image` | string | Primary product image URL. |
| `tags` | array | Product tags, e.g. `OEM/ODM`, `Sample Order`. |
| `rankingPageUrl` | string | The public ranking page for this category. |
| `keyword` | string | The input keyword that produced this row. |
| `scrapedAt` | string | ISO 8601 timestamp of collection. |
| `error` | string | Only on diagnostic records: `NO_RESULTS` or `BLOCKED_AFTER_RETRIES`. |

### Other Made-in-China / B2B Scrapers

| Actor | Description |
| --- | --- |
| [Made-in-China Search Scraper](https://apify.com/made-in-china-search-scraper) | Keyword search → product cards with supplier, price, MOQ, and attributes. |
| [Made-in-China Ranking Scraper](https://apify.com/made-in-china-ranking-scraper) | Top-ranking best-seller and trending lists with rank, demand, price, and supplier. |
| [Made-in-China Product Scraper](https://apify.com/made-in-china-product-scraper) | Full product detail: specifications, packaging, and supplier profile. |
| [Made-in-China Supplier Scraper](https://apify.com/made-in-china-supplier-scraper) | Company profile, certifications, and full product catalog per supplier. |

# Actor input Schema

## `keywords` (type: `array`):

Category keywords to rank (one per array entry), e.g. "earbuds" or "power bank". Each keyword is ranked independently. Leave empty to get the overall top-ranking lists with no category filter.

## `rankingTypes` (type: `array`):

Which top-ranking lists to collect for each keyword. Choose any combination of Most Popular, Best Selling, New Releases, and Movers & Shakers. Defaults to all four.

## `maxProductsPerRanking` (type: `integer`):

Maximum ranked products to keep per category in each list. The source publishes a top-20 per category, so values above 20 have no effect.

## `maxConcurrency` (type: `integer`):

Maximum number of parallel requests across all keywords and ranking lists.

## `maxRequestRetries` (type: `integer`):

How many times a ranking request will be retried before giving up on that keyword and list.

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

Apify Proxy or your own proxy list. Datacenter proxies work fine for this source.

## Actor input object example

```json
{
  "keywords": [
    "earbuds",
    "power bank"
  ],
  "rankingTypes": [
    "movers-shakers",
    "new-releases"
  ],
  "maxProductsPerRanking": 20,
  "maxConcurrency": 4,
  "maxRequestRetries": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "keywords": [
        "earbuds",
        "power bank"
    ],
    "rankingTypes": [
        "movers-shakers",
        "new-releases"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("xtracto/made-in-china-ranking-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 = {
    "keywords": [
        "earbuds",
        "power bank",
    ],
    "rankingTypes": [
        "movers-shakers",
        "new-releases",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("xtracto/made-in-china-ranking-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 '{
  "keywords": [
    "earbuds",
    "power bank"
  ],
  "rankingTypes": [
    "movers-shakers",
    "new-releases"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call xtracto/made-in-china-ranking-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=xtracto/made-in-china-ranking-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Made-in-China Ranking Scraper",
        "description": "Pull Made-in-China.com top-ranking best-seller and trending product lists (Most Popular, Best Selling, New Releases, Movers & Shakers) for any category keyword.",
        "version": "1.0",
        "x-build-id": "b4xMENY4UVhttrwai"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/xtracto~made-in-china-ranking-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-xtracto-made-in-china-ranking-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/xtracto~made-in-china-ranking-scraper/runs": {
            "post": {
                "operationId": "runs-sync-xtracto-made-in-china-ranking-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/xtracto~made-in-china-ranking-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-xtracto-made-in-china-ranking-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",
                "properties": {
                    "keywords": {
                        "title": "Category keywords",
                        "type": "array",
                        "description": "Category keywords to rank (one per array entry), e.g. \"earbuds\" or \"power bank\". Each keyword is ranked independently. Leave empty to get the overall top-ranking lists with no category filter.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "rankingTypes": {
                        "title": "Ranking lists",
                        "type": "array",
                        "description": "Which top-ranking lists to collect for each keyword. Choose any combination of Most Popular, Best Selling, New Releases, and Movers & Shakers. Defaults to all four.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "most-popular",
                                "best-selling",
                                "new-releases",
                                "movers-shakers"
                            ],
                            "enumTitles": [
                                "Most Popular",
                                "Best Selling",
                                "New Releases",
                                "Movers & Shakers"
                            ]
                        },
                        "default": [
                            "most-popular",
                            "best-selling",
                            "new-releases",
                            "movers-shakers"
                        ]
                    },
                    "maxProductsPerRanking": {
                        "title": "Max products per ranking",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum ranked products to keep per category in each list. The source publishes a top-20 per category, so values above 20 have no effect.",
                        "default": 20
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of parallel requests across all keywords and ranking lists.",
                        "default": 4
                    },
                    "maxRequestRetries": {
                        "title": "Max retries",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "How many times a ranking request will be retried before giving up on that keyword and list.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy or your own proxy list. Datacenter proxies work fine for this source."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
