# AliExpress All-in-One Scraper: Products, Prices & Reviews (`trakk/aliexpress-all-in-one`) Actor

Scrape AliExpress in one Actor: search by keyword, pull full product detail (prices, every SKU, shipping, specs, store) and collect buyer reviews with photos and a 1-5 star breakdown. 70+ fields, exclusive deal & seller-trust scores, any currency and ship-to country. No account or cookies.

- **URL**: https://apify.com/trakk/aliexpress-all-in-one.md
- **Developed by:** [Kelopr_bk](https://apify.com/trakk) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 search results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 All-in-One Scraper — Search, Products & Reviews

> 🛍️ **One Actor for the whole AliExpress catalog.** Search by keyword, pull every detail of a product, and collect buyer reviews — with a rich, consistent output you can drop straight into a spreadsheet, a price monitor, or a product-research pipeline.

Find products by **keyword**, enrich a known list of **product URLs or IDs** with full detail, or collect **buyer reviews** with photos and a 1–5★ breakdown. Receive export-ready prices, discounts, SKUs, shipping, specifications, stores, images and reviews — in your **chosen currency and ship-to country**. No account, no cookies, no setup.

> **Know what you want?** Use **Search + full detail** and type a keyword, or paste product links into **Product detail**. **Just exploring prices?** Use **Search** for fast, cheap product cards. **Mining feedback?** Use **Reviews**.

Looking for suppliers on other marketplaces? Try our other store scrapers on Apify — same clean, export-ready output.

***

### 🚀 Start your first run

1. Open the Actor's **Input** tab.
2. Choose a **Mode**:
   - **🔎 Search** for product discovery, prices, ratings and order counts.
   - **⭐ Search + full detail** for the all-in-one record: cards **plus** SKUs, shipping, specs, description, store and (optionally) reviews.
   - **📦 Product detail** for a known list of product URLs or IDs.
   - **💬 Reviews** for buyer reviews and a rating breakdown by product.
3. Pick **Currency** and **Ship to country** — prices, shipping and availability come back for that destination.
4. For a search mode, fill **Search queries**, one keyword per row (e.g. `phone case`, `wireless earbuds`). For detail/reviews, paste **Product URLs** or **Product IDs**.
5. Set **Max results** and click **Start**. For a first run, keep it small.
6. Open **Output → Products** for a clean table, then **Export** to CSV, Excel or JSON.

Copy this into **Input → JSON** for a first run:

```json
{ "mode": "SEARCH", "searchQueries": ["phone case"], "sortBy": "orders", "maxResults": 50 }
```

The default memory is **512 MB**. Invalid or empty input finishes safely with a correction message instead of crashing the Actor.

***

### 🎯 Choose a mode

| Mode | What it collects | Recommended use |
|---|---|---|
| 🔎 `SEARCH` | Product cards: price, discount, currency, rating, orders, images, store, badges | Discovery and price research |
| ⭐ `SEARCH_DETAIL` | Everything from Search **plus** full detail (every SKU and its price, shipping, specs, description, store) and optional reviews | All-in-one product research |
| 📦 `PRODUCT_DETAIL` | Full product record for each URL / ID, without a keyword search | Enriching a known list of products |
| 💬 `REVIEWS` | Buyer reviews (text, rating, photos, country, SKU) + a rating-breakdown summary per product | Review mining and sentiment |

**Search + full detail** first searches and filters, then enriches only the rows that remain — so you never pay to enrich products you filtered out.

Enter **one keyword per entry**. For example, `["graphic tee", "funny shirt"]` runs two searches. An entry such as `"graphic tee, funny shirt"` stays one literal query; the Actor does not silently split it.

***

### 🌍 Currency, country & language

Pick any **currency** (USD, EUR, GBP, AUD, CAD, BRL, RUB, PLN, SEK, AED, SAR, INR), any **ship-to country** (US, GB, DE, FR, ES, IT, NL, BR, AU, CA, PL, SA, AE, IN, MX, …) and any **language** (en, de, fr, es, it, nl, pt, pl, ru, ar). Prices, shipping options and availability are returned for the destination you choose, and titles/specs/descriptions come back in the selected language.

> **One caveat worth knowing:** AliExpress serves **no products for shipments to Russia** on its public catalog. A `shipToCountry: "RU"` run finishes cleanly with zero rows rather than inventing results — use another destination, and the `RUB` currency still works for pricing shipped elsewhere.

***

### 📋 Copy-paste examples

#### Cheapest best-sellers for a keyword

```json
{ "mode": "SEARCH", "searchQueries": ["led strip"], "sortBy": "orders", "minRating": 4, "maxResults": 100 }
```

#### Full research on specific products, with reviews

```json
{
  "mode": "SEARCH_DETAIL",
  "searchQueries": ["mechanical keyboard"],
  "includeReviews": true,
  "maxReviews": 50,
  "maxResults": 20
}
```

#### Full detail for a known list of products

```json
{
  "mode": "PRODUCT_DETAIL",
  "productUrls": ["https://www.aliexpress.com/item/1005006000000000.html"],
  "productIds": ["1005007000000000"],
  "includeReviews": true,
  "maxReviews": 20
}
```

#### Just the reviews of a product (with photos)

```json
{
  "mode": "REVIEWS",
  "productUrls": ["https://www.aliexpress.com/item/1005006000000000.html"],
  "maxReviews": 200,
  "reviewsFilter": "withPictures",
  "reviewsSort": "newest"
}
```

#### Prices in euros, shipping to Germany

```json
{
  "mode": "SEARCH_DETAIL",
  "searchQueries": ["usb c cable"],
  "currency": "EUR",
  "shipToCountry": "DE",
  "language": "de",
  "maxResults": 25
}
```

***

### 🎛️ Input reference

#### Essential settings

| Field | Default | Meaning |
|---|---:|---|
| `mode` | `SEARCH` | `SEARCH`, `SEARCH_DETAIL`, `PRODUCT_DETAIL`, or `REVIEWS` |
| `searchQueries` | `[]` | Keywords for the search modes, one per row |
| `productUrls` / `productIds` | `[]` | Targets for the detail and reviews modes |
| `sortBy` | `default` | `default`, `orders`, `price_asc`, `price_desc`, `newest` |
| `maxResults` | `100` | Maximum products saved for the whole run |
| `currency` | `USD` | Currency prices are returned in |
| `shipToCountry` | `US` | Destination country — affects price, shipping and availability |
| `language` | `en` | Language for titles, specs and descriptions |

#### Filters (applied before billing)

| Field | What it does |
|---|---|
| `minPrice` / `maxPrice` | Keeps products within the price range, in the selected currency |
| `minRating` | Keeps products at or above this star rating (1–5) |
| `minSold` | Keeps products at or above this many orders |
| `freeShippingOnly` | Keeps products offering free shipping |
| `choiceOnly` | Keeps only AliExpress **Choice** products |

Filtered-out products are **not saved and never charged**. A filter can reduce saved rows below `maxResults`.

#### Reviews

| Field | Default | Meaning |
|---|---:|---|
| `includeReviews` | `false` | In the detail modes, attach reviews + a rating breakdown to each product |
| `maxReviews` | `20` | Maximum reviews per product |
| `reviewsSort` | `default` | `default`, `newest`, `rating_desc`, `rating_asc` |
| `reviewsFilter` | `all` | `all`, `withPictures`, `additionalFeedback` |

#### Performance

| Field | Default | Meaning |
|---|---:|---|
| `maxConcurrency` | `5` | Parallel product lookups in the detail modes (1–15) |
| `maxRetries` | `4` | Retry budget per request (also rotates the connection on a block) |
| `includeRaw` | `false` | Attaches the untouched source payload to detail records for debugging |
| `proxyConfiguration` | Residential | Residential proxy is recommended; product detail needs it |

***

### 📦 Output

Every saved record lands in the **default dataset**. Switch views in the **Output** tab or export any of them.

| Output view | What you will find there |
|---|---|
| **Products** | Clean product overview: title, sale price, discount, rating, orders, image, store, link |
| **Reviews** | One expanded row per buyer review: text, rating, photos, country, SKU, helpful votes |

Export to JSON, CSV, Excel, XML, or read it through the Apify API.

***

### 🔎 Main fields

#### Product (search & detail)

- Identity: `productId`, `title`, `url`, `productType`, `searchQuery`, `scrapedAt`.
- Price: `salePrice`, `originalPrice`, `discountPercentage`, `currency` (+ formatted strings).
- Demand: `rating`, `reviewCount`, `orders`, `soldCount`.
- Media: `image`, `images`, `imageWidth`, `imageHeight`.
- Badges: `sellingPoints`, `isChoice`, `inStock`, `isSponsored`.
- Store: `storeName`, `storeId`, `storeUrl` (detail adds `followers`, `positiveRate`, `openedYears`).

#### Additional detail fields

- `variants[]` — every SKU: `skuId`, `price`, `originalPrice`, `stock`, `available`, option ids.
- `shipping`, `shippingOptions[]` — provider, cost, free-shipping, delivery days, ship-from/to.
- `specs[]` and `specsDict` — product attributes as a list **and** a ready-to-filter `name → value` map.
- `description` — the full item description.
- `categoryId`, `categoryPath` — category breadcrumbs.

Every record also carries **competitor-compatible aliases** (`product_id`, `sale_price`, `original_price`, `orders_count`, `ratingValue`, `image_url`, `totalSold`, …) so it slots straight into tools built for other AliExpress scrapers.

#### Review fields

Each review row includes `reviewId`, `productId`, `reviewerName`, `anonymous`, `country`, `rating`, `ratingPercent`, `reviewText`, `originalReviewText`, `reviewDate`, `skuInfo`, `images`, `thumbnailImages`, `imageCount`, `helpfulCount`, `aiGenerated`, `selectedReview`. A `review_summary` row per product gives `averageStar`, `totalReviews`, the full **1–5★ breakdown**, `positiveRate` and structured review labels.

***

### ✨ Exclusive signals (only here)

Every product also carries computed intelligence **no other AliExpress scraper returns**:

| Field | What it is |
|---|---|
| `landedPrice` | the **real** cost — item price **plus shipping**, converted into your chosen currency (`shippingPrice` broken out too) |
| `dealScore` | a 0–100 value-for-money score blending rating, order volume and price — sort a whole search by the best bang for the buck |
| `sellerTrustScore` | a 0–100 seller-trust score from positive-feedback %, feedback volume, store age and seller level |
| `priceMin` / `priceMax` / `priceAvg` / `cheapestSkuId` | the full price spread across every SKU, and which variant is cheapest |
| `reviewSummary` | the 1–5★ breakdown, positive rate and review labels on **every** product — without pulling a single review |

***

### 💳 How charging works

- A result is charged only for a **row saved to the dataset** — a search card, an enriched product, or a review.
- **Full-detail** enrichment is charged only when the product-detail response **succeeds**; a product that could not be fetched is not billed as a detail result.
- **Filtered-out and empty results are never charged.** Duplicates are removed before they consume a result slot.
- **No Actor-start fee** — unlike most AliExpress scrapers, you pay only for the data you keep.

Use `maxResults`, the filters, and plain **Search** mode to size and cost exploratory runs before switching selected keywords to **Search + full detail**.

***

### ⚠️ Troubleshooting

#### I received fewer products than requested

A filter (price range, rating, orders, Choice, free shipping) may have removed rows, or AliExpress exposed a short result set for that keyword. Loosen the filters or add more queries.

#### A `shipToCountry: "RU"` run returned nothing

AliExpress serves no public catalog for shipments to Russia. This is expected — pick another destination. `RUB` currency still works for products shipped elsewhere.

#### Product detail is slower than search

Full detail is fetched from a protected AliExpress endpoint and may rotate the connection to get through. Search is request-only and fast; detail takes longer per product. This is normal.

#### Some cells are blank

AliExpress does not publish every rating, spec, shipping value or description for every product. Unavailable fields are left blank, never filled with invented values.

***

### ✅ Data quality and safeguards

- Prices are returned in the **currency you select**, verified per locale (EUR/BRL comma decimals are parsed correctly, not inflated).
- Full-detail fields are read from AliExpress's own product data; missing values stay missing rather than being guessed.
- Filters run **before** billing, so filtered rows cost nothing.
- Incorrect or empty input ends safely with a clear status message instead of crashing.

**Tags:** `aliexpress` · `aliexpress scraper` · `product research` · `product reviews` · `price tracking` · `dropshipping` · `ecommerce` · `all in one`

# Actor input Schema

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

SEARCH returns product cards for each keyword. PRODUCT DETAIL returns the full product (price, SKUs, shipping, specs, description, store) for each URL/ID. REVIEWS returns buyer reviews. SEARCH + DETAIL does both: finds products by keyword, then enriches each with full detail (and reviews if enabled).

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

Keywords to search on AliExpress, one per row.

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

Order search results.

## `minPrice` (type: `integer`):

Only keep products at or above this price (in the selected currency).

## `maxPrice` (type: `integer`):

Only keep products at or below this price.

## `minRating` (type: `integer`):

Only keep products with at least this star rating (1–5).

## `minSold` (type: `integer`):

Only keep products with at least this many orders/sales.

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

Keep only products offering free shipping.

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

Keep only AliExpress Choice products.

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

AliExpress product URLs for the detail and reviews modes. Full URLs like https://www.aliexpress.com/item/1005006....html.

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

AliExpress numeric product IDs, if you have them instead of URLs.

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

In the detail modes, attach buyer reviews and a rating breakdown to every product.

## `maxReviews` (type: `integer`):

Cap on reviews collected per product (Reviews mode, and detail with reviews).

## `reviewsSort` (type: `string`):

Order the reviews returned for each product.

## `reviewsFilter` (type: `string`):

Limit reviews to all, only those with photos, or additional (follow-up) feedback.

## `maxResults` (type: `integer`):

Maximum products written for the run (per the whole run).

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

Currency prices are returned in.

## `shipToCountry` (type: `string`):

Destination country — affects price, shipping and availability.

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

Language for titles, specs and descriptions.

## `includeRaw` (type: `boolean`):

Attach the untouched source payload to detail records for debugging.

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

Parallel product lookups in the detail modes.

## `maxRetries` (type: `integer`):

Retry budget per request. For product detail this is the number of connection rotations used to clear AliExpress's risk check — more rotations means a higher share of products returning full detail.

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

Proxy settings. Residential proxy is strongly recommended; product detail needs it.

## Actor input object example

```json
{
  "mode": "SEARCH",
  "searchQueries": [
    "phone case",
    "wireless earbuds"
  ],
  "sortBy": "default",
  "freeShippingOnly": false,
  "choiceOnly": false,
  "productUrls": [],
  "productIds": [],
  "includeReviews": false,
  "maxReviews": 20,
  "reviewsSort": "default",
  "reviewsFilter": "all",
  "maxResults": 100,
  "currency": "USD",
  "shipToCountry": "US",
  "language": "en",
  "includeRaw": false,
  "maxConcurrency": 5,
  "maxRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

## `reviews` (type: `string`):

No description

# 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",
        "wireless earbuds"
    ],
    "sortBy": "default",
    "maxReviews": 20,
    "maxResults": 100,
    "currency": "USD",
    "shipToCountry": "US",
    "language": "en",
    "maxConcurrency": 5,
    "maxRetries": 8,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("trakk/aliexpress-all-in-one").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",
        "wireless earbuds",
    ],
    "sortBy": "default",
    "maxReviews": 20,
    "maxResults": 100,
    "currency": "USD",
    "shipToCountry": "US",
    "language": "en",
    "maxConcurrency": 5,
    "maxRetries": 8,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("trakk/aliexpress-all-in-one").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",
    "wireless earbuds"
  ],
  "sortBy": "default",
  "maxReviews": 20,
  "maxResults": 100,
  "currency": "USD",
  "shipToCountry": "US",
  "language": "en",
  "maxConcurrency": 5,
  "maxRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call trakk/aliexpress-all-in-one --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trakk/aliexpress-all-in-one"
        }
    }
}
```

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/HwvFeyfGXvQgjiNgY/builds/nicR697lYoaWhvgOB/openapi.json
