# AliExpress Scraper: Products, Prices & Units Sold (`scrapemint/aliexpress-scraper`) Actor

AliExpress products from any keyword or search URL: price, original price and discount, exact units sold, rating, ship-from country (CN, US, EU warehouses), listing date, Choice and free-shipping badges, ads flag. Any currency and ship-to country. Past the 1,200 cap. $0.0015 per product.

- **URL**: https://apify.com/scrapemint/aliexpress-scraper.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 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.

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: Products, Prices & Units Sold

Products from any **AliExpress** search as clean rows: title, **price, original price and discount**, **exact units sold** (not just "1,000+"), **rating**, **ship-from country** (China or a local warehouse in the US, Germany, Spain, Poland...), **listing date**, Choice and free-shipping badges, ad flag, image and product URL.

Search by keyword or paste a search URL with your sort and filters. Pick any **currency** and **ship-to country**. AliExpress shows 1,200 products per search; bigger searches are **split by price range automatically**.

No AliExpress account, no API key, no proxy. $0.0015 per product, no start fee.

### What you get per product

- `productId`, `url`, `title`, `imageUrl`
- `price`, `originalPrice`, `discountPercent`, `currency`, `priceText`
- `soldCount` (exact units sold), `soldText` ("10,000+ sold"), `rating`
- `shipFrom` (CN, US, DE, ES, PL, CZ, FR...), `shipTo`
- `listedAt` (date the product was listed)
- `isChoice`, `freeShipping`, `tags` (e.g. "Free shipping", "Extra 2% off with coins", "Sale · -7% now")
- `isAd`, `skuId`, `newUserPromo`

### Example input

Best-selling phone cases, prices in USD:

```json
{
  "queries": ["phone case"],
  "sort": "orders"
}
```

Yoga mats under 20 EUR with free shipping to Germany, up to 2,000:

```json
{
  "queries": ["yoga mat"],
  "maxPrice": 20,
  "freeShippingOnly": true,
  "shipToCountry": "DE",
  "currency": "EUR",
  "maxItemsPerSearch": 2000
}
```

A search copied from the site, sort kept:

```json
{
  "searchUrls": ["https://www.aliexpress.com/w/wholesale-mechanical-keyboard.html?SortType=total_tranpro_desc"]
}
```

### Example output

```json
{
  "productId": "1005010061791012",
  "url": "https://www.aliexpress.com/item/1005010061791012.html",
  "title": "ATTACK SHARK X68 HE Rapid Trigger Mechanical Gaming Keyboard 60% Wired ...",
  "price": 50.69,
  "originalPrice": 54.92,
  "discountPercent": 7,
  "currency": "EUR",
  "soldCount": 1139,
  "soldText": "1,000+ sold",
  "rating": 4.9,
  "shipFrom": "DE",
  "listedAt": "2025-09-27",
  "isChoice": false,
  "freeShipping": true,
  "tags": ["Sale · -7% now", "Free shipping"],
  "isAd": false,
  "shipTo": "DE"
}
```

### Uses

- **Dropshipping product research:** what sells, in what volume, at what price, and from which warehouse
- **Price monitoring:** track your competitors' or suppliers' prices and discounts on a schedule
- **Trend spotting:** new listings (`listedAt`) that already sell thousands of units
- **Sourcing:** find local-warehouse stock (`shipFrom`) for faster delivery to your market
- **Market sizing:** units sold across a whole category, split by price band

### Pricing

- **$0.0015** per product
- No start fee. A search with no results is free.

### Notes

- **US and Canada:** for new visitors shipping to the US or Canada, AliExpress replaces some results (most of them, for some searches) with "free with your first order" promo cards that show no price. Those rows keep the real product id and URL with `price: null` and `newUserPromo: true`. Ship-to GB or DE (with currency USD if you like) returns every price.
- `soldCount` is AliExpress's exact count behind the rounded "1,000+ sold" label.
- Store names, reviews and full product specs are on product pages, which AliExpress protects with a captcha, so they are not included.
- A product that shows up in two of your searches is kept once.

# Actor input Schema

## `queries` (type: `array`):

One search per keyword, e.g. phone case, yoga mat, mechanical keyboard, led strip.

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

Search pages copied from aliexpress.com (…/w/wholesale-….html), with sort, price range and filters kept.

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

Order of results.

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

Optional, in the chosen currency.

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

Optional, in the chosen currency.

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

Keep only products with free shipping to the ship-to country.

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

Keep only Choice products (faster delivery, free returns).

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

Two-letter country code that sets availability and shipping, e.g. GB, DE, FR, ES, IT, NL, PL, AU, BR, MX, KR, US, CA. For US and CA AliExpress hides many prices from new visitors behind a first-order promo; GB or DE shows every price.

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

Three-letter currency code for prices, e.g. USD, EUR, GBP, AUD, CAD, BRL, PLN.

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

Stop each search after this many products. AliExpress shows 1,200 per search; bigger searches are split by price range automatically.

## Actor input object example

```json
{
  "queries": [
    "phone case"
  ],
  "searchUrls": [],
  "sort": "default",
  "freeShippingOnly": false,
  "choiceOnly": false,
  "shipToCountry": "GB",
  "currency": "USD",
  "maxItemsPerSearch": 200
}
```

# Actor output Schema

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

Title, price, original price, discount, units sold, rating, ship-from, listing date, badges, image and URL.

## `summary` (type: `string`):

Product counts per search and any searches that failed.

# 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 = {
    "queries": [
        "phone case"
    ]
};

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

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

```

## MCP server setup

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