1688 Products

Find factory suppliers and wholesale prices for a product idea, compare them with your retail price, or watch a supplier's offers. Type a keyword in Chinese or English, or paste 1688 offer links or ids, and get wholesale products from 1688.com as one JSON row per product: price tiers by quantity, minimum order, units sold, repurchase rate, supplier and factory data.

Sample output

One row as the API returns it. Long text is shortened here; names inside text read [name].

Show the sample as
Download
Sample row, one field per line
FieldValue
rowTypeproduct
platform1688
offerId866095761513
urlhttps://detail.1688.com/offer/866095761513.html
title数据线保护套硅胶防折断充电线保护套咬线器防断裂神器
keyword数据线
rank2
isAdfalse
currencyCNY
priceMin2.5
priceMax2.6
priceTiers[{"minQty":3,"maxQty":4999,"price":2.6},{"minQty":5000,"maxQty":99999,"price":2.55}]

Call it from code or from your agent

This is the request. Small runs answer in the same call; large ones return a run ID.

TerminalOpens at launch
curl -X POST https://scrapers-api.arcadiumdata.io/v1/scrapers/1688-products/runs \
  -H "Authorization: Bearer $ARCADIUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "keywords": [
        "保温杯"
      ],
      "maxItemsPerKeyword": 50,
      "sort": "relevance"
    }
  }'
$1.5011,000 products: $1.50, plus the run start fee of $0.001. A failed or empty run costs $0.

What each row holds

Every row says what it is in rowType: product rows are charged, coverage and error rows are free.

The product 30 fields

The product
FieldTypeWhat it holds
platformstringAlways '1688'.
offerIdstring1688 offer id, the number in the product link. Stable key for joins and monitoring.
urlstringProduct page link on detail.1688.com.
titlestringProduct title as the seller wrote it, usually Chinese; contact data removed.
keywordstringSearch keyword that found the offer; null for offers requested by id or link.
ranknumberPosition in the keyword's results, paid placements included; null for id lookups.
isAdbooleanTrue when the row is a paid placement in the search results.
imagesProduct image links.
currencystringCurrency of all prices, always CNY (Chinese yuan).
priceMinnumberLowest unit price in CNY.
priceMaxnumberHighest unit price in CNY.
priceTiersarrayWholesale steps by quantity: {minQty, maxQty, price}. Empty when each variant is priced on its own.
moqnumberMinimum order quantity.
unitstringSelling unit, e.g. 件 or 个.
soldCountnumberUnits sold; a lower bound on search rows, the exact total with details.
soldTextstringSold figure as 1688 shows it, e.g. '已售500+件'.
soldScopestring'offer' for this listing, 'network' for the whole product across the web.
bookedCountNumber of orders shown on the search card.
repurchaseRatenumberShare of buyers who reordered this offer, 0-100.
originobjectDispatch location: province and city.
serviceTagsService badges, e.g. 深度验厂 (inspected factory) or 退货包运费.
supplierobjectSupplier facts: companyName, memberId, isFactory, isSuperFactory, factoryInspected, yearsOnPlatform, serviceScores, repurchaseRate3m, shopUrl.
skusDetails only: variants as {skuId, attrs, price, stock, sold}.
attributesDetails only: product parameters as {name, value}, e.g. material or brand.
freightDetails only: dispatch promise text, shipsFrom, free flag and an indicative fee in CNY.
ratingDetails only: buyer review score, goodRatePct and reviewCount.
videoUrlDetails only: main product video link.
categoryCategory id; the name is added with details.
hasDetailsbooleanTrue when the row carries the detail page fields (skus, attributes, freight, rating).
scrapedAtISO time the row was collected.
Coverage rows, free 5 fields
Coverage rows, free
FieldTypeWhat it holds
statedCoverage rows: total results 1688 reports for the keyword.
deliveredCoverage rows: how many products were delivered for the keyword.
stopReasonCoverage rows: why the search stopped: limit, end, cap, filter, budget or error.
shortfallCoverage rows: true when the result may be incomplete: fewer delivered than reported with no cap or filter to explain it, or an error. shortfallReason says which.
shortfallReasonCoverage rows: why shortfall is true. below_stated (fewer rows than the site states, no maximum or filter), error (ended by a failure). Null when shortfall is false.
Error rows, free 3 fields
Error rows, free
FieldTypeWhat it holds
inputCoverage and error rows: the keyword or offer the row is about.
codeError rows: invalid_input, not_found, no_match, blocked or unavailable.
messageError rows: what went wrong, in plain words.

What it can't do

  • It does not return seller contact details such as names, emails or phone numbers.
  • Prices are what the site shows at run time, in the currency the site shows.
  • It reads only what the site shows to a visitor without an account.

What you send

Every field is optional. The example request above fills the ones shown here.

Main input fields
FieldTypeWhat it does
keywordsarrayWords to search 1688.com for, Chinese or English, for example ["保温杯", "water bottle"]. Each keyword is searched on its own and every product keeps the keyword and its position in the results. Leave empty when you give offer ids or links. Also read from queries.
maxItemsPerKeywordintegerHow many products to return per keyword, for example 120. Default: 60. A results page holds 60 products and 1688 shows at most 2,000 per search, so 2,000 is the ceiling. Also read from maxResults or maxProducts (other 1688 actors' names).
sortstring (one of 4)Order of the results: best match (default), most sold in the last 30 days, or price. Example: priceAsc. Also read from sortBy (bestSelling = sales) or sortType (va_rmdarkgmv30 = sales).
includeDetailsbooleanOpens the product page of every keyword result and adds SKUs with stock, attributes, freight, ratings and the exact sold count. Costs more per product (the Product with details price) and runs slower. Offer ids and links always return details. Default: false. Also read from includeSkuDetails or enrichDetails.
More options (8)
More input fields
FieldTypeWhat it does
minPricenumberOnly products priced at or above this amount in Chinese yuan, for example 10. Leave empty for no lower limit. Also read from priceMin.
maxPricenumberOnly products priced at or below this amount in Chinese yuan, for example 50. Leave empty for no upper limit. Also read from priceMax.
offerIdsarray1688 offer ids (the number in the product link), for example ["866095761513"]. Each one returns a full product with details.
urlsarray1688 product page links, for example https://detail.1688.com/offer/866095761513.html. The offer id is read from the link; mobile links work too.
includeAdsbooleanSponsored products are part of the search results. Each row has an isAd flag; turn this off to drop them (they still count towards the position). Example: true.Default true
includeCoverageRowsbooleanAdds one free row per keyword with the total 1688 reports, how many products were delivered and why the search stopped, so incomplete results are visible.Default true
includeErrorRowsbooleanAdds a free row to the dataset for every keyword or offer that returned nothing or could not be read, with a machine-readable code, so a failure is never silent.Default true
searchGateWaitMinutesinteger1688 sometimes refuses all searches for a few minutes. The run then waits up to this many minutes, trying again every 3 minutes, before the remaining keywords end as free error rows. 0 = do not wait.Default 12

Questions people ask before they top up

What does a run cost?

Each product costs $0.0015, which is $1.50 per 1,000. A run that delivers rows also pays a $0.001 start fee.

Products with details: $3.50 per 1,000.

A run that returns rows costs at least $0.005, start fee included. Failed runs, empty runs and duplicate rows cost $0. You set the most a run may cost, and it stops there.

Do you ever return personal data?

Not about reviewers or users. Reviewer names, profile links, photos, emails and phone numbers are not collected. When a name appears inside a review or a reply, it is replaced with [name].

Job titles and company sizes stay where a site shows them, because they describe a role rather than a person. On YouTube, channel names and URLs are the publisher labels YouTube shows publicly.

How fresh is the data?

Each run reads the live site when you start it, so rows are as current as the site itself.

More from E-commerce sourcing

  • Price, discount, units sold, rating, ships from, search rank

    $1.25per 1,000 products

  • Price, sale price, favorites, tags, materials, shipping

    $3.50per 1,000 listings