# AliExpress Products Scraper - Search, Prices & Sold Count (`tenfoldfleet/aliexpress-search-scraper`) Actor

Get AliExpress search results by keyword or search URL: product ID, title, sale price, list price, discount, sold count, rating, shipping and item URL. Up to 3,600 per search, sort and price filters, exact sold counts. $1.50 per 1,000 products; failed searches are free.

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

## Pricing

from $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

### What does AliExpress Products Scraper do?

**AliExpress Products Scraper** collects **[AliExpress](https://www.aliexpress.com/) search results** for any keyword or search URL and returns clean, structured product data: **product ID, title, sale price, list price, discount, currency, exact sold count, rating, free shipping, ships-from country, store name, ad flag, Choice badge, launch date and item URL**.

Type a **keyword** like `phone case`, or paste an **AliExpress search URL** with your filters, and get up to **3,600 products per search** (60 pages of 60). Sort by **best match, most orders, price or newest** and filter by **min and max price**.

It works like an **AliExpress search API** without an API key or login: plain HTTP requests, no browser, so it is fast (about 1,000 products a minute) and cheap: **$1.50 per 1,000 products**. Searches that return nothing or fail are free.

### Why use an AliExpress scraper?

- 🔎 **Dropshipping product research**: find winning products by **exact sold count** and rating, not just the rounded "1,000+ sold" text.
- 💸 **Price monitoring**: track sale price, list price and discount for a keyword or category every day.
- 📈 **Market and trend research**: see what sells in a niche, how crowded it is (`totalResults` in the log), and which new listings appear (`listedDate`, sort by newest).
- 🏷️ **Competitor and supplier discovery**: store names, Choice badges, ships-from country and ad placements per search.
- 📦 **Catalogue and feed building**: titles, images and item URLs ready to export to CSV, Excel or JSON.
- 🤖 **AI agents and data pipelines**: call it from the Apify API, MCP server, Make, Zapier or n8n and get clean JSON.

### What data can it extract?

| Field | Example |
|---|---|
| `productId`, `url` | `1005006995272203`, `https://www.aliexpress.com/item/1005006995272203.html` |
| `title` | `Yoga Mat Pilates Fitness Mat 3/4/6mm ...` |
| `salePrice`, `originalPrice`, `discountPercent`, `currency` | `2.33`, `12.76`, `81`, `USD` |
| `isNewShopperPrice` | `true` when the price shown is a first-order deal (see Tips) |
| `soldCount`, `soldText` | `12634`, `10,000+ sold` |
| `rating` | `4.9` (null when the product has no rating yet) |
| `freeShipping`, `shipFrom`, `deliveryEstimate` | `true`, `CN`, `Oct 15 - 21` |
| `storeName` | store name when AliExpress includes it in the results (often null) |
| `isChoice`, `isAd`, `badges` | `true`, `false`, `["Top selling on AliExpress"]` |
| `listedDate`, `categoryId` | `2024-05-16`, `200001928` |
| `imageUrl`, `images` | product image URLs |
| `position`, `page`, `keyword`, `searchUrl`, `scrapedAt` | rank in the search, page number, the search it came from, timestamp |

### How to scrape AliExpress search results

1. Click **Try for free**.
2. Add one or more **search keywords** (e.g. `phone case`, `yoga mat`) or **AliExpress search URLs**.
3. Set **Max products per search** (60 per page, up to 3,600).
4. Optionally choose **Sort by** (most orders, price, newest) and a **min / max price**.
5. Click **Start** and download your products as **JSON, CSV, Excel or HTML**.

### How much does it cost to scrape AliExpress?

You pay **$1.50 per 1,000 products** ($0.0015 per product row) plus a $0.00005 run start fee. Proxy is included. Searches with no results, blocked pages and pages that fail to parse produce a free error row instead of a charge. Set **Max products in total** or a **maximum cost per run** to cap your spend; the actor stops as soon as the cap is reached.

### Input

```json
{
    "searchKeywords": ["phone case", "yoga mat"],
    "searchUrls": ["https://www.aliexpress.com/w/wholesale-wireless-mouse.html?SortType=total_tranpro_desc"],
    "maxProductsPerSearch": 120,
    "sortBy": "orders",
    "minPrice": 2,
    "maxPrice": 30,
    "proxyConfiguration": { "useApifyProxy": true, "apifyProxyCountry": "US" }
}
```

### Output

```json
{
    "productId": "1005006995272203",
    "title": "Yoga Mat Pilates Fitness Mat 3/4/6mm Thicknes Non Slip Yoga Cushion Travel Fitness Exercise Pad for Women Home Gym Floor Workout",
    "url": "https://www.aliexpress.com/item/1005006995272203.html",
    "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S2519edadb8104a8a914b2c6c1ff4151bZ.jpg",
    "salePrice": 2.33,
    "originalPrice": 12.76,
    "discountPercent": 81,
    "currency": "USD",
    "isNewShopperPrice": true,
    "soldCount": 12634,
    "soldText": "10,000+ sold",
    "rating": 4.9,
    "freeShipping": false,
    "deliveryEstimate": "Oct 15 - 21",
    "shipFrom": "CN",
    "storeName": null,
    "isChoice": true,
    "isAd": false,
    "badges": ["Delivery: Oct 15 - 21"],
    "listedDate": "2024-05-16",
    "categoryId": "200001928",
    "position": 1,
    "page": 1,
    "keyword": "yoga mat",
    "searchUrl": "https://www.aliexpress.com/w/wholesale-yoga-mat.html",
    "scrapedAt": "2026-10-10T03:45:58.470Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Failed or empty searches appear as `{ "keyword": "...", "error": "... Not charged." }` rows.

### Tips

- **New-shopper prices (read this).** AliExpress shows visitors without an account its first-order deals, so many cards display a very low price (often the same $1.09 or $0.33 on unrelated products) or no price at all ("free gift with any purchase"). The actor cannot log in, so it returns the price **as displayed** and flags these rows with `isNewShopperPrice: true`. For those rows use `originalPrice` (the list price) as the regular price reference; `salePrice` is `null` on free-gift cards.
- **Sold counts are exact.** `soldCount` comes from AliExpress's own order counter (e.g. `12634`), while `soldText` keeps the rounded "10,000+ sold" label. When AliExpress does not expose the exact number, `soldCount` falls back to the number in the label.
- **Currency follows the proxy country.** With the default US proxy, prices are in USD; the actor retries other US IPs to keep USD and keeps one currency for all pages of a search. Always read the `currency` field.
- **Product IDs are canonical.** US search pages list items under 3256... IDs; the actor converts them to the standard 1005... ID, so the same product has the same `productId` and `url` in every run.
- **Price filters** apply to AliExpress's own price and can make pages shorter than 60 products; the actor simply reads more pages.
- Do not add `shipFromCountry` or `currency` parameters to search URLs: AliExpress then returns a reduced list without sold counts or ratings (the actor still returns that list as shown).
- **Check the spelling of keywords.** For a misspelled or nonsense keyword AliExpress often shows a handful of loosely related products instead of "no results"; the actor returns those like any other result. Only searches where AliExpress shows nothing at all are free.
- Schedule the actor daily on the same keywords to build a **price and sales history**.

### FAQ

#### Can I scrape AliExpress product detail pages or reviews?

No. This actor reads **search result listings** only (everything shown on the product cards). Product detail pages, SKUs and reviews are out of scope.

#### How many products can I get per search?

AliExpress shows 60 products per page and stops at page 60, so up to **3,600 per keyword or URL**. Add more keywords, or use sort orders and price ranges, to go beyond that.

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

No. The actor reads only the public search pages that AliExpress shows to every visitor.

#### Why is `storeName` often empty?

AliExpress includes the store name in search results only for some products (mostly sponsored ones). Store IDs and store URLs are not part of search results at all.

#### Why do some rows say `isAd: true`?

AliExpress mixes sponsored products into search results. They are real results at their real position; filter them out with `isAd` if you only want organic listings.

#### What happens when AliExpress blocks a request?

Every page is retried on new IP addresses (and, rarely, a residential IP). If a page still fails, you get a free error row for it and are not charged.

#### Can I use it from code or AI agents?

Yes, through the Apify API, the JavaScript or Python client, or the Apify MCP server.

#### Support

Found a search that does not parse? Open an issue in the **Issues** tab.

This actor only reads publicly available product listings from AliExpress search pages. It does not log in, solve CAPTCHAs or collect personal data. AliExpress is a trademark of its owner; this actor is not affiliated with or endorsed by AliExpress.

### More tools from Tenfold Fleet

| Actor | Price |
|---|---|
| [Amazon Product Scraper - Details, Prices & Search by ASIN](https://apify.com/tenfoldfleet/amazon-product-scraper) | $1.5 per 1,000 (product) |
| [ATS Jobs Scraper - Greenhouse, Lever, Ashby & 5 More](https://apify.com/tenfoldfleet/ats-jobs-scraper) | $2 per 1,000 (job posting) |
| [Bilibili Scraper - Videos, Comments, Danmaku & Search](https://apify.com/tenfoldfleet/bilibili-scraper) | $5 per 1,000 (video or comment) |
| [Contact Details Scraper - Website Email & Phone Extractor](https://apify.com/tenfoldfleet/company-contact-finder) | $8 per 1,000 (website with contacts) |
| [Google Ads Transparency Center Scraper - Competitor Ads by Site](https://apify.com/tenfoldfleet/google-ads-transparency-scraper) | $1 per 1,000 (ad) |
| [Google News Scraper - Articles, Real URLs & Full Text](https://apify.com/tenfoldfleet/google-news-scraper) | $2 per 1,000 (article) |
| [Google Trends Scraper - Interest, Regions & Related Queries](https://apify.com/tenfoldfleet/google-trends-scraper) | $2 per 1,000 (keyword) |
| [Keyword Search Volume, CPC & Difficulty Checker (Bulk)](https://apify.com/tenfoldfleet/keyword-search-volume) | $5 per 1,000 (keyword with data) |
| [Remote Jobs Aggregator - RemoteOK, WWR, Himalayas & 4 more](https://apify.com/tenfoldfleet/remote-jobs-aggregator) | $1.2 per 1,000 (unique remote job) |
| [SEEK Job Scraper - Australia, NZ, Jobstreet & JobsDB](https://apify.com/tenfoldfleet/seek-job-scraper) | $0.9 per 1,000 (job listing) |
| [SEO Audit Tool - Technical On-Page SEO Checker & Score](https://apify.com/tenfoldfleet/seo-audit-tool) | $20 per 1,000 (page audit) |
| [Shopify Products Scraper - Prices, Variants & Stock](https://apify.com/tenfoldfleet/shopify-products-scraper) | $0.8 per 1,000 (product) |
| [Shopify App & Theme Detector - Store Analyzer & Contacts](https://apify.com/tenfoldfleet/shopify-store-analyzer) | $8 per 1,000 (shopify store) |
| [Sitemap URL Extractor - All URLs from sitemap.xml & robots.txt](https://apify.com/tenfoldfleet/sitemap-url-extractor) | $0.4 per 1,000 (url) |
| [Technology Detector - Wappalyzer & BuiltWith Alternative](https://apify.com/tenfoldfleet/tech-stack-detector) | $10 per 1,000 (website) |
| [URL to Markdown - Web Page to LLM-Ready Text for AI Agents](https://apify.com/tenfoldfleet/url-to-markdown) | $1 per 1,000 (page) |
| [Workday Jobs Scraper - myworkdayjobs.com API with Salary](https://apify.com/tenfoldfleet/workday-jobs-scraper) | $1.5 per 1,000 (job posting) |
| [YouTube Comments Scraper - Replies, Likes & Sort by Newest](https://apify.com/tenfoldfleet/youtube-comments-scraper) | $0.6 per 1,000 (comment) |
| [YouTube Shorts Scraper - Views, Likes & Hashtags by Channel](https://apify.com/tenfoldfleet/youtube-shorts-scraper) | $2 per 1,000 (short) |
| [YouTube Transcript Scraper - Captions & Subtitles API](https://apify.com/tenfoldfleet/youtube-transcript-scraper) | $3 per 1,000 (transcript) |

# Actor input Schema

## `searchKeywords` (type: `array`):

What you would type into the AliExpress search box, one search per line (e.g. "phone case", "yoga mat"). Each keyword is one search.

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

AliExpress search result URLs such as https://www.aliexpress.com/w/wholesale-phone-case.html?SortType=total_tranpro_desc. Filters in the URL are kept. Product, store and category pages are not supported.

## `maxProductsPerSearch` (type: `integer`):

How many products to collect for each keyword or URL. AliExpress shows 60 per page and at most 60 pages, so the maximum is 3,600.

## `sortBy` (type: `string`):

Order of the results. "Best match" keeps AliExpress's default (or the sort already in your URL).

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

Optional. Only products priced at or above this amount (in the currency of the results, usually USD).

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

Optional. Only products priced at or below this amount (in the currency of the results, usually USD).

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

Optional cap on products for the whole run, across all searches. 0 = no cap.

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

Apify Proxy is included. The proxy country sets the currency of prices (US = USD in most cases).

## Actor input object example

```json
{
  "searchKeywords": [
    "phone case"
  ],
  "maxProductsPerSearch": 60,
  "sortBy": "default",
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchKeywords": [
        "phone case"
    ],
    "maxProductsPerSearch": 60,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenfoldfleet/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 = {
    "searchKeywords": ["phone case"],
    "maxProductsPerSearch": 60,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tenfoldfleet/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 '{
  "searchKeywords": [
    "phone case"
  ],
  "maxProductsPerSearch": 60,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call tenfoldfleet/aliexpress-search-scraper --silent --output-dataset

```

## MCP server setup

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