# AliExpress Product Search Scraper by Keyword: Prices & Sales (`charitable_trousseau/aliexpress-search-scraper`) Actor

AliExpress product search results by keyword or search URL: price, original price, discount, rating, units sold, listing date and sponsored flag, for any ship-to country and currency. Sort by best match, most orders or price. Up to 60 pages of 60 products per search. $2.50 per 1,000 products.

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

## Pricing

from $1.75 / 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.
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 Product Search Scraper by Keyword: Prices & Sales

Get AliExpress search results for any keyword or filtered search, priced for the ship-to country and currency you choose.

### What you can do with it

- Product research: sort a keyword by most orders and read `soldCount`, `rating` and `listedDate` to see what sells and how new it is.
- Price monitoring for a ship-to country and currency: `price`, `originalPrice` and `discountPercent` per product.
- Compare how the same keyword is priced for different countries by running it once per ship-to country.
- See which results are sponsored (`isAd`) and where each product sits (`page`).

### What you get

One record per product:

- **Product:** `productId`, `title`, `url`, `imageUrl`, `listedDate`
- **Price:** `price`, `originalPrice`, `discountPercent`, `currency`
- **Demand signals:** `rating`, `soldText` (e.g. "3,000+ sold"), `soldCount` (3000)
- **Placement:** `isAd` (sponsored result), `page`, `tags` (text labels on the card, such as "Top selling on AliExpress", "Free shipping" or a delivery estimate)
- **Context:** `search`, `shipToCountry`, `scrapedAt`

#### Sample output

One record from a run on 2026-10-07, as saved:

```json
{
    "productId": "3256809537716693",
    "title": "Foldable Eye Protection Desk Lamp, Supports Three-Speed Dimming, Supports USB Charging and Plug-In Two Styles, and Has Learning",
    "url": "https://www.aliexpress.com/item/3256809537716693.html",
    "price": 5.19,
    "originalPrice": 12.68,
    "discountPercent": 59,
    "currency": "USD",
    "rating": 4.5,
    "soldText": "4,000+ sold",
    "soldCount": 4000,
    "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S043081514cb64b23a33c57a5280e3bc5r.jpg",
    "isAd": true,
    "listedDate": "2025-08-12",
    "tags": [
        "Save $7.49",
        "Top selling on AliExpress"
    ],
    "search": "desk lamp",
    "page": 1,
    "shipToCountry": "US",
    "scrapedAt": "2026-10-07T20:26:27.889Z"
}
```

### Input

- **Search terms** — one or more keywords, with an optional **sort order** (best match, most orders, price low to high, price high to low).
- **AliExpress search or category URLs** — for anything more specific. Set your filters on aliexpress.com and paste the address of the results page. Search, category and old-style `/wholesale?SearchText=` addresses work, as do aliexpress.us, mobile and other-language addresses. Product pages and other sites are skipped with a warning.
- **Ship-to country** and **currency** — default US and USD. A code that is not a country or currency falls back to the default, with a warning.

If you leave both search terms and URLs empty, the run searches for the example term "wireless headphones".

- **Maximum products per search term or URL** — default 120.

```json
{
    "searchTerms": ["wireless headphones", "desk lamp"],
    "sort": "orders",
    "shipToCountry": "US",
    "currency": "USD",
    "maxItemsPerSearch": 300
}
```

### FAQ

#### Is there an AliExpress product search API?

Yes, in the sense that you can call it like one. Start a run through the Apify API or one of Apify's clients with the input described here, then read the results as JSON, CSV or Excel. Each record is one product from the search results, priced for the ship-to country and currency you chose. It is not an official AliExpress API and needs no AliExpress account.

#### How do I scrape AliExpress search results by keyword?

Put one or more keywords in **Search terms**, choose a sort order, ship-to country and currency, and set the maximum products per search. For a filtered search (price range, category), set the filters on aliexpress.com and paste the address of the results page into **AliExpress search or category URLs**.

#### How many products can I get for one AliExpress search?

AliExpress shows 60 products per page and at most 60 pages per search. To go deeper, split the search with price-range filters and pass the resulting URLs.

#### Does it return product descriptions, variants, reviews or shipping costs?

No. The fields are the ones listed under "What you get", all taken from search results. `soldCount` is the lower bound of what AliExpress displays ("3,000+ sold" becomes 3000).

#### How much does it cost?

$2.50 per 1,000 products on Apify's Free plan, plus a start fee of $0.00005 per run. Paid Apify plans pay less: Bronze 10%, Silver 20% and Gold 30% less. Runs that fail or return nothing cost nothing.

### Limits to know about

AliExpress shows 60 products per page and at most 60 pages per search. To go deeper, split a search with price-range filters and pass the resulting URLs.

Products AliExpress offers to new shoppers as a free gift ("FREE with any purchase") show no price on the card. For those, `price` and `originalPrice` are the sale and list prices AliExpress records for the product, and `discountPercent` is worked out from them.

`rating`, `soldText` and `listedDate` are empty when the card shows none (new products often have no rating or sales yet). AliExpress serves cards without them to addresses outside the ship-to country, so keep the default proxy, or use residential proxies in the ship-to country.

`soldCount` is the lower bound of the figure AliExpress displays: "3,000+ sold" becomes 3000.

If AliExpress does not offer the chosen currency for the ship-to country, prices come in the currency it does offer; the `currency` field always says which.

### Pricing

You pay per product saved. Runs that fail or return nothing cost nothing.

### Reliability

If AliExpress challenges a request the scraper retries from a different address. A search with no matches finishes with zero products and a note, rather than failing. If a search cannot be completed, the run keeps what the other searches found and ends with a status message naming the search and the reason; it fails only when nothing at all could be saved. The scraper is checked against the live site daily.

### Related scrapers

- [Coles Australia Grocery Price Scraper](https://apify.com/charitable_trousseau/coles-au-product-scraper): products, prices and specials from coles.com.au
- [eBay Active Listings & Auctions Search Scraper](https://apify.com/charitable_trousseau/ebay-search-scraper): active listings and auctions on five eBay sites
- [Apple App Store Scraper](https://apify.com/charitable_trousseau/app-store-scraper): iOS top charts, search results and app details
- [Zillow ZIP Code Search Scraper](https://apify.com/charitable_trousseau/zillow-search-scraper): homes for sale, rentals and recently sold homes
- [Tripadvisor Places Scraper](https://apify.com/charitable_trousseau/tripadvisor-listings-scraper): hotels, restaurants and things to do for any place
- [Google Maps Places Scraper](https://apify.com/charitable_trousseau/google-maps-places-scraper): business listings across a whole city, postcode or radius
- [Indeed Jobs Scraper](https://apify.com/charitable_trousseau/indeed-jobs-scraper): job listings on 12 Indeed country sites, descriptions optional
- [Glassdoor Jobs Scraper](https://apify.com/charitable_trousseau/glassdoor-jobs-scraper): job listings with salary ranges and employer ratings
- [LinkedIn Jobs Scraper](https://apify.com/charitable_trousseau/linkedin-jobs-scraper): job postings past LinkedIn's 1,000-per-search limit, no login
- [Google Trends Scraper](https://apify.com/charitable_trousseau/google-trends-scraper): interest over time, interest by region, rising queries and trending searches

# Actor input Schema

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

Products to search for, one per line. If you leave both this and the URL list empty, the run searches for the example term "wireless headphones".

## `searchUrls` (type: `array`):

For filtered searches: set your filters on aliexpress.com and paste the address of the results page. Search, category and old-style /wholesale?SearchText= addresses work; product pages and addresses on other sites are skipped with a warning.

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

Applies to the search terms above.

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

Two-letter country code. Prices and availability are shown for this country.

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

Three-letter currency code, e.g. USD, EUR, GBP.

## `maxItemsPerSearch` (type: `integer`):

AliExpress shows 60 products per page and at most 60 pages per search.

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

Residential proxies in the ship-to country are used by default and are needed for reliable runs.

## Actor input object example

```json
{
  "searchTerms": [
    "wireless headphones"
  ],
  "sort": "default",
  "shipToCountry": "US",
  "currency": "USD",
  "maxItemsPerSearch": 120
}
```

# Actor output Schema

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

All products saved by the run.

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

// Run the Actor and wait for it to finish
const run = await client.actor("charitable_trousseau/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 headphones"] }

# Run the Actor and wait for it to finish
run = client.actor("charitable_trousseau/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 headphones"
  ]
}' |
apify call charitable_trousseau/aliexpress-search-scraper --silent --output-dataset

```

## MCP server setup

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