# AliExpress Search Scraper — Prices & Orders (`riseandcode/aliexpress-search-scraper`) Actor

$1.65/1000 results. Scrape AliExpress search results in 24 countries: price, original price, discount, exact order count, rating, ships-from, Choice badge and ads flag. Search by keyword or paste search URLs.

- **URL**: https://apify.com/riseandcode/aliexpress-search-scraper.md
- **Developed by:** [Rise and Code](https://apify.com/riseandcode) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 4 total users, 2 monthly users, 96.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 product scrapeds

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

### What does this AliExpress search scraper do?

This Actor extracts product data from [AliExpress](https://www.aliexpress.com) search results in **24 countries**. Type a keyword (or paste a search URL) and get back clean JSON for every product: **title, price, original price, discount, currency, exact number of orders, star rating, where it ships from, the AliExpress Choice badge, sponsored (ad) flag, product images and category**. Sort the results like on the site — best match, **most orders**, lowest or highest price — and filter by price range, Choice, free shipping, 4 stars & up or **local warehouse**.

Prices come in the currency of the country you pick (USD, EUR, GBP, BRL, MXN, CAD, AUD, PLN, JPY, KRW…), and titles in its language — the same results a shopper in that country sees.

### Why scrape AliExpress search results?

- 🔥 **Product research & dropshipping** — find winning products by **exact order count**, not the rounded "10,000+ sold" label.
- 💸 **Price monitoring** — track prices and discounts for a keyword over time, in your own currency.
- 🌍 **Cross-country comparison** — run the same search in several countries and compare prices, local stock and Choice availability, matching products by `globalProductId`.
- 🏷️ **Competitor tracking** — see which products and ads rank for your keywords.
- 📦 **Local warehouse sourcing** — list products that ship from inside the country (faster delivery, no import wait).
- 🤖 **Automation** — schedule runs and push results to Google Sheets, a database or a dashboard with Apify integrations, or call it from your own code through the API.

#### Why an Actor instead of doing it yourself?

AliExpress has no open product-search API for this data, and its pages are built for one shopper browsing one page at a time. Collecting search results yourself means dealing with pagination, ads mixed into the results, country/currency settings and pages that refuse to load. This Actor handles all of it and hands you a ready-to-use dataset — no browser, no account, no API key.

### How to use this AliExpress search scraper

1. Open the Actor and click **Try for free**.
2. Type one or more **search terms** (e.g. `wireless earbuds`, `phone case`), or paste AliExpress **search URLs**.
3. Pick the **country** — it sets the currency and language of the results.
4. Set **Max products per search** (20 to 3,600).
5. Optionally choose a **sort order** and **filters**.
6. Click **Start**, then open the **Output** tab or download the dataset as **JSON, CSV, Excel or HTML**.

Run it through the Apify API:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/riseandcode~aliexpress-search-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "searchTerms": ["wireless earbuds"],
    "maxItems": 50,
    "country": "US",
    "sortBy": "orders"
  }'
```

### Input

| Field | What it does |
|---|---|
| `searchTerms` | Keywords, one search each. |
| `startUrls` | AliExpress search result URLs, scraped as they are (with any filters you applied on the site). |
| `maxItems` | Products to collect per search term or URL (default 100, min 20, max 3,600). |
| `country` | Country site: currency, language and local warehouses (default United States). |
| `sortBy` | `relevance` (best match, default), `orders` (most orders), `price_asc`, `price_desc`. |
| `minPrice` / `maxPrice` | Price range, in the country's currency. |
| `choiceOnly` | Only products with the AliExpress Choice badge. |
| `freeShippingOnly` | Only products with free shipping. |
| `fourStarsAndUp` | Only products rated 4★ or more. |
| `shipsFromCountryOnly` | Only products shipped from a warehouse in the selected country. |
| `excludeAds` | Skip sponsored products. |

#### Country and currency

The country decides what AliExpress shows: prices in that country's currency, titles in its language and products stocked in its local warehouses. Supported: United States, Brazil, United Kingdom, Canada, Australia, Mexico, Chile, Colombia, Spain, France, Germany, Italy, Portugal, Netherlands, Belgium, Switzerland, Poland, Ukraine, Turkey, Israel, Saudi Arabia, United Arab Emirates, South Korea and Japan. Run the same keyword with different countries to compare markets.

#### Search URLs

Applied filters on the AliExpress site you can't find here (brand, color, a specific category)? Copy the URL of the results page and paste it into **Search URLs**. Any AliExpress domain works (`www.aliexpress.com`, `pt.aliexpress.com`, `aliexpress.us`…). The sort and filter options of this form apply only to search terms — a URL keeps its own.

#### Sorting and ads

**Most orders** returns the best sellers first. Sponsored products only appear under **Best match** (about 15 of 60 per page); every product has an `isAd` flag, and **Exclude ads** drops them (skipped ads are not charged). The same product is never delivered twice for one search.

#### Filters

**Choice products only**, **Free shipping only**, **4 stars & up only** and **Ships from the selected country only** are the AliExpress filters of the same name. AliExpress's own Choice filter may still include a few products from featured brand stores — the `isChoice` field tells you exactly which products carry the badge. Not every country has local warehouses: with **Ships from the selected country only** on, a country without them returns no products.

### Output

Each product is one dataset item. You can download the dataset in various formats such as JSON, CSV, Excel or HTML, or read it through the API.

#### Output example

```json
{
  "productId": "1005006784511373",
  "globalProductId": "1005006784511373",
  "title": "COLMI-P71 Smartwatch para homens e mulheres, chamada por voz, monitoramento de saúde, IP68 impermeável",
  "url": "https://www.aliexpress.com/item/1005006784511373.html",
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/Sbf1271f4607a461f8bb1ef30d12fe12f1.jpg",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/Sbf1271f4607a461f8bb1ef30d12fe12f1.jpg"],
  "price": 51.16,
  "originalPrice": 127.42,
  "discountPercent": 59,
  "currency": "BRL",
  "rating": 4.9,
  "soldText": "10K+ vendido(s)",
  "orders": 13367,
  "shipFrom": "CN",
  "skuId": "12000038287992506",
  "categoryId": "200003487",
  "isAd": false,
  "isChoice": true,
  "badges": [],
  "listedAt": "2024-04-04",
  "position": 1,
  "page": 1,
  "searchTerm": "smartwatch",
  "searchUrl": "https://www.aliexpress.com/w/wholesale-smartwatch.html?sortType=total_tranpro_desc",
  "country": "BR",
  "scrapedAt": "2026-10-10T13:03:36.923Z"
}
```

### Output fields

| Field | Description |
|---|---|
| `productId` | AliExpress product ID. |
| `globalProductId` | The same product's ID in every country — use it to match products across countries. Equals `productId` everywhere except the United States, whose site numbers products differently. |
| `title` | Product title, in the country's language. |
| `url` | Product page URL. |
| `imageUrl` / `images` | Main image and, when available, the gallery shown on the card. |
| `price` | Current price (lowest variant), in `currency`. As shown to a new visitor, so it can include a first-order discount. |
| `originalPrice` | Price before discount; `null` when the product is not discounted. |
| `discountPercent` | Discount shown by AliExpress; `null` when there is none. |
| `currency` | ISO currency code of the prices. |
| `orders` | **Exact** number of orders, even when the card shows a rounded label. `null` for products without orders data (often brand-new listings). |
| `soldText` | The sold label exactly as AliExpress shows it ("10,000+ sold"). |
| `rating` | Star rating (0–5); `null` when the product has no reviews yet. |
| `shipFrom` | Country code of the warehouse the default variant ships from (`CN`, `US`, `ES`, `BR`…). |
| `isChoice` | Has the AliExpress Choice badge. |
| `isAd` | Sponsored result. |
| `badges` | Text badges on the card ("Top selling on AliExpress", "Free shipping", delivery dates, coupon deals…). |
| `skuId` | Default variant (SKU) ID. |
| `categoryId` | AliExpress category ID. |
| `listedAt` | Date the product was first listed (YYYY-MM-DD). |
| `position` / `page` | Rank of the product within its search (1, 2, 3… without gaps) and the results page it came from. |
| `searchTerm` / `searchUrl` | The search that produced the product (`searchTerm` is `null` for pasted URLs). |
| `country` | Country the search ran for. |
| `scrapedAt` | When the product was collected (ISO 8601). |

### How much does it cost to scrape AliExpress?

This Actor uses **pay-per-event** pricing — you pay only for the products you get:

| Apify plan | Per 1,000 products | Per run start |
|---|---|---|
| Free | **$1.65** | $0.001 |
| Starter (Bronze) | **$1.60** | $0.001 |
| Scale (Silver) | **$1.55** | $0.001 |
| Business (Gold) and up | **$1.50** | $0.001 |

For example, 1,000 products from one search cost **$1.50–$1.65** depending on your plan; 100 products cost about **$0.15–$0.17**.

Products missing a required field, duplicates and ads skipped by **Exclude ads** are never charged. A run where no search finds anything costs only the $0.001 run start.

#### Tips to keep costs low

- Set **Max products per search** to what you actually need.
- Use **filters** instead of collecting everything and filtering afterwards.
- Use **Maximum cost per run** in the run options to cap what a single run can spend.

### FAQ

#### Is it legal to scrape AliExpress?

This Actor collects only publicly available product information that any visitor can see, without logging in. You are responsible for how you use the data — check AliExpress's terms of service and the laws that apply to you, and consult a lawyer if unsure.

#### Do I need an AliExpress account or API key?

No. Just run the Actor.

#### How do I get prices in my currency?

Pick your **country** — prices come in its currency (e.g. Brazil → BRL, Germany → EUR, Japan → JPY).

#### Why is `orders` different from the "sold" label?

AliExpress rounds the label shown to shoppers ("10,000+ sold"); `orders` is the exact count behind it. The label is still available in `soldText`.

#### Why do I get fewer products than I asked for?

AliExpress shows at most 60 pages per search, and its deeper pages repeat products from earlier pages — each product is delivered (and charged) only once. In some countries it also mixes in promo cards without a price, which are skipped. A full 60-page search measured **2,100–2,700 unique products**; filters and narrow keywords can leave fewer. The run log says when a search ran out of results.

#### What happens with a keyword that has no results?

You get no products for it and pay nothing for it — a run where no search finds anything costs only the $0.001 run start. AliExpress fills empty searches with unrelated "recommended" products — the Actor recognizes them and skips them.

#### Some fields come back as `null` — is that expected?

Yes, when AliExpress doesn't show them for that product: `originalPrice`/`discountPercent` for products without a discount, `rating` for products without reviews, `orders` for some new listings.

#### What's the ideal timeout?

Searches run in parallel; within one search the pages are read one after another, at roughly 500–600 products per minute — reading all 60 pages takes about 4–5 minutes. The default timeout (1 hour) is plenty for typical runs; if you set your own, allow about 5 minutes for your largest search, plus a margin for pages that need a retry.

#### A page failed to load — what can I do?

Pages AliExpress declines to serve are retried automatically. If a run still reports lost pages, run it again.

#### Can I schedule it?

Yes — use Apify **Schedules** to run it daily or hourly and compare prices over time, and **Integrations** to send results to Google Sheets, Slack, a webhook and more.

### Changelog

- **2026-10-10** — First release: AliExpress search in 24 countries, with sorting, price range, Choice, free shipping, 4★+ and local-warehouse filters, and search URLs.

### Support

If you encounter a bug or have a suggestion for this Actor or a new one, reach out via the **Issues** tab or at <contact.riseandcode@gmail.com>. We respond in English 🇺🇸 and Portuguese 🇧🇷.

# Actor input Schema

## `searchTerms` (type: `array`):

What you would type in the AliExpress search box — one search per line. Each term is searched separately and returns up to "Max products per search".

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

Optional: AliExpress search result URLs, copied from your browser after applying filters on the site (any AliExpress domain works). They are scraped exactly as they are — the sorting and filter options below apply only to the search terms.

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

How many products to collect for each search term or URL (minimum 20). AliExpress shows at most 60 pages per search and repeats products on deeper pages, so a full search yields about 2,000–2,700 unique products.

## `country` (type: `string`):

The AliExpress country site to search: it sets the currency of the prices, the language of the titles and which local warehouses appear.

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

Result ordering, as on the site. Ads only appear in "Best match".

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

Only products priced at or above this, in the selected country's currency.

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

Only products priced at or below this, in the selected country's currency.

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

Only products with the AliExpress Choice badge.

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

Only products with free shipping to the selected country.

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

Only products rated 4 stars or more.

## `shipsFromCountryOnly` (type: `boolean`):

Only products shipped from a warehouse in the selected country (local stock, faster delivery). Not every country has local warehouses — if none exist the search returns no products.

## `excludeAds` (type: `boolean`):

Skip sponsored products (ads appear only with "Best match" sorting). Skipped ads are not charged.

## Actor input object example

```json
{
  "searchTerms": [
    "wireless earbuds",
    "phone case"
  ],
  "startUrls": [
    {
      "url": "https://www.aliexpress.com/w/wholesale-smart-watch.html?sortType=total_tranpro_desc"
    }
  ],
  "maxItems": 100,
  "country": "US",
  "sortBy": "orders",
  "minPrice": 10,
  "maxPrice": 50,
  "choiceOnly": false,
  "freeShippingOnly": false,
  "fourStarsAndUp": false,
  "shipsFromCountryOnly": false,
  "excludeAds": false
}
```

# Actor output Schema

## `results` (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 = {
    "searchTerms": [
        "wireless earbuds"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("riseandcode/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 = {
    "searchTerms": ["wireless earbuds"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("riseandcode/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 '{
  "searchTerms": [
    "wireless earbuds"
  ],
  "maxItems": 100
}' |
apify call riseandcode/aliexpress-search-scraper --silent --output-dataset

```

## MCP server setup

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