# AliExpress Scraper & API: Products, Variants, Shipping, Reviews (`quarra/aliexpress-scraper`) Actor

Scrape AliExpress search results and full product details: every variant with price and stock, all images, shipping to your country, store, specifications and reviews. Any country, currency and language.

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

## Pricing

from $4.00 / 1,000 product with full details

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: Search, Product Details, Variants, Reviews

Get AliExpress products in bulk, without an account or API key. Give it keywords, a search or category URL, or product
URLs; each product comes back with its prices, each variant (SKU) with its own price and stock, all images, rating,
units sold, store, shipping options to your country and the full specifications. Any ship-to country, currency and
language. Export as JSON, CSV or Excel, or read it through the Apify API.

**$2.50 per 1,000 search results, $5 per 1,000 products with full details, $0.50 per 1,000 reviews**, plus a small
start fee per run. Products that do not exist or are not sold to your country, and inputs that fail, are not charged.

### Quick start

1. Type keywords (or paste an AliExpress search URL) into **Search keywords or search URLs**, or paste product links
   into **Product URLs or IDs**.
2. Turn on **Full details for search results** if you want variants, stock, store and shipping for each result.
3. Click **Start** and read the products in the run's **Output** tab.

Like any Apify Actor, it can also be run and read through the Apify API, scheduled, and connected to webhooks, Make,
Zapier, n8n or Apify's MCP server for AI agents.

### What you get

| | Search result | Product with full details |
|---|---|---|
| Title, URL, product ID | yes | yes |
| Price, price before discount, discount, currency | yes | yes, lowest and highest across variants |
| Rating, units sold | yes | yes, plus number of reviews and wishlist adds |
| Images | main images | **all** product images and the video |
| Category | ID | ID and full path |
| Variants (SKU): options, price, stock, image | | **yes, each variant** |
| Total stock | | yes |
| Store: name, ID, rating, positive feedback, followers, opening date | | yes |
| Shipping to your country: method, fee, free shipping, ships from, delivery days and dates | | yes |
| Specifications (material, brand, model…) | | yes |
| Long description URL | | yes |
| Position in the search (page, rank) | yes | yes, when it comes from a search |

Reviews (optional): rating, text, AliExpress translation into your language, date, variant bought, photos, helpful
votes, reviewer's country. **Reviewer names and avatars are never collected.**

### Inputs

- **Search keywords or search URLs**: `wireless earbuds`, or a search or category URL copied from your browser (its
  filters are kept, and its `page=` is the first page read). Up to 3,600 products per search (AliExpress shows 60
  pages of 60). A search URL from a country site (`fr.aliexpress.com`, `de.aliexpress.com`…) uses that site's country,
  currency and language when you leave **Ship to**, **Currency** and **Language** at US, USD and English.
- **Product URLs or IDs**: `https://www.aliexpress.com/item/1005006833755847.html`, any country site
  (`fr.aliexpress.com`, `aliexpress.us`…), or just `1005006833755847`. Share links (`a.aliexpress.com/_…`) are not
  read: open the link and paste the address of the product page it opens.
- Up to 5,000 searches and 5,000 products per run.
- **Max products**: total products the run delivers, counted exactly (reviews are not counted here).
- **Max results per search**, **Sort** (best match, orders, price up or down), **Min price** and **Max price** (in
  the run's currency, decimals allowed).
- **Ship to (country)**, **Currency**, **Language**: prices, availability and shipping are those AliExpress shows for
  that country; titles and specifications come in that language.
- **Include reviews** and **Max reviews per product**.

Example, through the API:

```json
{
  "searchQueries": ["phone holder"],
  "maxItems": 100,
  "maxResultsPerSearch": 100,
  "scrapeDetails": true,
  "shipTo": "DE",
  "currency": "EUR",
  "language": "de",
  "sort": "orders"
}
```

### Output

One record per product in the dataset (and one per review when you ask for them). A shortened product:

```json
{
  "type": "product",
  "status": "ok",
  "detailLevel": "full",
  "productId": "1005006833755847",
  "url": "https://www.aliexpress.com/item/1005006833755847.html",
  "title": "Magnetic Luxury Matte Translucent Armor Shockproof Case For iPhone 16 15 14 13 …",
  "currency": "USD",
  "price": 1.09,
  "priceMax": 1.09,
  "originalPrice": 2.64,
  "originalPriceMax": 3.8,
  "discountPercent": 59,
  "rating": 4.7,
  "reviewCount": 6104,
  "soldCount": 50000,
  "soldText": "50,000+ sold",
  "totalStock": 123910,
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/Sf7615706d428464fab2b660ceeccc18aE.jpg", "…"],
  "categoryPath": "202192403/202228401/380230",
  "attributes": [{"name": "Main Material", "value": "Pc + tpu"}, "…"],
  "skus": [
    {"skuId": "12000046621287903", "attributes": {"Color": "Pink", "Material": "For iPhone 16e"},
     "price": 1.09, "originalPrice": 3.19, "stock": 1161, "maxPerOrder": 1, "available": true, "image": "https://…"}
  ],
  "shipping": [
    {"method": "AliExpress Selection Standard Shipping", "fee": 1.99, "currency": "USD", "freeShipping": false,
     "shipFrom": "China", "shipTo": "US", "deliveryDaysMin": 6, "deliveryDaysMax": 12,
     "estimatedDeliveryFrom": "2026-10-15", "estimatedDeliveryTo": "2026-10-21"}
  ],
  "store": {"id": "1102345495", "name": "SZDBR Store", "rating": 4.9, "positiveRate": 94.9, "followers": 4252},
  "scrapedAt": "2026-10-10T06:26:32.090Z"
}
```

Fields that need a word of explanation:

- `detailLevel`: `full` for a product with full details, `search` for the data shown in search results.
- `soldCount` is the number AliExpress displays: `10,000+` gives 10000, a lower bound.
- `status`: `ok` (delivered, charged), `unavailable` (free; `unavailableReason` says `notFound`, `notSoldThere` or
  `offline`), `noPrice` (free: a search card shown without any price, see `note`), `error` (free; `error` says why,
  `retryable` says if a later run may work).
- `offer`: the promotion shown on the search card, such as `FREE with any purchase` (a gift for new buyers);
  `newBuyerPrice` is then the price of that offer, and `price` the regular price.
- `shippingFee`, `freeShipping`, `deliveryDays`: the cheapest shipping option to your country at a glance (the full
  list is in `shipping`); search results only have the delivery estimate, when the card shows one.
- `shipsToCountry`: `false` when AliExpress shows that the product can't be shipped to your ship-to country (some
  local-warehouse listings, for example); the rest of the product page is still there and `shipping` is empty.
- Prices are numbers in the run's currency, for the run's ship-to country. The same product can cost very different
  amounts from one country to another: set **Ship to** to the country you care about.

The run summary (counts per input, why the run stopped) is the `OUTPUT` record of the run's key-value store.

### Pricing

Pay per event:

| Event | Price |
|---|---|
| Search result (product with the search data) | $2.50 per 1,000 |
| Product with full details | $5.00 per 1,000 |
| Review | $0.50 per 1,000 |
| Run start | $0.005 per GB of memory (1 GB minimum; $0.005 at the default 512 MB) |

Higher Apify plans pay less per event. Never charged: products that do not exist or are not sold to your country,
search cards without any price, error records, duplicates (a product found by two searches is delivered once). Set **Maximum cost per run** in the
run options and the run stops before going over it.

### Limits

- **Full details in large volumes.** AliExpress limits how many product pages it serves in a short period. When it
  does, a run with **Full details for search results** keeps going with the search data for the remaining products
  (charged as search results, at the lower price, and flagged with `detailLevel: "search"`), and the run's status
  message says so. How many products get full details in one run depends on the moment; for thousands, split them
  across runs.
- Products given by URL that AliExpress does not serve at that moment get a free `error` record with
  `retryable: true`.
- AliExpress shows at most 60 pages per search; use several keywords or price ranges to go further.
- Some search cards are gift offers for new buyers (`FREE with any purchase`) and show no price. Their regular price
  is read from the card's data when the rest of the page allows it (`price`, with the new-buyer price in
  `newBuyerPrice`); otherwise the record is free, with `status: "noPrice"`.
- In EU countries (France, for example) AliExpress shows no price before discount, so `originalPrice` and
  `discountPercent` are empty there.
- Store rating and store sales are empty for stores where AliExpress does not show them (new stores).

### FAQ

**Why is the price different from what I see in my browser?** AliExpress prices depend on the ship-to country and the
currency. Set **Ship to** and **Currency** to yours.

**Some products got `detailLevel: "search"` while I asked for full details. Was I charged for full details?** No:
those were charged as search results, at the search price.

**What if the run is restarted by the platform (migration or reboot)?** It resumes where it was: products already in
the dataset are not delivered or charged again, and the reviews they were still missing are added.

**Can I get only new products since my last run?** Not in this version; sort by newest is not offered yet either.

**Is it legal?** It collects public product data shown to any visitor. Reviewer names are not collected. Check the
rules that apply to your use of the data.

### Related tools from Quarra

- [AliExpress Product Details Scraper](https://apify.com/quarra/aliexpress-product-details-scraper): product links only,
  with optional reviews.
- [AliExpress Search Scraper](https://apify.com/quarra/aliexpress-search-scraper): keywords and search URLs only.

# Actor input Schema

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

One per line: keywords (wireless earbuds), or an AliExpress search or category URL pasted as is (its filters are kept). Each search returns products in AliExpress order, up to 'Max results per search'.

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

One per line: AliExpress product URLs (aliexpress.com/item/…, any country site, mobile links) or product IDs. Each gets the full details.

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

Total number of products delivered by the run (search results and products with full details), counted exactly. Reviews are not counted here.

## `maxResultsPerSearch` (type: `integer`):

Products per search, at most 3,600 (AliExpress shows 60 pages of 60).

## `scrapeDetails` (type: `boolean`):

Off: search results with title, price, rating, orders, images (charged as search results). On: every search result also gets the full product details: all variants with price and stock, all images, store, shipping, specifications (charged as products).

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

Order of search results.

## `minPrice` (type: `number`):

Lowest price, in the run's currency.

## `maxPrice` (type: `number`):

Highest price, in the run's currency.

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

Two-letter country code (US, GB, DE, FR, ES, BR…). Prices, availability and shipping are those for this country.

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

Currency of every price.

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

Language of titles and specifications (as translated by AliExpress).

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

Also deliver the reviews of each product, one record per review (rating, text, date, variant, photos, country). Reviewer names are never collected.

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

Reviews per product, most relevant first.

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

Connection. Keep the default (automatic). Costs are included in the price.

## Actor input object example

```json
{
  "searchQueries": [
    "phone holder"
  ],
  "productUrls": [
    "https://www.aliexpress.com/item/1005006833755847.html"
  ],
  "maxItems": 20,
  "maxResultsPerSearch": 20,
  "scrapeDetails": false,
  "sort": "default",
  "shipTo": "US",
  "currency": "USD",
  "language": "en",
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every product with all its fields, reviews, and free error records with the reason.

## `overview` (type: `string`):

One line per product: title, price, rating, orders, store, shipping.

## `summary` (type: `string`):

Counts per input, why the run stopped, unavailable products and errors.

# 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 holder"
    ],
    "productUrls": [
        "https://www.aliexpress.com/item/1005006833755847.html"
    ],
    "maxItems": 20,
    "maxResultsPerSearch": 20,
    "shipTo": "US",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/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 holder"],
    "productUrls": ["https://www.aliexpress.com/item/1005006833755847.html"],
    "maxItems": 20,
    "maxResultsPerSearch": 20,
    "shipTo": "US",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("quarra/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 holder"
  ],
  "productUrls": [
    "https://www.aliexpress.com/item/1005006833755847.html"
  ],
  "maxItems": 20,
  "maxResultsPerSearch": 20,
  "shipTo": "US",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call quarra/aliexpress-scraper --silent --output-dataset

```

## MCP server setup

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