AliExpress Products Scraper avatar

AliExpress Products Scraper

Pricing

from $2.00 / 1,000 product scrapeds

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

from $2.00 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

22 days 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 rotation — curl-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.