1688 Wholesale Products Scraper

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

Data fields

FieldTypeDescription
offerIdstringValue exported as offerId.
titlestring | nullValue exported as title.
detailUrlstringValue exported as detailUrl.
sourceKeywordstring | nullValue exported as sourceKeyword.
searchPageinteger | nullValue exported as searchPage.
positioninteger | nullValue exported as position.
pricenumber | nullValue exported as price.
priceTextstring | nullValue exported as priceText.

Input preview

keywordsSearch keywords *
maxResultsMaximum products
priceMinMinimum price (CNY)
priceMaxMaximum price (CNY)
minOrderQuantityMaximum MOQ
provinceSupplier province

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Export public 1688 wholesale product search results by keyword: offer IDs, titles, visible prices, minimum order quantities (MOQ), sales signals, supplier details, images, and product URLs. Use the dataset for sourcing spreadsheets or API-based product research.

This build supports keyword search, not direct offer-URL or offer-ID lookups. Supplier and product details vary with what 1688 exposes; empty optional fields are not verified supplier information.

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

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

Output example

Illustrative output shape only, not a current offer or a verified price. Optional values may be null.

{
  "offerId": "1912412526",
  "title": "定制硅胶手机套 创意手机软胶保护套 滴胶卡通公仔手机壳厂家定制",
  "detailUrl": "https://detail.1688.com/offer/1912412526.html",
  "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 Maximum acceptable MOQ (despite the field name), applied locally 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.
maxConcurrency integer Compatibility setting, default 1; the current keyword-search loop is sequential.
offerIds, offerUrls array Reserved compatibility fields; do not enable detail-only lookup. keywords remains required.
includeSkuDetails, includeDescriptionHtml boolean Reserved enrichment controls, default false; do not promise additional detail extraction.

More input recipes

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

Two-keyword product research

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

Tips and limits

  • Use Chinese keywords for the broadest 1688 coverage.
  • Keep maxResults low when testing because residential proxy access costs real bandwidth.
  • Submit 1–20 keywords of up to 200 characters each. Prices and maximum MOQ must be nonnegative; minimum price cannot exceed maximum price.
  • Processing is limited to 100 search pages total (50 per keyword), sequentially, with an independent 540-second deadline. The supported memory ceiling is 1024 MiB; the existing default remains unchanged. These bounds do not guarantee a yield or a profitable run for every filter/proxy choice.
  • Runs stop before further searches when item billing capacity is exhausted. Billing and essential storage failures fail the run rather than silently delivering unbilled work.
  • Inspect RUN-SUMMARY in the run's key-value store for per-keyword counts and stop reasons. Unavailable/challenged searches can finish empty; this does not prove a private or deleted target. Unexpected empty markup retains diagnostic telemetry.
  • Restarting or resurrecting a cloud run will not repeat extraction; start a new run instead.
  • 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

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

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

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.

For hosted access, connect your MCP client to https://mcp.apify.com following the official Apify MCP setup. Search for fetch_cat/1688-wholesale-products-scraper, inspect its input schema, and start with one keyword and maxResults: 2. MCP availability does not guarantee that 1688 will return results.

Example MCP JSON configuration:

{
  "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."

Support

Open an issue or report a bug from the Actor page when a run fails or output looks wrong. Include the Apify run ID or run URL, a non-sensitive input JSON example, expected and actual output, and one reproducible public URL. Remove credentials, cookies, and proxy authentication before sharing.

Common questions

Questions and answers reused from the canonical actor README.

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.