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

Full AliExpress product details from product URLs: price range, every variant (SKU) with price and stock, specifications, images, store rating and optional reviews. No login. Pay only for products returned.

- **URL**: https://apify.com/muhammad_noman_riaz/aliexpress-product-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 $5.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 Product Details Scraper

Get the full details of AliExpress products from their URLs: every variant with its own price and stock, specifications, images and store. No login, and you pay only for products that come back.

### What does AliExpress Product Details Scraper do?

AliExpress Product Details Scraper opens AliExpress product pages and returns one complete record per product. Give it product URLs and it returns the title, price range and currency, original price, discount, rating, order count, all images, the store (name, URL, positive feedback rating, followers), the specification table, and every variant (SKU) with its option names, image, price, original price, stock and availability. Turn on reviews to add buyer reviews with rating, English text, original text, date, country, purchased variant and photos; reviewer names are never collected. Set the ship-to country, currency and language to see prices for your market. AliExpress protects this data more heavily than search, so some products can be skipped after retries; skipped products are never charged. It costs $5 per 1,000 products. For fast search results, use AliExpress Scraper and feed its product URLs here.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `startUrls` | array | | Product URLs (`/item/<id>.html`) |
| `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 | 3 | Products processed in parallel |
| `maxRequestRetries` | integer | 5 | Attempts per product, each on a new IP |

Example:

```json
{
  "startUrls": [{ "url": "https://www.aliexpress.com/item/1005005551524892.html" }],
  "includeReviews": true,
  "maxReviewsPerProduct": 10,
  "shipTo": "US",
  "currency": "USD",
  "language": "en_US"
}
```

### Output

One item per product. The shape is below; values are illustrative:

```json
{
  "productId": "1005005551524892",
  "url": "https://www.aliexpress.com/item/1005005551524892.html",
  "title": "Soft Silicone Phone Case",
  "price": { "min": 1.09, "max": 2.49, "currency": "USD" },
  "originalPrice": 3.94,
  "discount": 72,
  "rating": 4.8,
  "reviewsCount": 1520,
  "ordersCount": 5000,
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/<image-id>.jpg"],
  "store": { "id": "1102345678", "name": "Example Store", "url": "https://www.aliexpress.com/store/1102345678", "rating": 96.4, "followers": 1520 },
  "variants": [
    { "skuId": "12000057471218935", "options": [{ "name": "Color", "value": "Black" }], "image": "https://ae-pic-a1.aliexpress-media.com/kf/<image-id>.jpg", "price": 1.09, "originalPrice": 3.94, "stock": 120, "available": true }
  ],
  "specifications": [{ "name": "Material", "value": "Silicone" }],
  "categoryId": "380230"
}
```

A field AliExpress does not show for a product is `null`. `ordersCount` is rounded by AliExpress ("1,000+ sold" becomes 1000).

### Pricing

$5 per 1,000 products returned. Platform usage is included. A product that fails after all retries is not pushed and not charged. Reviews ride along inside the product record.

### FAQ

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

No. It reads only what a logged-out visitor sees and never uses login cookies.

#### Why were some products skipped?

AliExpress often answers product-detail requests with a slider check. This actor never solves those. It retries on new residential IPs, and if every attempt is blocked the product goes to `FAILED_ITEMS` and is not charged. In a test on residential proxies, 6 of 10 products came back on the first run. Running the skipped URLs again later usually recovers more of them.

#### How do I get product URLs in bulk?

Run [AliExpress Scraper](https://apify.com/muhammad_noman_riaz/aliexpress-scraper) for your keywords and pass the `url` field of its results to this actor.

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

Set `shipTo`, `currency` and `language`, for example `DE`, `EUR` and `de_DE`.

#### Does it collect personal data?

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

### Known limits

- Some products are skipped because of AliExpress slider checks, as described above.
- `shipping` is `null`. Shipping cost depends on the buyer's address and needs a separate call 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

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

AliExpress product URLs, for example https://www.aliexpress.com/item/1005005551524892.html. For search results use AliExpress Scraper.

## `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
{
  "startUrls": [
    {
      "url": "https://www.aliexpress.com/item/1005005551524892.html"
    }
  ],
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "shipTo": "US",
  "currency": "USD",
  "language": "en_US",
  "maxConcurrency": 3,
  "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 = {
    "startUrls": [
        {
            "url": "https://www.aliexpress.com/item/1005005551524892.html"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammad_noman_riaz/aliexpress-product-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 = {
    "startUrls": [{ "url": "https://www.aliexpress.com/item/1005005551524892.html" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("muhammad_noman_riaz/aliexpress-product-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 '{
  "startUrls": [
    {
      "url": "https://www.aliexpress.com/item/1005005551524892.html"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call muhammad_noman_riaz/aliexpress-product-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-product-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/838mo8Q38rWof2vUZ/builds/FFX4xgvNtLJkad8XG/openapi.json
