# Alibaba Scraper | Products, Supplier Companies and Prices (`silentflow/alibaba-scraper`) Actor

Alibaba scraper that turns keyword search into structured supplier data: price range, MOQ, certifications, dispatch time, review scores, and verified or gold supplier badges. No Alibaba account required. Export sourcing and procurement leads to JSON, CSV, or Excel for spreadsheets and pipelines.

- **URL**: https://apify.com/silentflow/alibaba-scraper.md
- **Developed by:** [SilentFlow](https://apify.com/silentflow) (community)
- **Categories:** Other, E-commerce, Lead generation
- **Features:** Limited permissions
- **Stats:** 7 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.93 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Alibaba Scraper

**Turn any Alibaba.com search into a supplier shortlist: price range and quantity tiers, promotion price, MOQ, units sold, Alibaba Guaranteed and easy return flags, certifications, supplier badges and ratings on every row, ready to sort.** 100 products in under 20 seconds, no Alibaba account needed.

### How it works

![How it works](https://api.apify.com/v2/key-value-stores/YXm81xySHg6uRkewS/records/alibaba-scraper-how-it-works-v1.png)

1. **You type keywords, as in Alibaba's search bar, or paste Alibaba pages.** `wireless earbuds`, `led strip lights`, `yoga mat`, or a product or search address copied from your browser; a search page pasted at page 3 starts at page 3. Add a price range, a MOQ floor or ceiling, supplier countries or a verified or Verified Pro supplier filter if you already know how you source.
2. **One row comes back per product.** Identity, USD price range and price by quantity band, promotion price, discount and end date, MOQ and unit, units sold, dispatch days, delivery date, Alibaba Guaranteed and easy return flags, badges and selling points, certifications, sponsored flag, review and service scores and what buyers say of the supplier, supplier name, country, years, gold, verified and Verified Pro badges, response rate, orders of the last six months, export markets, images, the keyword and the rank. Ready for a spreadsheet, a database or an AI pipeline.

### ✨ Why teams choose this over other Alibaba scrapers

Comparing suppliers by opening forty product cards one at a time? Running a scraper that hands back the price range as one text string you cannot sort? Paying a deposit to a supplier whose response rate you never saw?

- 📈 **Units sold, to spot proven products.** `ordersCount` is the "sold" figure Alibaba shows under the price: on 55 of the 100 rows of the default run, 15 of 20 for `samsung galaxy`. Sort on it to rank a keyword's offers by demand.
- 📊 **53 fields from the listing alone, 43 filled on an average row.** Price tiers by quantity, promotion prices, certifications, badges, dispatch days, response rate, orders of the last six months, export markets, main products and the sponsored flag are all there without a second run.
- 🛡️ **Alibaba Guaranteed and easy return, checked for you.** Each row says whether the listing is Alibaba Guaranteed (delivery by the date shown, money back for order issues) and whether it offers easy return. On the 100 rows of the default run: 6 guaranteed, 21 with easy return, every row answered.
- 🏷️ **Promotions you can track.** A listing on sale carries its `promotionPrice`, the promotional price of each quantity band, its `discountPercent` and the date the promotion ends, next to the list price. Badges (`SALE`, `Ready to Ship`), selling points (`Delivery by 10 Dec`, `7-day dispatch`) and what buyers say of the supplier (`arrived on time`, 70 reviews) come on the same row.
- 🔢 **Numbers you can sort.** `priceMin` and `priceMax` are numbers in US dollars with the currency in its own field, `moq` is an integer with the unit beside it, scores and rates are decimals. No `"300 pieces"` or `"98.6%"` strings to clean before a pivot table.
- 🔍 **Filters Alibaba applies itself.** Price range, MOQ floor and ceiling, supplier countries, verified and Verified Pro suppliers narrow Alibaba's own search, so every page read holds matching products only. LED strips under 5 dollars, MOQ 10 or less, from verified suppliers: 60 rows from two pages in 9 seconds. A MOQ floor of 500 keeps the factories that work in bulk.
- 🌍 **Source beyond China.** List the supplier countries you want, as codes or names (`IN`, `Vietnam`, `Türkiye`). For wireless earbuds, India and Vietnam give 122 products where the whole search gives over 20,000: you get those 122, not thousands of rows to sift.
- 📢 **Ads flagged, ranking kept.** Every row says whether it was a paid placement and at which position and page it appeared, so you can separate organic ranking from sponsored listings when you study a market.
- 🏭 **The supplier on the same row.** Name, id, profile URL, country, years on Alibaba, gold, verified and Verified Pro badges, main products, export markets, response rate, orders of the last six months and logo, next to the product. A **Suppliers** view of the dataset shows those columns alone.
- 📄 **Lead times and reorder rate when you want them.** Turn on the product page option to add the production lead times, product attributes, weight and size, and the supplier's reorder rate, on-time delivery rate, staff count and trade assurance amount.
- 🔗 **Keywords or pasted pages, in one run.** Paste a product page and get one full row with its price tiers, lead times, attributes and supplier figures; paste a search page and it is read like its keyword, from the page it shows, so a search pasted at page 3 skips the two pages you already have. The two most used Alibaba scrapers on the Store take keywords only.
- 🔓 **No account, no login, no API key.** Type a keyword and run. The scraper reads what any visitor of Alibaba.com sees.

### 🎯 What you can do with Alibaba data

| Team | What they build |
|---|---|
| Sourcing | Shortlist every supplier of a product under a target unit cost and MOQ, ranked by response rate and years on Alibaba, before contacting any of them |
| Amazon FBA and Shopify sellers | Compare the price range, MOQ and dispatch time of a product idea across 200 offers in one run and pick three suppliers to sample |
| Procurement | Screen a category for CE, FCC, RoHS or UKCA certified products from verified suppliers and keep the list current every month |
| Pricing | Track the USD price range and discounts of competing wholesale offers every week and alert when a supplier undercuts the market |
| Product research | Rank the offers of a product idea by units sold to see which ones already move, then compare their price tiers |
| Market research | Map a category by supplier country, units sold, MOQ band and price band across several keywords |
| Lead generation | Build a list of verified manufacturers with their main products, export markets and profile URLs for outreach |
| Data and AI | Feed product rows with attributes and price tiers into an LLM to write landed-cost estimates or supplier comparison memos |

### 📥 Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `keywords` | array | `["wireless earbuds", "led strip lights"]` | What to search, one keyword per line, as you would type it on Alibaba. 48 products per page, in the order buyers see them. |
| `startUrls` | array | | Alibaba.com pages pasted from your browser. A product page (`/product-detail/..._1601721674813.html`) gives one full row with price tiers, lead times, attributes and supplier figures. A search page (`/trade/search?SearchText=yoga+mat`, `/premium/yoga-mat.html`, `/showroom/yoga-mat.html`) is read like its keyword, from the page it shows: `/premium/yoga-mat/3.html` or `&page=3` starts at results page 3. Pasted products are delivered whatever the filters. |
| `maxItems` | integer | `100` | How many rows to save for the whole run, all keywords together. |

**🔍 Filters**

| Field | Type | Default | Description |
|---|---|---|---|
| `minPrice` | number | | Lowest starting price you accept, in US dollars. |
| `maxPrice` | number | | Highest starting price you accept, in US dollars. |
| `minMoq` | integer | | Smallest minimum order quantity you accept. `500` keeps the factories that sell in bulk. |
| `maxMoq` | integer | | Largest minimum order quantity you accept. `10` keeps suppliers open to sample-size orders. |
| `supplierCountries` | array | | Keep only suppliers based in these countries: two-letter codes, three-letter codes or English names (`IN`, `VNM`, `Türkiye`). |
| `supplierVerification` | string | `any` | `verified` keeps the suppliers holding the Verified Supplier badge, about half of the listings. `verifiedPro` keeps Verified Pro suppliers only, Alibaba's top verification tier: 426 of the over 20,000 wireless earbuds offers pass. |

**📄 Output**

| Field | Type | Default | Description |
|---|---|---|---|
| `includeDetails` | boolean | `false` | Read each product's page for attributes, category path, lead times, weight and size, and the supplier's reorder rate and operating figures. About one second per product. |

Alibaba applies the filters to its own search, and every row is checked against them again; a product without the filtered value is left out. A keyword stops at its last page, or after five pages in a row that the filters emptied. Pasted pages are read first, then the keywords; a product met twice is saved once.

Runs started through the API can also send `startPage` (integer) to start every keyword at that results page, and the former `verifiedSupplierOnly` and `verifiedProSupplierOnly` checkboxes still work in saved tasks and schedules.

### 📊 Output data

One row per product. A row from the listing, the default, from the `wireless earbuds` run of 6 Nov 2026 (export markets and images shortened):

```json
{
  "id": "1601912774857",
  "url": "https://www.alibaba.com/product-detail/Q10-ANC-42db-Large-Dynamic-13mm_1601912774857.html",
  "title": "Q10 ANC 42db Large Dynamic 13mm In Ear Earphones Short Handle Design Wireless Tws Earbuds Noise Cancelling With 4 HD Microphones",
  "categoryId": "202055012",
  "categoryPath": null,
  "attributes": null,
  "certifications": ["DECLARATION OF CONFORMITY", "FCC"],
  "badges": ["SALE", "Ready to Ship", "Alibaba Guaranteed"],
  "sellingPoints": ["Delivery by 10 Dec", "Easy Return", "7-day dispatch"],
  "isSponsored": true,
  "isTradeAssurance": true,
  "isAlibabaGuaranteed": true,
  "hasEasyReturn": true,
  "isCustomizable": null,
  "tradeTerms": null,
  "priceMin": 7.59,
  "priceMax": 8.59,
  "promotionPrice": 6.76,
  "promotionPriceMax": 7.65,
  "discountPercent": 11,
  "promotionEndsAt": "2027-01-01T07:59:59Z",
  "currency": "USD",
  "unit": "piece",
  "moq": 2,
  "priceTiers": [
    {"minQuantity": 2, "maxQuantity": 99, "price": 8.59, "promotionPrice": 7.65},
    {"minQuantity": 100, "maxQuantity": 4999, "price": 8.39, "promotionPrice": 7.47},
    {"minQuantity": 5000, "maxQuantity": 49999, "price": 8.19, "promotionPrice": 7.29},
    {"minQuantity": 50000, "maxQuantity": null, "price": 7.59, "promotionPrice": 6.76}
  ],
  "ordersCount": 141,
  "dispatchDays": 7,
  "deliveryEstimate": "Delivery by 10 Dec",
  "leadTimes": null,
  "unitWeightKg": null,
  "unitSize": null,
  "reviewScore": 4.5,
  "reviewCount": 108,
  "reviewHighlights": [
    {"text": "arrived on time", "count": 70},
    {"text": "good service", "count": 62}
  ],
  "productScore": 4.3,
  "shippingScore": 4.6,
  "supplierServiceScore": 4.5,
  "transactionLevel": null,
  "responseRate": 86.1,
  "supplierId": "231401697",
  "supplierName": "Shenzhen Yuzhuo Technology Co., Ltd.",
  "supplierUrl": "https://szyz.en.alibaba.com/company_profile.html",
  "supplierCountry": "China",
  "supplierCountryCode": "CN",
  "supplierYears": 13,
  "isGoldSupplier": true,
  "isVerifiedSupplier": true,
  "isVerifiedProSupplier": false,
  "supplierMainProducts": ["Bluetooth Headphone", "Bluetooth Speaker", "Wireless Charger", "Portable Fan"],
  "exportMarkets": ["Argentina", "Austria", "Australia", "Belgium", "Canada", "Chile", "Colombia", "Czech Republic"],
  "supplierLogo": "https://sc02.alicdn.com/kf/HTB1EffDX5HrK1Rjy0Flq6AsaFXaO.jpg",
  "businessType": null,
  "employees": null,
  "onTimeDeliveryRate": null,
  "responseTime": null,
  "ordersLast6Months": 384,
  "reorderRate": null,
  "tradeAssuranceAmountUsd": null,
  "storeRating": null,
  "storeReviewCount": null,
  "shipsFrom": null,
  "imageUrl": "https://s.alicdn.com/@sc04/kf/Hca2f9afe30aa418c9fb1eb9a6dee0ac8x.jpg",
  "images": ["https://s.alicdn.com/@sc04/kf/Hca2f9afe30aa418c9fb1eb9a6dee0ac8x.jpg", "https://s.alicdn.com/@sc04/kf/H3b0ba40d38f6468ab03849e67ef756197.jpg"],
  "hasVideo": true,
  "keyword": "wireless earbuds",
  "rank": 2,
  "page": 1,
  "scrapedAt": "2026-11-06T14:19:43Z"
}
```

With `includeDetails` on, the listing fields stay and the product page fields fill in. Here for a wireless charger:

```json
{
  "categoryPath": ["Consumer Electronics", "Chargers, Batteries & Power Supplies", "Chargers & Adapters"],
  "attributes": {
    "function": "Qi, QC2.0, QC4.0",
    "material": "PC Fireproof Material, ABS",
    "output power": "15 W, 5 W, 10 W",
    "place of origin": "Guangdong, China",
    "model number": "A07"
  },
  "isCustomizable": true,
  "tradeTerms": "FOB",
  "priceTiers": [
    {"minQuantity": 200, "maxQuantity": 999, "price": 10.2},
    {"minQuantity": 1000, "maxQuantity": 2999, "price": 9.94},
    {"minQuantity": 3000, "maxQuantity": 4999, "price": 9.68},
    {"minQuantity": 5000, "maxQuantity": null, "price": 9.53}
  ],
  "leadTimes": [
    {"minQuantity": 1, "maxQuantity": 100, "days": 7},
    {"minQuantity": 101, "maxQuantity": 1000, "days": 25},
    {"minQuantity": 1001, "maxQuantity": 3000, "days": 31}
  ],
  "unitWeightKg": 0.2,
  "unitSize": "15X10X10",
  "businessType": "Manufacturer,Trading Company",
  "employees": "201-300",
  "onTimeDeliveryRate": 93.8,
  "responseTime": "≤3h",
  "ordersLast6Months": 94,
  "reorderRate": 21,
  "tradeAssuranceAmountUsd": 137000,
  "storeRating": 4.7,
  "storeReviewCount": 27,
  "shipsFrom": "CN"
}
```

Facts worth knowing before you build on the output:

- `id` and `url` are permanent. The address opens the product page on Alibaba.com.
- `priceMin` and `priceMax` are the USD range the listing shows, the price of the largest and smallest quantity bands. `priceTiers` gives each band.
- `moq` is the minimum order in `unit` (piece, meter, pair, set...). `dispatchDays` is the fastest production time the listing promises. `deliveryEstimate` is the delivery date Alibaba commits to (`"Delivery by 10 Dec"`), shown on some listings only.
- `ordersCount` is the number of units sold that the listing shows, `null` when it shows none. `ordersLast6Months` is the supplier's order count over the last six months.
- `promotionPrice` and `promotionPriceMax` are the promotional USD range, `discountPercent` the discount and `promotionEndsAt` the end of the promotion, all set only while a promotion runs; each `priceTiers` band then carries its own `promotionPrice`. `isSponsored` is true for paid placements; `rank` and `page` are the position in the keyword listing, ads included, counted from the first results page.
- `isAlibabaGuaranteed` is true when the listing is in Alibaba's Guaranteed program: delivery by the date shown, money back for order issues. A listing without a delivery date is never guaranteed; for one with a delivery date, the scraper checks the product's own Alibaba page. Both fields are `null` when they could not be checked: that page could not be read, or the product comes from the keyword pages that carry on past the search's last page, which show neither. `hasEasyReturn` is true when the listing offers easy return.
- `badges` are the badges on the listing picture (`SALE`, `Ready to Ship`, `New arrival`, `Alibaba Guaranteed`), `sellingPoints` the perks written under the price (`Easy Return`, `Delivery by 10 Dec`, `7-day dispatch`, a leaderboard rank). Both are `null` when the listing shows none.
- `reviewScore` and `reviewCount` are the supplier's store rating and review count; `reviewHighlights` are what buyers say most often in those reviews, with how many reviews say it; `productScore`, `shippingScore` and `supplierServiceScore` are its three sub-scores out of 5. `responseRate` and `reorderRate` are percentages. `transactionLevel` is filled when the listing shows it.
- `exportMarkets` and `certifications` are `null` when the listing shows none. A field the source does not give is `null`, never an empty string.
- Image URLs point to Alibaba's image CDN and stay valid for months. `hasVideo` says whether the listing carries a product video.
- Dates are RFC 3339 in UTC.

### 🗂️ Data fields

68 fields per product: 53 from the listing, 15 more with `includeDetails` (marked \*).

| Group | Fields |
|---|---|
| Identity | `id`, `url`, `title` |
| Content | `categoryId`, `categoryPath`*, `attributes`* (name to value), `certifications`, `badges`, `sellingPoints`, `isSponsored`, `isTradeAssurance`, `isAlibabaGuaranteed`, `hasEasyReturn`, `isCustomizable`*, `tradeTerms`* |
| Measures | `priceMin`, `priceMax`, `promotionPrice`, `promotionPriceMax`, `discountPercent`, `promotionEndsAt`, `currency`, `unit`, `moq`, `priceTiers` (minQuantity, maxQuantity, price, promotionPrice), `ordersCount`, `dispatchDays`, `deliveryEstimate`, `leadTimes`\* (minQuantity, maxQuantity, days), `unitWeightKg`*, `unitSize`*, `reviewScore`, `reviewCount`, `reviewHighlights` (text, count), `productScore`, `shippingScore`, `supplierServiceScore`, `transactionLevel`, `responseRate` |
| Supplier | `supplierId`, `supplierName`, `supplierUrl`, `supplierCountry`, `supplierCountryCode`, `supplierYears`, `isGoldSupplier`, `isVerifiedSupplier`, `isVerifiedProSupplier`, `supplierMainProducts`, `exportMarkets`, `supplierLogo`, `businessType`*, `employees`*, `onTimeDeliveryRate`*, `responseTime`, `ordersLast6Months`, `reorderRate`*, `tradeAssuranceAmountUsd`*, `storeRating`*, `storeReviewCount`\* |
| Place | `shipsFrom`\* (country code) |
| Media | `imageUrl`, `images`, `hasVideo` |
| Meta | `keyword`, `rank`, `page`, `scrapedAt` |

The dataset has three views: **Products** (title, price range, MOQ, units sold, supplier, country, rating, URL), **Suppliers** (name, country, years, verified, Verified Pro, gold, rating, reviews, response rate, orders of the last six months, profile URL) and **Deals and guarantees** (price, promotion price, discount and its end, Alibaba Guaranteed, easy return, delivery date, badges, URL).

### 🚀 Examples

#### Get the first 100 wireless earbuds offers

```json
{
  "keywords": ["wireless earbuds"]
}
```

#### Find suppliers open to sample-size orders

```json
{
  "keywords": ["phone case", "yoga mat"],
  "maxMoq": 10,
  "maxItems": 60
}
```

#### Shortlist verified LED suppliers under 5 dollars a meter

```json
{
  "keywords": ["led strip lights"],
  "maxPrice": 5,
  "supplierVerification": "verified",
  "maxItems": 60
}
```

#### Find the factories that sell in bulk

```json
{
  "keywords": ["wireless earbuds"],
  "minMoq": 500,
  "maxItems": 100
}
```

#### Carry on from results page 3

```json
{
  "startUrls": [{"url": "https://www.alibaba.com/premium/wireless-earbuds/3.html"}],
  "maxItems": 96
}
```

#### Read lead times and reorder rates for a product idea

```json
{
  "keywords": ["power bank"],
  "includeDetails": true,
  "maxItems": 20
}
```

#### Source from India and Vietnam

```json
{
  "keywords": ["cotton t-shirt", "wireless earbuds"],
  "supplierCountries": ["IN", "VN"],
  "maxItems": 200
}
```

#### Shortlist Verified Pro suppliers only

```json
{
  "keywords": ["led strip lights"],
  "supplierVerification": "verifiedPro",
  "maxItems": 50
}
```

#### Screen a price band from verified suppliers only

```json
{
  "keywords": ["usb cable", "phone charger"],
  "minPrice": 1,
  "maxPrice": 3,
  "supplierVerification": "verified",
  "maxItems": 100
}
```

### 🤖 Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it full context about this scraper:

```
You have access to the Alibaba Scraper on Apify: silentflow/alibaba-scraper

Input schema:
- keywords (array of strings): search keywords, 48 products per page in Alibaba's ranking order
- startUrls (array): Alibaba.com product or search pages; a search page starts at the results page it shows
- maxItems (integer, default 100): cap on rows for the whole run, keywords read in order
- startPage (integer, API only): results page every keyword starts at
- minPrice, maxPrice (numbers, USD): bounds on the product's starting price
- minMoq, maxMoq (integers): smallest and largest minimum order quantity accepted
- supplierCountries (array of strings): supplier countries as codes or English names, e.g. ["IN", "VN"]
- supplierVerification ("any", "verified" or "verifiedPro", default "any"): keep Verified or Verified Pro suppliers only
- includeDetails (boolean, default false): read each product page for attributes, lead times, reorder rate and supplier operating figures

Output per product (53 fields from the listing, 15 more with includeDetails, null when unknown):
- id (string), url (string), title (string)
- categoryId (string), categoryPath (string[]), attributes (object), certifications, badges, sellingPoints (string[]), isSponsored, isTradeAssurance, isAlibabaGuaranteed, hasEasyReturn, isCustomizable (booleans), tradeTerms (string)
- priceMin, priceMax, promotionPrice, promotionPriceMax (numbers in USD), discountPercent (integer), promotionEndsAt (RFC 3339), currency ("USD"), unit (string), moq (integer), priceTiers ([{minQuantity, maxQuantity, price, promotionPrice}]), ordersCount (integer, units sold), dispatchDays (integer), deliveryEstimate (string), leadTimes ([{minQuantity, maxQuantity, days}]), unitWeightKg (number), unitSize (string)
- reviewScore, productScore, shippingScore, supplierServiceScore, transactionLevel, responseRate (numbers), reviewCount (integer), reviewHighlights ([{text, count}])
- supplierId, supplierName, supplierUrl, supplierCountry, supplierCountryCode (strings), supplierYears (integer), isGoldSupplier, isVerifiedSupplier, isVerifiedProSupplier (booleans), supplierMainProducts, exportMarkets (string[]), supplierLogo (string), businessType, employees, responseTime (strings), onTimeDeliveryRate, reorderRate, tradeAssuranceAmountUsd, storeRating (numbers), ordersLast6Months, storeReviewCount (integers)
- shipsFrom (country code), imageUrl (string), images (string[]), hasVideo (boolean)
- keyword (string), rank (integer), page (integer), scrapedAt (RFC 3339)

No login or account needed. Use apify-client for Python or JavaScript.
```

### 💻 Integrations

#### Build a supplier shortlist ranked by reliability

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("silentflow/alibaba-scraper").call(run_input={
    "keywords": ["wireless earbuds", "bluetooth earbuds"],
    "maxPrice": 8,
    "maxMoq": 50,
    "maxItems": 120,
})
rows = client.dataset(run["defaultDatasetId"]).list_items().items

shortlist = [
    r for r in rows
    if r["isVerifiedSupplier"]
    and (r["responseRate"] or 0) >= 95
    and (r["supplierYears"] or 0) >= 3
    and not r["isSponsored"]
]
shortlist.sort(key=lambda r: (-(r["ordersCount"] or 0), r["priceMin"]))
for r in shortlist:
    print(f'{r["ordersCount"] or 0:>6} sold  ${r["priceMin"]:>6.2f}  MOQ {r["moq"]:>5} {r["unit"]:<6} {r["supplierName"][:36]:<36} {r["supplierYears"]} yrs  {r["responseRate"]}%')
```

#### Alert when a competing offer undercuts your cost price

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const myCostPrice = 4.2;

const run = await client.actor('silentflow/alibaba-scraper').call({
  keywords: ['led strip lights 5050'],
  supplierVerification: 'verified',
  maxItems: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

const cheaper = items.filter((p) => p.priceMin < myCostPrice * 0.9 && p.moq <= 100);
for (const p of cheaper) {
  console.log(`${p.priceMin} USD/${p.unit} at MOQ ${p.moq}: ${p.supplierName} (${p.supplierYears} yrs, ${p.responseRate}% response) ${p.url}`);
}
```

#### Export certified products to CSV for procurement

```python
import csv
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("silentflow/alibaba-scraper").call(run_input={
    "keywords": ["power bank", "wireless charger"],
    "maxItems": 200,
})
rows = client.dataset(run["defaultDatasetId"]).list_items().items

with open("alibaba-certified.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["keyword", "rank", "title", "priceMin", "priceMax", "moq", "unit", "certifications", "supplier", "country", "url"])
    for r in rows:
        certs = r["certifications"] or []
        if any(c in certs for c in ("CE", "FCC", "ROHS", "UKCA")):
            writer.writerow([r["keyword"], r["rank"], r["title"], r["priceMin"], r["priceMax"], r["moq"], r["unit"], "|".join(certs), r["supplierName"], r["supplierCountryCode"], r["url"]])
```

### 📈 Performance

| Run | Rows | Time |
|---|---|---|
| Two keywords, listing only (the default input) | 100 | 13 to 18 s |
| One keyword under 5 dollars, MOQ 10 or less, verified suppliers (two pages) | 60 | 9 s |
| One keyword from page 3, MOQ 500 or more (two pages) | 60 | 6 s |
| One keyword, nine pages, listing only | 400 | 51 s |

A page of 48 products costs one read. A listing that shows a delivery date costs one more, to check its Alibaba Guaranteed badge on the product's own page: about one listing in five, read eight at a time. A product page costs one more, read four at a time. Rows are saved page by page, so a run you stop early keeps what it has read.

### 💾 Data export

Results are available on the run's dataset page as JSON, CSV, Excel, XML, RSS and HTML table. The **Products** view shows title, price range, MOQ, units sold, supplier, country, rating and URL; the **Suppliers** view shows the supplier columns; the **Deals and guarantees** view shows the promotion, Guaranteed, easy return and delivery columns.

Pull them programmatically:

```
https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv&token=YOUR_TOKEN
```

### 💡 Tips for best results

1. **Search in English, the way buyers do.** `wireless earbuds` returns the listing an English-speaking buyer sees. Chinese keywords are accepted too, but English ones match the largest catalogue.
2. **Put the keyword that matters most first.** Keywords are read one after the other until `maxItems` rows are saved, and a common keyword alone runs to thousands of products. Raise `maxItems` or add a filter to reach the next keywords.
3. **Filter in the run, not after it.** Price, MOQ floor and ceiling, supplier countries and verification narrow Alibaba's own search, so a tight filter costs no extra pages and every row you get already matches.
4. **Leave `includeDetails` off for price lists, on for negotiations.** The listing already carries the price range and tiers, MOQ, units sold, supplier badges and scores. Turn the product page on when you need the lead times, the reorder rate or the supplier's on-time delivery rate.
5. **Rank by `ordersCount`, `responseRate` and `supplierYears`, not by price alone.** A product with thousands of units sold from a supplier answering 98 percent of enquiries is a safer first order than the cheapest row. Drop `isSponsored` rows if you want the organic order.

### ❓ FAQ

**What does this scraper extract?**
Products from Alibaba.com keyword listings: title, USD price range and price tiers, promotion price, discount and its end date, MOQ and unit, units sold, dispatch days, delivery date, Alibaba Guaranteed and easy return flags, badges and selling points, certifications, sponsored flag, review and service scores and what buyers say, and the supplier with its badges, years, response rate, orders of the last six months, main products and export markets. Product pages add attributes, lead times, weight and size, and the supplier's reorder rate and operating figures.

**Do I need an Alibaba account?**
No. The scraper reads what any visitor of Alibaba.com sees. No login, no account, no API key.

**How many products does a keyword return?**
48 per page, in the order Alibaba ranks them for a buyer. Past the search's last page, around a thousand products, the run carries on with Alibaba's keyword pages. `maxItems` caps the run; a keyword stops at its last page or after five pages in a row that the filters emptied.

**Are prices in US dollars?**
Yes. `priceMin` and `priceMax` are the USD range shown in the listing, with `currency` set to `USD`, and `priceTiers` the price of each quantity band.

**Can I filter by price, MOQ or supplier level?**
Yes, in the run itself: `minPrice`, `maxPrice`, `minMoq`, `maxMoq`, `supplierCountries` and `supplierVerification`. Every other field is a number, a boolean or a plain string you can filter on after the run, `isAlibabaGuaranteed` and `hasEasyReturn` included.

**What is Alibaba Guaranteed?**
Alibaba's program for listings with a guaranteed delivery date and money back for order issues. `isAlibabaGuaranteed` says whether a listing is in it, checked on the product's own Alibaba page for the listings that show a delivery date. `hasEasyReturn` says whether the listing offers easy return, and `deliveryEstimate` the date Alibaba commits to.

**Can I start from a later results page?**
Yes. Paste the search page at the page you want to start from (`alibaba.com/premium/wireless-earbuds/3.html`, or a search address ending in `&page=3`): the run starts there and carries on. `rank` and `page` keep counting from the first page, so rows from two runs line up.

**What is `ordersCount`?**
The units sold that Alibaba shows under the price of a listing (`2,633 sold`), as a number. Listings that show no figure have `null`. Sort the rows on this field to find the products that already sell.

**Why are some product page fields still null with `includeDetails` on?**
Alibaba serves product pages to only some connections. When a page cannot be read, the row keeps its listing fields and the product page fields stay `null`; after a few unreadable pages in a row the run stops asking and finishes with the listing. The log says how many rows were saved with listing fields only.

**How fresh is the data?**
Live. Every run reads Alibaba at that moment; nothing is cached. The `scrapedAt` field on each row says exactly when.

**Can I scrape several keywords in one run?**
Yes. Keywords are read one after the other, a product that appears under two keywords is saved once, and `maxItems` caps the whole run.

**What is a Verified Supplier, a Verified Pro supplier, a Gold Supplier and Trade Assurance?**
A Verified Supplier had its company inspected by a third party for Alibaba. Verified Pro is Alibaba's top verification tier, held by few suppliers. A Gold Supplier pays Alibaba's supplier membership. Trade Assurance is Alibaba's order protection programme. The row carries all four as booleans.

**Does it return supplier emails or phone numbers?**
No. Alibaba does not publish them. The row carries the supplier's profile URL, where enquiries are sent through Alibaba.

**Are image and product URLs permanent?**
Product and supplier URLs are permanent. Image URLs point to Alibaba's image CDN and stay valid for months.

**What happens when a keyword returns nothing?**
The keyword is noted in the log and the run continues. A run that finds nothing says why on its status: no product matched the filters, or no product matched the keyword.

### ⚖️ Legal

This Actor extracts publicly available data from Alibaba.com. It does not bypass any login, paywall or CAPTCHA. Users are responsible for complying with Alibaba's terms of service and applicable data protection laws (GDPR, CCPA and PIPL where relevant). The output contains company data (supplier names, profile URLs) and no personal data of individuals. The data returned is informational; verify prices, MOQ and supplier information before relying on them for purchasing decisions.

### 🔗 Related scrapers

- [1688 Wholesale Scraper](https://apify.com/silentflow/1688-scraper): wholesale prices and suppliers from 1688, Alibaba's domestic B2B marketplace.
- [Taobao Scraper](https://apify.com/silentflow/taobao-scraper): best-selling products of any keyword on Taobao and Tmall with seller scores.
- [Douyin Scraper](https://apify.com/silentflow/douyin-scraper): videos and profiles from Douyin, China's TikTok.
- [RedNote Scraper](https://apify.com/silentflow/rednote-search-scraper): trending posts and categories from RedNote (Xiaohongshu).

### 📬 Support

Need something this scraper does not do yet? We ship features fast.

- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations and high-volume plans
- Pricing details live on the Monetization tab of the actor page

Response time: usually under 24 hours.

Check out our other scrapers: [silentflow on Apify](https://apify.com/silentflow)

# Actor input Schema

## `keywords` (type: `array`):

What to search on Alibaba.com, one keyword per line, as you would type it in the search bar (<code>wireless earbuds</code>, <code>led strip lights</code>, <code>yoga mat</code>). English keywords match best. Each keyword lists 48 products per page in the order buyers see them, and a common keyword runs to thousands of products.

## `startUrls` (type: `array`):

Alibaba.com addresses from your browser. A search page is read like its keyword, from the page it shows: <code>alibaba.com/premium/yoga-mat/3.html</code> starts at results page 3, to skip the pages you already have. A product page (<code>alibaba.com/product-detail/...\_1601721674813.html</code>) gives one full row with its price tiers, lead times, attributes and supplier figures. Search pages read: <code>alibaba.com/trade/search?SearchText=yoga+mat\&page=2</code>, <code>alibaba.com/premium/yoga-mat.html</code>, <code>alibaba.com/showroom/yoga-mat.html</code>. Pasted products are delivered whatever the filters.

## `maxItems` (type: `integer`):

How many rows to save for the whole run, all keywords together. A page holds 48 products, so <code>100</code> reads three pages of one keyword or the first pages of several. Cost scales with the rows delivered, so set it to what you need.

## `minPrice` (type: `number`):

Lowest unit price you accept, in US dollars, compared with the product's starting price (<code>2.5</code>). Leave empty for no floor.

## `maxPrice` (type: `number`):

Highest unit price you accept, in US dollars, compared with the product's starting price (<code>20</code>). Leave empty for no ceiling.

## `minMoq` (type: `integer`):

Smallest minimum order quantity you accept (<code>500</code> keeps products a supplier sells from 500 units up), to find the factories that work in bulk. For wireless earbuds, <code>1000</code> keeps about one product in five. Leave empty for no floor.

## `maxMoq` (type: `integer`):

Largest minimum order quantity you accept (<code>50</code> keeps products a supplier sells from 50 units or fewer). Useful to find suppliers open to sample-size orders. Leave empty for no limit.

## `supplierCountries` (type: `array`):

Keep only suppliers based in these countries, to source beyond China. Pick from the list or type a two-letter code (<code>IN</code>), a three-letter code (<code>VNM</code>) or an English name (<code>Türkiye</code>). For wireless earbuds, India and Vietnam together list 122 products where the whole search lists over 20,000. Leave empty for every country.

## `supplierVerification` (type: `string`):

Keep only the suppliers Alibaba has checked. <b>Verified</b>: the company was inspected by a third party, roughly half of the listings. <b>Verified Pro</b>: Alibaba's top verification tier, few suppliers hold it (wireless earbuds count 426 such products out of over 20,000).

## `includeDetails` (type: `boolean`):

On: each product's page is read to add its product attributes (material, function, model number...), category path, production lead times, unit weight and size, and the supplier's reorder rate, business type, staff count, on-time delivery rate, response time, orders of the last six months, trade assurance amount and store rating. About one second per product. Alibaba serves product pages to only some connections: a row whose page cannot be read keeps its listing fields, and after a few unreadable pages in a row the run stops asking for them. Off: the listing fields only, fast and always complete.

## Actor input object example

```json
{
  "keywords": [
    "wireless earbuds",
    "led strip lights"
  ],
  "maxItems": 100,
  "supplierVerification": "any",
  "includeDetails": false
}
```

# Actor output Schema

## `products` (type: `string`):

Every product with id, url, title, category, certifications, badges and selling points, price range in USD and price tiers by quantity, promotion price, discount and end date, MOQ and unit, units sold, dispatch days, delivery date, Alibaba Guaranteed and easy return flags, review and service scores and what buyers say, supplier identity, verified, Verified Pro and gold badges, export markets, orders of the last six months, images, the keyword and the position it was found at. With product pages read: attributes, category path, lead times, weight and size, and the supplier's reorder rate and operating figures.

## `suppliers` (type: `string`):

The supplier columns of each row: name, country, years on Alibaba, verified, Verified Pro and gold badges, rating, review count, response rate, orders of the last six months and profile URL.

## `deals` (type: `string`):

The promotion and guarantee columns of each row: price, promotion price, discount and end date, Alibaba Guaranteed, easy return, delivery date, badges and URL.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "wireless earbuds",
        "led strip lights"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("silentflow/alibaba-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keywords": [
        "wireless earbuds",
        "led strip lights",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("silentflow/alibaba-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "wireless earbuds",
    "led strip lights"
  ]
}' |
apify call silentflow/alibaba-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,silentflow/alibaba-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/PZuh7g95fK3Bg1Xc2/builds/xbKwr5tf9eDUj0aLd/openapi.json
