# AliExpress Search Scraper (`hinoki/aliexpress-scraper`) Actor

Search AliExpress by keyword and return structured product data: titles, prices, discounts, ratings, sales volume, images, shipping and Choice badge. Use for dropshipping product research, price monitoring and market analysis. Fast, lightweight, no browser.

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

## Pricing

from $1.40 / 1,000 product scrapeds

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

Scrape AliExpress search results and extract product data: titles, prices, discounts, ratings, sales volume, images, shipping info and more. Returns structured JSON, CSV or Excel. Fast and lightweight, no browser needed.

### Why use this scraper?

**Find winning products fast.** Search by keyword, sort by most orders, and get the top sellers with prices, ratings and sales volume in seconds. No manual browsing.

**Track prices and stock over time.** Schedule daily or weekly scrapes to monitor supplier pricing, spot discounts and catch new listings before competitors.

**Get clean, structured data.** Every product comes back as a row with 16 fields. Export to CSV, Excel or JSON. Feed it into your pipeline via API, Make, Zapier or n8n.

### Use cases

**Product sourcing and dropshipping.** Find winning products sorted by sales volume. Compare prices across suppliers. Track which products carry the AliExpress Choice badge.

**Competitive pricing.** Monitor price changes over time by scheduling regular scrapes. Export to CSV or Excel for analysis. Filter by price range to focus on your market segment.

**Market research.** Analyze product trends, discount patterns and competition for any keyword. See which products rank highest and how many units they sell.

**E-commerce analytics.** Feed AliExpress product data into your pipeline. Works with Make, Zapier, n8n and webhooks out of the box. Use the API for programmatic access from Python, JavaScript or any HTTP client.

### How to use

1. Open this Actor on Apify.
2. Enter your search keywords (e.g. "wireless earbuds").
3. Set max results (60 per page, up to 3,000).
4. Choose sorting: Best Match, Most Orders, Price Low to High, Price High to Low.
5. Click Start.
6. Download results as JSON, CSV, or Excel.

### What data can you get from AliExpress?

Each product in the output includes:

| Field | Description |
|---|---|
| `productId` | AliExpress product ID |
| `title` | Full product title |
| `url` | Direct product page URL |
| `imageUrl` | Main product image |
| `originalPrice` | Price before discount |
| `salePrice` | Current sale price |
| `discount` | Discount percentage |
| `currency` | Price currency code |
| `starRating` | Product rating (0-5) |
| `sold` | Units sold (e.g. "70K+ sold") |
| `freeShipping` | Whether free shipping is available |
| `isChoice` | Whether the product has the AliExpress Choice badge |
| `listingDate` | When the product was first listed |
| `searchTerm` | The search term used |
| `searchPage` | Which page the product appeared on |
| `searchPosition` | Position on that page (1-60) |

### Output example

```json
{
    "productId": "1005010037251642",
    "title": "New LED Bluetooth Speaker Mini Portable Bathroom Waterproof...",
    "url": "https://www.aliexpress.com/item/1005010037251642.html",
    "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/S5b9...jpg",
    "originalPrice": 29.99,
    "salePrice": 9.04,
    "discount": 67,
    "currency": "USD",
    "starRating": 4.9,
    "sold": "70K+ sold",
    "freeShipping": true,
    "isChoice": true,
    "listingDate": "2025-09-24 00:00:00",
    "searchTerm": "bluetooth speaker",
    "searchPage": 1,
    "searchPosition": 1
}
```

### How much does it cost?

Pay per result. Each product extracted costs **$0.002**, which is **$2 per 1,000 products**.

| Results | Estimated cost |
|---|---|
| 60 (1 page) | ~$0.12 |
| 300 (5 pages) | ~$0.60 |
| 1,000 | ~$2.00 |
| 3,000 (50 pages) | ~$6.00 |

Platform usage (compute and proxy) is included. No hidden fees. The scraper uses no browser, so compute costs stay minimal at approximately 0.01 compute units per page.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searchTerms` | string | (required) | Keywords to search on AliExpress |
| `maxResults` | integer | 60 | Max products to return (1-3,000) |
| `sortType` | string | default | `default`, `orders`, `price_asc`, `price_desc` |
| `minPrice` | number | | Minimum price filter (USD) |
| `maxPrice` | number | | Maximum price filter (USD) |
| `shipToCountry` | string | US | ISO country code for shipping destination (US, GB, DE, FR, etc.) |
| `failOnEmpty` | boolean | false | Fail the run if no results are found. Useful for scheduled health checks. |
| `proxyConfiguration` | object | Residential | Proxy settings. Defaults to Apify residential proxy. |

### Sorting options

| Value | What it does |
|---|---|
| `default` | AliExpress's default relevance ranking |
| `orders` | Most orders first (best for finding proven sellers) |
| `price_asc` | Cheapest first |
| `price_desc` | Most expensive first |

### For AI agents and automation

Use hinoki/aliexpress-scraper to search AliExpress by keyword. Required input: searchTerms (string). Optional: maxResults (integer, default 60, max 3000), sortType (default, orders, price_asc, price_desc), minPrice (number), maxPrice (number), shipToCountry (ISO code, default US), failOnEmpty (boolean, default false, fail run if no results). Output: array of product objects in the default dataset. Each object has productId, title, url, imageUrl, originalPrice, salePrice, discount, currency, starRating, sold, freeShipping, isChoice, listingDate, searchTerm, searchPage, searchPosition. Cost: $0.002 per product. The actor uses no browser and completes in under 2 minutes for 3,000 results. To find top sellers, set sortType to orders. To compare prices, set sortType to price_asc. To monitor over time, schedule the actor with the same input daily.

### API usage

#### Python

```python
import requests

API_TOKEN = "your_api_token"
ACTOR_ID = "hinoki/aliexpress-scraper"

run = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR_ID}/runs?token={API_TOKEN}&waitForFinish=120",
    json={
        "searchTerms": "wireless earbuds",
        "maxResults": 120,
        "sortType": "orders",
        "shipToCountry": "US"
    }
).json()

dataset_id = run["data"]["defaultDatasetId"]
results = requests.get(
    f"https://api.apify.com/v2/datasets/{dataset_id}/items?token={API_TOKEN}"
).json()
```

#### curl

```bash
curl -X POST "https://api.apify.com/v2/acts/hinoki~aliexpress-scraper/runs?token=YOUR_TOKEN&waitForFinish=120" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": "phone case", "maxResults": 60}'
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'your_api_token' });
const run = await client.actor('hinoki/aliexpress-scraper').call({
    searchTerms: 'wireless earbuds',
    maxResults: 120,
    sortType: 'orders',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Integrations

Connect results to your workflow with zero code. This actor works with:

- **Make (Integromat)**: trigger scenarios on new data.
- **Zapier**: send results to Google Sheets, Slack, email or 5,000+ apps.
- **n8n**: self-hosted workflow automation.
- **Webhooks**: get notified when a run finishes.

See the Integrations tab for setup guides.

### Reliability

The scraper detects AliExpress anti-bot pages automatically and retries with a fresh session, up to 3 times per page. A daily automated test runs against the live site to catch breakages early. If something stops working, it gets fixed fast.

### Troubleshooting

**The scraper returns 0 results.** AliExpress may have blocked the request. The scraper retries automatically with session rotation, but very large runs or aggressive settings can trigger blocks. Try reducing `maxResults` or check that your search term returns results on aliexpress.com.

**Prices show in the wrong currency.** Set `shipToCountry` to the country whose currency you want (e.g. `US` for USD, `GB` for GBP). The scraper sets the region cookie to match.

**The run is slow.** Each page takes about 1-2 seconds after startup. A 3,000-product run (50 pages) takes about 2 minutes. This is normal for residential proxy rotation.

### FAQ

**Does this scraper need a login or API key?**
No. It scrapes publicly available AliExpress search results. No AliExpress account needed.

**How many results can I get?**
Up to 3,000 per run. AliExpress shows 60 products per search page.

**Can I filter by price?**
Yes. Use the `minPrice` and `maxPrice` fields (in USD).

**Can I schedule regular scrapes?**
Yes. Use Apify's built-in scheduler to run daily, weekly, or at any interval. This is ideal for tracking supplier prices and stock levels over time: set up a schedule with your search terms, and Apify stores each run's results in a new dataset automatically.

**What happens if AliExpress blocks the request?**
The scraper detects blocks and retries with a new session automatically, up to 3 times per page.

**Can I get data for a specific product URL?**
Not with this actor. This scraper is for search results. Product detail scraping (specs, variants, reviews) is a separate use case.

**What currency are prices in?**
Prices follow the `shipToCountry` setting. US gives USD, GB gives GBP, DE gives EUR. AliExpress sets the currency based on the shipping destination.

**Can I export to Google Sheets?**
Yes. Download as CSV and import, or use the Zapier or Make integration to send results directly to a Google Sheet after each run.

**Can I search multiple keywords in one run?**
Not in a single run. Each run takes one search term. To scrape multiple keywords, start a separate run for each. You can do this easily with the API or a Make/Zapier workflow.

**How do I get my API token?**
Go to Apify Console, click Settings, then Integrations. Your API token is listed there. Use it in the code examples above.

**Does it work with AliExpress category pages?**
Not yet. This actor searches by keyword only. Category URL support is planned.

### Is it legal to scrape AliExpress?

This actor accesses publicly available data on AliExpress, the same data any browser user can see. It does not bypass any login, captcha or access control. Always review AliExpress's terms of service and your local regulations before using scraped data commercially.

### Changelog

- **0.1** (2026-10-31): Initial release. Search scraping with pagination, sorting, price filters, and country selection.

# Actor input Schema

## `searchTerms` (type: `string`):

Keywords to search for on AliExpress (e.g. "bluetooth speaker", "phone case").

## `maxResults` (type: `integer`):

Maximum number of products to return. Each search page has 60 products.

## `sortType` (type: `string`):

How to sort search results.

## `minPrice` (type: `number`):

Minimum price filter in USD.

## `maxPrice` (type: `number`):

Maximum price filter in USD.

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

ISO country code for shipping destination (e.g. US, GB, DE). Affects pricing and availability.

## `failOnEmpty` (type: `boolean`):

If true, the run fails when no products are found. Useful for scheduled health checks.

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

Proxy settings for the crawler. Defaults to Apify residential proxy.

## Actor input object example

```json
{
  "searchTerms": "bluetooth speaker",
  "maxResults": 60,
  "sortType": "default",
  "shipToCountry": "US",
  "failOnEmpty": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchTerms": "bluetooth speaker",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("hinoki/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 = {
    "searchTerms": "bluetooth speaker",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("hinoki/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 '{
  "searchTerms": "bluetooth speaker",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call hinoki/aliexpress-scraper --silent --output-dataset

```

## MCP server setup

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