# AliExpress Scraper — Products, Prices, Reviews & Sellers (`innolabs/aliexpress-scraper`) Actor

AliExpress scraper API: search products by keyword, category or URL with prices, discounts, ratings, orders sold, store info, plus product details and reviews. JSON/CSV/Excel.

- **URL**: https://apify.com/innolabs/aliexpress-scraper.md
- **Developed by:** [Tristan Leroux](https://apify.com/innolabs) (community)
- **Categories:** E-commerce, Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## AliExpress Scraper

Scrape **AliExpress products by keyword, category or URL**: titles, prices, original prices,
discounts, ratings, exact orders sold, images, badges, ship-from country and delivery times —
up to 60 products per result page, 60 pages per keyword. Turn on product details for the
**store name, ID and URL**, review count, every SKU (variant) with price and stock,
specifications and the shipping fee, or add **buyer reviews** with translations and photos.
Choose the ship-to country, currency and language. No login, no API key. Export as JSON,
CSV or Excel, or pull the data through the API.

### What does AliExpress Scraper do?

AliExpress Scraper reads AliExpress search results, category pages, product pages and
reviews and returns clean rows with the same fields every time:

- **Keyword search** — type keywords such as `wireless earbuds` and get the result pages in
  AliExpress' own order, or sorted by orders or price, with optional min/max price.
- **Search and category URLs** — paste any search result page (filters in the URL are kept)
  or category page, e.g. `https://www.aliexpress.com/category/63705/earphones-headphones.html`.
- **Product URLs** — paste product pages (`/item/<id>.html`, any AliExpress country domain)
  to get the full product record.
- **Prices and sales** — current price, original (crossed-out) price, discount in percent,
  currency, the exact number of orders, rating, badges such as "Free shipping",
  "Choice" and sponsored flags, delivery window and ship-from country.
- **Product details (optional)** — store name, store ID and URL, seller ID, store country,
  opening date and followers; review count and wishlist count; stock; all SKUs with their
  option values (colour, size, ships from), price and stock; specifications; category path;
  shipping fee, method and delivery days for your ship-to country.
- **Reviews (optional)** — star rating, review text and its English translation, date,
  reviewer country, buyer name as shown on AliExpress, purchased SKU, photos, helpful votes
  and shipping method, as separate rows linked by `productId`.

### Use cases

- **Dropshippers and e-commerce sellers** — find winning products by orders sold, rating and
  price, compare suppliers and their stores, and track price changes before you list an item.
- **Product researchers and analysts** — measure demand for a niche: how many products,
  which price points, how many orders and how fast delivery is to your country.
- **Brands and marketplaces** — monitor resellers and copies of your products, their prices,
  discounts and store names.
- **Lead generation** — build lists of AliExpress stores selling in a category, with store
  IDs, URLs, country and follower counts.
- **Review mining and quality control** — collect reviews with photos and translations to
  spot defects, sizing problems and shipping complaints before you buy in bulk.
- **Data and AI teams** — feed titles, specifications, prices and reviews into matching,
  classification, sentiment or LLM pipelines.

### How much does it cost?

You pay only for the results you get (pay-per-event). Duplicates and items over your
`maxItems` limit are never charged.

| Event | What you pay for | Free plan | Paid plans (from) |
| --- | --- | --- | --- |
| `product` | One product row (search, category or product URL; details included when enabled) | $3.00 per 1,000 | $2.00 per 1,000 |
| `review` | One buyer review row | $0.50 per 1,000 | $0.30 per 1,000 |

"Paid plans (from)" is the Gold-and-above price; Bronze ($2.60 / $0.40) and Silver
($2.30 / $0.35) plans sit in between. Apify also charges a tiny actor-start fee ($0.00005 per
run). Product details do not cost extra — they only make the run slower.

Worked examples (Free plan prices):

1. **Niche research** — 10 keywords × 2 result pages × 60 products = 1,200 products ×
   $3.00 / 1,000 = **$3.60** ($2.40 on Gold and above).
2. **Review mining** — 50 product URLs with 100 reviews each: 50 products × $3.00 / 1,000 +
   5,000 reviews × $0.50 / 1,000 = $0.15 + $2.50 = **$2.65** ($1.60 on Gold and above).

The Apify Free plan includes $5 monthly credit, enough for about 1,600 products or
10,000 reviews every month.

### How to use AliExpress Scraper

In Apify Console:

1. Open AliExpress Scraper and click **Try for free**.
2. Type keywords into **Search keywords** (prefilled with `wireless earbuds`) and/or paste
   search, category or product URLs into **AliExpress URLs**.
3. Set **Max result pages** (60 products per page), and optionally **Sort by** and a price
   range.
4. Turn on **Add product details** for store, SKUs, specs and shipping, and/or **Add reviews**
   with **Max reviews per product**. Change **Ship to**, **Currency** or **Language** if you
   need local prices.
5. Click **Start**, then open the **Output** tab and export the dataset as JSON, CSV, Excel or
   HTML.

Through the API:

1. Get your API token in Apify Console → Settings → Integrations.
2. Call the actor with your input JSON (see [Integrations and API](#integrations-and-api)).
3. Read the dataset items from the run.

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `searchQueries` | array | – | Keywords to search, one per entry. |
| `startUrls` | array | – | Search URLs (`/w/wholesale-<keyword>.html`, `/wholesale?SearchText=…`), category URLs (`/category/<id>/<name>.html`) or product URLs (`/item/<id>.html` or a bare item ID). Any AliExpress country domain. |
| `maxPagesPerQuery` | integer | `5` | Result pages per keyword / search URL / category URL (60 products each, AliExpress shows at most 60 pages). |
| `sortBy` | string | `bestMatch` | `bestMatch`, `orders` (most sold first), `priceAsc`, `priceDesc`. |
| `minPrice` / `maxPrice` | number | – | Price range in the selected currency. |
| `includeDetails` | boolean | `false` | Add store, review count, SKUs, specifications and shipping to search/category rows (always on for product URLs). |
| `includeReviews` | boolean | `false` | Add review rows for every scraped product. |
| `maxReviewsPerProduct` | integer | `20` | Reviews per product. |
| `shipTo` | string | `US` | Delivery country code; prices, shipping and delivery times follow it. |
| `currency` | string | `USD` | Price currency (`EUR`, `GBP`, `BRL`, …). |
| `language` | string | `en_US` | Language of titles and review translations. |
| `maxItems` | integer | `1000` | Hard cap on rows for the whole run (products + reviews). |
| `proxyConfiguration` | object | Apify residential proxy | Proxy settings. |
| `debug` | boolean | `false` | Log every request. |

Example — best-selling earbuds under $30, two pages:

```json
{
    "searchQueries": ["wireless earbuds"],
    "sortBy": "orders",
    "maxPrice": 30,
    "maxPagesPerQuery": 2
}
```

Example — two products with details and 50 reviews each, prices in euros for Germany:

```json
{
    "startUrls": [
        "https://www.aliexpress.com/item/1005009006022196.html",
        "https://www.aliexpress.com/item/1005010295651057.html"
    ],
    "includeReviews": true,
    "maxReviewsPerProduct": 50,
    "shipTo": "DE",
    "currency": "EUR"
}
```

### Output

Each row has a `type`: `product` or `review`. A product row from a keyword search with
**Add product details** on (real example from 2026-11-05; images, badges, options, SKUs and
specifications shortened):

```json
{
    "type": "product",
    "productId": "1005003279313941",
    "url": "https://www.aliexpress.com/item/1005003279313941.html",
    "title": "UL Listed COB LED Strip Light 320 480 LEDs/m 16.4ft High Density Flexible Tape Ribbon 3000-6500K RA90 Led Lights DC12V 24V",
    "image": "https://ae-pic-a1.aliexpress-media.com/kf/S2b5f6bcec4294c9086652c722e46e325O.jpg",
    "price": 3.02,
    "originalPrice": 25.6,
    "discount": 88,
    "currency": "USD",
    "priceFormatted": "US $3.02",
    "rating": 4.8,
    "ratingCount": 1116,
    "ordersSold": 16918,
    "ordersSoldText": "10K+ sold",
    "storeName": "COXO Official Store",
    "storeId": "1101515329",
    "storeUrl": "https://www.aliexpress.com/store/1101515329",
    "shipFrom": "CN",
    "deliveryDaysMin": 9,
    "deliveryDaysMax": 15,
    "isChoice": false,
    "isAd": true,
    "categoryId": "200001051",
    "launchDate": "2021-09-13",
    "searchQuery": "led strip lights",
    "page": 1,
    "position": 4,
    "priceMin": 1.09,
    "priceMax": 3.02,
    "storeCountry": "Hong Kong,China",
    "storeOpenSince": "Jul 15, 2020",
    "storePositiveRate": 97,
    "storeFollowers": 33510,
    "wishlistCount": 47468,
    "stock": 50857,
    "specifications": [{ "name": "Certification", "value": "CE,RoHs" }],
    "skus": [
        {
            "skuId": "12000028181233141",
            "attributes": { "Emitting Color": "4000K Natural White", "Color": "480 LEDs", "Wattage": "DC 24V", "Length": "5m" },
            "price": 3.02,
            "originalPrice": 25.6,
            "stock": 224,
            "available": true
        }
    ],
    "shippingFee": 1.85,
    "freeShipping": false,
    "shippingMethod": "AliExpress standard shipping",
    "shipTo": "US",
    "deliveryDate": "Nov. 20",
    "scrapedAt": "2026-11-05T10:09:23Z"
}
```

`isAd: true` marks sponsored results (AliExpress shows them between organic results).
`shipFrom` and `shipTo` are two-letter country codes.

All product fields: `productId`, `url`, `title`, `image`, `images`, `price`, `originalPrice`,
`discount`, `currency`, `priceFormatted`, `rating`, `ratingCount`, `ordersSold`,
`ordersSoldText`, `storeName`, `storeId`, `storeUrl`, `shipFrom`, `deliveryDaysMin`,
`deliveryDaysMax`, `deliveryDateFrom`, `deliveryDateTo`, `badges`, `isChoice`, `isAd`,
`categoryId`, `categoryIds`, `skuId`, `launchDate`, `searchQuery`, `sourceUrl`, `page`,
`position`, `scrapedAt`; with details also `priceMin`, `priceMax`, `sellerId`,
`storeCountry`, `storeOpenSince`, `storeTopRated`, `storePositiveRate`, `storeFollowers`,
`wishlistCount`, `stock`, `available`, `categoryPath`, `specifications`, `options`, `skus`,
`shippingFee`, `freeShipping`, `shippingFeeFormatted`, `shippingMethod`, `shipTo`,
`deliveryDate`.

A review row (real example from 2026-11-05):

```json
{
    "type": "review",
    "reviewId": "60097061035733809",
    "productId": "1005012030698792",
    "productUrl": "https://www.aliexpress.com/item/1005012030698792.html",
    "rating": 5,
    "text": "gostei muito top.",
    "translatedText": "I really liked it, great.",
    "date": "2026-05-17",
    "dateText": "17 May 2026",
    "country": "US",
    "buyerName": "AliExpress Shopper",
    "skuInfo": "Color:X15",
    "images": ["https://ae-pic-a1.aliexpress-media.com/kf/Ac2273cde7a2345059cf3bf8bd479975fd.jpg"],
    "helpfulCount": 0,
    "shippingMethod": "BR_L2L_3PL_JNT",
    "additionalReview": null,
    "sellerReply": null,
    "labels": [
        { "name": "Quality of sound", "value": "Fast" },
        { "name": "Durability", "value": "Fast" },
        { "name": "User Friendly ", "value": "Good" }
    ],
    "scrapedAt": "2026-11-05T09:59:15Z"
}
```

Field notes:

- `productId` is the standard AliExpress item ID; `url` always points to
  `www.aliexpress.com/item/<productId>.html`.
- Prices are numbers in `currency` for your ship-to country, as an anonymous visitor sees
  them (including AliExpress' new-shopper deals where shown). `originalPrice` is the
  crossed-out price, `discount` the percentage off.
- `ordersSold` from search results is the exact order count; for product URLs it is the lower
  bound AliExpress shows ("10,000+ sold" → 10000), with the text in `ordersSoldText`.
- `rating` on product rows is the average star rating; `ratingCount` (number of reviews)
  comes with product details.
- `translatedText` is AliExpress' translation into your language and is `null` when the
  review is already in that language or AliExpress has no translation.
- `additionalReview` is the buyer's follow-up review and `sellerReply` the seller's answer,
  where present; `labels` are the aspect ratings some categories show.
- `badges` are the labels shown on the result card (free shipping, delivery promise, savings,
  highlights). `categoryPath` holds category names where AliExpress shows a breadcrumb
  (often empty; `categoryIds` is always filled).

### Integrations and API

Run the actor and get the items back in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/innolabs~aliexpress-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["wireless earbuds"], "maxPagesPerQuery": 1}'
```

Python with [apify-client](https://docs.apify.com/api/client/python):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("innolabs/aliexpress-scraper").call(
    run_input={
        "searchQueries": ["phone case", "usb c cable"],
        "sortBy": "orders",
        "includeDetails": True,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item["type"] == "product":
        print(item["title"], item["price"], item["ordersSold"], item["storeName"])
```

- **Make, Zapier, n8n** — use the Apify app/node to start the actor and send new products or
  price drops to Google Sheets, Airtable, Slack or email.
- **Scheduling** — create a schedule in Apify Console (e.g. every morning) to keep a daily
  price, orders and rating history of the products you watch.
- **Webhooks** — trigger your pipeline when a run finishes.
- **AI agents (MCP)** — connect Claude, Cursor or other MCP clients through the Apify MCP
  server at https://mcp.apify.com and let your agent research AliExpress products.

### FAQ

#### Is it legal to scrape AliExpress?

The scraper only reads pages and data that AliExpress shows to every visitor without logging
in; it does not place orders or access accounts. Reviews contain buyer names exactly as
AliExpress displays them (usually masked or "AliExpress Shopper"); handle personal data in
line with GDPR and your local laws. This actor is not affiliated with or endorsed by
AliExpress or Alibaba Group.

#### Why do product details make the run slower?

Details come from a separate request per product, and AliExpress answers part of these
requests with a captcha. The scraper then switches to a fresh residential IP and tries again
(up to 15 IPs per product, then a second round), so 60 products with details take about 2–3
minutes instead of a few seconds (122 products with details and 452 reviews took 5 minutes in
our test). If a product's details still fail, its search row is kept and the failure is listed
in the run's `SUMMARY` record.

#### Do I need proxies?

No setup is needed. The default Apify residential proxy is included in the price. Search,
category and review pages also work with the cheaper datacenter proxy (choose "Automatic" in
**Proxy configuration**), but product details then fail more often.

#### Can I get prices for my country and currency?

Yes. Set **Ship to** (e.g. `DE`), **Currency** (e.g. `EUR`) and **Language**. Prices,
shipping fees and delivery times follow the ship-to country, like on the website.

#### How many products can I get per keyword?

Up to 60 result pages × 60 products = 3,600 per keyword or listing URL (AliExpress' own
limit). Use several keywords, price ranges or categories to go beyond.

#### Why do the prices differ from what I see when logged in?

AliExpress personalises prices: coupons, coins and member prices depend on your account.
The scraper sees prices like an anonymous visitor from your ship-to country, which can
include new-shopper deals.

#### Can I track products over time?

Yes. Schedule the actor with the same product URLs or keywords and compare runs by
`productId`: `price`, `originalPrice`, `ordersSold`, `rating` and `stock` show what changed.

### Limits

- Up to 3,600 products per keyword, search URL or category URL (60 pages × 60, an AliExpress
  limit); "newest first" sorting is not offered by AliExpress.
- Store name, store ID/URL, review count, SKUs, specifications and shipping fee need **Add
  product details** (always on for product URLs). A small share of products can still miss
  details when AliExpress keeps showing captchas; they are listed in `SUMMARY`.
- Store pages (all products of one store), product descriptions (long HTML) and question &
  answer sections are not included.
- Reviews come in AliExpress' default order; filtering by star rating is not available.
- Prices are those an anonymous visitor sees; coupon, coin and member prices are not included.

# Changelog

This Actor's version history is a separate document: https://apify.com/innolabs/aliexpress-scraper/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on AliExpress, one per line (e.g. 'wireless earbuds', 'phone case'). Each keyword returns up to 60 products per result page.

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

Search result URLs (https://www.aliexpress.com/w/wholesale-phone-case.html, filters in the URL are kept), category URLs (https://www.aliexpress.com/category/63705/earphones-headphones.html) or product URLs (https://www.aliexpress.com/item/1005009006022196.html). Any AliExpress country domain works.

## `maxPagesPerQuery` (type: `integer`):

Result pages to read per keyword, search URL or category URL. One page holds up to 60 products; AliExpress shows at most 60 pages.

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

Order of search and category results. These are the sort orders AliExpress offers.

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

Only products from this price, in the selected currency. Leave empty for no lower limit.

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

Only products up to this price, in the selected currency. Leave empty for no upper limit.

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

For every search/category product, also load its product page data: store name, ID and URL, store followers and rating, review count, all SKUs (variants) with prices and stock, specifications, shipping fee, method and delivery time. One extra request per product, so runs are slower. Product URLs always include these details.

## `includeReviews` (type: `boolean`):

Add buyer reviews of every scraped product as separate rows (type 'review'): rating, text and English translation, date, country, SKU bought, photos and helpful votes. Each review is one billed result.

## `maxReviewsPerProduct` (type: `integer`):

How many reviews to take per product (in AliExpress' default order) when 'Add reviews' is on.

## `shipTo` (type: `string`):

Two-letter delivery country code (US, GB, DE, FR, ES, IT, NL, PL, BR, MX, CA, AU, KR, JP, IL, SA, AE …). Prices, shipping and delivery times are shown for this country.

## `currency` (type: `string`):

Three-letter currency code for prices (USD, EUR, GBP, CAD, AUD, BRL, MXN, PLN, KRW, JPY …).

## `language` (type: `string`):

Language of titles and review translations.

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

Hard cap on dataset rows for the whole run (products plus reviews). The run stops cleanly when reached.

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

Apify Proxy settings. The default residential proxy is the reliable choice: AliExpress answers most datacenter IPs with captchas on product details. Search, category and review pages also work on the datacenter proxy. When a captcha appears the scraper switches to a new IP automatically.

## `debug` (type: `boolean`):

Log every request with its status code.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "maxPagesPerQuery": 1,
  "sortBy": "bestMatch",
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "shipTo": "US",
  "currency": "USD",
  "language": "en_US",
  "maxItems": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "debug": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

All items produced by the run, one JSON object per record.

# 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 = {
    "searchQueries": [
        "wireless earbuds"
    ],
    "maxPagesPerQuery": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("innolabs/aliexpress-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 = {
    "searchQueries": ["wireless earbuds"],
    "maxPagesPerQuery": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("innolabs/aliexpress-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 '{
  "searchQueries": [
    "wireless earbuds"
  ],
  "maxPagesPerQuery": 1
}' |
apify call innolabs/aliexpress-scraper --silent --output-dataset

```

## MCP server setup

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