# AliExpress Reviews Scraper - Ratings, Photos & Translations (`mochiboo/aliexpress-reviews-scraper`) Actor

Reviews of any AliExpress product as data: stars, date, text with English translation, buyer country, variant bought, shipping method, helpful votes, photo URLs and follow-up comments. Or one summary row per product with star counts and review topics. No login, no browser.

- **URL**: https://apify.com/mochiboo/aliexpress-reviews-scraper.md
- **Developed by:** [mochi](https://apify.com/mochiboo) (community)
- **Categories:** E-commerce, Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

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 Reviews Scraper - reviews with rating, photos, English translation and buyer country, no login

Read the public reviews of any AliExpress product as data: stars, date, the review text with AliExpress's English translation, buyer country, the variant bought, shipping method, helpful votes, photo URLs and the buyer's follow-up comment. Or get one summary row per product with the average rating, star counts and AliExpress's own review topics. Built for dropshipping product research, supplier and quality checks, and review sentiment analysis.

Pay per result, at the rate shown in the pricing panel of this page, plus a very small per-run start fee. You are charged only for the results delivered.

Start it with no input at all and it reads two example products (about 150 reviews in about a minute), so you can see the output before you enter your own products.

### What you get

- **One row per review** (default): `rating` (1 to 5 stars), `date`, `text` and `textTranslated` (AliExpress's English translation), `buyerCountry`, `variant` (the option bought, e.g. `Color:Style 3`) and `skuId` (empty on some top sellers, see "Pooled counts" below), `images` (review photo URLs), `helpfulCount` and `notHelpfulCount`, `shippingMethod`, and the buyer's later comment: `followUpText`, `followUpTextTranslated`, `followUpDate`, `followUpDaysAfter`, `followUpImages`.
- **Product context on every row**: `productId`, `productUrl`, `reviewId`, `productAverageRating`, `productTotalReviews`, and the run settings (`filter`, `country`, `input`, `scrapedAt`).
- **Summary mode**: one row per product with `averageRating`, `totalReviews`, `positivePercent`, `stars5` to `stars1`, `withPhotos`, `withFollowUp`, `fromSelectedCountry` and `topics` (AliExpress's own review topics, each with `mentions` and `sentiment`, e.g. "poor packaging").
- **Pooled counts on some top sellers.** For some top sellers AliExpress pools the star votes of several identical listings: `stars5` to `stars1`, `averageRating` and `positivePercent` then cover more reviews than `totalReviews`, which counts the reviews of this product ID (the ones the actor can read). In a check on 2026-10-20, 5 of the 11 products with 47 or more reviews were like this, with 3 to 5 times more star votes than `totalReviews` (for example 146 reviews and 749 star votes). These are AliExpress's own figures and are passed on unchanged; `productAverageRating` on review rows is the same pooled average. `skuId` is empty for such products (AliExpress sends none); `variant` is still filled in.
- **Filters**: only reviews with photos, only reviews with a follow-up comment, only buyers from one country, a star range, a start date, text only.
- No browser and no login. Public review pages only.

### Input

| field | default | notes |
|---|---|---|
| `products` | the two example products | product URLs (`https://www.aliexpress.com/item/1005006691583009.html`) or item IDs (`1005006691583009`); duplicates are read once; with no input at all a run reads the two example products (`1005006691583009` and `1005010399232494`) |
| `outputMode` | `reviews` | `reviews` (one row per review) or `summary` (one row per product, one request each; the review filters and limits below do not apply to it) |
| `maxReviewsPerProduct` | 100 | counts delivered rows, 1 to 5000 |
| `onlyWithText` | true | skips star-only reviews; they are never charged |
| `filter` | `all` | `all`, `image` (with photos), `additional` (with a follow-up comment), `local` (buyers from `country`); summary mode ignores it |
| `country` | `US` | 2 letters; the country of the `local` filter and of the summary's `fromSelectedCountry` count; `US` also puts American buyers first in the unfiltered list (see "Good to know") |
| `minRating` / `maxRating` | 1 / 5 | keep only reviews inside this star range |
| `reviewsSince` | empty | `YYYY-MM-DD`; keep reviews on or after this date (AliExpress has no date sort, so the actor reads up to 250 pages per product to find them, see "Good to know") |
| `maxResults` | 2000 | maximum rows per run, up to 100000 |
| `proxyConfiguration` | Apify datacenter proxy | the setting the actor was tested with |

### Example output row (review; the text is shortened here)

```json
{
  "type": "review",
  "productId": "1005010399232494",
  "productUrl": "https://www.aliexpress.com/item/1005010399232494.html",
  "reviewId": "60098242905437387",
  "rating": 4,
  "date": "2026-08-09",
  "text": "This is a nice set. The glass container is nicely made and the markings are well printed and easy to read. I like the ...",
  "textTranslated": "This is a nice set. the glass container is nicely made and the markings are well printed and easy to read. i like the ...",
  "buyerCountry": "US",
  "variant": "Color:Style 3",
  "skuId": "12000052282029869",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/Aba791f9736234a40b7da56b71967e59bK.jpg"],
  "helpfulCount": 0,
  "notHelpfulCount": 0,
  "shippingMethod": "AliExpress Selection Standard Shipping",
  "followUpText": null,
  "followUpTextTranslated": null,
  "followUpDate": null,
  "followUpDaysAfter": null,
  "followUpImages": [],
  "productAverageRating": 4.6,
  "productTotalReviews": 139,
  "filter": "all",
  "country": "US",
  "input": "1005010399232494",
  "scrapedAt": "2026-10-20T10:06:57.000Z"
}
```

### Example output row (summary mode)

```json
{
  "type": "summary",
  "productId": "1005010399232494",
  "productUrl": "https://www.aliexpress.com/item/1005010399232494.html",
  "averageRating": 4.6,
  "totalReviews": 139,
  "positivePercent": 92.1,
  "stars5": 114, "stars4": 14, "stars3": 3, "stars2": 2, "stars1": 6,
  "withPhotos": 13,
  "withFollowUp": 2,
  "fromSelectedCountry": 18,
  "topics": [
    { "topic": "satisfactory", "mentions": 7, "sentiment": "positive" },
    { "topic": "poor packaging", "mentions": 6, "sentiment": "negative" }
  ],
  "country": "US",
  "input": "1005010399232494",
  "scrapedAt": "2026-10-20T10:06:57.000Z"
}
```

(`topics` lists every topic AliExpress returns for the product, six for this one; two are shown here.)

### Measured on the platform on 2026-10-20

Runs on the Apify platform with the default datacenter proxy (256 MB of memory unless noted). None was blocked: no 403, 429, redirect or non-data page in any request.

- **Default-shaped run** (a popular product, an ordinary product with 139 reviews, and one product with no reviews; defaults): 154 reviews from 16 requests in 51 seconds at 512 MB and 59 seconds at 256 MB. `reviewId`, `rating`, `date`, `buyerCountry`, `variant`, `skuId` and `shippingMethod` were filled in 100% of rows (`skuId` is empty on products where AliExpress pools several listings, see "What you get"), `text` and `textTranslated` in 97.4% (the other rows carry only a follow-up comment), `images` in 27% (reviews with photos), follow-up comments in 3%. No duplicate `reviewId`. The product with no reviews gave no row and one `no_reviews` entry in `FAILURES`.
- **The two example products** (what a run with no input reads, everything else at its default): 154 reviews from 15 requests in 56 to 71 seconds (three runs).
- **Ordinary products** (ten products from search results: nine with 6 to 83 units sold, one new listing): 6 of them had reviews with words, 15 rows in all; 3 had only star-only reviews (12 in total, no words), so they gave no rows and no charge by default; 1 had no reviews. The nine products with reviews had between 1 and 10 each.
- **Summary mode** on those ten products plus the two products of the first run: 11 summary rows from 12 requests in 35 seconds (the product without reviews gives no row).
- **Buyers from one country** (`filter: local`, `country: FR`, 20 reviews): 20 rows, every `buyerCountry` is `FR`.
- **Star range**: 20 reviews of 1 or 2 stars on a popular product (1,404 reviews) needed 63 requests, about 4 minutes, because only about 5% of its reviews are that low.
- **Start date**: 30 reviews since 2026-08-01 on a product with 6,294 reviews needed 182 requests, about 13.5 minutes, because AliExpress cannot sort by date. Star-range and date filters read pages until enough reviews match, up to 250 pages (5,000 reviews) per product and up to your per-product limit.
- **Speed**: about 3 to 5 seconds per request (the 2-second pause plus AliExpress's answer through the proxy): median 3.2 to 3.6 seconds, mean 3.6 to 4.5 seconds, and a few requests take 10 seconds or more (about 1 in 20 in a long run; the slowest we saw: 28 seconds). Each request returns 20 reviews, so 100 reviews take about 15 to 25 seconds; 300 reviews of a popular product took 18 requests and 73 seconds.
- **The 5,000-review limit** (250 pages, the most AliExpress serves for any list): one run read all 250 pages of a product with 6,294 reviews in 18.7 minutes (4.5 seconds per request) and delivered 4,996 reviews with words; another run read 204 consecutive pages of the same product in 12.6 minutes (3.7 seconds per request). No request was refused. So a full 250-page product takes about 15 to 19 minutes.
- **Time budget**: with a 45-second timeout and a far too large job, the run stopped early (at 200 reviews in one run, at 100 in another, depending on how fast AliExpress answered) with status SUCCEEDED and `RUN_SUMMARY` = `{"complete": false, "terminationReason": "time_budget", ...}`.

### Good to know

- **Many reviews are stars only.** On one ordinary product only 54 of 139 reviews (39%) had any words. That is why `onlyWithText` is on by default: star-only reviews are skipped and are never charged, and the summary mode still counts every star. A review with a photo but no words counts as star-only; switch `onlyWithText` off to get those too.
- **No "newest first" order.** AliExpress's review feed has no working date sort (the one we tested returned the identical order), so `reviewsSince` cannot skip ahead: the actor reads pages, at most 250 per product (5,000 reviews, all AliExpress serves for any list), until your per-product limit is reached, and keeps the reviews that match. A filter that rarely matches can read all 250 pages and return few rows. The order of the feed is not stable either; it shifts a little between requests, and the actor removes duplicates by `reviewId`.
- **Translations.** `textTranslated` is AliExpress's own English translation. For a review already in English it is a near copy that can differ in capital letters. The original wording is always in `text`.
- **Privacy.** Buyer names, avatars and gender are never collected. E-mail addresses and phone numbers that buyers write into review text are replaced with `[email redacted]` and `[phone redacted]`, best effort. Recognised: e-mail addresses (also written out, like `name (at) host (dot) com`), numbers with a leading + or 0, US formats, `tel:` and `wa.me` links, and any plain run of 9 to 13 digits such as a bare national mobile number. Can still slip through: numbers split into groups without a leading + or 0 (for example `612 345 678`), 8-digit local numbers and unusual spellings. A name that a buyer signs into the text cannot be removed.
- **Which links work.** Use the item ID from an `aliexpress.com/item/<id>.html` product URL. Short links (`a.aliexpress.com/_...`), store pages and search pages are not supported; they are listed in the `FAILURES` record as `unsupported_input`. A product with no reviews gives no row and is listed as `no_reviews`; neither is charged.
- **Pace.** The actor makes one request at a time with a 2-second pause, 20 reviews per request. On the platform that is about 3 to 5 seconds per request (see the measurements above): 100 reviews take about 15 to 25 seconds and the limit of 5,000 reviews per product (250 pages) about 15 to 19 minutes. A very large run stops shortly before the run timeout and saves what it has (raise the timeout for a very large job); the `RUN_SUMMARY` record says whether the run was complete (`complete`, `terminationReason`, `rowsPushed`).
- **If the platform restarts the run.** Apify sometimes moves a run to another server and starts it again; this actor then continues where it stopped instead of starting over: it keeps its place in the run's key-value store (`RESUME_STATE`) and reads back from the dataset which reviews it already delivered, so no review is delivered (or charged) twice, `rowsPushed` still equals the rows in the dataset, and `RUN_SUMMARY` gets a `restarts` count (the key is absent when the run was never restarted).
- **If AliExpress blocks the requests** (a 403 or 429 answer, a redirect or a non-data page), the actor stops at once, keeps the rows it already has, and does not retry or work around it. `RUN_SUMMARY.terminationReason` is then `blocked` and the page is listed in `FAILURES`. If the run is refused before any row was delivered, it fails with a clear message and nothing is charged.
- **Country and order.** Reviews are read in English (`lang=en_US`). The `country` setting also decides whose reviews come first: with `US` (the default) AliExpress lists American buyers first, so a capped run can be all US buyers (in one check all 100 rows of a default run, although only 15% of that product's reviews are American). Other codes, for example `DE`, gave a mixed list in our checks. Use one of them for a general mix, or `filter: local` to get one country on purpose.

Need product prices, ratings and sold counts from search results? See our AliExpress Search Scraper.

### Keywords

aliexpress reviews scraper, aliexpress review scraper, aliexpress product reviews, aliexpress feedback, aliexpress ratings, dropshipping product research, review sentiment analysis, aliexpress reviews api, aliexpress photos reviews

# Actor input Schema

## `products` (type: `array`):

AliExpress products to read the reviews of, one per entry: a product URL such as https://www.aliexpress.com/item/1005006691583009.html or just the item ID (1005006691583009). Use the item ID from aliexpress.com product URLs. Left as it is, a run reads the two example products.

## `outputMode` (type: `string`):

One row per review (default), or one summary row per product: average rating, total reviews, 1-5 star counts, positive %, counts with photos / follow-ups / from the selected country, and AliExpress's own review topics. Summary mode ignores the review filters and the per-product review limit (it reads one page per product); maxResults still caps the number of summary rows.

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

Counts delivered rows. Hard cap 5000.

## `onlyWithText` (type: `boolean`):

Skips star-only reviews (no words). They are never charged. Turn off to get every review.

## `filter` (type: `string`):

All reviews, only reviews with photos, only reviews with a follow-up comment, or only buyers from the selected country. Summary mode ignores this setting.

## `country` (type: `string`):

2-letter country code. It sets the country of the 'Only buyers from the selected country' filter and of the summary's fromSelectedCountry count, and with US (the default) AliExpress also lists American buyers first, so a capped run can be mostly American buyers; another code such as DE gives a more mixed list.

## `minRating` (type: `integer`):

Keep only reviews with at least this many stars (1 to 5).

## `maxRating` (type: `integer`):

Keep only reviews with at most this many stars (1 to 5).

## `reviewsSince` (type: `string`):

YYYY-MM-DD. AliExpress has no date sort, so the actor reads pages (at most 250 pages = 5,000 reviews per product, all AliExpress serves) until your per-product limit is reached and keeps the reviews on or after this date. A recent date on a product with thousands of reviews can need many pages.

## `maxResults` (type: `integer`):

Hard cap 100000.

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

Proxy used for the requests. The default Apify datacenter proxy is what the actor was tested with.

## Actor input object example

```json
{
  "products": [
    "https://www.aliexpress.com/item/1005006691583009.html",
    "1005010399232494"
  ],
  "outputMode": "reviews",
  "maxReviewsPerProduct": 100,
  "onlyWithText": true,
  "filter": "all",
  "country": "US",
  "minRating": 1,
  "maxRating": 5,
  "reviewsSince": "",
  "maxResults": 2000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per review (stars, date, text and English translation, buyer country, variant, photos, follow-up), or one summary row per product.

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

What the run wrote and how it ended (the RUN_SUMMARY record in the default key-value store).

# 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 = {
    "products": [
        "https://www.aliexpress.com/item/1005006691583009.html",
        "1005010399232494"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mochiboo/aliexpress-reviews-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 = {
    "products": [
        "https://www.aliexpress.com/item/1005006691583009.html",
        "1005010399232494",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("mochiboo/aliexpress-reviews-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 '{
  "products": [
    "https://www.aliexpress.com/item/1005006691583009.html",
    "1005010399232494"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call mochiboo/aliexpress-reviews-scraper --silent --output-dataset

```

## MCP server setup

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