# AliExpress Search Scraper — Prices, Orders Sold & Ratings (`yugenox/aliexpress-search-scraper`) Actor

Scrape AliExpress search results for any keyword: product ID, title, sale and original price, discount, orders sold, star rating, store, Choice and sponsored flags, delivery estimate, images and URL. Any ship-to country and currency, sort and price filters. No login, no browser.

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

## Pricing

from $1.80 / 1,000 products

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 Search Scraper: prices, orders sold and ratings

Scrape **AliExpress search results** for any keyword and get every product as a clean row: **product ID, title, sale price, original price, discount, orders sold, star rating, store, Choice and sponsored flags, delivery estimate, images and the product URL**. Pick the **ship-to country and currency**, sort by best match, orders or price, and filter by price range, free shipping, Choice or 4 stars & up. Up to 3,600 products per keyword, 60 per page. No login, no cookies, no browser.

### What you get

| | |
|---|---|
| **Product** | AliExpress product ID, title, product URL, main image + all images shown, category IDs, listing date |
| **Price** | Sale price, original price, discount %, currency, the price as AliExpress formats it (`US $7.59`, `C$ 3.77`, `€ 3,69`) |
| **Popularity** | Orders sold as shown (`10K+ sold`) and as a number, exact sold count when AliExpress gives it, star rating |
| **Seller** | Store name and the company behind it (when AliExpress shows them in the results) |
| **Labels** | AliExpress Choice, sponsored (paid) listing, "FREE with any purchase" welcome gift, badges such as `Dollar Express` |
| **Delivery** | Delivery estimate in days and dates (when shown for your ship-to country) |
| **Context** | Keyword, sort, ship-to country, page and position in the results, the results page URL, scrape time |

### How to use it

1. Enter one or more **keywords**, e.g. `phone case`, `yoga mat`, `led strip lights`. Each keyword is its own search, just like AliExpress's search box. You can also paste AliExpress search URLs (`aliexpress.com/w/wholesale-…html?…`) and their filters are kept.
2. Choose **Ship to** and **Currency** (default United States / USD).
3. Optionally pick a **Sort** (Orders = best sellers first), a **price range**, and AliExpress's own filters: **Free shipping**, **Choice**, **4 stars & up**, **Ships from**.
4. Set **Max products per keyword** and run.

#### Input examples

The 20 best-matching phone cases, shipped to the US, in USD:

```json
{
  "keywords": ["phone case"],
  "maxItemsPerKeyword": 20
}
```

Best sellers between $5 and $30 for several keywords, shipped to Canada, priced in CAD:

```json
{
  "keywords": ["yoga mat", "resistance bands", "foam roller"],
  "sort": "orders",
  "minPrice": 5,
  "maxPrice": 30,
  "shipTo": "CA",
  "currency": "CAD",
  "maxItemsPerKeyword": 300
}
```

Choice products with free shipping to Germany, in EUR, each product saved once across keywords:

```json
{
  "keywords": ["led strip lights", "smart bulb"],
  "choiceOnly": true,
  "freeShippingOnly": true,
  "shipTo": "DE",
  "currency": "EUR",
  "dedupeAcrossKeywords": true
}
```

### Output example

A real row (shipped to Canada, 2026-10-29; image list shortened):

```json
{
  "productId": "1005006944733883",
  "title": "Armor Shockproof Defender Phone Case For iphone 11 12 13 14 15 Pro Max X XS XR XSMAX 7 8 Plus SE2 SE4 Hard PC+TPU Back Cover",
  "url": "https://www.aliexpress.com/item/1005006944733883.html",
  "salePrice": 3.77,
  "originalPrice": 8.59,
  "discountPercent": 56,
  "currency": "CAD",
  "priceFormatted": "C$ 3.77",
  "priceSource": "card",
  "soldText": "10K+ sold",
  "soldCount": 10000,
  "tradeCount": 14710,
  "rating": 4.7,
  "isChoice": true,
  "isSponsored": false,
  "isWelcomeGift": false,
  "storeName": "FanZhou0707 Store",
  "deliveryDaysMin": null,
  "deliveryDaysMax": null,
  "badges": [],
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S7937146f38d944409b1d36a259a9282f6.jpg",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/S7937146f38d944409b1d36a259a9282f6.jpg", "…"],
  "categoryIds": ["202192403", "202228401", "380230"],
  "skuId": "12000038815680401",
  "globalProductId": "1005006944733883",
  "launchDate": "2024-05-05",
  "keyword": "phone case",
  "sort": "bestMatch",
  "shipTo": "CA",
  "page": 1,
  "position": 6,
  "searchUrl": "https://www.aliexpress.com/w/wholesale-phone-case.html?g=y&SearchText=phone+case",
  "scrapedAt": "2026-10-29T04:38:59.687Z"
}
```

Every row has the same columns; a value AliExpress doesn't show is `null`. Download the dataset as JSON, CSV, Excel or XML, or read it through the API.

### Pricing

Pay per result:

- **$1.80 per 1,000 products** saved,
- **$0.20 per 1,000 results pages** read (a page holds up to 60 products, so about $0.003 per 1,000 products),
- **$0.003 per run** (start fee).

So 1,000 products cost about **$1.81**. Sponsored listings you exclude, duplicates and unrelated suggestions are skipped and never charged. Failed or refused requests are never charged.

### Use cases

- **Dropshipping product research**: find best sellers in a niche (sort by Orders) with price, discount and sold counts.
- **Price monitoring**: run the same keywords on a schedule and track sale prices, discounts and ranking positions.
- **Trend tracking**: watch which products climb in orders sold week after week.
- **Market and competitor analysis**: compare price ranges, Choice coverage and ratings across categories and countries.
- **Product catalogs and feeds**: build a product list with images and links for your own store or app.

### Tips

- **More than 3,600 products for a topic?** AliExpress shows at most 60 pages per search. Split it: several related keywords, or the same keyword with different price ranges.
- **Prices depend on the country.** AliExpress prices, shipping and even the product set change with the ship-to country. Shipping to the United States, AliExpress shows its US store and the links go to aliexpress.us; `globalProductId` / `globalUrl` give the same product on aliexpress.com.
- **Currency.** If AliExpress doesn't offer the currency you chose for that country, it uses its own choice; every row says its currency and the status message tells you.
- **Filters.** Free shipping, Choice and 4 stars & up are AliExpress's own filters; with them AliExpress sometimes returns only one page of results.

### FAQ

**Do I need an AliExpress account, cookies or a login?** No. The scraper reads the same public search pages any visitor sees, with the ship-to country and currency you pick. It never logs in and never touches carts, orders or accounts.

**Why do some products have no sale price?** AliExpress shows some products as a **"FREE with any purchase"** welcome gift for new customers. Those cards show no price, so `salePrice` is empty, `isWelcomeGift` is `true` and `originalPrice` holds the product's regular list price.

**What does "10K+ sold" mean?** It's AliExpress's own rounded count of orders. `soldCount` is that number (10,000); `tradeCount` is the exact count when AliExpress provides it.

**Why is the store name empty on some rows?** AliExpress shows the store name in search results for some products only (often sponsored ones). It's never guessed.

**Can I get product details, reviews or all variants?** This actor reads search results. It returns what the results show for each product, including the price of the cheapest variant.

**Which proxy should I use?** Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one. If AliExpress keeps dropping datacenter connections, the run tries residential proxies when your account has them, within limits that keep the run's cost fair.

**What if AliExpress shows a security check?** The run stops right away and says so in its status message. Products already saved stay in the dataset; nothing else is charged. Try again a little later.

**What happens if a run is cut short?** Everything saved so far stays in the dataset. The run stops a little before its timeout so it always finishes cleanly, and the status message says what happened.

**Is it legal to scrape AliExpress?** This Actor only collects publicly available data: product listings that anyone can see on AliExpress without an account, such as titles, prices, ratings and order counts. Collecting publicly available data is generally legal, but you're responsible for how you use it. You must follow privacy laws such as GDPR, PIPEDA and CCPA, as well as AliExpress's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from public search pages AliExpress shows to any visitor. It collects product and store data only, never buyer information, reviews by people or anything behind a login, and it follows AliExpress's robots.txt.

*This Actor is not affiliated with, endorsed by or sponsored by AliExpress or Alibaba Group.*

# Actor input Schema

## `keywords` (type: `array`):

What to search on AliExpress, e.g. "phone case", "yoga mat", "led strip lights". Each keyword is a separate search, exactly like typing it into AliExpress's search box. You can also paste AliExpress search URLs here.

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

Optional: AliExpress search result URLs (aliexpress.com/w/wholesale-<keyword>.html?…). The filters and sort in the URL are kept; the scraper pages through the results. Product and store pages are not supported.

## `maxItemsPerKeyword` (type: `integer`):

How many products to save for each keyword (AliExpress shows 60 per page and up to 60 pages, so at most 3,600). 0 = as many as AliExpress shows.

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

Optional cap for the whole run, across all keywords. 0 = no cap (only the per-keyword limit applies).

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

AliExpress's own sort order. "Orders" puts the best sellers first.

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

Only products priced at least this much, in the currency below. Leave empty for no minimum.

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

Only products priced at most this much, in the currency below. Leave empty for no maximum.

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

AliExpress's "Free shipping" filter.

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

AliExpress's "Choice" filter (products with AliExpress's faster delivery and free returns program).

## `fourStarsAndUp` (type: `boolean`):

AliExpress's "4 stars & up" rating filter.

## `includeSponsored` (type: `boolean`):

AliExpress mixes paid (sponsored) products into the results. They are kept and marked with isSponsored = true. Turn this off to skip them (skipped products are not charged).

## `dedupeAcrossKeywords` (type: `boolean`):

When several keywords find the same product, save it only for the first one. Off = each keyword keeps its full ranking (a product can appear once per keyword).

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

The delivery country AliExpress prices and filters the results for — the same as the "Ship to" picker on the site. Shipping to the United States, AliExpress shows its US store (links go to aliexpress.us).

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

Currency for the prices (AliExpress's own conversion). If AliExpress doesn't offer this currency for the chosen country, it uses its own choice and the status message says so; every row carries its currency.

## `shipFrom` (type: `string`):

Optional: only products shipped from this country (AliExpress's "Ships from" filter), e.g. a local warehouse for faster delivery. Empty = any.

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

Apify Proxy (datacenter) is the default and comes with every Apify plan. If AliExpress keeps dropping datacenter connections, the run switches to residential proxies when your account has them. If AliExpress shows a security check, the run stops cleanly instead (no charge for products it could not read).

## Actor input object example

```json
{
  "keywords": [
    "phone case"
  ],
  "maxItemsPerKeyword": 20,
  "maxItems": 0,
  "sort": "bestMatch",
  "freeShippingOnly": false,
  "choiceOnly": false,
  "fourStarsAndUp": false,
  "includeSponsored": true,
  "dedupeAcrossKeywords": false,
  "shipTo": "US",
  "currency": "USD",
  "shipFrom": "",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped products.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, searches, pages, counts, requests and proxy use.

# 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 = {
    "keywords": [
        "phone case"
    ],
    "maxItemsPerKeyword": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/aliexpress-search-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 = {
    "keywords": ["phone case"],
    "maxItemsPerKeyword": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/aliexpress-search-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/R4svQP9AKFCMuuOBv/builds/6Y3TXMTNZNYLOzGC7/openapi.json
