# AliExpress Scraper – Search, Prices & Sales (`brii3343/aliexpress-scraper`) Actor

Scrape AliExpress search and category results for any of 55 delivery countries: price, original price, discount, currency, sold count, rating, free shipping, delivery dates, Choice, ads, new-shopper deals, store and images. Up to 3,600 products per search. Pay only per product.

- **URL**: https://apify.com/brii3343/aliexpress-scraper.md
- **Developed by:** [Brian Gastaldelli](https://apify.com/brii3343) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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 Scraper — search, categories, prices and sales by country

Get AliExpress products from **keyword searches and category pages**, with the prices, currency, shipping and delivery dates of **the country you ship to**: title, price, original price, discount, rating, **sold count**, free shipping, delivery dates, Choice, ads, new-shopper deals, store, images and categories. 55 delivery countries, 39 currencies, up to 3,600 products per search.

#### Why this Actor

- **Works on every attempt.** In our tests: **210 search pages out of 210** read (70 searches, 3 pages each, shipping to the US, Brazil, Australia, Germany and the UK), 12,600 products, 0 duplicates.
- **Checked against the live page.** 38 products read by this Actor were compared with the same search opened in a browser in the same minute (same country and currency): price, sold count, rating and title **38/38 equal**.
- **Prices of the country you choose.** Tested in 14 countries (US, GB, DE, IT, FR, ES, NL, PL, CA, AU, BR, MX, JP, KR): **60 products out of 60** with a price in the country's currency in each. Where AliExpress shows reduced results to foreign visitors (Europe, UK, Canada, Japan, Korea), the Actor switches by itself to a residential connection in that country.
- **Fields other scrapers skip**: sold count as a number (not only "500+ sold"), delivery dates and days, AliExpress Choice, ads, new-shopper deals, store name, category ids, launch date, all card images.
- **Fast.** 60 products in about 5 seconds; 10 searches of 180 products (1,800 products) in under a minute.
- **You pay only for products.** Searches with no results, wrong links and pages AliExpress refuses are free status rows. Duplicates across pages are removed.

#### Use cases

- **Dropshipping and product research**: what sells (sold count, orders sort), at what price, with which rating, in which category.
- **Price monitoring across countries**: the same search shipped to the US, Germany or Brazil, each in its own currency, every day.
- **Competitor and supplier research**: stores, discounts, Choice and free-shipping offers in a niche.
- **Market data and AI pipelines**: titles, images, prices and categories for catalogs and trend analysis.

#### Input

| Field | Description |
|---|---|
| Search keywords | One AliExpress search per keyword. |
| AliExpress URLs | Search links (`/w/wholesale-phone-case.html`, `/wholesale?SearchText=…`) and category links (`/category/100003109/women-clothing.html`), with the sort and filters you chose on the site. |
| Ship to | Delivery country (default United States): decides prices, shipping, delivery dates and which products appear. |
| Currency | The country's currency (default) or any of 39 currencies. |
| Max products per search or URL | Default 60 (one page). `0` = every page AliExpress shows (up to 60 pages). |
| Sort by | Best match, orders (best sellers first), price low to high, price high to low. |
| Filters | Min and max price, free shipping only, 4 stars & up only, Choice products only. |
| Max products in total | Stop the whole run after this many products. |

Example input:

```json
{
  "searches": ["led strip lights", "wireless earbuds"],
  "startUrls": [{ "url": "https://www.aliexpress.com/category/100003109/women-clothing.html" }],
  "shipTo": "US",
  "currency": "auto",
  "maxItemsPerSource": 180,
  "sort": "orders",
  "minPrice": 5,
  "fourStarsAndUp": true
}
```

#### Output

One row per product (real output, US):

```json
{
  "productId": "1005006112280832",
  "url": "https://www.aliexpress.com/item/1005006112280832.html",
  "title": "Suitable For Ps5/ps4/switch Pro/ Xbox Series S Handle 4 Universal Rocker Cap Thumb Grip Protective Cover Keycap Silicone",
  "price": 1.09,
  "originalPrice": 5.22,
  "discountPercent": 79,
  "currency": "USD",
  "priceText": "US $1.09",
  "welcomeDeal": true,
  "welcomeDealText": "New shoppers - $4.13",
  "rating": 4.9,
  "soldCount": 136,
  "soldText": "136 sold",
  "freeShipping": true,
  "freeShippingText": "Free shipping",
  "deliveryText": "Delivery: Oct 05 - 13",
  "deliveryMinDays": 6,
  "deliveryMaxDays": 14,
  "deliveryFrom": "2026-10-05",
  "deliveryTo": "2026-10-13",
  "isChoice": true,
  "isAd": false,
  "store": "Shop1102765160 Store",
  "attributes": ["Accessory Kits", "Gaming"],
  "tags": ["$1.03 each, ≥ 3 pieces", "Extra 1% off with coins"],
  "image": "https://ae-pic-a1.aliexpress-media.com/kf/S1ce1c25777ef493cabb47c322edcfeabG.jpg",
  "images": ["https://ae-pic-a1.aliexpress-media.com/kf/S1ce1c25777ef493cabb47c322edcfeabG.jpg", "..."],
  "categoryIds": ["44", "100000310", "200005123"],
  "launchDate": "2023-10-10",
  "reducedCard": false,
  "position": 147,
  "page": 4,
  "shipTo": "US",
  "source": "search: rgb gaming headset",
  "sourceType": "search",
  "searchQuery": "rgb gaming headset",
  "categoryId": null,
  "totalResults": 2734,
  "scrapedAt": "2026-09-29T10:07:46.790Z"
}
```

This product has a new-shopper deal: $1.09 is the price for a first order, `originalPrice` is the full price. Fields are filled when AliExpress shows them on the search page: products without reviews have no `rating`, and delivery dates and store name appear only on some cards (in our US test: price 100%, sold count 89%, rating 76%, delivery days 52%, store 45%). `attributes` and `tags` are the short texts of the card ("Gaming", "Lowest price in 90 days", "Extra 2% off with coins"…), in the language AliExpress uses for that country.

Sources that give no products come back as a `status` row, **never charged**:

| status | Meaning |
|---|---|
| `no_results` | AliExpress has no products for this search or category in this country |
| `invalid_input` | Not an AliExpress link, not a search or category page, or nothing to search |
| `unsupported` | Product (`/item/…`) and store pages: not supported yet |
| `error` | AliExpress did not answer after every retry (rare); try again later |

#### Honest limits

- **Search and category results only.** Product pages (full description, variants, specifications, reviews) are not included yet.
- **AliExpress shows at most 60 pages of 60 products** (3,600) per search. For more, split into narrower keywords, categories or price ranges.
- **The order changes on every visit**: AliExpress shuffles results, so the same search run twice shares about 60% of its first page. Use the orders or price sort for stable lists.
- **New-shopper deals.** Many products show an offer for new customers ("New shoppers save $3", "FREE with any purchase", "Dollar Express"): `welcomeDeal` is `true`, `welcomeDealText` says which, and `price` is the deal price the search page shows to a visitor without an account (0 for "FREE with any purchase" gifts, 1 or 2 products in 1,000). `originalPrice` is the full price.
- **Free shipping** is `true` only when the card says free shipping with no minimum; thresholds like "Free shipping over 10€" are kept in `freeShippingText`. The "Free shipping only" filter is applied by AliExpress, but in the US few cards carry the free-shipping label.
- **4 stars & up** is checked on each product's rating (AliExpress's own filter stops at 60 products): products without a rating are skipped.
- Countries that need a residential connection (most of Europe, UK, Canada, Japan, Korea) are slower: 10–40 seconds per search. In the rare case AliExpress still sends reduced cards (no rating, sales or delivery), rows have `reducedCard: true`.

#### Pricing

Pay per event, only for products you get:

- **Product** (`product`): one product from a search or category page.
- A small start event per run. Status rows and duplicates are free.

Prices per 1,000 products for each Apify plan are in the Pricing tab. The Actor honors your *Maximum cost per run*: it stops when the next product would go over it.

#### Tips

- For best sellers in a niche, use **Sort by: Orders** and read `soldCount`.
- For the same search in several countries, run the Actor once per country (one "Ship to" per run) and compare `price` and `currency`.
- To track prices, schedule a run with your keywords or category links every day and join on `productId`.
- Filter out sponsored results with `isAd`.

#### Other Actors by the same author

- [Google Trends API](https://apify.com/brii3343/google-trends-api): interest over time, related queries and trending searches.
- [Google Ads Transparency Scraper](https://apify.com/brii3343/google-ads-transparency-scraper): the ads any advertiser runs on Google.
- [Tech Stack Detector](https://apify.com/brii3343/tech-stack-detector): the technologies behind any website.

# Actor input Schema

## `searches` (type: `array`):

Products to search for, one per line, for example <code>phone case</code>, <code>wireless earbuds</code>, <code>led strip lights</code>. Each keyword is one search, read page by page (60 products per page).

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

AliExpress search or category pages, with any filters you set on the site, for example <code>https://www.aliexpress.com/w/wholesale-phone-case.html?SortType=total\_tranpro\_desc</code> or <code>https://www.aliexpress.com/category/100003109/women-clothing.html</code>. Product pages are not supported yet.

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

Delivery country. AliExpress shows different prices, shipping, delivery dates and products for each country.

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

Currency of the prices. <b>Country's currency</b> uses the one AliExpress shows to shoppers in the delivery country.

## `maxItemsPerSource` (type: `integer`):

Products to save for each keyword and each URL. AliExpress shows 60 products per page and up to 60 pages (3,600 products). 0 = all pages.

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

Order of the results, as on the site. Applies to keywords and to URLs that do not set their own order.

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

Only products from this price, in the selected currency. 0 = no minimum.

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

Only products up to this price, in the selected currency. 0 = no maximum.

## `freeShipping` (type: `boolean`):

AliExpress filter "Free shipping".

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

Keep only products rated 4.0 or more (products without a rating are skipped). Checked on each product, because the site's own 4-star filter stops at 60 products and returns nothing when combined with other filters.

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

AliExpress Choice: products with faster delivery and free returns in many countries.

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

Stop after this many products in the whole run. 0 = no limit.

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

Not needed: the scraper connects directly and switches to Apify Proxy residential in the delivery country only when AliExpress blocks it or shows reduced results. Set a proxy here only to force one.

## Actor input object example

```json
{
  "searches": [
    "phone case"
  ],
  "shipTo": "US",
  "currency": "auto",
  "maxItemsPerSource": 60,
  "sort": "default",
  "minPrice": 0,
  "maxPrice": 0,
  "freeShipping": false,
  "fourStarsAndUp": false,
  "choiceOnly": false,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per product: title, price, original price, discount, currency, new-shopper deal, rating, units sold, free shipping, delivery dates, Choice, ad, store, images, categories and link.

# 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 = {
    "searches": [
        "phone case"
    ],
    "maxItemsPerSource": 60
};

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

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

```

## MCP server setup

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