AliExpress Products Scraper avatar

AliExpress Products Scraper

Pricing

Pay per event

Go to Apify Store
AliExpress Products Scraper

AliExpress Products Scraper

Scrape AliExpress product data by search keyword, product URL, or product ID -- price, rating, order count, per-variant stock levels, and shipping-cost estimates to your destination country, delivered as clean typed rows for dropshippers and product-sourcing research.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share


🎯 What this scrapes

AliExpress runs no public product-data API for shoppers, and its product-detail page is a client-side-rendered app shell with zero product data in the raw HTML — we execute it in a real, fingerprint-resistant browser so the numbers are actually there. This Actor resolves products three ways — search keyword, direct product URL, or product ID — and returns one clean schema across all three: price, currency, rating, review count, and an explicit order_count (the "500+ sold" badge) most AliExpress scrapers skip past.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable product IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Dropshipping product validation — check price, rating, and order count before you list a product.
  • Amazon private-label sourcing research — cross-reference candidate SKUs by order volume instead of eyeballing the storefront.
  • Competitor price monitoring — track price movement across a candidate catalog by search keyword or product ID.
  • Catalog enrichment — resolve a list of product URLs or IDs into title, price, rating, and images in one call.
  • Market-price snapshots — run the same keyword across a run schedule to build your own price-history series (AliExpress doesn't publish one).

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchKeywordsarrayno*[]Search terms; each yields up to maxResultsPerKeyword products.
productUrlsarrayno*[]Direct aliexpress.com/item/{id}.html URLs; the product ID is extracted automatically.
productIdsarrayno*[]Direct numeric product IDs (8-16 digits), fetched via /item/{id}.html.
maxResultsPerKeywordintegerno20Cap on rows emitted per search keyword (1-200).
shippingDestinationCountrystringno"US"ISO 3166-1 alpha-2 country code that shipping_cost_estimate is computed against.
proxyConfigurationobjectno{"useApifyProxy": true}Apify Proxy spec.

* At least one of searchKeywords, productUrls, productIds is required — combine all three freely, rows are de-duplicated by product_id across modes.

Example input

{
"searchKeywords": [
"wireless earbuds"
],
"maxResultsPerKeyword": 3,
"shippingDestinationCountry": "US",
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
product_idstringInput, or extracted from productUrls.
titlestringProduct title.
pricenumberCurrent listed price.
currencystringISO 4217 code accompanying price.
ratingnumber | nullAverage star rating, 0.0-5.0, when published.
review_countinteger | nullNumber of reviews backing the rating.
order_countinteger | nullParsed orders/sold badge (e.g. "500+ sold"); null when absent — never fabricated. Populated for searchKeywords rows; not currently exposed on productUrls/productIds rows (see Limitations).
variantsarrayOne {variant_name, sku, stock_count} entry per variant option; currently always [] — see Limitations.
shipping_cost_estimatenumber | nullCost to shipping_destination; currently always null — see Limitations.
shipping_destinationstringEchoes shippingDestinationCountry.
product_urlstringCanonical aliexpress.com/item/{product_id}.html URL.
image_urlsarrayProduct gallery image URLs.
seller_namestring | nullStore/seller display name; currently always null — see Limitations.
categorystring | nullBreadcrumb category string; currently always null — see Limitations.
search_keywordstring | nullPopulated only for searchKeywords-mode rows.
scraped_atstringISO-8601 UTC row-creation timestamp.

Example output

{
"product_id": "3256811548194791",
"title": "Air Pro ANC Wireless Earphone Bluetooth Headsets Pro 2 Active Noise Cancellation",
"price": 3.67,
"currency": "USD",
"rating": 4.8,
"review_count": 334,
"order_count": null,
"variants": [],
"shipping_cost_estimate": null,
"shipping_destination": "US",
"product_url": "https://www.aliexpress.com/item/3256811548194791.html",
"image_urls": [
"https://ae-pic-a1.aliexpress-media.com/kf/S883875aebfd44d7ab6eed07c5fe2fae09.jpg"
],
"seller_name": null,
"category": null,
"search_keyword": null,
"scraped_at": "2026-08-31T06:45:00.368Z"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.05One-off warm-up charge per run
product-scraped$0.002Per product row written to the dataset

Example: 1 000 results at the rates above ≈ $2.05. No subscription, no minimum, no card to start — Apify gives every new account free credit to try it.

🚧 Limitations

searchKeywords and productUrls/productIds rows come from genuinely different fetch paths, so their field coverage differs today:

  • searchKeywords rows: title, price, currency, rating, and order_count all come from the search results page directly.
  • productUrls/productIds rows: AliExpress's product-detail page ships zero product data in its raw HTML — every field comes from a structured-data block a real browser render exposes. That block carries title, price, currency, rating, review count, and images, but not order_count.
  • variants, seller_name, category, shipping_cost_estimate are currently always null/[] on every row, both modes. AliExpress doesn't expose per-variant stock, seller name, or category on any page surface we've found a reliable source for yet, and its shipping-cost endpoint isn't publicly reachable. We'd rather ship an honest null than a guessed value — these are on our roadmap as the storefront's endpoints get mapped further.
  • productUrls/productIds lookups render the live page in a real browser, and an individual render can occasionally fail to resolve — we retry once with a fresh session automatically, and a still-unresolved entry is skipped (not billed) and named in the run's status message rather than silently dropped. searchKeywords never touches a browser and doesn't carry this risk.
  • English/USD aliexpress.com storefront only — no other locales in v1.
  • Review text isn't included, only rating/review_count (see the companion AliExpress Reviews Scraper for review text).
  • No historical price time-series or coupon/cart-level pricing.

❓ FAQ

Do I need an AliExpress account or API key?

No. This Actor reads the same public search and product pages a signed-out visitor sees — no login, no key.

What does a null order_count or shipping_cost_estimate mean?

It means the source page didn't expose that field for that product — we never fabricate a number. The rest of the row still ships with every field it did recover.

Can I mix search keywords, URLs, and product IDs in one run?

Yes — provide any combination of the three input fields. Rows are de-duplicated by product_id across all three modes so you're never charged twice for the same product.

Why did my run return zero rows — is that a failure?

Not necessarily. A search keyword that genuinely matches nothing on AliExpress succeeds with an empty dataset and a status message saying so — an empty result is not a failure. The run only ends non-zero (fails) when none of your inputs could be resolved at all (a genuine fetch/render problem), and the status message names exactly what didn't resolve and why.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.