# AliExpress Product Details & Search Scraper 🛒 (with reviews) (`tagadanar/aliexpress-scraper`) Actor

AliExpress product details and search results: every variant with price and stock, shipping cost and delivery days for your country, store rating and followers, sold count, specs, images, plus reviews. Paste URLs or type keywords. No login, no API key.

- **URL**: https://apify.com/tagadanar/aliexpress-scraper.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** E-commerce, Agents, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 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 Product Details & Search Scraper: variants, stock, shipping, reviews

Paste AliExpress product links (or bare product IDs) and get one clean row per product: every variant with its own price and stock, the discount, rating, review and sold counts, shipping cost and delivery dates for the country you ship to, the store's rating and followers, the full specification table, images and video.

Type a keyword instead and you get the search results in AliExpress's order with their rank, or switch on **Full product details** to turn a search straight into full product rows. Add reviews per product if you need them.

$3 per 1,000 products with full details, $1.50 per 1,000 search results, $1 per 1,000 reviews, platform usage included. No API key, no login, no browser extension.

### What you get

#### Product rows (`type: "product"`)

| Field | Description |
| --- | --- |
| `productId`, `url` | The product and its canonical aliexpress.com link |
| `title` | Title, in the language you picked |
| `price`, `originalPrice`, `discountPercent`, `currency`, `priceText` | Price for your ship-to country, the crossed-out price and the discount, as AliExpress shows them |
| `minVariantPrice`, `maxVariantPrice` | Price range across all variants |
| `variants` | Every SKU: `attributes` (e.g. Color, Size, Ships From), `price`, `originalPrice`, `discountPercent`, `stock`, `available`, `maxPerOrder`, `image` |
| `options` | The option lists (e.g. Color: Black, White, Blue) |
| `variantCount`, `totalStock`, `inStock` | Variant count and stock |
| `rating`, `reviewsCount` | Star rating and number of reviews |
| `soldText`, `soldCount` | The sold label as shown ("10,000+ sold") and its number |
| `wishlistCount` | How many shoppers saved it |
| `storeName`, `storeId`, `sellerId`, `storeUrl` | The store |
| `storeRating`, `storePositiveRate`, `storeSold180Days`, `storeFollowers` | Store rating, positive feedback %, items sold in 180 days, followers (AliExpress shows no store rating for some stores: then it is `null`) |
| `storeCommunicationRating`, `storeItemAsDescribedRating`, `storeFeedbackScore` | The store's detailed scores, when AliExpress shows them (read from the English labels: with another language, the store rating and these scores can be empty) |
| `storeCountry`, `storeOpenedAt`, `storeTopRated` | Where the seller is, since when, Top Rated flag |
| `shippingCost`, `shippingCurrency`, `freeShipping`, `shippingCarrier` | The shipping option AliExpress shows first for your country |
| `deliveryDaysMin`, `deliveryDaysMax`, `deliveryDateMin`, `deliveryDateMax` | Delivery window in days and as dates |
| `shipFrom`, `shipTo`, `shippingOptions` | Ship-from warehouse, ship-to country, and every option listed |
| `images`, `videoUrl` | Gallery images and the product video |
| `specs` | The specification table as `{name, value}` pairs (brand, material, model...) |
| `categoryId`, `categoryPathIds` | AliExpress category ids |
| `descriptionUrl` | Link to the seller's long description |
| `searchQuery`, `searchRank` | Filled when the product came from a search |

#### Search result rows (`type: "search"`)

`searchQuery`, `searchRank`, `searchPage`, `productId`, `url`, `title`, `price`, `originalPrice`, `discountPercent`, `currency`, `rating`, `soldText`, `soldCount`, `image`, `images`, `isAd` (sponsored card), `welcomeGiftDeal` (card in the "free with any purchase" offer, shown without a price), `sellingPoints` (badges such as "Top selling on AliExpress"), `listedSince`.

#### Review rows (`type: "review"`)

`productId`, `reviewId`, `rating` (1 to 5), `date`, `text` (original language), `translatedText` (English), `variant` bought, `buyerCountry`, `buyerName` (masked by AliExpress, e.g. "I\*\*\*o"), `images`, `helpfulCount`, `logistics`.

#### Example product row (real, trimmed, from a run on 2026-10-16)

```json
{
  "type": "product",
  "productId": "1005009463232289",
  "url": "https://www.aliexpress.com/item/1005009463232289.html",
  "title": "Ultra Thin Clear TPU Phone Cases For iPhone 18 17 16 15 14 13 12 11 Pro Max Plus Air 16E XR XS Max Transparent Silicone Cover",
  "price": 1.6,
  "originalPrice": 2.35,
  "discountPercent": 32,
  "currency": "GBP",
  "rating": 4.7,
  "reviewsCount": 2978,
  "soldText": "10,000+ sold",
  "soldCount": 10000,
  "variantCount": 35,
  "variants": [
    { "skuId": "12000049183381385", "attributes": { "Color": "Clear", "Compatibility by Model": "iPhone 16 Pro Max" }, "price": 1.6, "originalPrice": 2.3, "stock": 10, "available": true, "maxPerOrder": 1 }
  ],
  "totalStock": 62006,
  "storeName": "Shop1102861803 Store",
  "storeId": "1102860872",
  "storeRating": 4.9,
  "storePositiveRate": 93.3,
  "storeFollowers": 848,
  "storeCountry": "China",
  "shippingCost": 1.99,
  "freeShipping": false,
  "shippingCarrier": "AliExpress Selection Standard Shipping",
  "deliveryDaysMin": 7,
  "deliveryDaysMax": 12,
  "shipFrom": "China",
  "shipTo": "GB",
  "specs": [{ "name": "Brand Name", "value": "Amour Brave" }, { "name": "Main Material", "value": "Others" }]
}
```

### Who uses this

- **Dropshippers and store owners.** Sync variants, stock and prices of the products you sell, and see the real shipping fee and delivery window for your customers' country before you list.
- **Price and stock monitoring.** Schedule a run on your product list and track per-variant price and availability over time.
- **Product research.** Search a niche sorted by orders and keep the products with the best sold count, rating and store record.
- **Supplier vetting.** Compare stores selling the same item by rating, positive feedback, followers and years open.
- **Catalog and listing builders.** Titles, images, spec tables and variant matrices ready to map into Shopify, WooCommerce or a marketplace feed.
- **AI and data teams.** Structured product and review records for matching, enrichment or sentiment work.

### Input

| Field | What it does |
| --- | --- |
| Product URLs or IDs | `https://www.aliexpress.com/item/1005009463232289.html`, `1005009463232289`, aliexpress.us and m.aliexpress.com links |
| Search keywords or search URLs | `wireless earbuds`, or a pasted AliExpress search or category URL (its filters are kept) |
| Max results per search | 1 to 1,200 per search |
| Sort search results by | Best match, Most orders, Price low to high, Price high to low |
| Min price / Max price | Price filter for searches |
| Full product details for search results | Turns each search result into a full product row (billed as a product) |
| Reviews per product | 0 to 1,000 reviews for each product row |
| Ship to | The country prices, stock, shipping and delivery dates are calculated for |
| Currency | Currency for every price |
| Language | Language of titles, specs and labels |

Example: full details for two products shipped to Germany, in euros, with 20 reviews each:

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/1005009463232289.html",
    "1005010587572937"
  ],
  "shipTo": "DE",
  "currency": "EUR",
  "maxReviewsPerProduct": 20
}
```

Example: the 100 best-selling earbuds between $10 and $40, with full details:

```json
{
  "searchQueries": ["wireless earbuds"],
  "maxItemsPerSearch": 100,
  "sortBy": "orders",
  "minPrice": 10,
  "maxPrice": 40,
  "includeProductDetails": true
}
```

The same product asked twice (or found by two searches) is delivered and billed once.

### Pricing

Pay per row delivered, platform usage included, plus a flat start fee per run.

| Plan | Per 1,000 products (full details) | Per 1,000 search results | Per 1,000 reviews | Run start |
| --- | --- | --- | --- | --- |
| Free | $3.00 | $1.50 | $1.00 | $0.001 |
| Bronze | $2.70 | $1.35 | $0.90 | $0.001 |
| Silver | $2.40 | $1.20 | $0.80 | $0.001 |
| Gold | $2.10 | $1.05 | $0.70 | $0.001 |

Products AliExpress no longer has, searches with no results and products without reviews cost nothing beyond the start fee. Set a maximum charge per run and the actor stops when it is reached.

### Limits and honest caveats

- **Prices are what a logged-out shopper sees.** AliExpress often shows first-order and welcome-deal prices to new visitors; `price` is that sale price, `originalPrice` the crossed-out one. Coupons that need an account are not applied.
- **Welcome-offer cards have no price on the search page.** Many cards sit in AliExpress's "free with any purchase" welcome offer and show no price in search; those rows have `price: null` and `welcomeGiftDeal: true`. Turn on **Full product details** to get their real price.
- **No crossed-out price in the EU.** For EU ship-to countries AliExpress usually shows no "was" price, so `originalPrice` and `discountPercent` are often empty there.
- **AliExpress limits how many products one network address may open in a row.** The actor spreads a run over several routes, one product at a time, so large lists take a while: about 3 seconds per product with full details, so 1,000 products take close to an hour (raise the run timeout, or split the list over several runs). Search results are much faster (60 per page). If AliExpress refuses every route for an item (its anti-bot check page, which this actor never tries to solve), the run status names it and you are not charged for it.
- **Category names** are not part of the product data, only the category ids.
- **Reviews** come in AliExpress's default order ("most relevant"), 20 per page.

### FAQ

**Do I need an AliExpress account or API key?** No.

**Can I get prices for my country?** Yes: pick the ship-to country and currency. Prices, stock, shipping cost and delivery dates are the ones AliExpress calculates for that destination.

**Does it work with aliexpress.us links?** Yes. US product ids (3256...) work as well as the global ones (1005...).

**How do I scrape all products of a search?** Set Max results per search up to 1,200 (AliExpress shows 60 per page and stops paging after about 60 pages). Turn on Full product details if you need variants and stock.

**Why is a product missing from my results?** The run status says why: AliExpress has no such product any more, or it refused every route for it on that run (retry later).

**Can I monitor price changes?** Yes: save your input as a task and schedule it daily; each row carries `capturedAt`.

### Related actors

- [Alibaba Scraper](https://apify.com/tagadanar/alibaba-scraper): wholesale suppliers, MOQ and tiered prices on Alibaba.com.
- [Amazon Product Scraper](https://apify.com/tagadanar/amazon-product-scraper): the same product research on Amazon.
- [eBay Sold Listings Scraper](https://apify.com/tagadanar/ebay-sold-comps): sold and live price comps on eBay.
- [Shopify Store Scraper](https://apify.com/tagadanar/shopify-store-prospector): catalogues of Shopify stores, for competitor research.

# Changelog

This Actor's version history is a separate document: https://apify.com/tagadanar/aliexpress-scraper/changelog.md

# Actor input Schema

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

AliExpress product links or bare product IDs, one per line, e.g. https://www.aliexpress.com/item/1005009463232289.html or 1005009463232289. aliexpress.us and m.aliexpress.com links work too. Each one returns a full product row: every variant with its price and stock, shipping to your country, store details, specs and images.

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

What you would type in the AliExpress search box, one per line (e.g. phone case, wireless earbuds), or a pasted AliExpress search / category URL (its filters are kept). Each result comes back with its rank.

## `maxItemsPerSearch` (type: `integer`):

How many products to take from each search, in AliExpress's order (60 per page).

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

Same choices as the sort bar on AliExpress.

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

Only search results at or above this price, in the currency below (whole units).

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

Only search results at or below this price, in the currency below (whole units).

## `includeProductDetails` (type: `boolean`):

Turn a search into full product rows (variants, stock, shipping, store, specs). Each result is then billed as a product instead of a search result.

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

Also collect up to this many reviews for every product row (rating, date, text and English translation, variant bought, buyer country, photos). 0 = no reviews.

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

Prices, stock, shipping cost and delivery dates are the ones AliExpress shows a shopper in this country.

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

Currency for every price.

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

Language of titles, specs and sold labels (AliExpress's own translation).

## Actor input object example

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/1005009463232289.html"
  ],
  "searchQueries": [
    "wireless earbuds"
  ],
  "maxItemsPerSearch": 10,
  "sortBy": "best",
  "includeProductDetails": false,
  "maxReviewsPerProduct": 0,
  "shipTo": "US",
  "currency": "USD",
  "language": "en_US"
}
```

# Actor output Schema

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

Product, search-result and review rows in the default dataset (the type column says which).

# 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 = {
    "productUrls": [
        "https://www.aliexpress.com/item/1005009463232289.html"
    ],
    "searchQueries": [
        "wireless earbuds"
    ],
    "maxItemsPerSearch": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/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 = {
    "productUrls": ["https://www.aliexpress.com/item/1005009463232289.html"],
    "searchQueries": ["wireless earbuds"],
    "maxItemsPerSearch": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/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 '{
  "productUrls": [
    "https://www.aliexpress.com/item/1005009463232289.html"
  ],
  "searchQueries": [
    "wireless earbuds"
  ],
  "maxItemsPerSearch": 10
}' |
apify call tagadanar/aliexpress-scraper --silent --output-dataset

```

## MCP server setup

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