# AliExpress Product Detail Scraper — Variants & Shipping (`bovi/aliexpress-product-detail-scraper`) Actor

Get full AliExpress product detail by URL: per-variant prices, shipping cost & ETA, seller rating & tenure, specifications, rating, reviews, stock and images. Pay per product.

- **URL**: https://apify.com/bovi/aliexpress-product-detail-scraper.md
- **Developed by:** [Vitalii Bondarev](https://apify.com/bovi) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $13.87 / 1,000 product items

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## AliExpress Product Detail Scraper

**Turn an AliExpress product URL into a complete, structured product record** —
the full detail page, not just the search-listing surface. For every product you
pass in, this Actor returns the **per-variant price matrix**, **shipping cost and
delivery estimate** to your target country, the **seller's rating, country and
store tenure**, the complete **specifications table**, the product **rating and
review count**, **live stock**, and the **image gallery** — all as clean JSON.

Most AliExpress scrapers stop at the listing card: title, a single price, an
image, a URL. The moment you need to know *which variant costs what*, *how much
shipping adds to the landed price*, *whether the seller is trustworthy*, or *what
the actual specifications are*, those tools return empty fields. This Actor is
built for exactly that depth.

***

### What you get per product

| Field | Description |
|---|---|
| `product_id`, `title`, `url` | Product identity and canonical link |
| `price`, `sale_price`, `original_price`, `discount_pct`, `currency` | Effective price, sale vs. list price, and the discount |
| `variants` | **Per-variant matrix**: each color/size/option combination with its own `sku_id`, label, `price`, `stock`, and availability |
| `variant_count` | Number of purchasable variants |
| `shipping_cost`, `shipping_currency`, `free_shipping`, `delivery_estimate` | **Shipping to your target country** and the delivery ETA when published |
| `seller_name`, `seller_id`, `store_url`, `seller_rating`, `seller_total_reviews`, `seller_level`, `seller_country`, `seller_open_year` | **Seller intelligence** — positive-feedback rate, store link, country and how long the store has operated |
| `rating`, `review_count` | Product star rating and number of reviews |
| `specifications` | **Full attribute table** as a key→value map (material, model, features, …) |
| `available_inventory` | Total units in stock |
| `images`, `main_image` | Image gallery URLs |
| `category_path`, `category`, `description_url` | Category taxonomy and the description page link |
| `parse_confidence`, `warnings`, `scraped_at` | Quality score (0–1), parse warnings, and the capture timestamp |

***

### Who it's for (use cases)

- **Dropshippers & resellers** — pull the per-variant price matrix and shipping
  cost to compute your true landed cost and margin before importing a product.
- **Price & competitor monitoring** — track sale vs. list price and discount
  depth across a basket of products on a schedule.
- **Product research & sourcing** — compare seller rating, store tenure and
  specifications across candidate suppliers for the same item.
- **Catalog enrichment** — feed your store or PIM with structured
  specifications, variants and images instead of hand-copying them.
- **Market & pricing analysts** — build datasets of AliExpress pricing,
  shipping and seller trust signals for modeling.

This Actor pairs naturally with a listing/search scraper: discover product URLs
in bulk, then enrich each one here with the deep detail fields.

***

### How to use it

1. Open the Actor and paste one or more **AliExpress product URLs** into
   `productUrls` (e.g. `https://www.aliexpress.com/item/3256806779925038.html`).
   Bare numeric product ids work too.
2. Set your **target country** and **currency** so prices, shipping and the
   delivery estimate reflect your market.
3. Keep the default **Apify Residential proxy** (recommended) — AliExpress needs
   a residential IP for reliable access. It's billed to your run; no external
   account is required.
4. Run. Each product becomes one row in the dataset; export to JSON, CSV, Excel,
   or pull it via the API.

#### Example input

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/3256806779925038.html"
  ],
  "country": "US",
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

#### Example output (abridged)

```json
{
  "product_id": "3256806779925038",
  "title": "Digital Display Bluetooth Earphones with Mic TWS …",
  "price": 2.02,
  "sale_price": 2.02,
  "original_price": 5.48,
  "discount_pct": 63.1,
  "currency": "USD",
  "variant_count": 5,
  "variants": [
    { "sku_id": "12000038883449394", "variant": "Color: green", "price": 3.17, "stock": 6, "available": true }
  ],
  "shipping_cost": 13.57,
  "shipping_currency": "CNY",
  "seller_name": "Stone's Store",
  "seller_rating": 100.0,
  "seller_country": "China",
  "rating": 4.9,
  "review_count": 13883,
  "available_inventory": 2046,
  "specifications": { "Brand Name": "…", "Model Number": "E6S" },
  "parse_confidence": 1.0
}
```

***

### Pricing

This Actor uses **pay-per-result**: you are charged per product detail record
returned. You only pay for products successfully scraped — failed or unavailable
products are skipped and not charged. Platform/proxy usage is billed to your own
Apify account at standard rates.

***

### Reliability

- **Structured-contract parsing.** The Actor reads AliExpress's own structured
  product data by stable contract keys — not by fragile CSS class names that
  change on every front-end redeploy. Each record carries a `parse_confidence`
  score so you can detect any upstream drift programmatically.
- **Resilient access.** AliExpress protects its product-detail data behind a
  challenge layer. The Actor handles this with a resilient browser session and
  rotates to a fresh residential exit when a request is rate-limited, so runs
  stay reliable without any manual setup on your side.
- **Graceful degradation.** A missing optional field (e.g. a delivery ETA that
  the page didn't render for a region) becomes `null` rather than failing the
  record.

***

### FAQ

**Do I need my own proxy or any external account?**
No. Apify Residential proxy is recommended and billed to your run. No third-party
key is required.

**Can I scrape many products at once?**
Yes — pass as many product URLs as you like in `productUrls`. Each is processed
and charged individually.

**Does it return variant-level prices?**
Yes. The `variants` array holds each purchasable combination with its own price,
stock and availability — a field most listing scrapers leave empty.

**Which countries / currencies are supported?**
Set any standard country and currency code (US, GB, DE, FR, ES, BR, …). Prices,
shipping and delivery reflect that market.

**Is this legal?**
This Actor collects **publicly available** product information that any visitor
can see on a product page. You are responsible for using the output in
compliance with applicable laws, AliExpress's terms, and data-protection rules.
No login, no private or personal data is accessed.

***

### Integrations

Pipe the output into Google Sheets, Airtable, your database, or any app via the
Apify API, webhooks, or the available integrations. Schedule runs to keep a
price/stock dataset fresh.

# Actor input Schema

## `productUrls` (type: `array`):

List of AliExpress product URLs (or bare numeric product ids). Example: https://www.aliexpress.com/item/3256806779925038.html . Each returns one full detail record with variants, shipping, seller and specifications.

## `country` (type: `string`):

Two-letter country code for prices, shipping cost and delivery estimate (e.g. US, GB, DE, FR, ES, BR). Default: US.

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

Currency code for prices (e.g. USD, EUR, GBP). Default: USD.

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

Maximum number of products to process. 0 = all provided URLs. You are charged per product returned.

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

REQUIRED. AliExpress requires a residential proxy for reliable access — datacenter IPs are rejected. Apify Residential proxy is recommended; it is billed to your run, no external account needed.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.aliexpress.com/item/3256806779925038.html"
  ],
  "country": "US",
  "currency": "USD",
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Dataset of product detail records (product\_id, title, price, sale\_price, original\_price, discount\_pct, currency, variants, shipping\_cost, delivery\_estimate, seller\_name, seller\_rating, rating, review\_count, specifications, available\_inventory, main\_image, url, parse\_confidence).

# 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 = {
    "productUrls": [
        "https://www.aliexpress.com/item/3256806779925038.html"
    ],
    "country": "US",
    "currency": "USD",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bovi/aliexpress-product-detail-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 = {
    "productUrls": ["https://www.aliexpress.com/item/3256806779925038.html"],
    "country": "US",
    "currency": "USD",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("bovi/aliexpress-product-detail-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 '{
  "productUrls": [
    "https://www.aliexpress.com/item/3256806779925038.html"
  ],
  "country": "US",
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call bovi/aliexpress-product-detail-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bovi/aliexpress-product-detail-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/PIFwj5ndRMQcwTLeX/builds/SK5xXYJxKztu1rb5Q/openapi.json
