# AliExpress Scraper — Fast Search & Product Details (`cemented_jest/aliexpress-scraper`) Actor

Scrape AliExpress search results over plain HTTP (no browser) and full product details for 20 ship-to countries. Documented output fields, pay per result.

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

## Pricing

from $2.00 / 1,000 search results

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 Scraper - fast search and product details, 20 ship-to countries

Search AliExpress by keyword or collect available product details by URL or ID. Search tries HTTP first; product-detail requests use a browser. Fields can include prices, variants, specifications, shipping information, review summaries and store metadata.
Pick the ship-to country and get its prices, currency, language and delivery data. Every output field is documented, missing data is `null` (never invented), and items without a price are never charged.
Result fees apply to saved items. A separate memory-based Actor start fee also applies, including runs that produce no results. See Pricing below.

```json
{
  "productId": "3256812556809370",
  "title": "3 In 1 USB Fast Charging Cable 1.2M Type C Micro IOS Multi Charger Cable for iPhone Huawei Samsung Nylon Braided Cord",
  "url": "https://www.aliexpress.com/item/3256812556809370.html",
  "price": 2.55,
  "priceStr": "US $2.55",
  "originalPrice": 5.1,
  "discountPct": 50,
  "currency": "USD",
  "shipTo": "US",
  "rating": 4.9,
  "reviewCount": null,
  "salesCount": 3773,
  "salesText": "3,000+ sold",
  "storeId": null,
  "storeName": null,
  "storeUrl": null,
  "thumbnail": "https://ae-pic-a1.aliexpress-media.com/kf/S9c50825379fb48739a44d7bb43f479b0l.jpg",
  "images": [
    "https://ae-pic-a1.aliexpress-media.com/kf/S9c50825379fb48739a44d7bb43f479b0l.jpg",
    "https://ae-pic-a1.aliexpress-media.com/kf/S36a2cbebd5954c2a815ffb9fbab36a51c.jpg"
  ],
  "hasVideo": null,
  "badges": [
    "choice",
    "big-sale"
  ],
  "freeShipping": null,
  "categoryPath": [
    "202192403",
    "100001205",
    "440504"
  ],
  "isAd": false,
  "position": 1,
  "sourceKey": "usb c cable",
  "mode": "search",
  "scrapedAt": "2026-11-04T06:42:42.893Z"
}
```

### Collection methods and measured limits

| What you get | How it works (measured 2026-11-04) |
|---|---|
| Search without a browser | A listing page is one HTTP request of about 0.13 MB on the wire and carries 60 slots; 100 items took 6 - 9 s and 300 items 38 - 52 s (US, datacenter proxy; a 30 s timeout retry adds that much to a run). |
| Any of 20 ship-to countries without a per-country proxy | The ship-to country is a URL parameter; all 20 codes were verified over plain HTTP (requested code and currency echoed by the page). |
| Clean, documented output | 27 keys per search item, 35 per detail item, the same keys every time, exact types, `null` when unknown. |
| You only pay for real products | Free-gift promo cards (no price), duplicates, filtered and failed items are not pushed and not charged. |
| Honest failure handling | A blocked page is retried on a new IP, then through a real browser; a blocked keyword never crashes the run; `RUN_SUMMARY` tells what happened. |
| Cheap to run | Search needs no browser and no residential proxy by default (datacenter proxies passed 28 of 30 requests, residential 30 of 30). |

### Modes

- **`search`**: keywords in, one item per product listing out. Up to 60 result pages per keyword (a broad keyword gave 2,373 unique products in the full-depth test). Optional sort, price range, ads on/off.
- **`detail`**: product URLs (any AliExpress storefront host, tracking parameters ignored) or bare product ids in, one product-detail object out. Runs in a real Chrome browser, so it is slower and heavier than search.

### Use cases

- **Price and promo monitoring**: run the same keywords on a schedule per ship-to country and compare `price`, `originalPrice`, `discountPct` and `badges` over time.
- **Dropshipping and product research**: bestsellers (`sort: orders`), `salesCount`, `rating`, free-shipping tags, then detail mode for variants, stock, shipping cost and delivery estimate of the shortlist.
- **Cross-country price comparison**: the same keyword with `shipTo` US, UK, DE, FR, KR, ... returns each country's price, currency and language.
- **Catalog enrichment and feeds**: clean product URLs, images, specifications, SKU variants with price and stock, and a plain-text description.
- **Market and category sizing**: how many unique products a keyword returns, price distribution (`minPrice` / `maxPrice` slices), share of sponsored results (`isAd`).

### Input examples

1. Search, defaults (US, 100 items):

```json
{ "mode": "search", "keywords": ["usb c cable"] }
```

2. Search two keywords for the United Kingdom, 70 items each (prices in GBP):

```json
{ "mode": "search", "keywords": ["wireless earbuds", "phone case"], "shipTo": "UK", "maxItems": 70 }
```

3. Cheapest first inside a price range (listing currency), no sponsored results:

```json
{ "mode": "search", "keywords": ["usb c cable"], "sort": "price_asc", "minPrice": 1.5, "maxPrice": 3, "includeAds": false, "maxItems": 40 }
```

4. Bestsellers in Germany, many items:

```json
{ "mode": "search", "keywords": ["phone case"], "shipTo": "DE", "sort": "orders", "maxItems": 1000 }
```

5. Product details for three products shipped to the US (URL on any storefront host, or bare id):

```json
{ "mode": "detail", "shipTo": "US", "productUrls": ["https://www.aliexpress.com/item/1005006727707575.html", "https://ko.aliexpress.com/item/1005005874124592.html", "1005010572711706"] }
```

### Input fields

| Field | Type | Default | Meaning |
|---|---|---|---|
| `mode` | `search` / `detail` | `search` | What to do. |
| `keywords` | string\[] | `[]` | 1 to 50 search phrases (search mode), up to 200 characters each, any language. |
| `productUrls` | string\[] | `[]` | 1 to 500 product URLs or numeric ids (detail mode). |
| `shipTo` | enum | `US` | One of US, UK, DE, FR, ES, IT, KR, JP, CA, AU, NL, PL, BR, MX, SA, AE, IL, TR, CL, SE. The United Kingdom is `UK` (AliExpress's code). |
| `sort` | enum | `relevance` | `relevance`, `orders`, `price_asc`, `price_desc` (search). See "Sorting" below. |
| `maxItems` | integer | 100 | 1 to 2,900 items per keyword (AliExpress serves at most 60 pages per query, which gave 2,373 unique items for a broad keyword). |
| `minPrice`, `maxPrice` | number | none | Price range in the currency of the ship-to country (search). |
| `includeAds` | boolean | `true` | `false` skips sponsored listings (they are not charged). |
| `maxConcurrency` | integer | 5 / 2 | 1 to 10 parallel requests (search / detail default). |
| `proxyConfiguration` | object | datacenter for search, residential for detail | Apify Proxy settings. For `detail` the exit country is pinned to the ship-to country unless you set one. |
| `debug` | boolean | `false` | Saves a screenshot and HTML of failed browser pages (`ERROR_<n>.png/.html`) and the raw payload of products that could not be normalised. |

### Output

The default dataset has one item per result. Every key is always present; unavailable values are `null` (arrays `[]`, objects `null`). The first 27 keys are the same in both modes.

| Field | Type | Example | Nullable | Notes |
|---|---|---|---|---|
| `productId` | string | `"1005006727707575"` | no | Storefront specific: the US storefront reports `3256...` ids for the same product. |
| `title` | string | `"Essager PD100W 60W Type C ..."` | no | Language of the ship-to country. |
| `url` | string | `"https://www.aliexpress.com/item/1005006727707575.html"` | no | Clean URL, no tracking parameters. |
| `price` | number | `1.09` | no | Featured SKU price in major units of `currency`. |
| `priceStr` | string | `"US $1.09"` | yes | As displayed. |
| `originalPrice` | number | `5.36` | yes | Price before discount, when AliExpress shows it: 55.7% of 2,373 US search items had it (all KR items in the recon sample); detail: when the page shows it. |
| `discountPct` | integer | `79` | yes | |
| `currency` | string | `"USD"` | no | ISO 4217. |
| `shipTo` | string | `"US"` | no | The ship-to code used (`UK` for the United Kingdom). |
| `rating` | number | `4.9` | yes | 0 to 5; items without reviews have `null`. |
| `reviewCount` | integer | `2476` | yes | Detail only. Taken from the review call the page makes (`totalNum`), else from the rating widget (`totalValidNum`); AliExpress aggregates reviews of similar items, so this is a page-level number, not necessarily the item's own. |
| `salesCount` | integer | `88661` | yes | Search only (the listing's own counter). |
| `salesText` | string | `"80K+ sold"` | yes | Rounded, localised text. |
| `storeId`, `storeName`, `storeUrl` | string | `"1103839280"` | yes | Detail only, best effort: several Choice items report a shared store block, others the real vendor. |
| `thumbnail` | string | `"https://ae-pic-a1.aliexpress-media.com/kf/....jpg"` | no | |
| `images` | string\[] | `[...]` | no | Search: listing thumbnails; detail: full-size images. |
| `hasVideo` | boolean | `false` | yes | Detail only (`null` in search: the listing has no video flag). |
| `badges` | string\[] | `["choice", "free-shipping"]` | no | Normalised: choice, local-plus, free-shipping, big-sale, new-user-deal, new-user-gift, brand-plus, super-deals, lowest-price-30d/60d/90d, coins-discount, bestseller, early-bird. |
| `freeShipping` | boolean | `true` | yes | Search: `true` when the listing has an unconditional free-shipping tag, else `null` (there is no explicit flag). Detail: `true` when the shipping cost is 0, `false` when above 0. Shipping can vary at checkout. The tag and the product page can disagree (seen once: tag present, cost 2.99 USD): use detail mode for the displayed shipping estimate. |
| `categoryPath` | string\[] | `["202192403","100001205","440504"]` | no | Category ids, root to leaf. AliExpress exposes ids only, no names. |
| `isAd` | boolean | `false` | no | Sponsored listing. |
| `position` | integer | `3` | no | Rank within the keyword after de-duplication and skips; 1 in detail mode. |
| `sourceKey` | string | `"usb c cable"` | no | The keyword or the URL / id you supplied. |
| `mode` | string | `"search"` | no | |
| `scrapedAt` | string | `"2026-11-04T05:52:38.657Z"` | no | |
| `description` | string | `"Features: ..."` | yes | Detail only. Seller description as plain text, up to 20,000 characters. |
| `specifications` | object | `{"Brand Name": "ESSAGER"}` | yes | Detail only. |
| `variants` | object\[] | `[{"skuId": "...", "attributes": {"Color": "60W Black"}, "price": 1.09, "originalPrice": 5.36, "stock": 203, "image": "..."}]` | no (`[]`) | Detail only. One entry per SKU. |
| `shippingInfo` | object | `{"cost": 1.99, "currency": "USD", "estimatedDays": {"min": 7, "max": 12}, "shipsFrom": "China"}` | yes | Detail only, for the ship-to country. |
| `returnPolicy` | string | `"Free return; ..."` | yes | Detail only; the module exists on some pages only (null on all 6 pages tested for US and DE). |
| `imageCount` | integer | `6` | yes | Detail only. |
| `reviewSummary` | object | `{"average": 4.9, "count": 2476, "distribution": {"1": 0, "2": 0, "3": 158, "4": 620, "5": 10834}}` | yes | Detail only; `distribution` is `null` when the page's review call did not answer in time (1 of 6 tested pages had it). |
| `storeInfo` | object | `{"positiveRate": 98.2, "followers": 5769, "yearsOpen": 2}` | yes | Detail only, best effort. |

A shortened detail item (real run, ship-to DE, `description` and `variants` shortened):

```json
{
  "productId": "1005005874124592",
  "title": "Toocki 100 W USB Typ C Kabel Für Huawei Honor Xiaomi Samsung Super Ladung Schnelle Lade USB C Ladegerät Datenkabel draht Kabel 1 m 2 m",
  "url": "https://www.aliexpress.com/item/1005005874124592.html",
  "price": 3.49,
  "priceStr": "3,49€",
  "originalPrice": null,
  "discountPct": 12,
  "currency": "EUR",
  "shipTo": "DE",
  "rating": 4.7,
  "reviewCount": 250,
  "salesCount": null,
  "salesText": "2.000+ verkauft",
  "storeId": "1103836314",
  "storeName": "Toocki Direct Choice Store",
  "storeUrl": "https://www.aliexpress.com/store/1103836314",
  "thumbnail": "https://ae-pic-a1.aliexpress-media.com/kf/Sd2dbd7e52fc24f618c730be9aaea80efh.jpg?has_lang=1&ver=2",
  "images": [
    "https://ae-pic-a1.aliexpress-media.com/kf/Sd2dbd7e52fc24f618c730be9aaea80efh.jpg?has_lang=1&ver=2",
    "https://ae-pic-a1.aliexpress-media.com/kf/Sf31917c382c6439bafcc1025e673703fN.jpg?has_lang=1&ver=2"
  ],
  "hasVideo": false,
  "badges": [
    "choice"
  ],
  "freeShipping": false,
  "categoryPath": [
    "202192403",
    "100001205",
    "440504"
  ],
  "isAd": false,
  "position": 1,
  "sourceKey": "https://www.aliexpress.com/item/1005005874124592.html",
  "mode": "detail",
  "scrapedAt": "2026-11-04T06:34:51.879Z",
  "description": "Features: Verlust USB-C Schnellladeger&auml;t Digitalanzeige er′′ Datenkabel, Hochgeschwindigkeits&uuml;bertragung, E-Marker Smart Ship. Leistungsanzeige in Ech ...",
  "specifications": {
    "Hochbetriebenes Chemikalienunternehmen": "Keine",
    "Material": "Geflecht",
    "Maximaler Strom": "6A",
    "Eigenschaften": "LEDs,Schnellladekabel",
    "Hat Einzelhandelsverpackung": "Ja",
    "Markenname": "toocki",
    "Ursprung": "CN (Herkunft)"
  },
  "variants": [
    {
      "skuId": "12000034658530010",
      "attributes": {
        "Farbe": "100W Black",
        "Länge": "2m"
      },
      "price": 3.99,
      "originalPrice": null,
      "stock": 293,
      "image": "https://ae-pic-a1.aliexpress-media.com/kf/Sd5be7094dd3f49b790178ff63ec35ab9w.jpg"
    }
  ],
  "shippingInfo": {
    "cost": 1.99,
    "currency": "EUR",
    "estimatedDays": {
      "min": 5,
      "max": 10
    },
    "shipsFrom": "China"
  },
  "returnPolicy": null,
  "imageCount": 6,
  "reviewSummary": {
    "average": 4.7,
    "count": 250,
    "distribution": null
  },
  "storeInfo": {
    "positiveRate": 98.2,
    "followers": 5769,
    "yearsOpen": 2
  }
}
```

Field availability in search mode, measured on 2,373 US items (`usb c cable`): `rating` 89.8%, `salesCount` / `salesText` 97.9%, `originalPrice` 55.7%, `discountPct` 98.2%, `freeShipping` `true` for 35.9% (otherwise `null`), `badges` non-empty 97.9%, `images` and `categoryPath` 100%, sponsored (`isAd`) 5.7%; `reviewCount`, `storeId`, `storeName`, `storeUrl` and `hasVideo` are always `null` in search mode (the listing does not carry them: use detail mode).

`RUN_SUMMARY` (key-value store) records items pushed and skipped by reason (`buy-free`, `duplicate`, `ad-excluded`, `price-filtered`, `unavailable-for-ship-to`, ...), pages per path (`http` / `browser`), wire bytes, blocked events, retries and failed keys.

### Sorting and price filters

- `sort` and `minPrice` / `maxPrice` are applied by AliExpress. **Each result page is sorted, but the pages are not globally ordered** (measured: with `price_asc`, page 2 starts again near the lowest prices). `position` follows AliExpress's page order. If you need one global price ranking, sort the dataset by `price` yourself, or use narrow price ranges.
- Price filtered pages hold fewer than 60 items (41 to 46 measured). The Actor also drops any item outside the range as a safety net.

### Pricing

| Event | Price | When it applies |
| --- | --- | --- |
| `search-result` | $0.002 per saved row ($2 per 1,000) | Search results saved to the dataset. |
| `detail-result` | $0.085 per saved row ($85 per 1,000) | Product-detail results saved to the dataset. |
| `apify-actor-start` | $0.00005 per start event | Apify counts one event per GB of allocated memory, with a minimum of one event. At the current default 4 GB, the start fee is $0.00020. |

For example, 100 search results at 4 GB cost $0.20020 in Actor events. Use the Pricing tab for the current prices. There is no additional automatic dataset-item event fee; platform compute and Apify proxy usage during the run are included in the event pricing. Later storage, API use or integrations follow your account plan.

The start fee can apply even when input is invalid, the source is blocked or no rows are returned. Skipped or failed items have no result fee. Rows already saved remain billable if a later request or storage operation fails; check `RUN_SUMMARY` and the dataset before retrying. Set a maximum charge limit for each run. Budget checks and dataset writes are serialized so concurrent keywords cannot each spend the same remaining allowance.

### FAQ

**Will I get blocked?** AliExpress does block: a single IP is challenged after roughly 15 quick requests, with an HTTP 200 page that redirects to a slider captcha. The Actor never solves captchas; it rotates to a new proxy IP for every request, retries, then loads the page in a real browser. In the verification runs (about 280 proxied search requests through datacenter and residential proxies) no search page was blocked. Product pages (detail mode) are challenged more often: in the five measured residential runs 6 of 23 page loads were challenged and 4 more timed out; the retry on a new IP succeeded every time, so a delivered item cost 2.1 page loads on average. If a key still fails after the retries it is listed in `RUN_SUMMARY.failed` and the run goes on.

**How fast is it?** Search, US, datacenter proxy: 100 items in 6 - 9 s, 140 items (two keywords) in 6 s (47 s when a request timed out and was retried), 300 items in 38 - 52 s, 2,373 items (60 pages) in 281 s. Detail: measured 19 to 194 s per product (median 72 s, 9 residential samples) with 2 parallel browsers, so detail is for hundreds, not tens of thousands, of products per run.

**How many items can I get per keyword?** AliExpress serves at most 60 result pages (3,600 slots) per query and filter; after duplicates and price-less promo cards that is 2,373 unique products for `usb c cable` in the full-depth test (US, 60 pages, 281 s, 7.2 MB over plain HTTP, no block); a keyword where about half of the cards are price-less promo cards (`phone case`) gives fewer. Use several keywords, price ranges or sort orders for more.

**Which countries?** US, UK, DE, FR, ES, IT, KR, JP, CA, AU, NL, PL, BR, MX, SA, AE, IL, TR, CL, SE. For all 20 the search page reported the requested ship-to code and the expected currency (EUR, GBP, USD, KRW, JPY, CAD, AUD, PLN, BRL, MXN, SAR, AED, ILS, TRY, CLP, SEK) over plain HTTP. Detail mode was run for the US and Germany only; other countries are **experimental** in detail mode.

**Does it need login or cookies?** No. Only public pages are read.

**Why is `reviewCount` / `storeName` sometimes odd?** AliExpress merges "Choice" items and aggregates reviews of similar items; the Actor reports what the page says (see the field table).

**Is the product available for my country?** Some products are not sold to some countries; in detail mode they are skipped as `unavailable-for-ship-to` (not charged) with the site's own reason in `RUN_SUMMARY`.

**Reviews, store pages, category browsing?** Not in this version.

### Legal

This Actor reads publicly visible AliExpress pages without logging in and does not intentionally extract reviewer identities or account profiles; seller-provided free text can still contain personal information. You are responsible for using the data lawfully and in line with AliExpress's terms and applicable law in your jurisdiction (including database, copyright and consumer-data rules). Do not use it to overload the site.

### Changelog

2026-11-06: clarified result and start fees, corrected budget-stop counting, and serialized budget checks and dataset writes. Historical measurements above are examples from the stated test conditions, not speed or availability guarantees.

# Changelog

This Actor's version history is a separate document: https://apify.com/cemented_jest/aliexpress-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

`search`: keywords in, one result per product listing out (up to 2,900 unique products per keyword). `detail`: product URLs or ids in, one full product object out (variants, specifications, shipping, review summary, store info).

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

Search phrases, one per line (1 to 50, up to 200 characters each). Any language works, for example `usb c cable`, `phone case` or `手机壳`. Required when mode is `search`.

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

AliExpress product links on any storefront (`www`, `ko`, `de`, `aliexpress.us`, ...) or bare numeric product ids (1 to 500). Tracking parameters are ignored. Required when mode is `detail`.

## `shipTo` (type: `string`):

Country the prices, currency, language and delivery estimates are for. All 20 countries were verified over plain HTTP: the page reports the requested ship-to code and the currency shown in brackets (see the README). Detail mode was verified for fewer countries (README). The United Kingdom is `UK` (AliExpress's own code).

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

`relevance` is AliExpress's default order, `orders` sorts by number of orders, `price_asc` / `price_desc` sort by price.

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

Stop after this many items for each keyword. Duplicates, price-less promo cards and filtered items never count and are never charged. AliExpress serves at most 60 result pages per query; a broad keyword gave 2,373 unique items in the full-depth test, so values above that only matter for other keywords.

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

Only items priced at or above this value, in the currency of the ship-to country (for example USD for `US`). Leave empty for no lower bound.

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

Only items priced at or below this value, in the currency of the ship-to country. Must not be lower than the minimum price. Leave empty for no upper bound.

## `includeAds` (type: `boolean`):

Sponsored listings are normal products with the field `isAd` set to true. Turn this off to skip them (skipped items are not charged).

## `maxConcurrency` (type: `integer`):

Parallel requests (1 to 10). Leave empty for the default: 5 in search mode, 2 in detail mode (browser pages are heavy).

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

Apify Proxy settings. Search runs over plain HTTP with the automatic (datacenter) proxy by default. For detail mode the automatic setting is upgraded to residential proxies with the exit country pinned to the ship-to country, because product pages are challenged more often on datacenter IPs and need a browser timezone that matches the exit country; name proxy groups or custom proxy URLs to override.

## `debug` (type: `boolean`):

Save a screenshot and the HTML of failed browser pages to the key-value store (ERROR\_<n>.png / ERROR\_<n>.html).

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "usb c cable"
  ],
  "productUrls": [
    "https://www.aliexpress.com/item/1005006727707575.html"
  ],
  "shipTo": "US",
  "sort": "relevance",
  "maxItems": 100,
  "includeAds": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debug": false
}
```

# 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 = {
    "keywords": [
        "usb c cable"
    ],
    "productUrls": [
        "https://www.aliexpress.com/item/1005006727707575.html"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cemented_jest/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 = {
    "keywords": ["usb c cable"],
    "productUrls": ["https://www.aliexpress.com/item/1005006727707575.html"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("cemented_jest/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 '{
  "keywords": [
    "usb c cable"
  ],
  "productUrls": [
    "https://www.aliexpress.com/item/1005006727707575.html"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call cemented_jest/aliexpress-scraper --silent --output-dataset

```

## MCP server setup

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