# AliExpress Multi-Region Search, Store & Review Scraper (`vexaloom-labs/aliexpress-multi-region-search-store-and-review`) Actor

Search AliExpress or fetch product, store, and review records by ID or URL across 18 regional storefronts and 42 currencies, with price, rating, and ship-from/ship-to filters.

- **URL**: https://apify.com/vexaloom-labs/aliexpress-multi-region-search-store-and-review.md
- **Developed by:** [vexaloom-labs](https://apify.com/vexaloom-labs) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Multi-Region Search, Store & Review Scraper

Collect AliExpress search results, customer reviews, and basic product or store lookups for 19 shopper regions. Prices, currency, and review language follow the region you choose. No AliExpress login, cookies, or manual proxy setup is required.

### What this actor does

- Searches AliExpress by keyword and returns product cards (up to 60 per page before gift filtering), with price, original price, discount, rating, sold count, images, selling points, category, and ship-from country
- Supports 19 shopper regions and 42 currencies, with sort, price range, rating, ship-from, free-shipping, Choice, and 4-star filters
- Flags sponsored cards and $0.00 welcome-gift cards so you can keep or drop them
- Collects customer reviews page by page, including original text, translated text, rating, buyer country, photos, variant, shipping method, and follow-up reviews
- Looks up a product by ID or URL for its title, main image, canonical URL, and availability status
- Looks up a store by ID or URL for its store name, canonical store ID, seller ID, and description
- Omits empty fields from every record; dates are ISO when present and image URLs are absolute

### Modes and output

#### Keyword search (`mode=search`)

One record per product card:

`productId`, `title`, `productUrl`, `imageUrl`, `imageUrls[]`, `salePrice{amount,currencyCode,formatted,discountPercent}`, `originalPrice{amount,currencyCode,formatted}`, `discountPercent`, `currencyCode`, `rating`, `ordersText`, `ordersCount`, `sellingPoints[]`, `listedAt`, `productType`, `itemType`, `shipFromCountry`, `categoryId`, `isChoice`, `isSponsored`, `isWelcomeGift`, `region`, `sourceUrl`, `recordType`, `siteName`, `scrapedAt`.

`salePrice.amount` is the lowest price shown for the listing on the search card, not a selected variant's price.

#### Product lookup (`mode=byProduct`, or an item URL in `mode=byUrl`)

One record per requested product:

`productId`, `productUrl`, `canonicalUrl`, `title`, `imageUrl`, `status` (`ok`, `not_found`, or `blocked`), `region`, `recordType`, `siteName`, `scrapedAt`.

With `includeReviews` enabled, a `reviews[]` array is attached. This mode is a title/image/existence lookup: AliExpress loads price, rating, variants, specifications, shipping, and seller statistics through a separate anti-bot API that this actor does not promise. Use keyword search for card price and rating.

#### Store lookup (`mode=byStore`, or a store URL in `mode=byUrl`)

One record per requested store:

`storeId` (canonical), `storeNumber`, `storeName`, `storeUrl`, `storeDescription`, `sellerId`, `status`, `region`, `recordType`, `siteName`, `scrapedAt`.

AliExpress's store statistics API (positive-feedback rate, opening date, 180-day sales, followers) is not publicly reachable without the same protected API. Those fields are deliberately not advertised.

#### Reviews (`mode=byReviews`, a product ID list, or a review URL in `mode=byUrl`)

One record per review:

`productId`, `productRating`, `productReviewCount`, `reviewId`, `rating` (1–5), `reviewText`, `reviewTextTranslated`, `translationLanguage`, `reviewerName`, `reviewerCountry`, `reviewerHeadUrl`, `reviewedAt`, `skuInfo`, `imageUrls[]`, `helpfulCount`, `logistics`, `isFollowUp`, `followUpText`, `followUpDate`, `recordType`, `siteName`, `scrapedAt`.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search`, `byProduct`, `byStore`, `byReviews`, or `byUrl` |
| `searchQueries` | array | – | Keywords for `search`; one to 50 queries (the prefill example is `["phone case"]`) |
| `productIds` | array | – | Product IDs or item URLs for `byProduct` / `byReviews` |
| `storeIds` | array | – | Store IDs or store URLs for `byStore` |
| `urls` | array | – | Any AliExpress search, item, store, or review URLs for `byUrl` |
| `region` | string | `US` | Shopper country: `US`, `GB`, `DE`, `FR`, `ES`, `IT`, `NL`, `PT`, `PL`, `BR`, `MX`, `CA`, `AU`, `JP`, `KR`, `TR`, `SA`, `AE`, `IL`, or `GLOBAL` |
| `currency` | string | region default | Optional ISO-4217 override, e.g. `USD`, `EUR`, `BRL` |
| `language` | string | `en_US` | Storefront language and review translation language |
| `sortBy` | string | `default` | `default`, `orders_desc`, `price_asc`, or `price_desc` |
| `priceMin` / `priceMax` | number | `0` | Price bounds in the selected currency; `0` disables a bound |
| `ratingMin` | number | `0` | Minimum stars from 0 to 5; unrated items are skipped when set |
| `shipFrom` | string | any | Warehouse country code, e.g. `CN`, `US`, `ES` |
| `freeShippingOnly` | boolean | `false` | Only items with free-shipping advertising |
| `choiceOnly` | boolean | `false` | Only AliExpress Choice items |
| `fourStarPlus` | boolean | `false` | Only items rated 4.0 or higher. AliExpress's own 4-star filter can include 3.x cards, so the actor enforces the 4.0 cutoff after the page is fetched |
| `includeSponsored` | boolean | `true` | Include promoted cards, marked `isSponsored` |
| `includeWelcomeGifts` | boolean | `false` | Include $0.00 new-shopper gift cards, marked `isWelcomeGift` |
| `maxItems` | integer | `100` | Hard cap on emitted records (1–10,000) |
| `maxPages` | integer | `3` | Pages per query (1–60; 60 cards per page) |
| `includeReviews` | boolean | `false` | Attach reviews to product records |
| `maxReviewsPerProduct` | integer | `20` | Review cap per product (0–200; 0 uses 20) |
| `reviewFilter` | string | `all` | `all`, `withPhotos`, or `additional` |
| `includeProductStats` | boolean | `true` | Add product average rating and review count to review rows |

#### Example: search three regions

```json
{
  "mode": "search",
  "searchQueries": ["phone case", "wireless earbuds"],
  "region": "ES",
  "currency": "EUR",
  "sortBy": "orders_desc",
  "freeShippingOnly": true,
  "maxItems": 200,
  "maxPages": 3
}
```

#### Example: collect translated reviews

```json
{
  "mode": "byReviews",
  "productIds": ["1005010155028387", "1005012594256426"],
  "language": "es_ES",
  "maxReviewsPerProduct": 60,
  "reviewFilter": "withPhotos",
  "includeProductStats": true
}
```

#### Example: resolve mixed URLs

```json
{
  "mode": "byUrl",
  "urls": [
    "https://www.aliexpress.com/item/1005010155028387.html",
    "https://www.aliexpress.com/store/1101493050",
    "https://www.aliexpress.com/w/wholesale-phone-case.html"
  ]
}
```

### Use cases

- Compare keyword pricing and sales signals across countries and currencies
- Build a review corpus with translated text for sentiment analysis
- Monitor a product line's card prices and discounts on a schedule
- Resolve pasted AliExpress product or store links into structured records
- Feed product-card and review data into spreadsheets, databases, or AI pipelines

### Limits

- **No full item-detail scraping.** AliExpress renders item price/rating/variants/specs/shipping/seller data through a protected client-side API. This actor returns an item's title, image, and canonical URL; it does not promise the rest.
- **No store statistics.** The store profile API is behind the same protection, so store rating, positive-feedback rate, opening date, and 180-day sales are not returned.
- **Search cap.** AliExpress serves 60 cards per page and stops at page 60, so one query exposes at most 3,600 raw cards (60 pages x 60). Cross-page dedupe and the default gift filter usually return fewer; a default US page produced roughly 30-45 rows in tests. Split broad searches by price, sort order, or narrower keywords for more coverage.
- **Card price is a listing minimum.** It is the lowest price across variants shown on the card, not a selected SKU's price.
- **Conditional fields.** Ratings, discounts, photos, avatars, and follow-ups are only present when the source has them. They are omitted, never filled with a placeholder.
- **Review dates in non-English languages.** AliExpress localizes review month names (for example `ENE`, `FEV`, `ABR`). The current parser recognizes English month abbreviations, so some `reviewedAt` values are omitted when `language` is not `en_US` even though the source has a date. Use `language=en_US` when every review needs a date.
- **The 4-star filter is enforced by the actor.** AliExpress's own 4-star filter can include 3.x cards (3.7-3.9 was observed); when `fourStarPlus` is on, the actor removes anything below 4.0.
- **Review order.** The public review endpoint does not support a sort parameter; reviews are returned in AliExpress's default order.
- **Welcome gifts.** Some US searches show $0.00 gift cards. They are excluded by default; enable `includeWelcomeGifts` to keep them with the `isWelcomeGift` flag.

### FAQ

**Do I need an AliExpress account or cookies?**
No. The actor reads public search, review, product, and store pages without logging in.

**Do I need to configure a proxy?**
No. AliExpress rate limits are handled automatically; there is nothing to configure.

**Why does `byProduct` not return price, rating, or variants?**
AliExpress loads those fields through a separate protected API that is not reliably reachable without a browser session. The actor returns the reliable part — title, image, canonical URL, and status — rather than pretending to have the rest. Use keyword search for card price and rating.

**Why is there no store rating or follower count?**
AliExpress serves store statistics from a protected profile API. Only the public store name, canonical ID, seller ID, and description are returned.

**Why does the returned currency sometimes differ from what I picked?**
The actor sets the shopper region and currency, and records the currency AliExpress actually returned. If you need a specific currency, set both `region` and `currency`.

**How many products can one search return?**
Up to 60 cards per page and 60 pages per query (3,600 raw cards; fewer after gift filtering and cross-page dedupe). Use narrower keywords or price ranges to partition larger catalogs.

**Why are some reviews missing photos or translations?**
Photos, avatars, and follow-ups are optional on AliExpress. Translation depends on the review language and the selected `language`; translated text is omitted when the source does not provide it. Review dates are normalized from localized month names (Spanish, Portuguese, French, German, Italian, Russian, and English).

**Can I get more than 200 reviews for one product?**
No in one pass; the review cap is 200 per product. Run multiple products or split the review set.

**Is this affiliated with AliExpress?**
No. This is an independent actor that reads public AliExpress pages and is not operated or endorsed by AliExpress or Alibaba Group.

# Actor input Schema

## `mode` (type: `string`):

What to collect. search: keyword results. byProduct: product lookup by ID or URL. byStore: store lookup. byReviews: customer reviews. byUrl: auto-detect from pasted AliExpress links.

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

One or more keywords, e.g. "phone case" or "wireless earbuds". Each query is scraped up to maxPages pages.

## `productIds` (type: `array`):

Numeric AliExpress product IDs or item URLs. Both 1005… and 3256… ID formats are accepted.

## `storeIds` (type: `array`):

Numeric store IDs or /store/… URLs.

## `urls` (type: `array`):

Any mix of search, item, store and review URLs. The mode is detected per URL.

## `region` (type: `string`):

Country used for prices, availability and the storefront locale. Global leaves the region to the requesting IP.

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

Optional ISO-4217 currency. Leave blank to use the region's usual currency. The currency actually returned is recorded in every record.

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

Storefront language and the language used to translate review text.

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

How keyword results are ordered. AliExpress does not expose a newest sort.

## `priceMin` (type: `number`):

Minimum price in the selected currency. 0 disables the lower bound.

## `priceMax` (type: `number`):

Maximum price in the selected currency. 0 disables the upper bound.

## `ratingMin` (type: `number`):

Minimum star rating from 0 to 5. Products without a rating are skipped when a threshold is set.

## `shipFrom` (type: `string`):

Only show items stocked in this country. Leave blank for any warehouse.

## `freeShippingOnly` (type: `boolean`):

Only show items advertised with free shipping.

## `choiceOnly` (type: `boolean`):

Only show AliExpress Choice items.

## `fourStarPlus` (type: `boolean`):

Only show items rated 4.0 or higher. The actor enforces the 4.0 threshold after AliExpress returns its filtered page.

## `includeSponsored` (type: `boolean`):

Include promoted product cards; they are marked isSponsored in the output.

## `includeWelcomeGifts` (type: `boolean`):

Include $0.00 new-shopper gift cards; they are marked isWelcomeGift and have no normal price.

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

Hard cap on records emitted by the run.

## `maxPages` (type: `integer`):

Maximum result pages per query (60 products per page, up to 60 pages).

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

Fetch customer reviews for each product (slow and adds records to the product).

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

Review cap per product when reviews are fetched. 0 uses the default of 20.

## `reviewFilter` (type: `string`):

Which reviews to collect.

## `includeProductStats` (type: `boolean`):

Add each product's average rating and total review count to review records.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "phone case"
  ],
  "productIds": [
    "1005010155028387"
  ],
  "storeIds": [
    "1101493050"
  ],
  "urls": [
    "https://www.aliexpress.com/item/1005010155028387.html"
  ],
  "region": "US",
  "currency": "USD",
  "language": "en_US",
  "sortBy": "default",
  "priceMin": 0,
  "priceMax": 0,
  "ratingMin": 0,
  "shipFrom": "",
  "freeShippingOnly": false,
  "choiceOnly": false,
  "fourStarPlus": false,
  "includeSponsored": true,
  "includeWelcomeGifts": false,
  "maxItems": 3,
  "maxPages": 1,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "reviewFilter": "all",
  "includeProductStats": true
}
```

# Actor output Schema

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

Dataset containing AliExpress product, store, or review records for the selected mode.

# 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 = {
    "mode": "search",
    "searchQueries": [
        "phone case"
    ],
    "productIds": [
        "1005010155028387"
    ],
    "storeIds": [
        "1101493050"
    ],
    "urls": [
        "https://www.aliexpress.com/item/1005010155028387.html"
    ],
    "region": "US",
    "currency": "USD",
    "language": "en_US",
    "sortBy": "default",
    "priceMin": 0,
    "priceMax": 0,
    "ratingMin": 0,
    "shipFrom": "",
    "freeShippingOnly": false,
    "choiceOnly": false,
    "fourStarPlus": false,
    "includeSponsored": true,
    "includeWelcomeGifts": false,
    "maxItems": 3,
    "maxPages": 1,
    "includeReviews": false,
    "maxReviewsPerProduct": 20,
    "reviewFilter": "all",
    "includeProductStats": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("vexaloom-labs/aliexpress-multi-region-search-store-and-review").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 = {
    "mode": "search",
    "searchQueries": ["phone case"],
    "productIds": ["1005010155028387"],
    "storeIds": ["1101493050"],
    "urls": ["https://www.aliexpress.com/item/1005010155028387.html"],
    "region": "US",
    "currency": "USD",
    "language": "en_US",
    "sortBy": "default",
    "priceMin": 0,
    "priceMax": 0,
    "ratingMin": 0,
    "shipFrom": "",
    "freeShippingOnly": False,
    "choiceOnly": False,
    "fourStarPlus": False,
    "includeSponsored": True,
    "includeWelcomeGifts": False,
    "maxItems": 3,
    "maxPages": 1,
    "includeReviews": False,
    "maxReviewsPerProduct": 20,
    "reviewFilter": "all",
    "includeProductStats": True,
}

# Run the Actor and wait for it to finish
run = client.actor("vexaloom-labs/aliexpress-multi-region-search-store-and-review").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 '{
  "mode": "search",
  "searchQueries": [
    "phone case"
  ],
  "productIds": [
    "1005010155028387"
  ],
  "storeIds": [
    "1101493050"
  ],
  "urls": [
    "https://www.aliexpress.com/item/1005010155028387.html"
  ],
  "region": "US",
  "currency": "USD",
  "language": "en_US",
  "sortBy": "default",
  "priceMin": 0,
  "priceMax": 0,
  "ratingMin": 0,
  "shipFrom": "",
  "freeShippingOnly": false,
  "choiceOnly": false,
  "fourStarPlus": false,
  "includeSponsored": true,
  "includeWelcomeGifts": false,
  "maxItems": 3,
  "maxPages": 1,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "reviewFilter": "all",
  "includeProductStats": true
}' |
apify call vexaloom-labs/aliexpress-multi-region-search-store-and-review --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vexaloom-labs/aliexpress-multi-region-search-store-and-review"
        }
    }
}
```

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/fViwyNdEyDapUpGXy/builds/BqmW8MdoJaOgZceAU/openapi.json
