# AliExpress Reviews Scraper (`dami_studio/aliexpress-reviews-scraper`) Actor

Buyer reviews of AliExpress products by link or id: star rating, text and AliExpress's translation of it, date, buyer country, variant, photos and follow-up reviews. Filter by star rating, photos, follow-ups or buyers in your country. No login.

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

## Pricing

from $0.24 / 1,000 reviews

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

**Paste AliExpress product links and get the buyer reviews AliExpress lists for them, one row per review**: the star
rating, what the buyer wrote and AliExpress's translation of it, the date, the buyer's country, the variant they
bought, their photos and any follow-up review. You pick the language the translations come in.

AliExpress shows at most 5,000 reviews of any one list. A product with 12,000 reviews gives you its first 5,000,
unless you pick star ratings, which reads each rating as a list of its own. And many reviews are stars and nothing
else: on a phone case we tested, two in three had no words, so `text` is empty on a lot of rows.

| | |
|---|---|
| **Input** | AliExpress product links from any AliExpress site, or product ids |
| **Output** | One row per review: rating, text and its translation, date, buyer country, variant, photos, helpful votes, follow-up review |
| **Ceiling** | 5,000 reviews per product for each filter, up to 25,000 per product with star ratings picked |
| **Speed** | Roughly 3,000 to 5,000 reviews a minute |
| **Account needed** | None from you |
| **Price** | $0.25 per 1,000 reviews, flat on every plan. The free plan's $5 a month covers about 20,000 |

### 🔍 What AliExpress Reviews Scraper does

It reads the review list under each product, the one a shopper scrolls through on the product page, and hands it
back as a table. Links from aliexpress.com and its language sites, aliexpress.us and the mobile site all work, and so
does the bare product id, the long number in the link.

Every written review comes back twice: as the buyer wrote it, in `text`, and as AliExpress translated it into the
language you chose, in `translatedText`. A Brazilian buyer's "demorou para chegar e chegou quebrado" sits next to "It
took a while to arrive and it arrived broken". The translation is AliExpress's own machine translation, so read it as
a guide rather than a quote.

Dates come back as the site writes them in your language, and as a plain date like 2025-10-28 whatever the language.

AliExpress can filter a product's reviews by star rating, by photos, by follow-up reviews and by buyers in your
country. Those are the filters on offer because they are the ones AliExpress actually applies, and each review is
checked against the filter you picked before it counts.

### 📋 What data you get from each AliExpress review

| What you get | Field |
|---|---|
| Star rating, 1 to 5 | `rating` |
| What the buyer wrote, and AliExpress's translation of it | `text`, `translatedText`, `translationLanguage` |
| When it was written | `reviewDate`, `reviewDateText` |
| The buyer's masked name and country | `buyerName`, `buyerCountry` |
| The variant they bought | `variant`, `variantId` |
| Photos posted with the review | `photos` |
| Helpful and unhelpful votes | `helpfulVotes`, `unhelpfulVotes` |
| How the order was shipped | `shippingMethod` |
| The follow-up review, when there is one: text, translation, date, days after the first review, photos | `followUp` |
| The product's average rating and number of ratings | `productRating`, `productRatingCount` |
| Which product the review sits under, and the link you gave | `productId`, `productUrl`, `input` |
| The review's own id, for matching across runs | `reviewId` |

### ▶️ How to scrape AliExpress reviews

1. Open [AliExpress Reviews Scraper](https://apify.com/dami_studio/aliexpress-reviews-scraper) and click
   **Try for free**.
2. Paste product links into **Product links or ids**, one per line.
3. Set **Reviews per product**. With a long list of products, set **Reviews in total** too, since you pay per review.
4. Pick **Star ratings** or a **Review type** if you only want some of the reviews, and a language under
   **Translate reviews into**.
5. Click **Start**, then download the dataset as JSON, CSV or Excel, or read it through the Apify API.

Start it with the list empty to see one sample row first. It isn't charged.

### 💰 How much does it cost to scrape AliExpress reviews?

**$0.25 per 1,000 reviews.** Flat on every Apify plan, with no volume tiers. On the free plan, the $5 Apify gives you
each month covers about 20,000 reviews.

You pay for reviews that come back and nothing else. The sample row costs nothing, and so do the notes the run leaves
about a product (no reviews, couldn't be read, AliExpress's limit reached), reviews dropped because they didn't match
your filter, and a review that turns up twice.

### 📥 What you give it

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/1005007429636284.html",
    "1005006507011550"
  ],
  "maxReviewsPerProduct": 500,
  "stars": ["1", "2"],
  "language": "en_US"
}
```

| Field | Default | What it is |
|---|---|---|
| `productUrls` | none | Product links from any AliExpress site, or product ids. Up to 100 per run. Short share links like a.aliexpress.com/\_... carry no id, so open one in a browser and paste the full link. |
| `maxReviewsPerProduct` | `100` | The most reviews from one product, up to 25,000. Past 5,000 it only helps with star ratings picked. |
| `maxReviews` | `10000` | The most reviews in the whole run. This is your spending cap. |
| `stars` | any rating | Only these ratings, read in the order you list them, each as its own list of up to 5,000. |
| `reviewType` | `all` | `photos` (a photo in the review or in its follow-up), `followUps`, or `localBuyers` (buyers in `country`). Can't be combined with `stars`. |
| `country` | `US` | A two-letter code, used by `localBuyers`. AliExpress may also order the reviews differently for another country. |
| `language` | `en_US` | The language `translatedText` comes in: English, French, Spanish, German, Italian, Portuguese, Dutch, Polish, Turkish, Russian, Japanese, Korean, Arabic, Thai, Hebrew or Indonesian. |

A value AliExpress wouldn't apply is refused before the run reads anything, so a misspelt filter never turns into an
unfiltered run you pay for.

### 📤 What you get back

A real row from a run on 3 October 2026: a 1-star review of a keyboard and mouse set, with a follow-up the buyer
posted the next day.

```json
{
  "recordType": "review",
  "productId": "1005007429636284",
  "productUrl": "https://www.aliexpress.com/item/1005007429636284.html",
  "input": "https://www.aliexpress.com/item/1005007429636284.html",
  "reviewId": "60093252537173152",
  "rating": 1,
  "text": "demorou para chegar e chegou quebrado.",
  "translatedText": "It took a while to arrive and it arrived broken.",
  "translationLanguage": "en_US",
  "reviewDate": "2025-10-28",
  "reviewDateText": "28 Oct 2025",
  "buyerName": "p***r",
  "buyerCountry": "BR",
  "variant": "Color:Black Axis Body:Portuguese",
  "variantId": null,
  "photos": [
    "https://ae-pic-a1.aliexpress-media.com/kf/Aab90224b35144c36bbda2001c2b9ec3cH.jpg",
    "https://ae-pic-a1.aliexpress-media.com/kf/A8428be5a94524ad891cb90d0db59ed74k.jpg",
    "https://ae-pic-a1.aliexpress-media.com/kf/A1257ce93fcd34ac1b78468ba3e1e14d1t.jpg"
  ],
  "helpfulVotes": 0,
  "unhelpfulVotes": 0,
  "shippingMethod": "Aliexpress Selection Standard",
  "followUp": {
    "text": "chegou que rado, por isso vou devolver.",
    "translatedText": "It arrived too late, so I will return it.",
    "date": "2025-10-29",
    "dateText": "29 Oct 2025",
    "daysAfterReview": 0,
    "photos": [
      "https://ae-pic-a1.aliexpress-media.com/kf/A1f6b6fef431248388263ed97a5394e8b1.jpg",
      "https://ae-pic-a1.aliexpress-media.com/kf/A0f7d7aaf3bcf43c0b9f72c559857b1501.jpg"
    ]
  },
  "productRating": 4.7,
  "productRatingCount": 127,
  "scrapedAt": "2026-10-03T14:59:34.045Z"
}
```

| Field | How to read it |
|---|---|
| `text` | `null` when the buyer left stars and no words, which is common. |
| `translatedText` | AliExpress's machine translation. In this row it turned the follow-up's "chegou que rado" (arrived broken, misspelt) into "arrived too late", so check anything that matters against `text`. |
| `reviewDate` | Always written 2025-10-28 style. `reviewDateText` is the date as the site wrote it in your language. |
| `buyerName` | Masked by AliExpress, like `p***r`, or "AliExpress Shopper" for buyers who post anonymously. |
| `variantId` | `null` on products whose reviews carry no variant id. `variant` still names the variant. |
| `photos` | Full-size photo links. Photos added later are in `followUp.photos`. |
| `followUp` | `null` when the buyer added nothing later. `daysAfterReview` counts from the first review. |
| `productRatingCount` | Every rating AliExpress counts for the product, which can be a little more than the reviews it lists. |

### 🧾 Reading the output

Three kinds of row land in your dataset, and `recordType` tells them apart.

| Row | How to spot it | Billed |
|---|---|---|
| A review | `recordType: "review"` | yes |
| The sample row | `recordType: "sample"`, `_sample: true` | no |
| A note about a product or an entry | `recordType: "diagnostic"`, `_diagnostic: true`, a `code` | no |

Filter on `recordType == "review"` and you have your reviews.

| Code | What it means |
|---|---|
| `NO_REVIEWS` | AliExpress lists no reviews for that product under your filter. It answers the same way for an id that doesn't exist, so check the id if you expected some. |
| `ALIEXPRESS_LIMIT` | The product has more reviews in that list than the 5,000 AliExpress shows. The message gives the number. |
| `NOT_READ` | AliExpress couldn't be read for that product this time. Nothing was charged for it; try it again later. |
| `PAGE_NOT_READ` | A later page couldn't be read, so that product stopped early. The reviews before it are in the dataset. |
| `INVALID_PRODUCT` | An entry that isn't an AliExpress product link or id. It was skipped. |
| `BAD_INPUT` | The input couldn't work at all, star ratings combined with a review type for example. The run stops before reading anything. |

`RUN_REPORT` in the key-value store lists each product with how many reviews AliExpress listed and how many came back.

### 💡 What people use it for

- Checking a product before you sell it yourself. Pull the 1- and 2-star reviews and read what actually goes wrong:
  arrived broken, wrong size, months in transit.
- Choosing which variant to stock. Every row names the colour or size the buyer bought, next to the rating they gave.
- Sentiment analysis across languages, with `translatedText` putting every review in one language first.
- Collecting buyer photos of the product as it actually arrived.

From a search to a shortlist, in three runs:

1. Run [AliExpress Products Scraper](https://apify.com/dami_studio/aliexpress-products-scraper) on your search term
   and keep the `productUrl` of the products with the most orders.
2. Paste those links here with **Star ratings** set to 1 and 2.
3. Group the rows by `productId` and drop the products whose unhappy buyers all say the same thing.

### 🚧 What it does not do

- **No more than 5,000 reviews of one list.** AliExpress doesn't show past that. Picking star ratings gives each
  rating its own 5,000.
- **No sorting by date and no date filter.** Reviews come in AliExpress's own order, which isn't newest first. Pull
  them and sort on `reviewDate` yourself.
- **No "written reviews only" filter.** AliExpress has none, so rows with stars and no text come back and are charged
  like the rest.
- **One filter at a time.** Star ratings can't be combined with photos, follow-ups or buyers in your country, because
  AliExpress applies one or the other.
- **No product details.** Title, price, stock and seller aren't here. Product rows from a search come from
  AliExpress Products Scraper.
- **No seller replies.** They don't come back with the reviews.
- **Short share links don't work.** They carry no product id.

### 🧭 Which AliExpress scraper do you need?

| If you want | Use |
|---|---|
| Buyer reviews of AliExpress products, with ratings, photos and translations | This one |
| AliExpress products for a search term, with price, rating and orders | [AliExpress Products Scraper](https://apify.com/dami_studio/aliexpress-products-scraper) |
| Buyer reviews of a 1688 product | [1688 Reviews Scraper](https://apify.com/dami_studio/1688-reviews-scraper) |
| Reviews and ratings of a Shopee shop | [Shopee Shop Reviews & Ratings Scraper](https://apify.com/dami_studio/shopee-shop-reviews-scraper) |

### ❓ Questions people ask

#### Do I need an AliExpress account to scrape reviews?

No. The reviews are read the way a shopper who isn't logged in sees them, and you don't sign in anywhere.

#### Why do the numbers differ from what I see on the product page?

The product page counts every rating, and the review list holds a few less: on one phone case, 12,530 ratings and
12,495 reviews listed. The list also shifts a little with the country you shop from. Open the product in a private
browser window, set to the same country, to compare like with like.

#### Can I get more than 5,000 reviews of one product?

Yes, with star ratings. Pick all five and each rating is read as its own list of up to 5,000. On that phone case it
gave 7,224 reviews instead of 5,000.

#### Can I call it from code or connect it to an AI assistant?

Yes. The [API tab](https://apify.com/dami_studio/aliexpress-reviews-scraper/api/python) has ready-made code for
Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
`https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/aliexpress-reviews-scraper`. Either way the run happens
on your Apify account at the same price.

#### Is scraping AliExpress reviews legal?

It reads public reviews any shopper can see without logging in, and buyer names come back masked the way AliExpress
shows them. Reviews can still hold personal data, which GDPR and similar laws cover, so have a reason for collecting
them. Apify's write-up on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) is a good
starting point, and we are not lawyers.

### 🆘 If something breaks

Open the **Issues** tab on the actor page. Include the product links you used and the run ID, and the log is enough
for us to see what happened.

# Actor input Schema

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

AliExpress product links from any AliExpress site, or just the product id (the long number in the link). Up to 100 in one run. Short share links such as a.aliexpress.com/\_... carry no id, so open one in a browser first and paste the full link.

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

The most reviews from one product. AliExpress shows at most 5,000 reviews of one list, so going past 5,000 only works with star ratings picked: each rating is read as its own list.

## `maxReviews` (type: `integer`):

The most reviews in the whole run, across every product. You pay per review returned, so this is your spending cap.

## `stars` (type: `array`):

Only reviews with these ratings, read in the order you list them. Leave it empty for every rating. It can't be combined with a review type other than All reviews: AliExpress filters by one thing at a time.

## `reviewType` (type: `string`):

With photos counts a photo posted in the review or in its follow-up. From buyers in your country uses the country below.

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

A two-letter country code such as US, GB, FR or BR. The From buyers in your country type reads it, and AliExpress can put reviews in a different order for a different country.

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

AliExpress's own translation of each written review comes back in translatedText, next to the original. The date text follows this language too; reviewDate is always written 2026-10-03 style.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/1005007429636284.html"
  ],
  "maxReviewsPerProduct": 100,
  "maxReviews": 10000,
  "reviewType": "all",
  "country": "US",
  "language": "en_US"
}
```

# Actor output Schema

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

One row per buyer review. Free rows marked \_diagnostic say when a product had no reviews, couldn't be read, or reached the 5,000 reviews AliExpress shows of one list.

## `report` (type: `string`):

What happened for each product: how many reviews AliExpress listed, how many came back, and why the run stopped.

# 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 = {
    "productUrls": [
        "https://www.aliexpress.com/item/1005007429636284.html"
    ],
    "maxReviewsPerProduct": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/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 = {
    "productUrls": ["https://www.aliexpress.com/item/1005007429636284.html"],
    "maxReviewsPerProduct": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/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 '{
  "productUrls": [
    "https://www.aliexpress.com/item/1005007429636284.html"
  ],
  "maxReviewsPerProduct": 100
}' |
apify call dami_studio/aliexpress-reviews-scraper --silent --output-dataset

```

## MCP server setup

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