1688 Wholesale Product Scraper avatar

1688 Wholesale Product Scraper

Pricing

from $2.99 / 1,000 wholesale products

Go to Apify Store
1688 Wholesale Product Scraper

1688 Wholesale Product Scraper

Extract public 1688.com wholesale products with tier pricing, MOQ, supplier details, SKU attributes, and images.

Pricing

from $2.99 / 1,000 wholesale products

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

1688 Wholesale Product Scraper

Extracts rich public wholesale product data from 1688.com. The Actor supports keyword searches, multiple public sources, bounded pagination, global filters/sorting/deduplication, optional Apify Proxy routing, and fail-closed diagnostics.

The dataset is marketplace-focused. Product rows do not contain Actor-debugging wrappers such as recordId, recordType, status, success, ok, dataAvailable, found, fieldCoverage, dataQuality, extractionMethod, fallbackMode, or usedProxy. Operational counts remain in OUTPUT_SUMMARY.

The Actor only requests publicly exposed 1688 pages. It does not sign in, solve CAPTCHA or security challenges, rotate identities to evade controls, or call private APIs. If 1688 presents a login, challenge, denial, or rate limit, the run stops at that boundary and records a bounded diagnostic instead of inventing a product row. A successful run is therefore environment-dependent and cannot be guaranteed from every region or Cloud transport.

Extracted fields

Depending on public availability, a product row can include:

  • identity and provenance: url, productId, title, name, productUrl, source, sourceDomain, sourceUrl, pageNum, position, scrapedAt
  • pricing: price, priceMin, priceMax, currency, priceFormatted, tierPricing
  • wholesale facts: moq, moqUnit, salesVolume, transactionCount, reviewCount, rating, availability
  • supplier: supplierName, supplierProfileUrl, supplierLocation, supplierYears, supplierResponseRate
  • media and catalog facts: images, thumbnail, imageCount, attributes, categories, badges, description, shippingInfo, leadTime

Missing values are omitted rather than guessed. thumbnail is always images[0] when images are present. Product images are scoped to the product record and filtered for common logos, icons, placeholders, and loading assets.

Input

{
"keywords": "wireless earbuds",
"maxItems": 50,
"maxPages": 3,
"sortBy": "relevance"
}

Filters and sorting

{
"keywords": "cotton tote bag",
"minPrice": 1.5,
"maxPrice": 12,
"minMoq": 10,
"minSalesVolume": 100,
"minRating": 4,
"minReviewCount": 20,
"supplierLocation": "Shenzhen",
"requiredBadges": ["诚信通"],
"sortBy": "sales_desc",
"maxItems": 25,
"maxPages": 5,
"deduplicate": true
}

Multiple sources, developer controls, and proxy

{
"startUrls": [
{ "url": "https://s.1688.com/selloffer/offer_search.htm?keywords=packaging" },
{ "url": "https://s.1688.com/selloffer/offer_search.htm?keywords=gift%20bags" },
{ "url": "https://detail.1688.com/offer/123456789.html" }
],
"maxItems": 100,
"maxPages": 4,
"requestDelayMs": 1500,
"maxConcurrency": 2,
"maxRequestRetries": 3,
"requestTimeoutSecs": 45,
"includeImages": true,
"includeAttributes": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

maxPages: 0 continues until a source returns no new products, with a hard 100-page cap. maxItems is global across all sources. Product/detail URLs are fetched once. A proxy only changes transport routing; it does not authorize access or bypass login, CAPTCHA, or security controls. includeDiagnostics: false suppresses diagnostic rows but the run summary still reports diagnosticsFound and retains the blocked/no-data status.

Supported sortBy values are relevance, price_asc, price_desc, sales_desc, rating_desc, reviews_desc, and supplier_years_desc.

Deterministic local QA

{
"keywords": "cotton tote",
"fixtureFile": "fixtures/sample.html",
"maxItems": 10,
"maxPages": 2,
"requestDelayMs": 0,
"includeDiagnostics": true
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Product output example

{
"source": "1688.com",
"sourceDomain": "s.1688.com",
"sourceUrl": "https://s.1688.com/selloffer/offer_search.htm?keywords=cotton+tote",
"url": "https://detail.1688.com/offer/FIXED-1688-1.html",
"productId": "FIXED-1688-1",
"title": "Cotton Tote Wholesale",
"productUrl": "https://detail.1688.com/offer/FIXED-1688-1.html",
"price": 1.9,
"priceMin": 1.9,
"priceMax": 2.5,
"currency": "CNY",
"priceFormatted": "¥1.9-2.5",
"tierPricing": [
{ "minQuantity": 10, "price": 2.5, "currency": "CNY" },
{ "minQuantity": 100, "price": 1.9, "currency": "CNY" }
],
"moq": 10,
"moqUnit": "pieces",
"salesVolume": 1250,
"transactionCount": 1250,
"reviewCount": 120,
"rating": 4.8,
"supplierName": "Shenzhen Supply",
"supplierProfileUrl": "https://shop12345.1688.com/",
"supplierLocation": "Guangdong Shenzhen",
"supplierYears": 5,
"supplierResponseRate": "96%",
"images": [
"https://cbu01.alicdn.com/img/fixed-tote.jpg",
"https://cbu01.alicdn.com/img/fixed-tote-2.jpg"
],
"thumbnail": "https://cbu01.alicdn.com/img/fixed-tote.jpg",
"imageCount": 2,
"attributes": { "Material": "Cotton canvas", "Style": "Tote" },
"shippingInfo": "Ships within 48 hours",
"leadTime": "3-7 days",
"badges": ["诚信通", "实力商家"],
"categories": ["Bags", "Canvas bags"],
"availability": "InStock",
"pageNum": 1,
"position": 1,
"scrapedAt": "2026-09-05T00:00:00.000Z"
}

Blocked or unavailable public pages produce a deliberately small diagnostic row:

{
"url": "https://s.1688.com/selloffer/offer_search.htm?keywords=wireless+earbuds",
"error": "A public 1688 access barrier was visible; the Actor stopped without bypassing it.",
"errorCode": "ACCESS_BARRIER_LOGIN_REQUIRED",
"scrapedAt": "2026-09-08T07:17:41.304Z"
}

Local validation

npm ci --omit=dev
npm test
apify validate-schema
apify run --purge --input-file .actor/input.json
npm run validate

The validator checks the strict marketplace schema, canonical URLs, product-scoped image URLs, thumbnail === images[0], and the absence of Actor-debugging fields. Live availability can vary by region, session, and access policy; the correct response to a blocked page is a diagnostic, not fabricated product data. The diagnostic itself is intentionally small: url, error, errorCode, and scrapedAt.