# AliExpress 速卖通 Scraper - Products, Prices & Sold Counts (`clover_folktale/aliexpress-scraper`) Actor

Search AliExpress (速卖通) products by keyword, sorted by best selling or price, with a price range and currency (USD, EUR, GBP). Get item ID, title, price, sold count, rating, ad flag, image and link. No login or cookies needed. Export to JSON, CSV or Excel.

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

## Pricing

Pay per event

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 速卖通 Scraper searches AliExpress by keyword and returns the public product cards as clean, flat JSON. Every record has the item ID, title, price as a number, sold count, star rating, an ad flag, the image and the product link. You can sort by best selling or price, limit the price range and pick the currency (USD, EUR or GBP). It is for dropshippers, sellers, product researchers and price monitors who want an AliExpress API alternative with no AliExpress account, API keys, proxies or cookies. Pricing is pay-per-event: $0.008 per product, plus a $0.018 start fee per run.

### What data can you get?

One record per product, the same fields for every keyword.

| Field | What it contains |
|---|---|
| `itemId` | AliExpress item ID |
| `url` | Link to the product page |
| `title` | Product title |
| `price` | Price shown on the result card (the promotion price when there is one), as a number in the chosen currency |
| `currency` | Currency code of the price (the currency you asked for) |
| `soldCount` | Number of units sold, as AliExpress shows it (0 when it shows none) |
| `rating` | Average star rating out of 5; empty for products without ratings |
| `isAd` | True for a sponsored result (an advertisement slot in the search results) |
| `imageUrl` | Main product image |
| `searchKeyword` | The keyword the product was found with |
| `type` | Record type, always `product` |

#### How the data is shaped

- **Numbers you can use.** `price`, `soldCount` and `rating` are numbers, not text.
- **Flat fields, nothing nested.** One record per product, so you can merge runs of different keywords without remapping columns.
- **Ads are marked, not hidden.** Sponsored slots come back in the same list with `isAd` set to `true`; filter them out in your own code if you only want organic results. Each returned product is charged, ads included.

### How to use AliExpress 速卖通 Scraper

1. Open the Actor in Apify Console.
2. Keep the mode **Search products by keyword** (the only mode).
3. Add one or more **Keywords**.
4. Optionally choose a **Sort**, a **Currency** and a **Minimum price** and **Maximum price**.
5. Set **Max results** to the total number of products you want for the whole run.
6. Click **Start**. When the run finishes, download the dataset as JSON, CSV or Excel, or read it through the Apify API.

The Actor also runs in seconds with an empty input: `{}` searches "phone case".

### Input

| Field | Type | Required | What it does | Default |
|---|---|---|---|---|
| `mode` | string | Optional | `search` (products by keyword), the only mode | `search` |
| `keywords` | array of strings | Optional | Search keywords, searched one after the other until `maxResults` is reached | Falls back to `phone case` when empty |
| `sort` | string | Optional | `relevance`, `bestSelling`, `priceLowToHigh`, `priceHighToLow` | `relevance` |
| `currency` | string | Optional | Currency of the prices and of the price range: `USD`, `EUR` or `GBP` | `USD` |
| `minPrice` | number | Optional | Only products priced at or above this value, in the chosen currency | no lower bound |
| `maxPrice` | number | Optional | Only products priced at or below this value, in the chosen currency | no upper bound |
| `maxResults` | integer | Optional | Maximum number of products for the whole run (1 to 5000). The run stops as soon as it is reached. You are charged per product returned | `20` |

#### Example: best sellers in a price range

```json
{
  "mode": "search",
  "keywords": ["phone case", "usb c cable"],
  "sort": "bestSelling",
  "currency": "USD",
  "minPrice": 1,
  "maxPrice": 10,
  "maxResults": 100
}
```

### Output example

The values below are illustrative.

```json
{
  "type": "product",
  "itemId": "3256800000000001",
  "url": "https://www.aliexpress.com/item/3256800000000001.html",
  "searchKeyword": "phone case",
  "currency": "USD",
  "title": "Magnetic Clear Phone Case For iPhone 16 Pro Max Shockproof Cover",
  "price": 1.09,
  "soldCount": 4905,
  "rating": 4.7,
  "isAd": false,
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/example.jpeg"
}
```

### How much does it cost?

The Actor uses pay-per-event pricing. These are the charge events and their prices:

| Event | Price (USD) | When it is charged |
|---|---|---|
| `run-start` | $0.018 | Once per run, charged when the first request to the data source succeeds, even if that request returns nothing. It is not charged when the data source fails from the start, or when your spending limit cannot cover it. When you give several keywords, each one after the first pays one more start fee, but only if the run actually reaches it. That extra fee is charged before that keyword's first request and is kept even if that keyword then returns nothing. |
| `result` | $0.008 | For each product returned |

Worked examples:

- **100 products from one keyword:** $0.018 + 100 x $0.008 = **$0.818**.
- **20 products (the default run):** $0.018 + 20 x $0.008 = **$0.178**.
- **100 products in total from two keywords, where the first keyword runs out after 40 products and the other 60 come from the second:** 2 x $0.018 + 100 x $0.008 = **$0.836**. If the first keyword alone fills all 100 products, the second keyword is never searched, no second start fee is charged, and the cost stays $0.818.

You never pay for more than `maxResults` items, you are never charged for items that were not delivered, and the run stops by itself if your spending limit is reached.

On the free Apify plan, every run returns a sample dataset: a real result of this Actor's prefilled input, captured on the date shown in the run status, so you can see exactly what the output looks like. Your own input is not used and nothing is charged. To run your own searches, use any paid Apify plan.

### Use cases

- **Product research and dropshipping:** see what sells for a keyword, at what price and with how many units sold.
- **Price monitoring:** run the same keyword on a schedule and track price moves in your own currency.
- **Competitor and niche watch:** compare best sellers across keywords and price bands.
- **AI and data projects:** use clean, flat product records for catalogs, price models and recommendations.

### Integrations and API

You can start runs from your own code with the Apify API, schedule runs, and connect the dataset to Apify integrations and webhooks. Results can be read from the API as JSON, CSV or Excel.

Example with the Python `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("clover_folktale/aliexpress-scraper").call(run_input={
    "mode": "search",
    "keywords": ["phone case"],
    "sort": "bestSelling",
    "currency": "USD",
    "maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Tips and limits

- **Page size.** A search page holds about 20 products; large runs make one request per page, roughly 2-5 seconds each. Different pages of one search do not overlap.
- **Fewer results than requested.** A listing ends when a page comes back thin or empty, so you may get fewer products than `maxResults` for narrow searches or tight price ranges.
- **Searches that find nothing.** A keyword that finds nothing is skipped. If too many keywords return nothing, the run stops to protect your budget.
- **Order can change between runs.** AliExpress mixes in ads and personalised ranking, so the same keyword can list products in a different order on a different day. Sorting by best selling or price is steadier.
- **Currency.** `price` is in the currency you chose (USD, EUR or GBP). Prices are what AliExpress shows at the time of the run.
- **Which fields are often empty:** `rating` is empty for products without ratings; `soldCount` is 0 for new products.
- **Free plan.** Every run on the free Apify plan returns a stored sample dataset (a real result of the prefilled input); your own input is not used and nothing is charged. Use any paid Apify plan to run your own searches.
- **Feedback.** Missing a field or a filter? Open an issue from the Actor page and it will be looked at.

### FAQ

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

No. You only need an Apify account to run the Actor.

#### Is it legal to scrape AliExpress?

The Actor returns only public listing data: what anyone sees on an AliExpress search results page. It returns no account data and no buyer data, and no private data such as phone numbers or messages. You are responsible for how you use the data and for following the laws and terms that apply to you.

#### How fresh is the data?

Each run reads AliExpress at the time of the run.

#### How many results can I get?

Up to 5000 products per run, set with `maxResults`. Narrow searches can return fewer products.

#### Does it return product details, variants or reviews?

No. This Actor returns the search result cards only: title, price, sold count, rating, image and link.

#### Can I schedule runs and export the data?

Yes. You can schedule runs in Apify, start them through the API, and export every dataset as JSON, CSV or Excel.

### More tools from the same developer

- [Amazon Product Scraper - Best Sellers, ASIN, Prices, Ratings](https://apify.com/clover_folktale/amazon-scraper)
- [Taobao 淘宝 Scraper - Products, Prices, Sales & Shop Ratings](https://apify.com/clover_folktale/taobao-scraper)
- [1688 阿里巴巴 Scraper - Wholesale Prices & Suppliers](https://apify.com/clover_folktale/1688-scraper)
- [TikTok Shop Scraper - Products, SKUs, Reviews & Reviewer IDs](https://apify.com/clover_folktale/tiktok-shop-scraper)

# Actor input Schema

## `mode` (type: `string`):

What to scrape: products by keyword.

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

Search keywords. Results are collected keyword by keyword until Max results is reached. Falls back to "phone case" when empty.

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

Order of the results.

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

Currency of the prices (and of the price range below).

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

Only products priced at or above this value, in the chosen currency. Leave empty for no lower bound.

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

Only products priced at or below this value, in the chosen currency. Leave empty for no upper bound.

## `maxResults` (type: `integer`):

Maximum number of products to return in total for this run. You are charged per product returned.

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "phone case"
  ],
  "sort": "relevance",
  "currency": "USD",
  "maxResults": 20
}
```

# Actor output Schema

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

All scraped items (JSON, CSV, Excel via the dataset API).

# 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"
    ]
};

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

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

```

## MCP server setup

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