# AliExpress Scraper (`muhammad_noman_riaz/aliexpress-scraper`) Actor

Scrape AliExpress search results and buyer reviews: title, price, discount, rating, orders, images and reviews with photos. No login. Pay only for products returned. Set ship-to country and currency.

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

## Pricing

from $4.00 / 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.
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 Scraper

Scrape AliExpress search results and buyer reviews fast. No login, no cookies to paste, and you pay only for products that come back.

### What does AliExpress Scraper do?

AliExpress Scraper collects public product data from AliExpress search. Give it keywords or search URLs, and it returns one clean record per product: product ID, URL, title, price and currency, original price, discount, star rating, order count and images. Turn on reviews and each product also gets its buyer reviews with star rating, English text, original text, date, buyer country, purchased variant and photos. Reviewer names are never collected. You choose the ship-to country, currency and language, so prices match the market you sell in. A search page returns 60 products in one request, so runs are fast and cheap. It is built for dropshippers, ecommerce sellers, price trackers and market researchers. It costs $4 per 1,000 products, and failed items are not charged. For variants, specifications and store details, use AliExpress Product Details Scraper.

### Why use it

- **Fast and reliable.** In a cloud test, 120 of 120 products with reviews came back with nothing skipped.
- **Cheaper.** $4 per 1,000 results.
- **Pay only for results.** Anything that could not be fetched is listed in `FAILED_ITEMS` and not charged.
- **No login.** It reads only what a logged-out visitor sees.
- **Light on traffic.** It reads the data AliExpress embeds in its own pages and the JSON its web app uses, not images or scripts.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `searchQueries` | array | | Keywords, for example `phone case` |
| `startUrls` | array | | Search URLs (`/w/wholesale-<keywords>.html`) |
| `maxItemsPerQuery` | integer | 20 | Products per search query or search URL |
| `includeReviews` | boolean | false | Adds buyer reviews |
| `maxReviewsPerProduct` | integer | 20 | Review limit per product |
| `shipTo` | string | US | Ship-to country code |
| `currency` | string | USD | Price currency |
| `language` | string | en_US | Locale for titles and reviews |
| `proxy` | object | Residential | Proxy settings |
| `maxConcurrency` | integer | 5 | Products processed in parallel |
| `maxRequestRetries` | integer | 5 | Attempts per item, each on a new IP |

Example:

```json
{
  "searchQueries": ["phone case"],
  "maxItemsPerQuery": 20,
  "includeReviews": true,
  "maxReviewsPerProduct": 10,
  "shipTo": "US",
  "currency": "USD",
  "language": "en_US",
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Output

One item per product. This record came from a real run with reviews on (image IDs shortened, reviews cut to one):

```json
{
  "productId": "3256812797487615",
  "url": "https://www.aliexpress.com/item/3256812797487615.html",
  "title": "Red Cherry Bow Soft Phone Case For iPhone 17 Pro 16 15 14 13 12 11 Pro Max 7 8 Plus XR X XS Max 16E 17E Luxury Mirror Back Cover",
  "price": { "min": 1.09, "max": null, "currency": "USD" },
  "originalPrice": 3.94,
  "discount": 72,
  "rating": 5,
  "reviewsCount": 3,
  "ordersCount": 69,
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/<image-id>.jpg"],
  "store": null,
  "shipping": null,
  "reviews": [
    { "rating": 5, "text": "Excellent", "originalText": "Excelente", "date": "17 Sep 2026", "country": "ES", "sku": "Color:JTBKSC23-TM-JTK027 Compatibility by Model:iPhone17 Pro Max", "images": [] }
  ]
}
```

Field notes:

- Some search cards are free-gift promotions for new users and carry no price; their `price` fields are `null`.
- `ordersCount` is the number AliExpress shows, which is rounded ("1,000+ sold" becomes 1000), so treat it as a lower bound.
- `reviews` is present only with reviews on. `rating` is 1 to 5 stars, `text` is the English translation when AliExpress provides one, and `originalText` is what the buyer wrote.
- `store` and `shipping` are `null` here; store details come from AliExpress Product Details Scraper.
- A field AliExpress does not show for a product is `null`.

### Pricing

$4 per 1,000 products returned. Platform usage is included in that price. A product that fails after all retries is not pushed and not charged. Reviews ride along inside the product record, so 10 reviews on a product still cost one result.

### FAQ

#### Do I need an AliExpress account or cookies?

No. The actor only reads what a logged-out visitor sees. It never asks for or uses login cookies.

#### How do I get variants, specifications and store details?

Use [AliExpress Product Details Scraper](https://apify.com/muhammad_noman_riaz/aliexpress-product-scraper). Pass it the product URLs from this actor's results. Product URLs given to this actor are listed in `FAILED_ITEMS` with that pointer and are not charged.

#### How do I get prices in my currency and for my country?

Set `shipTo`, `currency` and `language`, for example `DE`, `EUR` and `de_DE`. AliExpress then returns prices and availability for that market.

#### Why did something end up in FAILED_ITEMS?

AliExpress sometimes shows a verification page instead of data. The actor never solves verification pages. It retries on a new residential IP, and if every attempt is blocked it skips the item without charging you.

#### Which proxy should I use?

Residential, which is the default. Datacenter IPs are blocked often.

#### Does it collect personal data?

Reviews include rating, text, date, buyer country and photos. Reviewer names and profile pictures are left out.

### Known limits

- Order counts are rounded by AliExpress.
- About half of the cards on a search page are compact cards without rating or order count.
- Search returns at most what AliExpress paginates, usually 60 products per page.
- `shipping` is `null`. Shipping cost depends on the buyer's address and is loaded by AliExpress in a separate call that this version does not make.
- AliExpress changes its web app from time to time. If a field goes missing, please open an issue on the actor page.

# Actor input Schema

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

Keywords to search AliExpress for, for example "phone case". Each query returns up to Max items per query products, in AliExpress best match order.

## `startUrls` (type: `array`):

AliExpress search URLs, for example https://www.aliexpress.com/w/wholesale-phone-case.html. For product URLs use AliExpress Product Details Scraper.

## `maxItemsPerQuery` (type: `integer`):

Maximum number of products for each search query and each search URL.

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

Adds buyer reviews (rating, text, date, country, photos) to each product. Reviewer names are not collected.

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

Upper limit of reviews per product when reviews are included.

## `shipTo` (type: `string`):

Two-letter country code that AliExpress uses for prices, availability and shipping, for example US, GB, DE.

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

Three-letter currency code for prices, for example USD, EUR, GBP.

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

Locale for titles and reviews, for example en_US, de_DE, fr_FR, es_ES.

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

Maximum number of products processed at the same time.

## `maxRequestRetries` (type: `integer`):

How many times a product or search is tried, each time on a new proxy IP, before it is skipped.

## `proxy` (type: `object`):

Residential proxies are strongly recommended. AliExpress shows verification pages to datacenter IPs and busy IPs.

## Actor input object example

```json
{
  "searchQueries": [
    "phone case"
  ],
  "maxItemsPerQuery": 20,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "shipTo": "US",
  "currency": "USD",
  "language": "en_US",
  "maxConcurrency": 5,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One item per AliExpress product with price, rating, orders, store, variants, specifications and optional reviews

# 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": [
        "phone case"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammad_noman_riaz/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": ["phone case"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("muhammad_noman_riaz/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": [
    "phone case"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call muhammad_noman_riaz/aliexpress-scraper --silent --output-dataset

```

## MCP server setup

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