# Alibaba Product Scraper (`tortuga/alibaba-scraper`) Actor

Scrape Alibaba.com search results and product pages: title, price range, minimum order quantity, supplier name, years on Alibaba, verified status, response rate, ratings, images and product URL. Any keyword or category URL.

- **URL**: https://apify.com/tortuga/alibaba-scraper.md
- **Developed by:** [Trevor Ortega](https://apify.com/tortuga) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 product scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Alibaba Product Scraper

Scrape Alibaba.com wholesale listings from any keyword search or category: product title, price range, minimum order quantity (MOQ), rating, review and sold counts, images, shipping badges and the supplier's name, country, years on Alibaba and verified status. Turn on **Include product details** to also get price tiers by quantity, all product attributes, variants, lead times, packaging, description, FAQ, video and the full supplier profile (business type, staff size, response time, on-time delivery rate, store rating).

Built for reliability: plain HTTP with browser TLS fingerprinting, no headless browser, no login. Alibaba embeds its search results and product data as JSON in every page, so the scraper reads structured data instead of fragile CSS selectors. You pay only for the products you get.

### What data does Alibaba Product Scraper extract?

Every product from a search or category page:

| Field | Description |
|---|---|
| `productId` | Alibaba product ID (the number at the end of the product URL) |
| `title` | Product title |
| `url` | Clean product URL (tracking parameters removed) |
| `priceMin`, `priceMax` | Lowest and highest unit price shown (equal when there is a single price) |
| `currency` | ISO currency code of the prices (USD by default) |
| `priceUnit` | Unit the price applies to: piece, set, box, unit, … |
| `priceText` | Price as displayed, e.g. `$7.80-10.30` |
| `promotionPriceMin`, `promotionPriceMax`, `discount`, `isOnPromotion` | Sale price and discount label when the product is on promotion |
| `moq`, `moqUnit`, `moqText` | Minimum order quantity as a number, its unit and the raw text (`Min. order: 500 pieces`) |
| `rating`, `reviewCount` | Product rating (0-5) and number of reviews |
| `soldCount`, `soldText` | Units sold as shown on the card (`26 sold`) |
| `reorderRate` | Supplier reorder rate in percent when shown |
| `imageUrl`, `images` | Full-size main image and gallery image URLs |
| `isReadyToShip` | Product has local stock or an x-day delivery/dispatch promise |
| `hasLocalStock` | Ships from a warehouse in the buyer's region |
| `isAlibabaGuaranteed` | Carries the Alibaba Guaranteed badge |
| `isCustomizable` | Supplier offers customization (logo, packaging, colours, …) |
| `isSponsored` | Paid placement in the results |
| `shippingInfo` | Delivery promise text (`7-day delivery`, `Delivery by Oct 03`) |
| `sellingPoints`, `badges`, `certifications` | Card labels (`Easy Return`, `180-day lowest prices`), badge codes and certification names (CE, RoHS, FCC, …) |
| `leaderboardRank` | Manufacturer leaderboard rank when shown |
| `supplier.name`, `supplier.id`, `supplier.url`, `supplier.logo` | Supplier company name, ID, profile page and logo |
| `supplier.yearsOnAlibaba` | Years as an Alibaba supplier |
| `supplier.country` | Supplier country code (CN, US, IN, …) |
| `supplier.isVerified`, `supplier.isGoldSupplier` | Verified Supplier tick and Gold Supplier membership |
| `supplier.rating`, `supplier.starLevel` | Supplier service score and star level |
| `searchTerm`, `sourceUrl`, `scrapedAt` | Which search term / start URL produced the item and the run timestamp |

With **Include product details** on, each item also gets:

| Field | Description |
|---|---|
| `priceTiers` | Price ladder by quantity: `[{minQty, maxQty, price, promotionPrice, priceText}]` (`maxQty` is `null` for the open-ended top tier) |
| `attributes` | All product specifications as a `{name: value}` dictionary (brand, model, material, power, origin, …) |
| `variants` | SKU options, e.g. `[{"name": "color", "values": ["Black", "Red"]}]` |
| `leadTime` | Production lead time by quantity: `[{minQty, maxQty, days}]` |
| `packaging` | `unitSizeCm`, `unitWeightKg`, `unitVolume` and any packaging properties |
| `description`, `faq` | Structured product description text and the supplier's FAQ entries |
| `videoUrl` | Product video (MP4) when the listing has one |
| `category`, `categoryPath` | Alibaba category breadcrumb |
| `certifications` | Product and inspection-report certificates (CE, RoHS, UN38.3, …) |
| `customizationOptions` | Customization types, options and their MOQ |
| `tradePriceType`, `hasTradeAssurance`, `shipFrom` | FOB/EXW etc., Trade Assurance flag, dispatch country |
| `samplePrice`, `freeSample` | Sample availability |
| `supplier.businessType`, `supplier.employees` | Manufacturer / trading company and staff-size band |
| `supplier.responseTime`, `supplier.onTimeDeliveryRate` | Average response time (`≤3h`) and on-time dispatch rate in percent |
| `supplier.rating`, `supplier.reviewCount` | Store rating and number of store reviews |
| `supplier.ordersLast6Months`, `supplier.revenueLast6MonthsText`, `supplier.tradeAssuranceLimit` | Transaction volume and Trade Assurance limit shown on the page |
| `supplier.isVerifiedManufacturer`, `supplier.intro` | Verified manufacturer flag and the "About this supplier" text |
| `isAvailable`, `detailError` | `false` + `"product not available"` when the product page has been removed since the search index was built (listing data is kept, no detail charge) |

### How to use Alibaba Product Scraper

1. Enter one or more **Search terms** (e.g. `bluetooth speaker`, `stainless steel water bottle`), or paste **Start URLs**: search result pages, category pages (`https://www.alibaba.com/catalog/speakers_cid518`), showroom pages (`https://www.alibaba.com/products/bluetooth_speaker.html`) or single product pages.
2. Set **Max items** and **Max pages per search** to cap the run (and the cost). Pages hold 48 products each.
3. Optionally choose **Sort by** (relevance, sales volume, supplier response rate) and switch on **Include product details**.
4. Click **Start**. Results appear in the **Dataset** tab; export as JSON, CSV or Excel, or read them through the API.

### Input example

```json
{
  "searchTerms": ["bluetooth speaker", "portable power station"],
  "startUrls": [{ "url": "https://www.alibaba.com/catalog/speakers_cid518" }],
  "maxItems": 200,
  "maxPagesPerSearch": 5,
  "sortBy": "salesVolume",
  "includeDetails": true
}
```

### Output example

```json
{
  "productId": "1601809832875",
  "title": "USA Stock 2026 TG117 Portable Bluetooth Speaker Waterproof Wireless Mini Subwoofer Outdoor Party BT 5.3 USB TF Card Speaker",
  "url": "https://www.alibaba.com/product-detail/USA-Stock-2026-TG117-Portable-Bluetooth_1601809832875.html",
  "priceMin": 9.9,
  "priceMax": 10.0,
  "currency": "USD",
  "priceUnit": "piece",
  "promotionPriceMin": 6.5,
  "discount": "35% off",
  "moq": 1,
  "moqUnit": "piece",
  "rating": 4.6,
  "reviewCount": 177,
  "soldCount": 26,
  "isReadyToShip": true,
  "shippingInfo": "7-day delivery",
  "certifications": ["Declaration of Conformity", "EAA Exemption Statement"],
  "imageUrl": "https://s.alicdn.com/@sc04/kf/H508c3966959149e4b787e56726321767p.jpg",
  "priceTiers": [
    { "minQty": 1, "maxQty": 999, "price": 10.0, "promotionPrice": 6.5 },
    { "minQty": 1000, "maxQty": 9999, "price": 9.98, "promotionPrice": 6.49 },
    { "minQty": 10000, "maxQty": null, "price": 9.9, "promotionPrice": 6.43 }
  ],
  "leadTime": [{ "minQty": 1, "maxQty": 1424, "days": 2 }],
  "packaging": { "unitSizeCm": "8X8X17", "unitWeightKg": 0.44 },
  "attributes": { "BT Wireless": "Bluetooth v5.3", "Output Power": "5-10W", "brand name": "T&G", "place of origin": "Guangdong, China" },
  "category": "Portable Speakers",
  "supplier": {
    "name": "Shenzhen Siruixing Technology Co., Ltd.",
    "url": "https://szkeywords.en.alibaba.com/company_profile.html",
    "yearsOnAlibaba": 6,
    "country": "CN",
    "isVerified": true,
    "isGoldSupplier": true,
    "businessType": "Trading Company",
    "employees": "5-10",
    "responseTime": "≤3h",
    "onTimeDeliveryRate": 96.3,
    "rating": 4.6,
    "reviewCount": 3307
  }
}
```

### How much does it cost?

Pay per result: a small price per product from a search or category page, plus a small extra per product when **Include product details** is on (one extra page fetch each). No subscription; Apify's free plan is enough to try it. Scraping 1,000 products with full details costs a few dollars.

### How do I scrape all products in an Alibaba category?

Use the category URL as a start URL, e.g. `https://www.alibaba.com/catalog/speakers_cid518` or `https://www.alibaba.com/trade/search?categoryId=518&SearchText=`. Raise **Max items** and **Max pages per search**; the scraper follows `page=2, 3, …` until the category runs out (Alibaba serves at most about 100 pages, i.e. roughly 4,800 products, per query). Combine a category with a keyword (`…/trade/search?categoryId=518&SearchText=karaoke`) to narrow it down.

### Can I get Alibaba price tiers and MOQ per product?

Yes. Every result carries the price range and MOQ shown on the search card. With **Include product details** the scraper opens the product page and returns the full quantity price ladder (`priceTiers`), lead time by quantity, packaging dimensions and weight, and the supplier's response time and on-time delivery rate, which is what you need for landed-cost comparisons.

### Why do some products have no price?

Alibaba renders the price of some cards (sponsored placements, promotions and a few others) client-side on category-style result pages, so a share of listing items can have `priceMin: null` while title, MOQ, supplier and rating are still filled. Switch on **Include product details** to fill the full price ladder from the product page.

### Does it work without login or a browser?

Yes. All data comes from public pages Alibaba serves to anonymous visitors. No account, cookies or headless browser are needed, which keeps runs fast and cheap. Prices are shown in USD by default.

### Can I scrape Alibaba supplier contact details?

The Actor returns the supplier's business profile (company name, profile URL, country, business type, years on Alibaba, ratings, verified status). Phone numbers, e-mail addresses and staff names are not collected; use the supplier profile URL to contact them on Alibaba.

### Integrations and API

Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python/Node with the Apify client. See the **API** tab for ready-made snippets. Schedule it to monitor prices, MOQs or new suppliers for your keywords.

### Is it legal to scrape Alibaba.com?

This Actor collects only publicly available, non-personal data: product listings, prices, MOQs, ratings and supplier business information. It does not collect personal data of individuals. You are responsible for how you use the data and for complying with Alibaba's terms and applicable law.

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab; it is usually answered within a day.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on Alibaba.com, one per line (e.g. "bluetooth speaker", "yoga mat wholesale"). Each term is searched separately and paginated automatically (48 products per page).

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

Alibaba URLs to scrape instead of (or in addition to) search terms: search result pages (https://www.alibaba.com/trade/search?SearchText=led+strip), category pages (https://www.alibaba.com/catalog/speakers\_cid518 or .../trade/search?categoryId=518), showroom pages (https://www.alibaba.com/products/bluetooth\_speaker.html) or single product pages (https://www.alibaba.com/product-detail/...\_1601809832875.html, returned with full details).

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

Stop after this many products in total (across all search terms and URLs). Keeps cost predictable.

## `maxPagesPerSearch` (type: `integer`):

How many result pages to open per search term or start URL (48 products each). Alibaba serves at most about 100 pages per query.

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

Also open every product page to get price tiers by quantity, all product attributes, variants, lead time, packaging, description, FAQ, video and the full supplier profile (business type, staff, response time, on-time delivery rate, store rating, verified status). Slower and charged extra per product (see pricing).

## `sortBy` (type: `string`):

Result order for search terms and search URLs. Alibaba offers relevance (default), sales volume (last 180 days) and supplier response rate.

## `proxyConfiguration` (type: `object`):

Apify Proxy is recommended. Alibaba shows a captcha page to suspicious traffic; if the run reports captcha pages, switch to residential proxies.

## Actor input object example

```json
{
  "searchTerms": [
    "bluetooth speaker"
  ],
  "startUrls": [],
  "maxItems": 100,
  "maxPagesPerSearch": 10,
  "includeDetails": false,
  "sortBy": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "searchTerms": [
        "bluetooth speaker"
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/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 = {
    "searchTerms": ["bluetooth speaker"],
    "startUrls": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("tortuga/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 '{
  "searchTerms": [
    "bluetooth speaker"
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call tortuga/alibaba-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tortuga/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/c6gxJL9pwfpet47UQ/builds/m7AsP0VDtlOfj0lbJ/openapi.json
