AliExpress Scraper — Products, Reviews & Review Analytics avatar

AliExpress Scraper — Products, Reviews & Review Analytics

Pricing

from $0.01 / product scraped

Go to Apify Store
AliExpress Scraper — Products, Reviews & Review Analytics

AliExpress Scraper — Products, Reviews & Review Analytics

Scrape AliExpress by keyword or category: product details, price, discount, SKUs, images, store and shipping, plus unlimited customer reviews. Then get built-in review analytics — per-review sentiment and aspect themes, with per-product rating distribution, positive/negative rate and top themes.

Pricing

from $0.01 / product scraped

Rating

0.0

(0)

Developer

Yuliia Kulakova

Yuliia Kulakova

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

9 days ago

Last modified

Categories

Share

Search AliExpress and extract full product details with per-SKU pricing, plus customer reviews with sentiment and aspect insights — no login, no API key.

AliExpress Scraper

Enjoying this Actor? If it's useful, please leave a ⭐️ rating and a short review — it genuinely helps others find it. Something not working as expected? Open an issue on the Actor's Issues tab — I actively maintain this Actor and try to respond and fix reported problems quickly.


Point it at keywords, search/category URLs, product URLs, or bare item IDs. Get back clean, structured records: product cards from search, full product detail (price, discount, variants, specs, store/seller, shipping, stock, video), and paginated reviews with sentiment and theme analysis. Built for e-commerce and dropshipping research, price and competitor intelligence, and review/sentiment analysis.

It combines three modes — search, product-details, and reviews — in a single run, with proxies configured automatically.


Key features

  • Three modes in one actor, combinable. Run a keyword/URL search, fetch full product detail by URL or item ID, and paginate reviews — separately or together (e.g. search + reviews, or product-details + reviews).
  • Per-SKU price matrix. Every variant is emitted in skus[] with skuId, price, originalPrice, and currency, plus priceMin/priceMax across the whole SKU set — so you can compare a specific variant against competing listings, not just the headline price.
  • Full commercial fields. price, originalPrice, discountPercent, orders (units sold; a floor like 10000 for "10,000+ sold"), rating, reviewCount, wishlistCount, priceDisplay.
  • Rich media & content. Full image gallery (images[], primaryImage), product video (video/videoId/videoPoster), specifications[] (name/value spec table), and the full description body text + inline descriptionImages[] (optional, one extra request).
  • Store & seller stats. storeName, storeId, storeUrl, sellerId, sellerPositiveRate, sellerReviews, sellerYears, storeOpenDate.
  • Shipping & availability. shipsFrom, shippingCost + shippingCurrency, deliveryTime (ETA window), shippingText, plus inStock / availableQuantity and human-readable productType.
  • Reviews with insight. Per-review sentiment ({score, label}) and aspect themes[] (quality, value, shipping, ease, durability, appearance, size, performance), translated text, reviewer country, photos, and helpful votes — plus an optional per-product review-insights roll-up (rating distribution, sentiment breakdown, top themes, recent-negative trend).
  • Cross-run price-change monitoring. In monitoring mode, products carry previousPrice, priceDelta, and changeType (new / increased / decreased / unchanged) and only new or price-changed items are emitted — ideal for price alerting.
  • Deduplication within a run and, optionally, across scheduled runs via a named key-value store.
  • No login, no API key, no paid endpoints. Public, non-authenticated pages only.

Input

Provide input via the Apify UI or the API. Only mode is required; supply at least one source appropriate to the mode(s) you pick.

FieldTypeDefaultDescription
modearray["search"]Any of search, product-details, reviews. Combinable.
searchTermsstring[]—Keywords to search (search mode). Paginated 60 products/page.
searchUrlsstring[]—Ready-made AliExpress search/category URLs, used verbatim.
startUrlsrequestList—Product URLs feed details/reviews; search/category URLs are paginated.
productUrlsstring[]—Direct product URLs (/item/<id>.html) for details/reviews.
itemIdsstring[]—Bare numeric product IDs (e.g. 1005006976494502).
categoryselectallNarrow keyword search to a category browse filter.
maxItemsinteger0Max products per query (0 = all, capped at 3000).
maxSearchPagesinteger0Cap search pages fetched per query (60/page).
sortByselectdefaultdefault / orders / price_asc / price_desc.
minPrice / maxPricenumber—Price filter, in the result currency.
shipToCountrystringUSTwo-letter ship-to code. Drives shipping context and localized pricing.
currencystringUSDThree-letter result currency.
languagestringen_USLocale for titles/text.
fetchProductDetailsbooleantrueEnrich each search result with the full product page (alias: enrichListingDetails). Turn off for a fast/cheap lightweight card.
fetchDescriptionbooleanfalseAlso fetch the description body text + inline images (one extra request/product). Requires product details.
maxReviewsinteger0Reviews per product (0 = all).
reviewsSortselectdefaultdefault (most relevant) / latest.
reviewsRatingstring[]—Keep only these star ratings (5…1).
reviewsFilterselectallall / image / additional / local.
reviewsFromDatestring—YYYY-MM-DD or relative ("30 days").
reviewsKeywordsstring[]—Keep only reviews containing any of these terms.
includePersonalDatabooleantrueInclude reviewer name/country; off to redact identity.
includeReviewInsightsbooleanfalseEmit one review-insights roll-up per product.
reviewSentimentbooleantrueAdd {score, label} sentiment to each review.
themeExtractionbooleantrueTag each review with aspect themes and polarity.
deduplicatebooleantrueDrop already-seen dedupKeys (in-run, and cross-run if a store is set).
deduplicateKeyStorestring—Named KV store to persist seen keys across scheduled runs.
monitoringModebooleanfalseEmit only new or price-changed products (requires a key store).
maxConcurrencyinteger5Parallel product targets (keep 3–8 for reliability).
maxChallengeRetriesinteger8Retry attempts per item on temporary failures.
proxyproxy(auto)Proxies are included and configured automatically — leave empty.

Currency: set shipToCountry and currency together. Region and currency are handled automatically, so a US ship-to still returns USD prices.

Example — search + enrich

{
"mode": ["search"],
"searchTerms": ["wireless earbuds"],
"maxItems": 20,
"sortBy": "orders",
"fetchProductDetails": true,
"shipToCountry": "US",
"currency": "USD",
"language": "en_US"
}

Example — product details (with description body)

{
"mode": ["product-details"],
"productUrls": ["https://www.aliexpress.com/item/3256807903014930.html"],
"itemIds": ["1005006976494502"],
"fetchDescription": true,
"shipToCountry": "US",
"currency": "USD"
}

Example — reviews + insights

{
"mode": ["reviews"],
"productUrls": ["https://www.aliexpress.com/item/3256807903014930.html"],
"maxReviews": 15,
"reviewsSort": "latest",
"includeReviewInsights": true
}

Output

Every record carries a recordType (product, review, or review-insights), a stable dedupKey, and a scrapedAt timestamp. Samples below are trimmed for readability; field names are exactly as emitted.

Product record (recordType: "product")

{
"recordType": "product",
"itemId": "3256807903014930",
"title": "TWS Wireless Earbuds Bluetooth 5.3 Headphones",
"url": "https://www.aliexpress.com/item/3256807903014930.html",
"canonicalUrl": "https://www.aliexpress.com/item/3256807903014930.html",
"price": 19.41,
"originalPrice": 68.08,
"discountPercent": 71,
"currency": "USD",
"priceDisplay": "$19.41",
"priceMin": 17.83,
"priceMax": 24.9,
"rating": 4.7,
"reviewCount": 1832,
"orders": 10000,
"ordersText": "10,000+ sold",
"wishlistCount": 4521,
"primaryImage": "https://ae01.alicdn.com/kf/S....jpg",
"images": ["https://ae01.alicdn.com/kf/S....jpg", "https://ae01.alicdn.com/kf/S....jpg"],
"video": "https://video.aliexpress-media.com/play/....mp4",
"videoId": "3009876543210",
"videoPoster": "https://ae01.alicdn.com/kf/S....jpg",
"category": { "id": "70804001", "path": "44->70804001" },
"productType": "Earphones & Headphones",
"inStock": true,
"availableQuantity": 9999,
"storeName": "TWS Audio Official Store",
"storeId": "1102345678",
"storeUrl": "https://www.aliexpress.com/store/1102345678",
"sellerId": 234567890,
"sellerPositiveRate": "97.4",
"sellerReviews": 15342,
"sellerYears": 4,
"storeOpenDate": "2021-06-18",
"shipsFrom": "CN",
"shippingCost": 0,
"shippingCurrency": "USD",
"shippingText": "Free shipping · AliExpress Standard Shipping",
"deliveryTime": "Sep 18 - Oct 02",
"specifications": [
{ "name": "Brand Name", "value": "OEM" },
{ "name": "Category", "value": "Earphones & Headphones" },
{ "name": "Bluetooth Version", "value": "5.3" }
],
"variantOptions": [
{ "name": "Color", "values": ["Black", "White", "Blue"] }
],
"skus": [
{ "skuId": "12000041234567890", "price": 19.41, "originalPrice": 68.08, "currency": "USD" },
{ "skuId": "12000041234567891", "price": 17.83, "originalPrice": 62.5, "currency": "USD" }
],
"skuCount": 3,
"sellingPoints": ["Free shipping", "Extra 1% off with coins"],
"description": "Product Description\nBluetooth 5.3 chip, 40ms low latency ...",
"descriptionImages": ["https://ae01.alicdn.com/kf/S....jpg"],
"descriptionUrl": "https://ae01.alicdn.com/kf/....html",
"ratingDistribution": { "1": 21, "2": 15, "3": 48, "4": 260, "5": 1488 },
"previousPrice": null,
"priceDelta": null,
"changeType": null,
"isSponsored": false,
"position": 1,
"searchQuery": "wireless earbuds",
"detailed": true,
"scrapedAt": "2026-09-03T09:20:00.000Z",
"dedupKey": "product:3256807903014930"
}

Product fields: itemId, title, url, canonicalUrl, price, originalPrice, discountPercent, currency, priceDisplay, priceMin, priceMax, rating, reviewCount, orders, ordersText, wishlistCount, images[], primaryImage, video, videoId, videoPoster, category{id,path}, productType, inStock, availableQuantity, storeName, storeId, storeUrl, sellerId, sellerPositiveRate, sellerReviews, sellerYears, storeOpenDate, shipsFrom, shippingCost, shippingCurrency, shippingText, deliveryTime, specifications[{name,value}], variantOptions[{name,values[]}], skus[{skuId,price,originalPrice,currency}], skuCount, sellingPoints[], description, descriptionImages[], descriptionUrl, ratingDistribution{1..5}, previousPrice, priceDelta, changeType, isSponsored, position, searchQuery, detailed, scrapedAt, dedupKey.

A lightweight search card (fetchProductDetails: false) carries detailed: false and fills only the fields available from the search result — id, title, url, price/originalPrice/discountPercent, rating, orders, image, sellingPoints, isSponsored — with the detail-only fields left null.

sellerPositiveRate and sellerReviews are null when AliExpress doesn't publish a seller-feedback score for that store (common for newer stores) — reported as unknown rather than a misleading 0.

Review record (recordType: "review")

{
"recordType": "review",
"reviewId": "800000123456789",
"itemId": "3256807903014930",
"productUrl": "https://www.aliexpress.com/item/3256807903014930.html",
"productName": "TWS Wireless Earbuds Bluetooth 5.3 Headphones",
"rating": 5,
"text": "Great sound and the battery lasts all day. Fast shipping, arrived in 12 days.",
"textTranslated": null,
"author": "A***a",
"authorCountry": "US",
"date": "2026-08-21",
"sku": "Color:Black",
"verified": true,
"anonymous": false,
"aiGenerated": false,
"helpful": 7,
"downVotes": 0,
"images": ["https://ae01.alicdn.com/kf/S....jpg"],
"thumbnails": ["https://ae01.alicdn.com/kf/S....jpg"],
"logistics": "AliExpress Standard Shipping",
"labels": [{ "name": "Sound Quality", "value": "Excellent" }],
"sentiment": { "score": 0.86, "label": "positive" },
"themes": [
{ "theme": "performance", "polarity": "positive", "mentions": 2 },
{ "theme": "shipping", "polarity": "positive", "mentions": 1 }
],
"scrapedAt": "2026-09-03T09:20:00.000Z",
"dedupKey": "review:800000123456789"
}

Review fields: reviewId, itemId, productUrl, productName, rating, text, textTranslated, author, authorCountry, date, sku, verified, anonymous, aiGenerated, helpful, downVotes, images[], thumbnails[], logistics, labels[{name,value}], sentiment{score,label}, themes[{theme,polarity,mentions}], scrapedAt, dedupKey.

Review-insights record (recordType: "review-insights", optional)

{
"recordType": "review-insights",
"itemId": "3256807903014930",
"productName": "TWS Wireless Earbuds Bluetooth 5.3 Headphones",
"rating": 4.7,
"reviewCount": 1832,
"reviewsAnalyzed": 15,
"sentimentBreakdown": { "positive": 12, "neutral": 2, "negative": 1 },
"avgSentiment": 0.58,
"catalogRatingDistribution": { "1": 21, "2": 15, "3": 48, "4": 260, "5": 1488 },
"catalogPositiveRate": 95.4,
"catalogNegativeRate": 2,
"topThemes": [
{ "theme": "performance", "mentions": 9, "polarity": "positive" },
{ "theme": "shipping", "mentions": 6, "polarity": "positive" },
{ "theme": "value", "mentions": 4, "polarity": "positive" }
],
"recentNegativeShare": 0.2,
"scrapedAt": "2026-09-03T09:20:00.000Z",
"dedupKey": "insights:3256807903014930:1756890000000"
}

Insights fields: itemId, productName, rating, reviewCount, reviewsAnalyzed, sentimentBreakdown{positive,neutral,negative}, avgSentiment, catalogRatingDistribution{1..5}, catalogPositiveRate, catalogNegativeRate, topThemes[{theme,mentions,polarity}], recentNegativeShare, scrapedAt, dedupKey.

Two bases in one record. sentimentBreakdown, avgSentiment, topThemes and recentNegativeShare are computed from the reviewsAnalyzed reviews scraped this run. The catalog* fields (catalogRatingDistribution, catalogPositiveRate, catalogNegativeRate) come from AliExpress's own full review statistics for the product — all reviews, not just the sample. For sentiment metrics to be representative, scrape enough reviews (maxReviews); the catalog* fields are full-catalog regardless. catalogPositiveRate and catalogNegativeRate are percentages (0–100). catalog* fields are null when AliExpress doesn't return those statistics.


Pricing

This actor uses pay-per-event: you are charged per result you collect, plus a small actor-start fee. Product records and review records are priced separately (reviews are the cheapest, since they come in volume), and each per-product review-insights roll-up is its own event. You only pay for what you actually get, so cost scales with your run. Setting a maxItems / maxReviews cap, or turning off fetchProductDetails for lightweight cards, is the direct way to control spend. The exact per-event prices are shown on this actor's Apify Store page.


Use cases

  • Product sourcing & dropship research — pull full catalogs by keyword or category with variants, specs, images, and store/seller stats to shortlist products and suppliers.
  • Price & competitor intelligence — track price, originalPrice, discountPercent, and the per-SKU price matrix across competing listings and stores.
  • Price monitoring & alerting — schedule monitoring mode with a dedup key store to receive only new or price-changed products, with priceDelta and changeType.
  • Review & sentiment analysis — collect reviews at scale with per-review sentiment and aspect themes, plus per-product roll-ups to spot quality, shipping, and value trends.

Limitations (read this)

We would rather be upfront than surprise you.

  • No login or API key is needed — and none is used. The actor scrapes only public, non-authenticated pages. Region, currency and site selection are handled automatically — just set shipToCountry and currency, and a US ship-to still returns USD prices.
  • Full product detail is occasionally unavailable for some items. On a given run a share of items (~10% at default settings) may not return the full detail page — those gracefully fall back to the still-useful search card (id, title, url, price, rating, orders, image), flagged detailed: false. No records are lost. Raising maxChallengeRetries increases full-detail success at the cost of speed. Search and reviews are not affected.
  • ratingDistribution on products is backfilled only when reviews are also collected. The current product page exposes only overall rating and count, not the per-star breakdown. When you run product-details (or search enrichment) together with reviews for the same item, the distribution is filled from the reviews' star statistics; in detail-only mode it is honestly left null.
  • Sentiment and themes are lexicon/rating-based, not an external LLM — fast and deterministic, but a heuristic. Treat them as directional signal, not ground truth.
  • You are responsible for compliance with AliExpress's Terms of Service and applicable law. Data is intended for lawful price, assortment, and review analytics. No personal data beyond the public reviewer display name/country is collected, and that can be redacted with includePersonalData: false.

FAQ

Do I need an AliExpress account or cookies? No. The actor uses only public pages and needs no login, cookies-from-login, or paid API key.

Do I need to configure the proxy or region? No — proxies, region and currency are configured automatically. Just set shipToCountry and currency; a US ship-to still returns USD prices.

Some products came back without full details — why? On a given run some items don't return the full detail page and fall back to the search card (detailed: false). Increase maxChallengeRetries to convert more of them to full detail.

Can I get search results, full details, and reviews in one run? Yes — set mode to multiple values, e.g. ["search", "reviews"] or ["product-details", "reviews"]. When both product and reviews are collected for an item, the product's ratingDistribution is backfilled from the review star stats.

How do I get the full description text? Set fetchDescription: true (requires product details). It adds one request per product and fills description + descriptionImages[].

How does price monitoring work? Set monitoringMode: true with a deduplicateKeyStore. Each run compares against the stored price state and emits only new or price-changed products, carrying previousPrice, priceDelta, and changeType.

What currency/language will I get? Whatever you set in currency and language, aligned with shipToCountry. Defaults are USD, en_US, ship-to US.