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

1

Total users

1

Monthly active users

8 hours ago

Last modified

Categories

Share

1688 Wholesale Product Scraper

This is a conditional public-route extractor, not a currently qualified 1688 inventory source. It extracts rich wholesale product data from 1688.com only when a permitted public page exposes source-backed product records. The Actor supports keyword searches, multiple public sources, bounded pagination, global filters/sorting/deduplication, optional account-enabled Apify Proxy routing, and fail-closed diagnostics.

Current qualification status

The current public search route https://s.1688.com/selloffer/offer_search.htm?keywords=wireless+earbuds returned either a login-gated shell or an anti-automation barrier in direct probes, with no product links. The current direct Cloud smoke stopped at ACCESS_BARRIER_ACCESS_CHALLENGE, while the account-enabled standard proxy stopped at ACCESS_BARRIER_LOGIN_REQUIRED. All current Cloud paths produced zero normal rows, so this Actor is not publishable as current inventory.

To qualify inventory extraction, provide an authorized 1688 Open Platform API integration or a licensed authenticated feed that exposes product identity, canonical URL, and the commercial fields required by the output contract. This Actor does not accept private cookies, sign in, solve CAPTCHA/security challenges, rotate identities to evade controls, or bypass access restrictions.

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.

Why use 1688 Wholesale Product Scraper?

Use it for public supplier discovery, wholesale price-range comparisons, MOQ research, supplier shortlists, catalog snapshots, and lightweight sourcing workflows. Product rows keep marketplace facts and source URLs together, while OUTPUT_SUMMARY keeps run health, filters, pagination, and access diagnostics separate from the marketplace dataset.

How to run it in Apify Console

  1. Open the Actor in Apify Console and select the Input tab.
  2. Enter keywords or paste public 1688 search/detail URLs in startUrls using { "url": "..." } objects.
  3. Set Max Items, Max Pages, filters, and includeDiagnostics; leave includeImages and includeAttributes enabled for a rich smoke test.
  4. Click Save & Run (or Start), then open the run's Dataset tab and the default key-value store records OUTPUT_SUMMARY and OUTPUT.
  5. If the dataset contains only diagnostics, inspect errorCode and the source URL before changing limits. Do not retry by bypassing a login, CAPTCHA, challenge, paywall, or access-control page.

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/EXAMPLE-1.html"
}
],
"maxItems": 100,
"maxPages": 4,
"requestDelayMs": 1500,
"maxConcurrency": 2,
"maxRequestRetries": 3,
"requestTimeoutSecs": 45,
"includeImages": true,
"includeAttributes": true,
"proxyConfiguration": {
"useApifyProxy": true
}
}

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/EXAMPLE-1.html",
"productId": "EXAMPLE-1",
"title": "Cotton Tote Wholesale",
"productUrl": "https://detail.1688.com/offer/EXAMPLE-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://example-supplier.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"
}

Alternate public-route output example

When the same public product is reachable through a permitted direct or proxy-routed request, the product contract remains the same and the source URL still identifies the observed page. Proxy routing does not add a transport/debug field to dataset rows.

{
"source": "1688.com",
"sourceDomain": "detail.1688.com",
"sourceUrl": "https://s.1688.com/selloffer/offer_search.htm?keywords=example",
"url": "https://detail.1688.com/offer/EXAMPLE-1.html",
"productId": "EXAMPLE-1",
"title": "Example wholesale product",
"productUrl": "https://detail.1688.com/offer/EXAMPLE-1.html",
"price": 4.5,
"currency": "CNY",
"images": ["https://cbu01.alicdn.com/img/example-product.jpg"],
"thumbnail": "https://cbu01.alicdn.com/img/example-product.jpg",
"imageCount": 1,
"scrapedAt": "2026-09-08T00:00:00.000Z"
}

Run summary example

The key-value store contains operational evidence rather than another product row:

{
"status": "BLOCKED_FAIL_CLOSED",
"itemCount": 1,
"successfulCount": 0,
"diagnosticCount": 1,
"diagnosticsFound": 1,
"products": 0,
"diagnostics": 1,
"pagesFetched": 0,
"dataAvailable": false,
"proxyUsed": false,
"fallbackUsed": false,
"source": "1688.com",
"completedAt": "2026-09-08T00:00:00.000Z"
}

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. fallbackUsed is true only for the local HTML fixture path; it is not a claim that an access boundary was bypassed. 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.

Troubleshooting, API, and responsible use

ACCESS_BARRIER_LOGIN_REQUIRED, ACCESS_BARRIER_ACCESS_DENIED, ACCESS_BARRIER_ACCESS_CHALLENGE, and ACCESS_BARRIER_RATE_LIMIT mean the public route was unavailable to this run. NO_PRODUCTS means the page was reachable but no usable product record was exposed. TIMEOUT, HTTP_*, and UNEXPECTED_CONTENT_TYPE identify bounded request failures. Use the run log, OUTPUT_SUMMARY, and the dataset API link in the API tab when reporting a problem; include the run ID, sanitized input, error code, and source kind in the Actor's Issues tab.

This Actor is not affiliated with Alibaba, 1688.com, or Alibaba Group. It requests only publicly exposed pages and does not intentionally collect private account data. Users are responsible for complying with 1688's terms, robots guidance, rate limits, privacy requirements, applicable law, and any supplier-content restrictions. Do not use a proxy or developer option to evade an access boundary.