# AliExpress Scraper: Real Prices, Ads Flagged (`honestdata/aliexpress-product-search`) Actor

AliExpress scraper for US search results. Price, original price, discount, units sold, rating, free shipping, ship-from country and delivery estimate for every product, with paid ads and free-gift promos flagged. Built for dropshipping and product research.

- **URL**: https://apify.com/honestdata/aliexpress-product-search.md
- **Developed by:** [Honest Data](https://apify.com/honestdata) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

### What does AliExpress Product Search Scraper do?

It searches **[AliExpress US](https://www.aliexpress.us)** by keyword and returns every product as clean, structured data: **regular price** and shown price, discount, **units sold**, rating, free shipping, **ship-from country** and delivery estimate, with **paid ads and free-gift promos flagged**. Think of it as an **AliExpress search API** for dropshipping and product research: find what actually sells, at what price, and whether it ships from a US warehouse.

**In short:** the regular price next to the teaser price (83% of prices a scraper sees are first-order-only deals), ads and free-gift promos flagged, and $3 per 1,000 products.

### Why use it?

- **The real price, not the teaser.** AliExpress shows every new visitor first-order-only "New shoppers save $X" prices, and a scraper is always a new visitor. In a sample of 1,196 search results, **83% of organic prices were these one-time deals**. The median shown price was **$1.33**, while the median regular price was **$10.91**. Every row has `price` (what the page shows), `regularPrice` (what a returning buyer pays) and `isNewShopperDeal`.
- **Ads are flagged.** About a quarter of AliExpress search results are paid placements. Every row has `isSponsored`, so you can tell what sells from what someone paid to show you.
- **Free-gift promos are labelled.** AliExpress mixes "FREE with any purchase" new-shopper gifts into results. They have no real price, and here they're labelled (`promo`) instead of passed off as $0 products.
- **Organic results only, if you want.** One switch leaves out ads and gift promos. You're not charged for anything left out.
- **Units sold as a number.** "10,000+ sold" becomes `soldCount: 10000`, so you can sort and filter. The original text is kept too.
- **Reliable, and tested every day.** When AliExpress throws a robot check, the run retries on a fresh connection instead of failing. An automated check also runs a real search every morning and checks the data itself (prices, units sold), not just that the run finished.

| Product | Regular price | Shown to new shoppers | Sold | Rating | Ships from | Ad |
|---|---:|---:|---:|---:|---|---|
| Double Head Scissor Arm LED Desk Lamp with Clamp | $53.39 | $17.41 | 57 | 4.9 | US | no |
| Foldable Aluminum Laptop Stand, 7-Level Adjustable | $61.34 | $20.05 | 60+ | 4.9 | US | no |

### What data can you get from AliExpress?

| Field | What it is |
|---|---|
| `keyword`, `position`, `page` | The search, and the product's rank in the results |
| `productId`, `url`, `title`, `imageUrl` | The product |
| `regularPrice` | What a returning buyer pays (USD). For a new-shopper deal it's the shown price plus the advertised saving, which always equals the listed original price |
| `price`, `isNewShopperDeal` | The price shown to a new visitor, and whether it's a first-order-only deal |
| `originalPrice`, `discountPct`, `currency` | The crossed-out list price and the discount |
| `soldCount`, `soldText` | Units sold as a number (a lower bound: "10,000+ sold" is 10000), and as shown |
| `rating` | Average star rating |
| `freeShipping`, `shipFrom`, `deliveryEstimate` | Shipping, ship-from country (e.g. `CN`, `US`) and delivery estimate |
| `isSponsored`, `promo` | Paid ad, and promo labels such as "FREE with any purchase" |
| `listedDate` | When the product was listed |
| `tags` | Every badge AliExpress shows ("Top selling on AliExpress", "Lowest price in 90 days", ...) |

### How to scrape AliExpress search results

1. Open the Actor and click **Try for free**.
2. Enter one or more **search keywords**.
3. Set **Max products per keyword** (up to 1,200) and, if you like, a sort order and a price range.
4. Turn on **Organic results only** to leave out ads and free-gift promos.
5. Click **Start**, then download the results as JSON, CSV or Excel, or read them through the API.

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

**$0.003 per product delivered**, so **1,000 products cost $3**. Duplicates and anything left out by "Organic results only" are never charged. There's also a tiny start fee of $0.00005 per run.

Apify's free plan includes $5 of monthly credit, which covers about **1,600 products a month**. The run checks your max charge and stops cleanly when it's reached.

### Input

See the **Input** tab for every option:

- **Search keywords**: one search per keyword
- **Max products per keyword**: up to 1,200 (AliExpress shows 60 per page)
- **Sort by**: best match, most orders, price low to high, price high to low
- **Min / max price** in USD
- **Organic results only**: leave out ads and free-gift promos

### Output

You can download the dataset as JSON, CSV, Excel, XML or HTML. Two real rows (tags shortened):

```json
[
  {
    "keyword": "desk lamp",
    "position": 1,
    "page": 1,
    "productId": "3256812724208588",
    "url": "https://www.aliexpress.us/item/3256812724208588.html",
    "title": "Double Head Scissor Arm LED Desk Lamp with Clamp Dimmable 3 Color Modes ...",
    "price": 17.41,
    "regularPrice": 53.39,
    "isNewShopperDeal": true,
    "originalPrice": 53.39,
    "discountPct": 67,
    "currency": "USD",
    "rating": 4.9,
    "soldCount": 57,
    "soldText": "57 sold",
    "isSponsored": false,
    "promo": null,
    "freeShipping": false,
    "shipFrom": "US",
    "deliveryEstimate": "Oct 20 - 26",
    "listedDate": "2026-08-09",
    "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/Sc6d7ad78b1f14364a4d2eb81d278d1569.png",
    "tags": ["New shoppers save $35.98", "Delivery: Oct 20 - 26"]
  },
  {
    "keyword": "desk lamp",
    "position": 4,
    "page": 1,
    "productId": "3256809212003633",
    "title": "Foldable Table Lamp Led Desk Lamp 3 Type Stepless Dimmable Touch Bedside ...",
    "price": 3.33,
    "regularPrice": null,
    "isNewShopperDeal": true,
    "originalPrice": 13.94,
    "soldCount": 4000,
    "soldText": "4,000+ sold",
    "isSponsored": true,
    "promo": "Dollar Express",
    "shipFrom": "CN"
  }
]
```

The second row is a paid ad with a "Dollar Express" teaser price that doesn't say how much it saves, so `regularPrice` is left empty rather than guessed.

### Tips

- For product research, turn on **Organic results only** and sort by **most orders**. Compare `regularPrice`, not `price`.
- Rank by `soldCount` rather than `rating`: most products are rated 4.5 or higher, so ratings barely tell them apart.
- `shipFrom: "US"` marks US-warehouse stock with faster delivery.

### FAQ

**Can I get product details or reviews?** Not in this Actor. It returns what the search results show, which is fast and cheap.

**Does it work for other countries?** Not yet. It searches the **US storefront** (aliexpress.us) and returns prices in **USD**.

**Why is `price` empty for some products?** Those are "FREE with any purchase" gifts. They have no price on the search page, so the field is empty (`null`) rather than a made-up number.

**Why is `soldCount` a round number?** AliExpress rounds ("10,000+"), so it's a lower bound.

**Can I use it from code or an AI assistant?** Yes. Use the Apify API or the Python and JavaScript clients (see the **API** tab), connect it to Make, Zapier or Google Sheets, or schedule it. AI assistants such as Claude and Cursor can call it through Apify's MCP server: `https://mcp.apify.com?tools=honestdata/aliexpress-product-search`.

**Is it legal to scrape AliExpress?** This Actor collects public product listings only: no personal data, no logins and no reviews. Check that your use fits AliExpress's terms and the rules that apply to you.

**Found a problem?** Open an issue in the **Issues** tab. We read every report.

**Found it useful?** A short review on this page helps other people find it.

### More from Honest Data

- [Google Trends Scraper: Unlimited Keywords on One Scale](https://apify.com/honestdata/google-trends-one-scale): compare up to 200 keywords on one scale, with error bars and glitch flags.
- [YouTube Transcript Scraper](https://apify.com/honestdata/youtube-transcript-scraper): transcripts in bulk at $2 per 1,000, and misses are free.
- [Product Demand Radar](https://apify.com/honestdata/product-demand-radar): rank product ideas by Google demand and AliExpress supply.

# Actor input Schema

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

What you would type into the AliExpress search box. One search per keyword.

## `maxItemsPerKeyword` (type: `integer`):

AliExpress shows 60 products per page. Up to 1,200 per keyword (20 pages).

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

Same options as the AliExpress search page.

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

Optional. Only products at or above this price.

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

Optional. Only products at or below this price.

## `organicOnly` (type: `boolean`):

Leave out paid ads and 'FREE with any purchase' new-shopper gifts (which have no price). Both are flagged on every row either way. You are not charged for anything left out.

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

AliExpress blocks heavy traffic. Apify Proxy is used by default.

## Actor input object example

```json
{
  "keywords": [
    "laptop stand",
    "phone case"
  ],
  "maxItemsPerKeyword": 60,
  "sort": "default",
  "organicOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "keywords": [
        "laptop stand",
        "phone case"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("honestdata/aliexpress-product-search").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": [
        "laptop stand",
        "phone case",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("honestdata/aliexpress-product-search").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": [
    "laptop stand",
    "phone case"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call honestdata/aliexpress-product-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,honestdata/aliexpress-product-search"
        }
    }
}
```

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/7y3wK0FNHD6lkuZYj/builds/Rgsj07ggf0BKE2WmV/openapi.json
