# AliExpress Product Search Scraper | Prices & Sold Counts (`aurore_the_builder/aliexpress-product-search`) Actor

- **URL**: https://apify.com/aurore_the_builder/aliexpress-product-search.md
- **Developed by:** [Mini Bunny](https://apify.com/aurore_the_builder) (community)
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 product saveds

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 Product Search Scraper — Prices, Sold Counts & Ratings | $2/1K

Search public AliExpress listings for US delivery and save one dataset record per unique product. Get product titles, canonical URLs, prices, displayed sold counts, ratings, image URLs and text badges when available. Only public product data is collected; no reviews or personal data are collected. No login and no CAPTCHA solving are supported. This Actor is not affiliated with AliExpress or Alibaba.

**Partial results are possible.** Pages list **26–59 products**. Products shown with a new-customer gift instead of a price are skipped, so fewer may be saved. Each keyword has a **1-page cap** and a requested product cap of 1–500; these are upper bounds, not promised yields. The default saves up to 30 products for one keyword. Runs stop at verification pages and retain products already saved.

### Input

```json
{
  "keywords": ["phone case"],
  "maxItemsPerKeyword": 30,
  "shipToCountry": "US"
}
```

| Property | Default | Contract |
| --- | --- | --- |
| `keywords` | `["phone case"]` | Required array of 1–20 non-empty search phrases. |
| `maxItemsPerKeyword` | `30` | Integer from 1–500. Maximum unique products saved per keyword. |
| `shipToCountry` | `"US"` | US delivery only; supported prices explicitly declare USD. |

Malformed values for supported inputs are rejected before scraping. Extra input keys are ignored with a warning. Product IDs are deduplicated across the whole run: the first occurrence wins, including its keyword and position.

### Output

```json
{
  "productId": "3256811467397149",
  "title": "Pink Peach Flower For iPhone 18 17 16 11 15 12 13 14 Pro Max Case 17 Air 17pro Max iPhone11 iPhone17 17 Clear Cover Bumper Funda",
  "url": "https://www.aliexpress.com/item/3256811467397149.html",
  "price": 0.33,
  "currency": "USD",
  "keyword": "phone case",
  "position": 1,
  "scrapedAt": "2026-10-14T06:32:50Z",
  "soldCount": 1000,
  "soldCountText": "1,000+ sold",
  "originalPrice": 3.31,
  "discountPercent": 90.03,
  "rating": 4.9,
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/Scac8efab3fc44ad3b5a6d3f7231fd4e3Y.jpg",
  "badges": ["Dollar Express"],
  "page": 1,
  "searchUrl": "https://www.aliexpress.com/w/wholesale-phone-case.html"
}
```

The eight required fields are `productId`, `title`, `url`, `price`, `currency`, `keyword`, `position` and `scrapedAt`. Supported optional fields are `null` when absent. Store names, store IDs and shipping text are omitted. Image URLs are returned without fetching image assets.

The price is the search price. Products whose card shows a new-customer gift instead of a price are skipped. Prices may reflect promotions and can differ from checkout prices. No currency conversion is performed. `discountPercent` is calculated only when both the sale price and original price exist.

`soldCount` is the displayed lower bound: `100K+ sold` becomes `100000`, `1,234 sold` becomes `1234`, and missing or unparseable text becomes `null`. Badge labels preserve the source text.

Positions can have gaps. The position uses the page's source index and the first page's declared page size, or its source item count when page size is absent. Invalid products and repeated IDs still occupy their original positions.

### Pagination and partial results

The Actor requests one search page per keyword (1-page cap per keyword) and stops at the product cap or the end of that page. Sort and price filters are not supported.

Verification pages, login redirects, HTTP failures after retries and unexpected page formats stop the run. Already saved products remain available. A run with no saved products fails on those stops; the status message explains the reason. Spending limits and platform billing or storage errors also stop further collection.

Requests use HTTP only, with no browser, asset requests, cookies or redirect following. Requests run one at a time, at least 1.5 seconds apart. Network errors, timeouts and ordinary server errors permit at most two retries. Verification pages are never retried or solved.

The default key-value store's `RUN_SUMMARY` records page statuses, transferred response-body bytes, charged products, dataset items, the stop reason, per-keyword yields and page overlap. Overlap includes both all-product and organic-only measures. Response-body bytes exclude headers, CONNECT and TLS overhead.

### Pricing

Pure **pay-per-event** pricing is **$0.005 per run** plus **$0.002 per unique saved product**. A run saving 1,000 products costs $2.005 including the start event. There is no additional usage-based price.

The platform charges the start event once. Validated, unique products are charged individually before they are saved. A spending-limit stop preserves the last paid product when the platform confirms that charge. Billing and dataset storage are separate operations; an uncertain storage failure stops the run and is reported in `RUN_SUMMARY`.

# Actor input Schema

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

One to twenty non-empty search phrases. Product IDs are deduplicated across the whole run; the first keyword wins.

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

Upper bound on unique products saved for each keyword, from 1 to 500. Requests one page per keyword. Stops earlier when results end, a block occurs, or the spending limit is reached.

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

Only the US region is supported. Requests use a US residential proxy and require explicitly declared USD prices.

## Actor input object example

```json
{
  "keywords": [
    "phone case"
  ],
  "maxItemsPerKeyword": 30,
  "shipToCountry": "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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("aurore_the_builder/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("aurore_the_builder/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 '{}' |
apify call aurore_the_builder/aliexpress-product-search --silent --output-dataset

```

## MCP server setup

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