# AliExpress Search Scraper - Products, Prices, Orders & Ratings (`pipiagent/aliexpress-search-scraper`) Actor

Scrape AliExpress search results by keyword: product title, price, original price, discount, number sold, rating, images, shipping and delivery days. Choose currency, ship-to country, sort and price range. No login needed.

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

## Pricing

$1.50 / 1,000 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 Search Scraper

Extract products from [AliExpress](https://www.aliexpress.com) search results, the way a shopper sees them. Type a keyword such as "phone case" and get every product's title, price, original price, discount, number sold, rating, images, shipping and delivery time. Use it for product research, dropshipping, price monitoring, competitor tracking and market research.

- **The numbers that matter for product research.** Price, discount, units sold and rating for every product in the search results.
- **Exact units sold.** Where AliExpress shows "5,000+ sold", the Actor usually also gives you the exact number behind it, for example 9,358.
- **Your currency and country.** Choose the currency and the ship-to country, and get the prices, shipping and delivery times a shopper there would see.
- **Same sort and price filters as the website.** Best match, most orders, price low to high, price high to low, plus a price range.
- **No login needed.** Press Start and get data.
- **Low price.** $1.50 per 1,000 results.

### What data can you get?

One result is one product from the search results.

| Field | Example | What it is |
|---|---|---|
| `title` | "AJAZZ AK820 75% Wired Mechanical Keyboard" | Product title as shown in the search results |
| `price` | 3.03 | Current price shown in the search results, as a number |
| `currency`, `priceText` | "USD", "US $3.03" | Currency code and the price exactly as displayed |
| `originalPrice`, `discountPercent` | 17.06, 82 | Price before the discount, when AliExpress shows one |
| `ordersCount` | 9358 | Units sold (exact number when available, otherwise read from the text) |
| `ordersText` | "5,000+ sold" | The sold text as displayed |
| `rating` | 4.9 | Star rating out of 5 |
| `imageUrl`, `imageUrls` | https://ae-pic-a1.aliexpress-media.com/... | Main image and the extra images shown in the card |
| `shippingText`, `freeShipping` | "Free shipping", true | Shipping labels shown in the card |
| `deliveryDaysMin`, `deliveryDaysMax` | 6, 11 | Delivery time estimate in days, when shown |
| `isChoice`, `isAd` | true, false | AliExpress Choice product, sponsored product |
| `tags` | \["Fastest delivery in 6 days"] | Other labels on the card, such as coupons and delivery promises |
| `productId`, `url` | "1005010706907312" | Product ID and link to the product page |
| `keyword`, `page`, `position` | "phone case", 1, 3 | Which search found it and where it ranked |

### How to use it

1. Click **Try for free**.
2. Type one or more keywords in **Search keywords**.
3. Set **Max results per keyword**, and if you want, a sort order, price range, currency and ship-to country.
4. Click **Start**, then download the results as JSON, CSV or Excel.

### Input examples

The 200 best-selling Bluetooth speakers, prices in US dollars for the United States:

```json
{
    "searchKeywords": ["bluetooth speaker"],
    "maxResultsPerKeyword": 200,
    "sort": "orders"
}
```

Mechanical keyboards between 20 and 60 euros for shoppers in Germany, most expensive first, without sponsored products:

```json
{
    "searchKeywords": ["mechanical keyboard"],
    "maxResultsPerKeyword": 100,
    "sort": "priceDesc",
    "minPrice": 20,
    "maxPrice": 60,
    "currency": "EUR",
    "shipTo": "DE",
    "includeAds": false
}
```

Several keywords in one run:

```json
{
    "searchKeywords": ["wireless earbuds", "yoga mat", "kitchen knife set"],
    "maxResultsPerKeyword": 500,
    "maxItems": 1500
}
```

### Output example

A product from a search for "phone case" (US dollars, shipping to the United States):

```json
{
    "productId": "1005013423916382",
    "url": "https://www.aliexpress.com/item/1005013423916382.html",
    "title": "Luxury Glass Camera Preservation For Magesafe Magnetic Wireless Charge Phone Case For iPhone 18 17 Pro Max/18 17 Pro Shockproof Back Cover",
    "price": 3.03,
    "currency": "USD",
    "priceText": "US $3.03",
    "originalPrice": 17.06,
    "originalPriceText": "US $17.06",
    "discountPercent": 82,
    "ordersCount": 7,
    "ordersText": "7 sold",
    "rating": 5,
    "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S8ed7967e9f7e4aa29809ddb7fd10e68cv.jpg",
    "imageUrls": [
        "https://ae-pic-a1.aliexpress-media.com/kf/S8ed7967e9f7e4aa29809ddb7fd10e68cv.jpg",
        "https://ae-pic-a1.aliexpress-media.com/kf/S00af28de6bd74f2a862c27b4e6915201w.jpg",
        "https://ae-pic-a1.aliexpress-media.com/kf/Sb558982f16684583b0b659ce5d186950O.jpg"
    ],
    "shippingText": "Free shipping",
    "freeShipping": true,
    "deliveryDaysMin": 4,
    "deliveryDaysMax": 10,
    "tags": ["New shoppers save $14.03", "Free shipping"],
    "isChoice": false,
    "isAd": false,
    "categoryId": "202229005",
    "shipTo": "US",
    "keyword": "phone case",
    "page": 1,
    "position": 13,
    "scrapedAt": "2026-10-24T11:26:26Z"
}
```

A product from the mechanical keyboard example above (euros, shipping to Germany, some fields left out):

```json
{
    "productId": "1005012036345764",
    "url": "https://www.aliexpress.com/item/1005012036345764.html",
    "title": "Rapid Trigger Hall Switches O3C SayoDevice OSU O3C Magnetic Pink Switches Keyboard With Knob Screen Copy Paste Shotcut",
    "price": 44.39,
    "currency": "EUR",
    "priceText": "€ 44,39",
    "originalPrice": null,
    "originalPriceText": null,
    "discountPercent": 6,
    "ordersCount": 66,
    "ordersText": "66 sold",
    "rating": 5,
    "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/A2d966f35ffb14bd5a08faa3c7afa1a49D.jpg",
    "shippingText": "Free shipping",
    "freeShipping": true,
    "deliveryDaysMin": 2,
    "deliveryDaysMax": 9,
    "tags": ["30-day lowest price: 47,53€", "Free shipping"],
    "isChoice": false,
    "isAd": false,
    "shipTo": "DE",
    "keyword": "mechanical keyboard",
    "position": 42
}
```

### How much does it cost?

You pay per saved product: **$1.50 per 1,000 results**. There is no start fee and no monthly rental.

| Run | Results | Cost |
|---|---|---|
| One keyword, first page | 60 | $0.09 |
| One keyword, 1,000 products | 1,000 | $1.50 |
| Three keywords, 2,000 products each | 6,000 | $9.00 |

Set a maximum charge per run in the run options and the Actor stops when it is reached.

### Limits you should know

- **About 2,700 products per keyword at most.** AliExpress shows 60 products per page and stops at page 60. The same product often appears on more than one page, and the Actor saves it only once, so a keyword gives about 2,700 different products in our tests. To get more, use several related keywords, different sort orders or several price ranges.
- **Large runs slow down.** AliExpress shows a captcha page to addresses that load many pages. The Actor then moves to a different Apify datacenter proxy address and slows down. You are not charged for refused pages, but they take time. In our tests 1,000 products took about 50 seconds, about 2,700 products took 2 to 3.5 minutes, and 6,000 products took 6 to 7 minutes, with 12% to 19% of page loads refused and retried. If AliExpress keeps refusing for a long time, the Actor stops that keyword, keeps what it already saved and moves on to the next keyword.
- **No store name in search results.** AliExpress does not include the seller's store in its search result cards, so the Actor does not return it.
- **Search results only.** The Actor does not open product pages, so there are no descriptions, variants, specifications or reviews.
- **Some fields are empty for some products.** New products have no rating or sold count. Delivery days and shipping labels appear only when AliExpress shows them in the card. In a test with 6,000 products, the sold count was filled for 87%, the rating for 68% and delivery days for 47%.
- **No original price in the EU.** For EU countries such as Germany, AliExpress does not show a crossed-out original price in search results, so `originalPrice` is empty there. The "30-day lowest price" label appears in `tags` instead.
- **Prices are what the search page shows.** For a few products AliExpress shows a "new shopper" deal price in the search results. The `price` field holds the price shown in the card, and the product page can show a different price per variant.
- **Unusual keywords.** When nothing matches, AliExpress shows a few similar products instead of an empty page, and the Actor saves those.

### Tips

- **Use "Most orders" to find best sellers.** Combine it with a price range to find what sells in your price band.
- **Run it on a schedule.** Scrape the same keywords every day or week to track prices, discounts and sales growth over time. `ordersCount` and `productId` make it easy to compare runs.
- **Match the country to your market.** Prices, shipping and the products offered change with the ship-to country.

### FAQ

**Is it legal?** The Actor collects only product data that AliExpress shows publicly to every visitor, without logging in. Make sure your use of the data follows AliExpress's terms and the laws that apply to you.

**Do I need a proxy?** No. Leave the proxy setting off. When AliExpress starts refusing requests, the Actor switches by itself to the Apify datacenter proxy of your account. If your account has no proxy access, the Actor keeps retrying from its own address, which is slower and may stop large runs early.

**Something is broken or missing?** Open a ticket in the Issues tab. Issues are usually answered within a day.

# Actor input Schema

## `searchKeywords` (type: `array`):

What you would type into the AliExpress search box. One search per keyword, for example "phone case" or "bluetooth speaker".

## `maxResultsPerKeyword` (type: `integer`):

How many products to save for each keyword. AliExpress shows 60 products per page and at most 60 pages (about 3,600 products) per search.

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

The run stops after saving this many products across all keywords.

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

The same sort options as the AliExpress search page.

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

Only products priced at or above this amount, in the currency you choose below. Leave empty for no minimum.

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

Only products priced at or below this amount, in the currency you choose below. Leave empty for no maximum.

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

Currency for all prices.

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

Prices, shipping and delivery times are shown for this country, as a shopper there would see them. Some products are only offered in some countries.

## `includeAds` (type: `boolean`):

AliExpress mixes a few sponsored (ad) products into search results. Turn this off to skip them. Every record has an "isAd" field either way.

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

Optional. Leave it off: when AliExpress starts showing captcha pages, the Actor switches to Apify datacenter proxy addresses on its own.

## Actor input object example

```json
{
  "searchKeywords": [
    "phone case",
    "bluetooth speaker"
  ],
  "maxResultsPerKeyword": 50,
  "maxItems": 1000,
  "sort": "bestMatch",
  "currency": "USD",
  "shipTo": "US",
  "includeAds": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

AliExpress products saved by the run, one item per product.

# 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 = {
    "searchKeywords": [
        "phone case"
    ],
    "maxResultsPerKeyword": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("pipiagent/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 = {
    "searchKeywords": ["phone case"],
    "maxResultsPerKeyword": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("pipiagent/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 '{
  "searchKeywords": [
    "phone case"
  ],
  "maxResultsPerKeyword": 50
}' |
apify call pipiagent/aliexpress-search-scraper --silent --output-dataset

```

## MCP server setup

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