# AliExpress Scraper - Search, Products, Shipping & Reviews (`jeanswiegers/aliexpress-scraper`) Actor

- **URL**: https://apify.com/jeanswiegers/aliexpress-scraper.md
- **Developed by:** [Jean Swiegers](https://apify.com/jeanswiegers) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 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.

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 – Search, Product Details, Shipping Cost & Reviews

**One Actor for all your AliExpress data:** search results by keyword or category URL, full product details with every variant's price and stock, **shipping cost and delivery estimate to the countries you choose**, store info and product reviews. Clean, consistent JSON rows you can export to JSON, CSV or Excel or pull through the Apify API. **Failed and unavailable products are free.**

This is an independent tool, not affiliated with or endorsed by AliExpress or Alibaba Group. It collects publicly visible product data only and needs no login.

### What you can do

| Mode | Input | One row per |
|---|---|---|
| 🔎 **Search** | `searchQueries` (keywords) and/or `searchUrls` (search or category pages) | product in the results |
| 📦 **Product details + shipping** | `productUrls` (URLs or IDs), or turn on `scrapeSearchResultDetails` | product, with a `shipping` entry for every ship-to country |
| ⭐ **Reviews** | `maxReviewsPerProduct` > 0 (for every product you scrape details for) | review |

Mix them in one run: search for a keyword, get full details and shipping to the US and South Africa for each result, plus their latest 20 reviews.

### What you get

#### Search results (`"type": "searchResult"`)

| Field | What it contains |
|---|---|
| `query` / `searchUrl`, `page`, `position` | Where the product was found |
| `productId`, `productUrl`, `alternateProductIds` | AliExpress product ID and link (plus other IDs AliExpress uses for the same listing) |
| `title`, `imageUrl` | Product title and main image |
| `price`, `originalPrice`, `currency`, `discountPercent` | Price shown on the search card |
| `rating`, `soldText`, `soldCount` | Star rating and sold count (`soldCount` is the lower bound of e.g. "3,000+ sold") |
| `freeShipping`, `deliveryText`, `sellingPoints` | Badges on the card, e.g. "Delivery: Oct 25 - 30" |
| `shipToCountry`, `totalResults`, `isAd` | Country the search was run for, total hits AliExpress reports, sponsored flag |

#### Products (`"type": "product"`)

| Field | What it contains |
|---|---|
| `productId`, `canonicalProductId`, `productUrl`, `title` | Identity |
| `price`, `originalPrice`, `priceMin`, `priceMax`, `currency`, `discountPercent` | Prices for the first ship-to country |
| `variants` | Every SKU: `skuId`, `attributes` (e.g. Color, Size, Ships From), `price`, `originalPrice`, `stock`, `available`, `image`, `maxPerOrder` |
| `rating`, `reviewCount`, `soldText`, `soldCount`, `wishlistCount`, `totalStock`, `inStock` | Demand and stock signals |
| `images`, `videoUrl`, `specifications`, `categoryId`, `categoryPath`, `descriptionUrl`, `manualUrl` | Content |
| `store` | `id`, `name`, `url`, `sellerId`, `rating`, `positiveFeedbackPercent`, `soldIn180Days`, `country`, `openedAt`, `topRatedSeller` |
| `shipping` | One entry per ship-to country: `shippable`, local `price`, and `options` with `carrier`, `fee`, `listedFee`, `feeCurrency`, `freeShipping`, `freeShippingThreshold`, `feeText`, `deliveryText`, `deliveryDaysMin`/`Max`, `estimatedDeliveryFrom`/`To`, `shipFrom`, `trackingAvailable`, `guaranteedDeliveryDays` |
| `error` | `null` on success, otherwise `{ code, message }` (`NOT_FOUND`, `BLOCKED`, `INVALID_URL`, …) |

#### Reviews (`"type": "review"`)

`productId`, `reviewId`, `rating` (1–5), `date`, `dateIso`, `text` (original), `translatedText` (AliExpress' translation), `buyerName` (masked by AliExpress), `buyerCountry`, `variant` bought, `images`, `helpfulCount`, `additionalFeedback`, `logistics`.

Ready-made dataset views in Apify Console: **Search results**, **Products**, **Reviews** and **Errors**. A `RUN_SUMMARY` record in the key-value store holds the totals.

### How much does it cost?

Pay per result, no subscription. You only pay for data you get: failed products, products that no longer exist and invalid URLs are free. Pricing is shown on the Actor's Pricing tab. Set a maximum cost per run in Apify Console and the Actor stops once it is reached.

### How to use it

1. Add keywords to **Search keywords**, and/or search or category URLs to **Search or category URLs**, and/or product links to **Product URLs or IDs**.
2. Set **Ship-to countries** (two-letter codes such as `US`, `GB`, `DE`, `ZA`, `BR`). The first country also decides the prices and which listings the search returns.
3. Set **Max reviews per product** if you want reviews, and turn on **Get full details for search results** if you want variants and shipping for every search hit.
4. Click **Start** and download the results.

#### Example input

```json
{
  "searchQueries": ["yoga mat"],
  "maxResultsPerSearch": 20,
  "scrapeSearchResultDetails": true,
  "productUrls": [{ "url": "https://www.aliexpress.com/item/1005006959700436.html" }],
  "shipToCountries": ["ZA", "US"],
  "maxReviewsPerProduct": 20,
  "currency": "USD"
}
```

All input options:

| Field | Default | What it does |
|---|---|---|
| `searchQueries` | `["wireless earbuds"]` | Keywords to search |
| `searchUrls` | – | Search or category page URLs; filters and sorting in the URL are kept |
| `maxResultsPerSearch` | `5` | Results per search (about 60 per page, up to 1,200) |
| `scrapeSearchResultDetails` | `false` | Also get full details + shipping for each search result |
| `productUrls` | – | Product URLs or bare product IDs |
| `shipToCountries` | `["US"]` | Countries to get shipping cost, delivery estimate and availability for |
| `maxReviewsPerProduct` | `0` | Reviews per product (0 = none) |
| `reviewsWithPhotosOnly` | `false` | Only reviews with buyer photos |
| `currency` | `USD` | Currency for prices and shipping fees |
| `language` | `en_US` | Locale for titles and texts |
| `maxConcurrency` | `2` | Products scraped in parallel |
| `proxyConfiguration` | Apify residential | Used only when AliExpress blocks the run's own IP (see Tips) |

#### Example output

A real product row from a test run on 19 October 2026 (images, variants and specifications shortened):

```json
{
  "type": "product",
  "status": "succeeded",
  "productId": "1005012978480099",
  "productUrl": "https://www.aliexpress.com/item/1005012978480099.html",
  "canonicalProductId": "1005012978480099",
  "title": "Yoga Mat Pilates Fitness Mat 3/4/6mm Thicknes Non Slip Yoga Cushion Travel Fitness Exercise Pad for Women Home Gym Floor Workout",
  "categoryId": "200001928",
  "categoryPath": "18/100005371/200001927/200001928",
  "images": [
    "https://ae-pic-a1.aliexpress-media.com/kf/Sba6e76866ff54d37bc51f0b406dc3223d.jpg",
    "https://ae-pic-a1.aliexpress-media.com/kf/Sd723cb9472194ed5b919f299f5903c03c.jpg"
  ],
  "videoUrl": null,
  "price": 5.55,
  "originalPrice": 8.95,
  "priceMin": 5.55,
  "priceMax": 5.55,
  "currency": "USD",
  "discountPercent": 38,
  "rating": null,
  "reviewCount": 0,
  "soldText": "79 sold",
  "soldCount": 79,
  "wishlistCount": 19,
  "totalStock": 2921,
  "inStock": true,
  "variantCount": 5,
  "variants": [
    {
      "skuId": "12000059886243566",
      "attributes": {
        "Color": "Blue",
        "Size": "4mm"
      },
      "price": 5.55,
      "originalPrice": 8.95,
      "stock": 597,
      "available": true,
      "image": "https://ae-pic-a1.aliexpress-media.com/kf/Se27e6a01d198466fa9b68044c9a34636i.jpg",
      "maxPerOrder": 597
    }
  ],
  "specifications": [
    {
      "name": "High-concerned chemical",
      "value": "none"
    },
    {
      "name": "Model Number",
      "value": "Yoga Mat"
    }
  ],
  "store": {
    "id": "1105772897",
    "name": "Shop1105784353 Store",
    "url": "https://www.aliexpress.com/store/1105772897",
    "sellerId": "6005957007",
    "rating": 5,
    "positiveFeedbackPercent": 100,
    "soldIn180Days": "200+",
    "country": "China",
    "openedAt": "2026-08-06 01:13:28",
    "topRatedSeller": false
  },
  "descriptionUrl": "https://pdp.aliexpress-media.com/product/description/pc/v2/en_US/desc.htm?productId=1005012978480099&key=S3dcfea87054a4cd1a38820808a07ead94.zip&token=0c06da9513f1e4043256fa1f85746596&sellerId=6005957007",
  "manualUrl": null,
  "shipToCountries": [
    "US",
    "ZA"
  ],
  "shipping": [
    {
      "country": "US",
      "countryName": "United States",
      "shippable": true,
      "price": 5.55,
      "priceCurrency": "USD",
      "options": [
        {
          "carrier": "AliExpress Standard Shipping",
          "serviceCode": "CAINIAO_STANDARD",
          "fee": 9.1,
          "feeCurrency": "USD",
          "listedFee": 9.1,
          "freeShippingThreshold": null,
          "feeText": "Standard: $9.10",
          "freeShipping": false,
          "deliveryText": "Delivery: Oct. 27 - Nov. 01 (80.3% ≤ 13 days) Tracking available",
          "deliveryDaysMin": 8,
          "deliveryDaysMax": 14,
          "estimatedDeliveryFrom": "2026-10-27",
          "estimatedDeliveryTo": "2026-11-01",
          "shipFrom": "China",
          "shipFromCode": "CN",
          "trackingAvailable": true,
          "guaranteedDeliveryDays": 60
        }
      ]
    },
    {
      "country": "ZA",
      "countryName": "South Africa",
      "shippable": true,
      "price": 4.48,
      "priceCurrency": "USD",
      "options": [
        {
          "carrier": "AliExpress Standard Shipping",
          "serviceCode": "CAINIAO_STANDARD",
          "fee": 11.77,
          "feeCurrency": "USD",
          "listedFee": 11.77,
          "freeShippingThreshold": null,
          "feeText": "Shipping: US $11.77",
          "freeShipping": false,
          "deliveryText": "Delivery: Oct. 26 - Nov. 04 via AliExpress standard shipping",
          "deliveryDaysMin": 7,
          "deliveryDaysMax": 16,
          "estimatedDeliveryFrom": "2026-10-26",
          "estimatedDeliveryTo": "2026-11-04",
          "shipFrom": "China",
          "shipFromCode": "CN",
          "trackingAvailable": false,
          "guaranteedDeliveryDays": 60
        },
        {
          "carrier": "AliExpress Premium Shipping",
          "serviceCode": "CAINIAO_PREMIUM",
          "fee": 74.16,
          "feeCurrency": "USD",
          "listedFee": 74.16,
          "freeShippingThreshold": null,
          "feeText": "Shipping: US $74.16",
          "freeShipping": false,
          "deliveryText": "Delivery: Oct. 27 - Nov. 01 via AliExpress Premium shipping",
          "deliveryDaysMin": 8,
          "deliveryDaysMax": 13,
          "estimatedDeliveryFrom": "2026-10-27",
          "estimatedDeliveryTo": "2026-11-01",
          "shipFrom": "China",
          "shipFromCode": "CN",
          "trackingAvailable": true,
          "guaranteedDeliveryDays": 35
        }
      ]
    }
  ],
  "error": null
}
```

### Tips

- **Search for the country you ship to.** AliExpress shows different listings (and product IDs) per country. Put your target country first in `shipToCountries` so search results, prices and IDs match what your customers see.
- `shippable: false` means AliExpress doesn't deliver that product to that country; the row is still returned so you can filter on it.
- `fee` is what the buyer pays. For "Choice" items AliExpress lists a fee but shows *Free shipping* because the free-shipping threshold is met; then `fee` is 0 and the listed amount is in `listedFee`.
- AliExpress blocks its product API on many server IPs. The Actor tries the run's own IP first and switches to rotating residential proxies only when needed, so keep the default proxy setting for reliable product details. Search and reviews don't need proxies.
- Use **Schedules** for daily price and stock monitoring and **Integrations** (Google Sheets, Slack, webhooks) to get the data where you work.

### FAQ

**Do I need an AliExpress account or API key?** No.

**Which countries are supported?** Any two-letter country code AliExpress ships to. Each extra country is one more lookup per product.

**What am I charged for?** Successful search results, products and reviews only. Failed or unavailable products and invalid URLs are free.

**Can I get the full HTML description?** Each product has a `descriptionUrl` that links to AliExpress' description page.

**Is it legal?** The Actor collects publicly available product information that anyone can see without logging in. Reviewer names are masked by AliExpress. Make sure your use complies with AliExpress' terms and the laws that apply to you.

**Something broke?** Open an issue on the Actor's Issues tab with the run ID.

# Changelog

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

# Actor input Schema

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

Keywords to search on AliExpress, e.g. "wireless earbuds". One search per keyword.

## `searchUrls` (type: `array`):

AliExpress search result or category page URLs (filters and sorting in the URL are kept), e.g. https://www.aliexpress.com/category/200000346/smart-watches.html

## `maxResultsPerSearch` (type: `integer`):

Stop each search or category after this many products (about 60 per page).

## `scrapeSearchResultDetails` (type: `boolean`):

Also scrape full product details (variants, store, shipping) for every search result. Each one is charged as a product.

## `productUrls` (type: `array`):

AliExpress product pages (e.g. https://www.aliexpress.com/item/1005006959700436.html) or bare product IDs. Returns full details plus shipping for each ship-to country.

## `shipToCountries` (type: `array`):

Two-letter country codes (US, GB, DE, ZA, BR, AU…). Shipping cost, delivery estimate and availability are returned for each. The first country also sets prices and search results.

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

Reviews to scrape for each product (0 = none). 20 reviews per page.

## `reviewsWithPhotosOnly` (type: `boolean`):

Return only reviews that include buyer photos.

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

Three-letter currency code for prices and shipping fees, e.g. USD, EUR, GBP, ZAR.

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

Locale for titles and texts, e.g. en_US, es_ES, fr_FR, de_DE, pt_BR.

## `maxConcurrency` (type: `integer`):

Products scraped in parallel. Keep low to avoid AliExpress rate limits.

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

Used only when needed. Search and reviews go out directly; product details try the run's own IP first and then rotate through these proxies, because AliExpress blocks its product API on most datacenter IPs. Keep the residential default for reliable product details.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "maxResultsPerSearch": 5,
  "scrapeSearchResultDetails": false,
  "shipToCountries": [
    "US"
  ],
  "maxReviewsPerProduct": 0,
  "reviewsWithPhotosOnly": false,
  "currency": "USD",
  "language": "en_US",
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `searchResults` (type: `string`):

One row per product found in a search or category.

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

Full product details with variants, store and shipping per country.

## `reviews` (type: `string`):

One row per review.

## `runSummary` (type: `string`):

Totals per item type.

# 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"
    ],
    "maxResultsPerSearch": 5,
    "shipToCountries": [
        "US"
    ],
    "maxReviewsPerProduct": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jeanswiegers/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"],
    "maxResultsPerSearch": 5,
    "shipToCountries": ["US"],
    "maxReviewsPerProduct": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("jeanswiegers/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"
  ],
  "maxResultsPerSearch": 5,
  "shipToCountries": [
    "US"
  ],
  "maxReviewsPerProduct": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call jeanswiegers/aliexpress-scraper --silent --output-dataset

```

## MCP server setup

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