Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
1688 Wholesale Scraper icon

1688 Wholesale Scraper

Scrape 1688.com wholesale listings. Get unit price, quantity price tiers, MOQ, supplier, sales count and rating. $0.35 per 1,000 products.

5 from 1 review on Apify 819 runs on Apify $0.00035 per product ($0.35 / 1,000)
Run this in the cloudRun on Apify →

E-commerce & Price Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchTerms, startUrls, maxItems (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00035 per product = $0.35 per 1,000

You are charged forWhenPrice
ProductOne 1688 product returned, including title, unit price, the full quantity price ladder, minimum order quantity, supplier company, sales count and service rating. Sample rows and error rows are never charged.$0.00035

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-09, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchTermsWhat to look for on 1688, one term per line. Chinese terms match far more inventory than English ones, "手机壳" returns millions of offers where "phone case" returns a few thousand. Both work.array
startUrlsOptional. Paste 1688 search pages, for example https://s.1688.com/selloffer/offer_search.htm?keywords=phone%20case. The keyword is read out of the URL. Works alongside the field above.array
maxItemsHard cap on rows returned across all terms (1-1000). 1688 itself stops paginating at 1,000 offers per term. You are charged per product returned.integer
sortByHow 1688 should order the results before the actor reads them.string
minPriceOptional. Only return offers at or above this yuan price, for example 5.string
maxPriceOptional. Only return offers at or below this yuan price, for example 20.string
requestDelayMs1688 rate-limits hard. Raise this if a run stops early with a BLOCKED row.integer

What you get

A structured dataset — each result includes fields like:

titlepricepriceMinpriceMaxcurrencyminOrderQuantityunitsalesCountratingsupplierNamesupplierProvinceisFactoryimageUrlproductUrlofferId

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

1 ready-to-run use cases

1688 Wholesale Prices - Cheapest First

Search 1688 wholesale listings sorted cheapest first. Get price, title, supplier and link. No account needed.

Related tools in E-commerce & Price Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Alibaba 1688 Supplier Ratings Scraper iconE-commerce & Price Tools

Alibaba 1688 Supplier Ratings Scraper

1688.com supplier ratings: score, five sub-scores, repeat-buyer rate, years on platform, factory or trader, audits. No account. $0.40 per 1,000.

1 use cases

Alibaba.com Scraper iconE-commerce & Price Tools

Alibaba.com Scraper

Get Alibaba.com products with no account: price ranges, MOQ, supplier name, country, verified status and images. $0.85 per 1,000.

Ready to run — no setup

AliExpress Products Scraper iconE-commerce & Price Tools

AliExpress Products Scraper

Scrape AliExpress products by search term: product ID, title, price, discount, rating, order count and image. All prices in one currency. $0.12 per 1,000.

Ready to run — no setup

Taobao Category Products Scraper iconE-commerce & Price Tools

Taobao Category Products Scraper

Scrape Taobao products by category. Get the title, price in CNY, image, product URL, seller and shop ids. No account, no cookies. $1.95 per 1,000 products.

Ready to run — no setup

Amazon Product & Reviews Scraper iconE-commerce & Price Tools

Amazon Product & Reviews Scraper

Scrape Amazon by keyword or ASIN: title, price, rating, review count, brand and availability. 7 marketplaces, no API key. $0.75 per 1,000.

20 use cases

Shopify Products Scraper iconE-commerce & Price Tools

Shopify Products Scraper

Scrape any Shopify store's catalog: titles, prices, variants, SKUs, stock, tags and images. No API key. $1.00 per 1,000 products.

19 use cases

See all E-commerce & Price Tools →

1688 Wholesale Scraper: unit prices, MOQ, the quantity ladder and the supplier behind each offer

Search 1688.com and every offer comes back as a row: offer id, Chinese title, unit price in CNY, minimum order quantity, the quantity price ladder, sales count, repeat-purchase rate, the supplier's name, province, city, years on 1688, whether they are a factory, their rating broken into five scores, and the buyer protections they offer. No account, no cookies, nothing to install.

Two things worth knowing before you run it. Search in Chinese if you can. 手机壳 matches millions of offers where "phone case" matches a few thousand, and both go through unchanged. And the quantity ladder is not on every offer. Plenty of suppliers list one flat price at their MOQ, in which case priceTiers comes back as an empty array and priceMin equals priceMax. The real row below is exactly that case.

InputSearch terms in Chinese or English, or 1688 search URLs
OutputOne row per offer
Ceiling1,000 products per run
Account neededNone, and nothing to install
Price$0.35 per 1,000 products, flat on every plan

📦 What 1688 Wholesale Scraper does

Give it search terms, or paste 1688 search pages and the keyword is read out of each link. Both inputs work in the same run, and the same offer found under two terms is returned once and billed once.

The price ladder is the part most people come for. Where a supplier prices by volume, priceTiers carries each band as {minQuantity, maxQuantity, quantityLabel, price}, so you can see what 500 units costs against 50 without opening anything.

Everything about the supplier rides on the offer row: their winport link, supplierYears on 1688, isFactory worked out from the business type 1688 publishes, and ratingBreakdown split into goods, logistics, consultation, dispute and after-sales rather than one number.

1688 mixes promoted offers into its results. They are not removed, they are labelled: isAd is true on them, so you can drop or keep them as you like.

📥 What you give it

{
  "searchTerms": ["手机壳", "phone case"],
  "maxItems": 40,
  "sortBy": "priceAsc",
  "minPrice": "5",
  "maxPrice": "20"
}
FieldDefaultWhat it is
searchTermsbox starts at 手机壳One term per line. Chinese matches far more inventory than English.
startUrlsnoneOptional. 1688 search pages pasted from the site. The keyword is read out of the link. Works alongside the terms.
maxItems40Hard cap on rows across all terms, 1 to 1,000.
sortByrelevancerelevance is 1688's own ordering. Also priceAsc and priceDesc.
minPrice, maxPricenoneOptional, under Filters. Unit price bounds in yuan, written as text like 5 and 20.
requestDelayMs1500Under Advanced. Milliseconds between requests, minimum 500. 1688 rate-limits hard, so raise this if a run stops early with a BLOCKED row.
proxyConfigurationleave it aloneOptional. Only if you want the run to go out through a particular network of your own.

There is no best-selling sort. 1688 offers one, but it returns a sales count of zero on every row, so it was left out rather than shipped broken.

📤 What you get back

A real row from a recent run:

{
  "offerId": "1050877556974",
  "productId": "1050877556974",
  "title": "新品适用苹果18Duo磁吸手机壳肤感iphone duo折叠防摔保护套批发",
  "productUrl": "https://detail.1688.com/offer/1050877556974.html",
  "price": 11.49,
  "priceMin": 11.49,
  "priceMax": 11.49,
  "currency": "CNY",
  "priceTiers": [],
  "minOrderQuantity": 50,
  "unit": "个",
  "salesCount": 12534,
  "repeatPurchaseRate": "37%",
  "rating": 5,
  "ratingBreakdown": {
    "goods": 5, "logistics": 4.71, "consultation": 3.5, "dispute": 4, "afterSales": 4.67
  },
  "supplierName": "佛山市南海区三丰手机配件有限公司",
  "supplierUrl": "https://m.1688.com/winport/b2b-2850655109d72ea.html?__existtitle__=1",
  "supplierProvince": "广东",
  "supplierCity": "佛山市",
  "supplierYears": 11,
  "supplierId": "b2b-2850655109d72ea",
  "businessType": "生产加工",
  "isFactory": true,
  "buyerProtections": ["材质保障", "7天包换", "48小时发货"],
  "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01NC1wKd1nbye30dTY1_!!2850655109-0-cib.jpg",
  "isAd": true,
  "searchKeyword": "手机壳",
  "page": 1,
  "position": 1,
  "scrapedAt": "2026-09-20T07:01:30.586Z"
}
FieldWhat it is
priceThe unit price at the smallest order 1688 will take, in CNY.
priceTiersThe volume ladder, each band with its quantity range and price. Empty when the supplier prices flat, as above.
priceMin, priceMaxThe ends of the ladder. Equal to price when there is no ladder.
minOrderQuantity, unitThe MOQ and the unit 1688 counts in, like 个 for pieces.
salesCount, repeatPurchaseRateUnits 1688 reports sold, and the share of buyers who came back, as a string like 37%.
rating, ratingBreakdownThe supplier's composite score and its five parts. Both null when 1688 publishes no score.
isFactory, businessTypeWhether the supplier manufactures, from the business type 1688 prints. 生产加工 means they do.
buyerProtectionsThe guarantees on the listing, in Chinese, exactly as printed.
isAdtrue when 1688 placed this offer as a promoted result rather than ranking it.
searchKeyword, page, positionWhich of your terms produced this row, and where it sat.

🧾 Reading the output

RowHow to spot itBilled
An offerIt has an offerIdyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno

There is no charged field on these rows. Filter on offerId being present. One thing to know: the labelled sample row carries a few extra fields that real rows do not, so take a real row as the shape rather than the sample.

CodeWhat it means
NO_RESULTSThat term returned nothing. An English term is the usual reason. Try the Chinese one.
BAD_INPUTA link that is not a 1688 search page, or one this could not read a keyword out of.
SEARCH_FAILEDThat term could not be searched. The others keep going.
BLOCKED1688 was rate-limiting, so the run stopped rather than burning through the rest. Rows already delivered stay. Raise requestDelayMs and run the remaining terms again.

▶️ How to run it

1. Open 1688 Wholesale Scraper and click Try for free. 2. Put your terms into Search terms, one per line, in Chinese where you can. 3. Set Maximum products. Start at 20 to see what the rows look like. 4. Open Filters if you want a unit-price band, and set Sort results by if price order matters more than 1688's relevance ranking. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.35 per 1,000 products. Flat on every Apify plan, with no volume tiers.

One billed row per offer delivered. The sample row is not billed, diagnostic rows are not billed, a term that returns nothing produces no billed rows, and the same offer found under two terms is billed once.

💡 What people use it for

  • Sourcing. Pull 200 offers for a product, sort by price, then read minOrderQuantity and

priceTiers to see what the real cost is at the volume you want.

  • Screening suppliers before contacting any of them, using supplierYears, isFactory,

salesCount and the five-part ratingBreakdown.

  • Building a landed-cost model, since priceTiers gives you the whole ladder rather than one

headline figure.

  • Mapping where a product category is made, by grouping on supplierProvince and supplierCity.
  • Watching a term over time and diffing on offerId to see who is new.

🚧 What it does not do

  • No product-page detail. No description, no full image gallery, no specs, no stock. The offer

link is in every row if you need to open one.

  • No reviews. The reviews scraper below covers those, and takes the offerId from here.
  • priceTiers is often empty. Many suppliers publish one flat price at the MOQ. That is their

listing, not a gap here.

  • 1,000 rows per run, and 1688 stops paginating a term well before its full inventory is

reachable. Split a broad term into narrower ones.

  • No best-selling sort, because 1688's own returns zero sales on every row.
  • Promoted offers are in the results. They are labelled with isAd, not removed.
  • Nothing is translated. Titles, business type, buyer protections and units all stay in Chinese.
  • CNY only. No currency conversion.
  • A big run can come back short. 1688 rate-limits hard, and a refusal becomes an uncharged

diagnostic row rather than a gap passed off as complete. Only delivered offer rows are billed.

🧭 Which 1688 scraper do you need?

If you wantUse
Offers, prices, MOQ and the quantity ladderThis one
Buyer reviews for a product you can link1688 Reviews Scraper
A supplier's ratings and trade credentials1688 Supplier Ratings Scraper
Export suppliers and MOQ on Alibaba.comAlibaba.com Scraper
Retail products on Taobao insteadTaobao Category Products Scraper

❓ Questions people ask

Do I have to search in Chinese? No, but you will get far more. English terms work and return a much smaller slice of 1688's inventory.

Why is priceTiers empty? Because that supplier publishes one price at their minimum order. priceMin and priceMax will equal price when that happens.

Why is a promoted offer in my results? Because 1688 placed it there. isAd marks it so you can filter it out.

Can I get more than 1,000 rows? Not in one run. Run again with narrower terms, or a price band, to reach different offers.

My run stopped with BLOCKED. 1688 was rate-limiting. Raise Delay between requests under Advanced and run the remaining terms again. What was already delivered stays in the dataset.

Can I schedule it? Yes. offerId is stable, so diffing runs shows new suppliers and price moves.

Is this legal? These are public wholesale listings with no account behind them. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the search term or the URL you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.