# AliExpress Product Reviews Scraper: Ratings & Buyer Photos (`xmolodtsov/aliexpress-reviews-scraper`) Actor

Collect public AliExpress product reviews, ratings, English translations, buyer photos, seller replies and follow-up feedback. Filter by stars or photos and export JSON, CSV or Excel.

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

## Pricing

from $1.10 / 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

Collect **AliExpress product reviews** as one row per review: ratings, English translations when available, original text, buyer photos, variants, helpful votes, public display names, seller replies and follow-up feedback. Use product URLs or IDs for product research, rating comparisons and review exports.

![AliExpress product reviews avatar](https://api.apify.com/v2/key-value-stores/2DxCOvbMjhvK3S1qP/records/aliexpress-reviews-avatar.png)

### Quick start

1. Paste one or more public AliExpress item URLs into **Product URLs or IDs**.
2. Choose a per-product limit; the prefill saves up to 20 reviews from one product.
3. Run the Actor and open the **Overview** dataset view. Export JSON, CSV or Excel.

```json
{
  "productUrls": ["https://www.aliexpress.com/item/1005007334128523.html"],
  "maxReviewsPerProduct": 100,
  "maxItems": 1000,
  "sort": "default",
  "stars": [],
  "withPhotosOnly": false,
  "proxyConfiguration": {"useApifyProxy": true}
}
```

The `productUrls` list accepts 1–100 URLs on regional AliExpress domains or bare `1005…` item IDs. URLs are trimmed and duplicate products removed. A mix of valid and invalid entries runs with a warning; an entirely invalid list fails with `invalid:`. Search-card IDs beginning `3256…` are rejected; open the product and copy its item URL.

### Inputs and filtering

| Input | Default | Meaning |
|---|---|---|
| `productUrls` | Required; working prefill provided | Product URLs or exact item IDs, processed in input order |
| `maxReviewsPerProduct` | `100` | Per-product saved-row cap; `0` means all reachable, still bounded by `maxItems` |
| `maxItems` | `1000` | Run-wide saved-review cap, 1–100,000; Free-plan limits also apply |
| `sort` | `default` | Source slice order, or `newest` for local date sorting of the reachable set |
| `stars` | `[]` | Select ratings 1–5. The platform multiselect sends strings such as `["1","5"]`; numeric API values also work |
| `withPhotosOnly` | `false` | Keep reviews that have buyer photos |
| `proxyConfiguration` | Apify datacenter | Optional residential; explicit choices do not silently switch |

Star filters use separate server-side slices. Combined stars and photos use those star slices with a local photo filter, so scanning may fetch reviews that are not saved. Photo-only requests use the source's image slice when possible. An empty filtered answer is a valid result.

`newest` collects the accessible reviews for each product, sorts their dates descending locally, then takes the requested number. It can make many more requests than `default`, even for a small output cap. Reviews with no date sort last. Products still run in input order; sorting is per product.

### Output example

This row came from a real private proof run. Review IDs are exact strings: numeric conversion can silently round them.

```json
{
  "productId": "1005007334128523",
  "productUrl": "https://www.aliexpress.com/item/1005007334128523.html",
  "reviewId": "60097261297836640",
  "rating": 5,
  "text": "Not too bright, but good enough to illuminate a room for navigation or mood. \r \n The usb cord is short, about 20 cm from light to control switch and 20 cm from switch to usb a plug. \r \n I'll splice some wires for my purpose.",
  "originalText": "Not too bright, but good enough to illuminate a room for navigation or mood.  The usb cord is short, about 20 cm from light to control switch and 20 cm from switch to usb A plug.  I'll splice some wires for my purpose.",
  "originalLanguage": "en",
  "date": "2026-05-26T00:00:00.000Z",
  "reviewerName": "S***t",
  "reviewerCountry": "US",
  "isAnonymous": false,
  "sku": "Emitting Color:Natural White Length:1m",
  "images": [],
  "helpfulCount": 0,
  "notHelpfulCount": 0,
  "sellerReply": null,
  "logistics": "AliExpress Selection Standard Shipping",
  "followUp": null,
  "scrapedAt": "2026-10-21T10:47:29.849Z"
}
```

![Real saved review output](https://api.apify.com/v2/key-value-stores/2DxCOvbMjhvK3S1qP/records/aliexpress-reviews-preview.png)

`text` prefers the source's English translation and falls back to the original. `originalText` preserves the original feedback; `originalLanguage` is the source-provided language label and may itself be inaccurate. `date` and `followUp.date` are ISO UTC dates when present. `reviewerName` is only the public display name, including anonymized forms; there is no identity or contact enrichment. `followUp` is an object with `text`, `date` and `images`, or null. Missing scalar values are null, and missing image lists are empty arrays. Replies, translations and follow-up fields are returned only when the public source supplies them.

### Pricing

Billing uses one **Review** event (`apify-default-dataset-item`) per saved dataset row. There is no start fee, photo fee, translation fee or seller-reply add-on. Filtering does not create additional billable result events.

| Apify pricing tier | Per 1,000 saved reviews |
|---|---:|
| FREE | $2.00 |
| BRONZE | $1.80 |
| SILVER | $1.40 |
| GOLD | $1.10 |
| PLATINUM / DIAMOND | $1.10 |

Example Actor result charges:

| Saved reviews | BRONZE total | GOLD total |
|---|---:|---:|
| 100 | $0.18 | $0.11 |
| 1,000 | $1.80 | $1.10 |
| 5,000 | $9.00 | $5.50 |

These totals cover the Actor's result events; your Apify account's applicable platform charges and credits are governed by its plan. Check the run's charge settings before collecting a large set.

#### Is it free?

Apify Free-plan accounts can use **up to 100 results per run and 20 runs per calendar month (UTC)**. These are developer limits. The 21st run succeeds gracefully with a quota message and makes no target requests. The allowance resets on the first day of the UTC month. Paid Apify plans use the requested input limits. The pricing tier and account's credits remain subject to Apify billing; the allowance is not a promise of unlimited free use.

### Reach, reliability and guarantees

- The source exposes at most **5,000 reachable reviews per filter slice**. When an all-rating job needs deeper collection, the Actor walks the five star slices. This can extend reach to at most 25,000 reviews; a single star slice above 5,000 remains truncated. The proof product returned all **5,208/5,208** reported review records, compared with 5,225 total ratings; ratings without review records are not fabricated.
- The Actor uses fixed pages of 100, checks the returned page number, stops on wrapped/repeated pages and deduplicates exact IDs per product. It logs source truncation once per product and records it in `STATISTICS`.
- `newest` sorts the reachable set. It does not guarantee the globally newest reviews when a source slice is inaccessible or truncated. Source ordering, counts and live reviews can change during a run.
- Saved rows survive later request failures. Partial runs with saved rows finish successfully and explain why they stopped. A soft deadline stops requests before the hard timeout and saves collected rows. An exhausted run charge budget succeeds with “run budget reached.”
- Zero rows succeed as “no results” only after valid empty answers for all processed products/filters. Unknown or delisted items can return the same valid empty answer as an item with no reviews; the Actor does not claim to distinguish them. Zero-row processing failures fail with a concise reason such as `blocked:`, `network:`, `outdated:` or `invalid:`.
- Restarts seed exact product/review keys and saved counts from the existing dataset, preserving run and product caps without re-pushing saved reviews. A restart may fetch earlier source pages again. Deduplication is per run, not a historical cache across separate runs.
- Default memory is 256 MB, capped at 512 MB. No account, login or private API credentials are required for the public reviews endpoint. Source changes can still interrupt collection; the private proof is a measured sample, not a future availability promise.

### API and integrations

Call the Actor with the same JSON through Apify's API. Keep your token in an environment variable:

```bash
curl -X POST \
  'https://api.apify.com/v2/acts/xmolodtsov~aliexpress-reviews-scraper/run-sync-get-dataset-items' \
  -H "Authorization: Bearer $APIFY_API_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"productUrls":["1005007334128523"],"maxReviewsPerProduct":20}'
```

For deep or newest jobs, use an asynchronous Actor run and download the dataset after completion. Use Apify integrations with n8n, Make, webhooks or scheduled runs to pass the input and consume the resulting dataset. Existing dataset exports work for spreadsheets and analytics pipelines. The Actor does not create tasks or schedules automatically.

### Support

Open the Actor's Issues tab with your input, run ID and the expected result. Never include account credentials.

### More scrapers from this developer

**TikTok:** [TikTok Search Scraper](https://apify.com/xmolodtsov/tiktok-search-scraper): videos and creators for any keyword, pay per result · [TikTok Profile Scraper (Pay Per Result)](https://apify.com/xmolodtsov/tiktok-profile-scraper): profiles, followers and latest posts by username · [TikTok Comments Scraper](https://apify.com/xmolodtsov/tiktok-comments-scraper): comments and full reply threads from any video · [TikTok Hashtag Scraper](https://apify.com/xmolodtsov/tiktok-hashtag-scraper): videos for any hashtag, with views, likes and music · [TikTok Sound & Music Scraper](https://apify.com/xmolodtsov/tiktok-sound-scraper): videos that use a sound or song · [TikTok Top Ads Scraper](https://apify.com/xmolodtsov/tiktok-top-ads-scraper): public Creative Center ad rankings, engagement, media and landing pages

**Social & news:** [Reddit Search Scraper](https://apify.com/xmolodtsov/reddit-scraper): posts by keyword, subreddit or author · [Google News Scraper](https://apify.com/xmolodtsov/google-news-scraper): Google News results as clean full-text articles · [Threads Replies Scraper](https://apify.com/xmolodtsov/threads-replies-scraper): public post replies, likes, authors and inline nested replies

**Instagram:** [Instagram Reel Scraper](https://apify.com/xmolodtsov/instagram-reel-scraper): public profile reels, plays, captions, music and media URLs · [Instagram Comment Scraper](https://apify.com/xmolodtsov/instagram-comment-scraper): public post and reel comments, likes, timestamps and usernames

**E-commerce:** [Prom.ua Product Search Scraper](https://apify.com/xmolodtsov/prom-ua): Prom.ua product search results, no browser needed · [Amazon Product Search & Bestsellers Scraper](https://apify.com/xmolodtsov/amazon-search-scraper): search results, Best Sellers and product details from Amazon · [AliExpress Search Scraper](https://apify.com/xmolodtsov/aliexpress-search-scraper): aliExpress products by keyword with prices, orders and shipping

**Maps & leads:** [Google Maps Scraper](https://apify.com/xmolodtsov/google-maps-scraper): places, leads and emails from Google Maps

**Ads:** [Facebook Ad Library Scraper (Meta Ads Library)](https://apify.com/xmolodtsov/facebook-ads-library-scraper): ads from the Meta Ad Library, with EU reach and payers · [Google Ads Transparency Scraper](https://apify.com/xmolodtsov/google-ads-transparency-scraper): Google ad creatives by advertiser or domain, with regional details

**Video:** [YouTube Transcript Scraper](https://apify.com/xmolodtsov/youtube-transcript-scraper): transcripts, subtitles and captions from YouTube videos · [YouTube Shorts Scraper](https://apify.com/xmolodtsov/youtube-shorts-scraper): Shorts of any channel with exact views, likes and duration · [YouTube Channel Scraper](https://apify.com/xmolodtsov/youtube-channel-scraper): every video of a channel, with channel stats · [YouTube Search Scraper](https://apify.com/xmolodtsov/youtube-search-scraper): search results and videos for any keyword · [YouTube Comments Scraper](https://apify.com/xmolodtsov/youtube-comments-scraper): comments, replies and likes from any video · [Bilibili Comments Scraper](https://apify.com/xmolodtsov/bilibili-comments-scraper): public hot comments and reply threads by video or keyword

**Jobs:** [SEEK Job Listings Scraper](https://apify.com/xmolodtsov/seek-jobs-scraper): public AU/NZ job listings, salaries and redacted descriptions

### Frequently asked questions

**Is it legal to scrape AliExpress reviews?** This Actor requests publicly accessible product reviews and returns only publicly displayed review information, including display names as shown. It does not log in, access private profiles or collect contact fields. Public display names and review text may still be personal data. Use the results in accordance with applicable law, including GDPR/CCPA, and AliExpress terms; public availability alone does not determine lawful reuse. Avoid identifying reviewers, contacting them or republishing personal data unnecessarily.

**Why are there fewer reviews than ratings?** Source totals can include ratings with no review record, and filter slices have finite depth. Photos/stars narrow the saved set. A requested count is a cap, not a guaranteed yield.

**Why can newest take longer?** The source ignores sort parameters. The Actor has to scan its reachable set before it can sort and select reviews locally.

**Can I download buyer images?** `images` contains public source URLs, and follow-up photos appear separately when supplied. The Actor does not download image binaries. URLs and content can disappear or change.

# Changelog

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

# Actor input Schema

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

One to 100 public AliExpress item URLs on regional domains or exact 1005… product IDs. Trimmed and deduplicated; invalid entries are skipped when others are valid. 3256… search card IDs are unsupported; use item URLs.

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

Maximum saved reviews per product. 0 collects all reachable reviews, subject to maxItems and source depth. A slice exposes at most 5,000; star partitions extend total reach to at most 25,000.

## `sort` (type: `string`):

Default preserves the order of source slices. Newest scans the reachable set and sorts dates locally before taking the requested number; it costs more requests and cannot include inaccessible reviews.

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

Optional ratings to include, from 1 to 5. Empty means all ratings. Each selected rating uses its own server slice; photos are intersected locally.

## `withPhotosOnly` (type: `boolean`):

Include only reviews with original buyer photos. Uses the image slice when possible, or local photo filtering of star slices when combined with ratings or deeper collection.

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

Run-wide saved review cap across products, processed in input order. Apify free plan: 100 results/run and 20 runs/calendar month (UTC), a developer limit. Paid plans use the requested cap.

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

Apify datacenter by default. RESIDENTIAL is optional; explicit choices never fall back. Free runs always use Apify Proxy. Paid/local runs can select direct access or custom proxies.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/1005007334128523.html"
  ],
  "maxReviewsPerProduct": 20,
  "sort": "default",
  "withPhotosOnly": false,
  "maxItems": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One public review per row: productId, productUrl, reviewId (exact string), rating, text (translation preferred), originalText, originalLanguage, date, reviewerName, reviewerCountry, isAnonymous, sku, images, helpfulCount, notHelpfulCount, sellerReply, logistics, followUp {text,date,images} and scrapedAt. Missing scalars are null. No contact fields.

# 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/1005007334128523.html"
    ],
    "maxReviewsPerProduct": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("xmolodtsov/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/1005007334128523.html"],
    "maxReviewsPerProduct": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("xmolodtsov/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/1005007334128523.html"
  ],
  "maxReviewsPerProduct": 20
}' |
apify call xmolodtsov/aliexpress-reviews-scraper --silent --output-dataset

```

## MCP server setup

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