# AliExpress Search Scraper (`marketlens/aliexpress-search-scraper`) Actor

Scrape AliExpress search results with exact order counts, ratings, prices, delivery times and ship-from country. Sort and filter for dropshipping research, in any country and currency.

- **URL**: https://apify.com/marketlens/aliexpress-search-scraper.md
- **Developed by:** [Aymane shami](https://apify.com/marketlens) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 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.
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 Search Scraper

Scrape AliExpress search results for product research and dropshipping: **exact order counts, ratings, prices and ship-from country**, for the country and currency you sell in. Fast, filterable, and spreadsheet-ready.

### Why use it

- **Exact orders, not "10K+ sold".** Every product comes with AliExpress's exact order count, so you can rank winners precisely.
- **Search like a buyer.** Sort by most orders or by price. Filter by price, minimum rating, minimum orders, ship-from country, free shipping and Choice products.
- **Any market.** Choose the ship-to country and currency. Prices and delivery estimates follow, so you see what your customers will see.
- **Honest prices.** The seller's "original" price and "% off" are labeled as seller claims. Prices that only new AliExpress customers get are flagged.
- **Spreadsheet-ready.** Search rank, orders and free-shipping minimum order are numbers, not text.
- **Fast.** About 100 products in 5–10 seconds.

### Use cases

- **Find winning products:** sort by most orders, filter by rating ≥ 4.5, and export to Google Sheets.
- **Check what sells in a market:** run the same search for US, FR or DE and compare prices and warehouses.
- **Source from local warehouses:** filter by ship-from country (US, ES, FR…) for faster delivery.
- **Track prices and rankings:** schedule a daily run and compare `price`, `orders` and `rank` over time, for your own products or a competitor's.

### How to use

1. Enter one or more **search queries**, for example `usb c hub` or `écouteurs sans fil`. Any language works.
2. Choose **how many products** you want per query, and optionally the sort order, filters, country and currency.
3. Click **Start**, then download the results as JSON, CSV or Excel, or send them to Google Sheets, Make, Zapier or n8n.

#### Example input

```json
{
  "searchQueries": ["usb c hub", "phone holder"],
  "maxItemsPerQuery": 100,
  "sort": "orders",
  "minRating": 4.5,
  "minOrders": 100,
  "shipToCountry": "US",
  "currency": "USD"
}
```

#### Example output (one product)

```json
{
  "keyword": "usb c hub",
  "rank": 11,
  "page": 1,
  "position": 11,
  "productId": "1005008015931547",
  "title": "Vention USB 3.2 Gen2 HUB 5 Ports Splitter 10Gbps USB A Type C HUB Multiport Adapter",
  "url": "https://www.aliexpress.com/item/1005008015931547.html",
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S3c6961b4a09f4a74891f6867d6559175R.jpg",
  "price": 9.49,
  "currency": "EUR",
  "orders": 7626,
  "rating": 4.8,
  "originalPrice": null,
  "sellerDiscountPercent": 3,
  "isNewCustomerPrice": false,
  "shipsFrom": "CN",
  "isChoice": false,
  "labels": ["30-day lowest price: 9,8€", "Top selling on AliExpress", "Free shipping over 10€"],
  "images": [],
  "isAd": false,
  "scrapedAt": "2026-10-21T20:46:48+00:00",
  "shipping": "Free shipping over 10€",
  "freeShippingMinOrder": 10
}
```

### Input

| Field | Default | |
|---|---|---|
| `searchQueries` | | One AliExpress search per line, in any language |
| `maxItemsPerQuery` | 60 | Products per query (AliExpress shows 60 per page) |
| `sort` | Best match | Best match, most orders, price low to high, price high to low |
| `minPrice` / `maxPrice` | | In the chosen currency |
| `minRating` / `minOrders` | | Products without a rating or orders are dropped when these are set |
| `shipToCountry` / `currency` | US / USD | Chosen from lists: 66 countries and 21 currencies verified on AliExpress. Prices depend on both |
| `shipFrom` | | Warehouse country, e.g. `US`, `ES`, `FR` |
| `freeShippingOnly` / `choiceOnly` | off | AliExpress's own free-shipping and Choice filters |
| `includeAds` | off | Also return sponsored results |
| `findCheaperSellers` | off | **Beta**, see below |
| `proxyConfiguration` | Apify Proxy | Residential proxies are the most reliable for very large runs |

### Output fields

| Field | |
|---|---|
| `keyword`, `rank`, `page`, `position` | The search that found the product and where it ranked: `rank` is its overall place in AliExpress's results (position 5 on page 2 is about rank 65), `page` and `position` say where it appeared |
| `productId`, `title`, `url`, `imageUrl` | The listing |
| `price`, `currency` | The price shown in search results |
| `orders` | AliExpress's exact order count |
| `rating` | Star rating |
| `originalPrice`, `sellerDiscountPercent` | The seller's crossed-out price and "% off". These are the seller's claims |
| `isNewCustomerPrice` | `true` when `price` is an offer only for new AliExpress customers (often tied to a minimum order). Existing customers usually pay more |
| `shipsFrom` | Warehouse country |
| `isChoice`, `labels` | AliExpress Choice product, and the other labels on the card ("Top selling on AliExpress"…) |
| `images` | Other product images |
| `isAd` | Whether it was a sponsored result |
| `scrapedAt` | When the product was collected (UTC) |
| `shipping`, `freeShippingMinOrder` | The shipping label when the card shows one ("Free shipping over 10€") and that minimum order as a number. Most cards don't show one, so filter with `freeShippingOnly` |

### Pricing

**$2.00 per 1,000 products.** You only pay for products delivered: blocked or failed pages are never charged.

### FAQ

**Why are some fields empty?** AliExpress doesn't show every detail on every product. New listings have no rating or orders yet. EU listings have no "original" price or new-customer price; AliExpress shows a "30-day lowest price" label instead, which you'll find in `labels`.

**Why does the price differ from what I see on AliExpress?** Prices depend on the country, the currency and whether you are a new customer. Set `shipToCountry` and `currency` to match your market. Listings with `isNewCustomerPrice: true` show a price that existing customers usually don't get.

**Why did a query return fewer products than I asked for?** Strict filters, or a narrow search with few results. Products that appear on several pages, or in several of your queries, are only returned once.

**In the EU, what is `sellerDiscountPercent` measured against?** The "30-day lowest price" shown in `labels` (9.80 → 9.49 is 3%), not an "original" price.

**What if AliExpress doesn't apply my country or currency?** The run stops before returning anything and tells you, so you are never charged for products priced for the wrong market. Invalid values (for example "France" instead of `FR`) are rejected before the run starts.

**Is scraping AliExpress allowed?** The actor only collects publicly visible search results, with no login. You are responsible for how you use the data, in line with AliExpress's terms and the laws that apply to you.

### Same product from other sellers (beta)

> **Beta: still being tested and not fully functional.** It finds another listing for only a minority of products, can miss real matches, and may occasionally pair listings that differ in size or options. Treat its output as a lead to check, not a verified result.

When `findCheaperSellers` is on, the actor runs one extra AliExpress search per product (best-selling first, up to `maxSameProductSearches`) and matches listings by category, pack size, "N in 1" configuration, title and photo. Each record then also has:

- `sameProductSellers`: other listings matched as the same product, and the price range of the regular-priced ones
- `cheaperSellers`: up to 3 cheaper listings from sellers meeting `cheaperSellerMinRating` and `cheaperSellerMinOrders`
- `inflatedOriginalPrice`: `true` when the "original" price is 10%+ above every other seller's price
- `dealCheck`: `cheaper_elsewhere`, `lowest_among_sellers`, `no_trusted_cheaper_seller` or `no_same_product_found`

It makes runs slower and uses more requests. A listing's price is its cheapest variant, so check the variant before buying.

### Support

Found a problem or need a field? Open an issue in the **Issues** tab. Fixes for AliExpress page changes are usually shipped within a few days.

# Actor input Schema

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

What to search on AliExpress, one query per line.

## `maxItemsPerQuery` (type: `integer`):

AliExpress shows 60 products per page.

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

AliExpress's own sort order.

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

In the chosen currency. Applied by AliExpress.

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

In the chosen currency. Applied by AliExpress.

## `minRating` (type: `number`):

Keep only products rated at least this many stars. Unrated products are dropped when set.

## `minOrders` (type: `integer`):

Keep only products with at least this many orders.

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

Prices, delivery estimates and the EU price labels depend on it.

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

Currency of all prices. Only currencies verified to work on AliExpress are listed.

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

Two-letter country code of the warehouse, e.g. US, ES, FR, CN. Empty for any.

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

Only products AliExpress lists with free shipping to the ship-to country. Applied by AliExpress.

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

Only AliExpress Choice products. Applied by AliExpress.

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

Also return listings that sellers paid to place in the search results.

## `findCheaperSellers` (type: `boolean`):

Beta, not fully functional. Matches identical products across sellers by photo and title, suggests cheaper trusted sellers and flags inflated 'original' prices. Verify results before relying on them.

## `maxSameProductSearches` (type: `integer`):

For each product (best-selling first), run one extra AliExpress search on its own name to find other sellers of it. Each search is one page request. 0 compares only within your own results.

## `cheaperSellerMinRating` (type: `number`):

A cheaper seller is only suggested at or above this star rating.

## `cheaperSellerMinOrders` (type: `integer`):

A cheaper seller is only suggested with at least this many orders.

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

Residential proxies are the most reliable for large runs.

## Actor input object example

```json
{
  "searchQueries": [
    "usb c hub"
  ],
  "maxItemsPerQuery": 60,
  "sort": "default",
  "shipToCountry": "US",
  "currency": "USD",
  "freeShippingOnly": false,
  "choiceOnly": false,
  "includeAds": false,
  "findCheaperSellers": false,
  "maxSameProductSearches": 100,
  "cheaperSellerMinRating": 4.5,
  "cheaperSellerMinOrders": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

AliExpress products with title, url, price, currency, exact orders, rating, seller's original price and discount, new-customer price flag, ships-from country, Choice flag, labels, images, keyword, search rank (overall rank, page and position), and the shipping label.

# 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 = {
    "searchQueries": [
        "usb c hub"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("marketlens/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 = {
    "searchQueries": ["usb c hub"],
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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