# 1688 Wholesale Products Scraper (`fetch_cat/1688-wholesale-products-scraper`) Actor

Scrape 1688 wholesale product listings, prices, MOQs, sales signals, and supplier details from public search and offer pages.

- **URL**: https://apify.com/fetch\_cat/1688-wholesale-products-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (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.19 / 1,000 item extracteds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## 1688 Wholesale Products API Scraper

Use this 1688 wholesale products scraper to scrape public 1688 wholesale product search results by keyword and export sourcing-ready product rows: offer IDs, titles, prices, MOQ text when shown, transaction signals, supplier/location signals, images, badges, and canonical product URLs. It supports 1688 wholesale products API workflows and helps export 1688 wholesale products data for recurring sourcing research.

### Why use it

1688 is Alibaba's domestic China wholesale marketplace. This Actor helps sourcing, dropshipping, procurement, and ecommerce research teams build spreadsheets from public product search results without manually copying mobile pages.

### Input example

```json
{
  "keywords": ["手机壳", "蓝牙耳机"],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Output example

```json
{
  "offerId": "1912412526",
  "title": "定制硅胶手机套 创意手机软胶保护套 滴胶卡通公仔手机壳厂家定制",
  "detailUrl": "https://dj.1688.com/ci_bb?...",
  "sourceKeyword": "手机壳",
  "searchPage": 1,
  "position": 2,
  "price": 5,
  "priceText": "￥5.0 成交1笔",
  "currency": "CNY",
  "moq": null,
  "moqText": null,
  "soldText": "成交1笔",
  "bookedCount": 1,
  "imageUrl": "https://...",
  "images": ["https://..."],
  "supplier": { "name": null, "url": null, "location": null, "badges": [], "yearsActive": null, "isVerified": null },
  "serviceTags": ["深度验厂"],
  "canonicalUrl": "https://detail.1688.com/offer/1912412526.html",
  "scrapedAt": "2026-08-02T16:37:22.934Z",
  "error": null
}
```

### Input settings

| Field | Type | Description |
| --- | --- | --- |
| `keywords` | string\[] | Product search terms. Chinese terms usually produce the strongest 1688 matches. |
| `maxResults` | integer | Maximum unique products to save across all keywords. |
| `priceMin`, `priceMax` | number | Optional local price filters after price extraction. |
| `minOrderQuantity` | integer | Optional local MOQ filter when MOQ is visible. |
| `province`, `city` | string | Optional exact supplier location filters when location is visible. |
| `proxyConfiguration` | object | Residential Apify proxy is recommended for 1688 access. |

### Output fields

The dataset includes `offerId`, `title`, `detailUrl`, `sourceKeyword`, `searchPage`, `position`, `price`, `priceText`, `currency`, `moq`, `moqText`, `soldText`, `bookedCount`, `imageUrl`, `images`, `videoUrl`, `province`, `city`, `supplier`, `serviceTags`, `productBadges`, `category`, `attributes`, `priceTiers`, `skuDetails`, `shipping`, `services`, `coupons`, `descriptionText`, `descriptionHtml`, `canonicalUrl`, `scrapedAt`, and `error`.

Some supplier, SKU, shipping, coupon, and description fields depend on what the public page exposes and may be empty for search-only rows.

### Ready-to-run examples

Open a public example to inspect its input, run it, or reuse it as a task:

- [Find Low Cost 1688 USB Cable Offers](https://apify.com/fetch_cat/1688-wholesale-products-scraper/examples/find-low-cost-1688-usb-cable-offers)
- [Compare 1688 Bluetooth Earbud Suppliers](https://apify.com/fetch_cat/1688-wholesale-products-scraper/examples/compare-1688-bluetooth-earbud-suppliers)
- [Export 1688 Phone Case Products](https://apify.com/fetch_cat/1688-wholesale-products-scraper/examples/export-1688-phone-case-products)

#### Quick smoke test

```json
{ "keywords": ["手机壳"], "maxResults": 2 }
```

#### Two-keyword product research

```json
{ "keywords": ["手机壳", "蓝牙耳机"], "maxResults": 50 }
```

### Pricing

This Actor uses pay-per-event pricing: a small run start event and one product event for each dataset row. See the live [Pricing tab](https://apify.com/fetch_cat/1688-wholesale-products-scraper/pricing) for current rates before you start a run.

### Tips and limits

- Use Chinese keywords for the broadest 1688 coverage.
- Keep `maxResults` low when testing because residential proxy access costs real bandwidth.
- If a search produces fewer rows than requested, the Actor stops after duplicate or empty pagination pages instead of looping indefinitely.
- 1688 may vary which supplier or MOQ fields are visible on search cards.

### Who is it for

- Ecommerce sourcing teams comparing wholesale product candidates on 1688.
- Dropshipping operators who need repeatable product research exports.
- Procurement analysts checking MOQ, price text, supplier signals, and product images.
- Marketplace data teams building internal lead lists from public 1688 search pages.
- Agencies preparing supplier/product shortlists for clients without manually copying cards.

### API usage

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/1688-wholesale-products-scraper').call({
  keywords: ['手机壳'],
  maxResults: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/1688-wholesale-products-scraper').call(run_input={
    'keywords': ['手机壳'],
    'maxResults': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~1688-wholesale-products-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"keywords":["手机壳"],"maxResults":20}'
```

After the run succeeds, download rows from the run's default dataset using the dataset ID returned by the API.

### MCP and agents

Use this Actor from agents through Apify MCP with the Actor tool enabled for `1688-wholesale-products-scraper`. Send the same JSON input you would use in the Apify console.

Example Claude Desktop command:

```bash
claude mcp add apify -- npx -y @apify/actors-mcp-server --actors fetch_cat/1688-wholesale-products-scraper
```

Example MCP JSON configuration:

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server", "--actors", "fetch_cat/1688-wholesale-products-scraper"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}
```

Example prompts:

- "Run the 1688 wholesale products scraper for 手机壳 and return the lowest visible prices."
- "Export 20 public 1688 product rows for 蓝牙耳机 and summarize supplier/location signals."
- "Compare product badges and MOQ text for 数据线 search results."

### FAQ

#### What data can I export with 1688 wholesale products scraper?

You can export offer IDs, product titles, visible prices, MOQ text when shown, transaction text, supplier/location signals, images, badges, search position, and product URLs from public 1688 product search pages.

#### Can I run 1688 Wholesale Products Scraper through an API, schedule, or MCP client?

Yes. Run it from the Apify API, schedule repeat jobs in Apify Console, or connect it to agents through Apify MCP using the examples above.

#### How much does it cost to use 1688 Wholesale Products Scraper?

The Actor uses pay-per-event pricing. The live Pricing tab shows the current start and per-item rates before you run it.

#### Why are some fields empty?

1688 does not expose every supplier, SKU, shipping, or description field in every public search card. Empty optional fields mean the source did not expose that value in the current route.

### Related actors

- [Amazon Products & Search Scraper](https://apify.com/fetch_cat/amazon-products-search-scraper)
- [Walmart Products Scraper](https://apify.com/fetch_cat/walmart-products-scraper)
- [Costco Products Scraper](https://apify.com/fetch_cat/costco-products-scraper)
- [eBay Marketplace Scraper](https://apify.com/fetch_cat/ebay-marketplace-scraper)
- [Shopify Products Scraper](https://apify.com/fetch_cat/shopify-products-scraper)

### Support

Open an issue on the Actor page if a public 1688 search result is missing or if you need help choosing inputs.

# Actor input Schema

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

1688 product keywords. Chinese keywords usually return the most complete marketplace results.

## `maxResults` (type: `integer`):

Maximum unique products to save across all keywords.

## `offerIds` (type: `array`):

Optional compatibility field for 1688 offer IDs. Keyword search is required in this build while detail mode is measured.

## `offerUrls` (type: `array`):

Optional compatibility field for 1688 detail URLs. Keyword search is required in this build while detail mode is measured.

## `priceMin` (type: `number`):

Local filter after price extraction.

## `priceMax` (type: `number`):

Local filter after price extraction.

## `minOrderQuantity` (type: `integer`):

Local filter after MOQ extraction.

## `province` (type: `string`):

Optional exact province filter when location is present.

## `city` (type: `string`):

Optional exact city filter when location is present.

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

Browser concurrency cap. Keep at 1 for reliable residential sessions.

## `includeSkuDetails` (type: `boolean`):

Reserved for measured detail enrichment.

## `includeDescriptionHtml` (type: `boolean`):

Reserved for measured detail enrichment.

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

Use Apify residential proxy for 1688 mobile search reliability.

## Actor input object example

```json
{
  "keywords": [
    "手机壳"
  ],
  "maxResults": 20,
  "maxConcurrency": 1,
  "includeSkuDetails": false,
  "includeDescriptionHtml": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "keywords": [
        "手机壳"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/1688-wholesale-products-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": ["手机壳"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/1688-wholesale-products-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": [
    "手机壳"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call fetch_cat/1688-wholesale-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetch_cat/1688-wholesale-products-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/aHVfBJn0KgG2zeupu/builds/uPrtsg0jsY3UscB0a/openapi.json
