# Alibaba Scraper | Products, Prices and Suppliers (`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:** E-commerce, Business, Lead generation
- **Stats:** 2 total users, 1 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, MOQ, certifications, supplier badges and ratings on every row, ready to sort.** 100 products in 4 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. Add a price range, a MOQ ceiling or a verified-supplier filter if you already know how you source.
2. **One row comes back per product.** 40 fields: identity, USD price range, MOQ and unit, discount, dispatch days, certifications, sponsored flag, review and service scores, supplier name, country, years, gold and verified badges, response rate, transaction level, 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?

- 📊 **40 fields per row, twice the 20 of the devcake products scraper.** This one returns 40 fields from the listing alone, 38 filled on an average row: certifications, dispatch days, response rate, transaction level, export markets, main products and the sponsored flag are all there without a second run.
- 🔢 **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 that cost nothing.** Price range, MOQ ceiling and verified suppliers are checked on the listing before a row is counted. A run for products under 5 dollars with a MOQ of 10 or less from verified suppliers returned 30 rows after screening 508 products, and only the 30 count.
- 📢 **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 and verified badges, main products, export markets, response rate, transaction level and logo, next to the product. A **Suppliers** view of the dataset shows those columns alone.
- 📄 **Price tiers and lead times when you want them.** Turn on the product page option to add the price by quantity band, the production lead times, product attributes, weight and size, and the supplier's on-time delivery rate, staff count, orders of the last six months 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. 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 |
| Market research | Map a category by supplier country, transaction level, MOQ band and price band across dozens of 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. 40 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. 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. |
| `maxMoq` | integer | | Largest minimum order quantity you accept. `10` keeps suppliers open to sample-size orders. |
| `verifiedSupplierOnly` | boolean | `false` | Keep only products from suppliers holding the Verified Supplier badge. About half of the listings pass. |

**📄 Output**

| Field | Type | Default | Description |
|---|---|---|---|
| `includeDetails` | boolean | `false` | Read each product's page for price tiers, attributes, category path, lead times, weight and size, and the supplier's operating figures. About one second per product. |
| `debugMode` | boolean | `false` | Adds detailed lines to the run log. |

Filters read the value shown in the listing; a product without that 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.

### 📊 Output data

One row per product. A row from the listing, the default:

```json
{
  "id": "1601721674813",
  "url": "https://www.alibaba.com/product-detail/Portable-Foldable-3-in-1-Magnetic_1601721674813.html",
  "title": "Portable Foldable 3 in 1 Magnetic 15W Wireless Charger Fast Charging Station for Home Mobile Phone Watch Earbuds",
  "categoryId": "100000433",
  "categoryPath": null,
  "attributes": null,
  "certifications": ["QI", "DECLARATION OF CONFORMITY", "UKCA", "CE"],
  "isSponsored": false,
  "isTradeAssurance": true,
  "isAlibabaGuaranteed": false,
  "isCustomizable": null,
  "tradeTerms": null,
  "priceMin": 9.53,
  "priceMax": 10.2,
  "currency": "USD",
  "unit": "piece",
  "moq": 200,
  "priceTiers": null,
  "discountPercent": null,
  "dispatchDays": 7,
  "leadTimes": null,
  "unitWeightKg": null,
  "unitSize": null,
  "reviewScore": 4.7,
  "reviewCount": 15,
  "productScore": 4.6,
  "shippingScore": 4.8,
  "supplierServiceScore": 4.6,
  "transactionLevel": 3,
  "responseRate": 98.6,
  "supplierId": "282079401",
  "supplierName": "Dongguan Chuang Jie Electronics Co., Ltd.",
  "supplierUrl": "https://dgchuangjie.en.alibaba.com/company_profile.html",
  "supplierCountry": "China",
  "supplierCountryCode": "CN",
  "supplierYears": 3,
  "isGoldSupplier": true,
  "isVerifiedSupplier": true,
  "supplierMainProducts": ["Wireless Charging Holder", "Car Phone Holder", "Car Air Pump", "Bike Phone Holder", "Tablet PC Holder"],
  "exportMarkets": ["Canada", "Poland"],
  "supplierLogo": "https://sc02.alicdn.com/kf/H4d92101834b74a27b8c80f9a0f5a12696.png",
  "businessType": null,
  "employees": null,
  "onTimeDeliveryRate": null,
  "responseTime": null,
  "ordersLast6Months": null,
  "tradeAssuranceAmountUsd": null,
  "storeRating": null,
  "storeReviewCount": null,
  "shipsFrom": null,
  "imageUrl": "https://s.alicdn.com/@sc04/kf/Hb016dfc92d7e49f5a0ce4cc0e950e900B.jpg",
  "images": ["https://s.alicdn.com/@sc04/kf/Hb016dfc92d7e49f5a0ce4cc0e950e900B.jpg", "https://s.alicdn.com/@sc04/kf/H56bc3059458a44d69dc4529170114e0b3.jpg"],
  "hasVideo": false,
  "keyword": "wireless earbuds",
  "rank": 1,
  "page": 1,
  "scrapedAt": "2026-09-23T10:04:33Z"
}
```

The same product with `includeDetails` on. The listing fields stay, and the fields that were `null` fill in:

```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,
  "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 when product pages are read.
- `moq` is the minimum order in `unit` (piece, meter, pair, set...). `dispatchDays` is the fastest production time the listing promises.
- `discountPercent` is set only while a promotion runs. `isSponsored` is true for paid placements; `rank` and `page` are the position in the keyword listing, ads included.
- `reviewScore` and `reviewCount` are the supplier's store rating and review count; `productScore`, `shippingScore` and `supplierServiceScore` are its three sub-scores out of 5. `transactionLevel` is Alibaba's diamond score of the supplier's transaction volume, `responseRate` a percentage.
- `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

40 fields per product from the listing, 17 more with `includeDetails` (marked \*).

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

The dataset has two views: **Products** (title, price range, MOQ, unit, supplier, country, rating, URL) and **Suppliers** (name, country, years, verified, gold, rating, reviews, response rate, transaction level, profile 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,
  "verifiedSupplierOnly": true,
  "maxItems": 60
}
```

#### Read price tiers and lead times for a product idea

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

#### Map a category across eight keywords

```json
{
  "keywords": ["solar panel", "solar inverter", "solar charge controller", "solar battery", "solar water pump", "solar street light", "solar generator", "solar cable"],
  "maxItems": 400
}
```

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

```json
{
  "keywords": ["usb cable", "phone charger"],
  "minPrice": 1,
  "maxPrice": 3,
  "verifiedSupplierOnly": true,
  "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, 40 products per page in Alibaba's ranking order
- maxItems (integer, default 100): cap on rows for the whole run
- minPrice, maxPrice (numbers, USD): bounds on the product's starting price
- maxMoq (integer): largest minimum order quantity accepted
- verifiedSupplierOnly (boolean, default false): keep Verified Supplier badge holders only
- includeDetails (boolean, default false): read each product page for price tiers, attributes, lead times and supplier operating figures
- debugMode (boolean, default false)

Output per product (40 fields from the listing, 17 more with includeDetails, null when unknown):
- id (string), url (string), title (string)
- categoryId (string), categoryPath (string[]), attributes (object), certifications (string[]), isSponsored, isTradeAssurance, isAlibabaGuaranteed, isCustomizable (booleans), tradeTerms (string)
- priceMin, priceMax (numbers in USD), currency ("USD"), unit (string), moq (integer), priceTiers ([{minQuantity, maxQuantity, price}]), discountPercent (integer), dispatchDays (integer), leadTimes ([{minQuantity, maxQuantity, days}]), unitWeightKg (number), unitSize (string)
- reviewScore, productScore, shippingScore, supplierServiceScore, transactionLevel, responseRate (numbers), reviewCount (integer)
- supplierId, supplierName, supplierUrl, supplierCountry, supplierCountryCode (strings), supplierYears (integer), isGoldSupplier, isVerifiedSupplier (booleans), supplierMainProducts, exportMarkets (string[]), supplierLogo (string), businessType, employees, responseTime (strings), onTimeDeliveryRate, 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["priceMin"], -(r["reviewScore"] or 0)))
for r in shortlist:
    print(f'${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'],
  verifiedSupplierOnly: true,
  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 | 4 s |
| One keyword under 5 dollars, MOQ 10 or less, verified suppliers (13 pages screened) | 30 | 25 s |
| One keyword with product pages | 12 | 5 s |
| Eight keywords, listing only | 400 | about 45 s |

A page of 40 products costs one read; 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, unit, supplier, country, rating and URL; the **Suppliers** view shows the supplier 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. **Use several keywords to widen a market.** `solar panel`, `solar inverter` and `solar battery` give three different listings. A common keyword runs to thousands of products, so `maxItems` decides how deep each one goes.
3. **Filter before you count.** `maxPrice`, `maxMoq` and `verifiedSupplierOnly` are applied before a row is saved. A tight filter reads more pages for the same number of rows, and the log tells you how many products were screened out.
4. **Leave `includeDetails` off for price lists, on for negotiations.** The listing already carries the price range, MOQ, supplier badges and scores. Turn the product page on when you need the price by quantity band, the lead times or the supplier's on-time delivery rate.
5. **Rank by `responseRate` and `supplierYears`, not by price alone.** A supplier answering 98 percent of enquiries with 10 years on Alibaba is a safer first contact 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, MOQ and unit, discount, dispatch days, certifications, sponsored flag, review and service scores, and the supplier with its badges, years, response rate, transaction level, main products and export markets. Product pages add price tiers, attributes, lead times, weight and size, and the supplier's 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?**
40 per page, up to 256 pages, in the order Alibaba ranks them for a buyer. `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`. Price tiers by quantity come with `includeDetails`.

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

**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 40 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 Gold Supplier and Trade Assurance?**
A Verified Supplier had its company inspected by a third party for Alibaba. A Gold Supplier pays Alibaba's supplier membership. Trade Assurance is Alibaba's order protection programme. The row carries all three 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 40 products per page in the order buyers see them, and a common keyword runs to thousands of products.

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

Alibaba.com addresses pasted from your browser. 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. A search page (<code>alibaba.com/trade/search?SearchText=yoga+mat</code>, <code>alibaba.com/premium/yoga-mat.html</code>, <code>alibaba.com/showroom/yoga-mat.html</code>) is read like its keyword. 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 40 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.

## `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.

## `verifiedSupplierOnly` (type: `boolean`):

On: keep only products from suppliers holding Alibaba's Verified Supplier badge, whose company was inspected by a third party. Roughly half of the listings pass this filter, so a keyword yields fewer rows per page.

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

On: each product's page is read to add its price tiers by quantity, product attributes (material, function, model number...), category path, production lead times, unit weight and size, the supplier's 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.

## `debugMode` (type: `boolean`):

Adds detailed lines to the run log. Leave it off for normal runs.

## Actor input object example

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

# Actor output Schema

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

Every product with id, url, title, category, certifications, price range in USD, MOQ and unit, discount, dispatch days, review and service scores, supplier identity and badges, export markets, images, the keyword and the position it was found at. With product pages read: price tiers, attributes, category path, lead times, weight and size, and the supplier's operating figures.

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

The supplier columns of each row: name, country, years on Alibaba, verified and gold badges, rating, review count, response rate, transaction level and profile 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/lqPT21eYk8HoZ00OA/openapi.json
