Scrape AliExpress by keyword, category or URL. One row per product: price, discount, orders sold, rating, every SKU variant with live stock, shipping cost and delivery dates, full specs, reviews and seller profile. From $1.50/1k products, reviews from $0.40/1k. No login or API key.
A /store/<id>/... URL used to return nothing. It was routed to the search-results parser, which requires an itemList block; a storefront page never contains one, so every fetch was rejected — and rejected as a captcha, so the run rotated through its whole IP budget and eight retry rounds while in truth every single page had loaded fine. Two things caused it, both fixed:
storefront URLs now take their own route. A storefront is client-side rendered, so its products come from the seller catalogue endpoint (40 per page) instead of the page HTML, with the sort, filter, category and in-shop search text taken from the URL you paste. https://www.aliexpress.com/store/<id> alone works too.
the host rotation used on retries no longer rewrites a seller's own subdomain. It was turning azdent-dental.es.aliexpress.com/store/... into www.aliexpress.us/store/..., which serves a different page, so each retry made things worse rather than better.
"Captcha" now means captcha
A page that loads but is not a listing is no longer reported as a block. Rotating the IP cures a block and nothing else, so that case now stops after a few attempts and says what actually arrived — including the page size and which URL shapes are accepted — instead of spending minutes and finishing with a misleading error. A small page is judged on the punish marker AliExpress always includes, not on its size, because a promo page (4.4 KB) and a not-found page (13.5 KB) are simply small.
Product details and storefronts are several times faster
The product endpoint limits each exit IP by request rate, not by reputation: an unproven IP is refused about three times in four, while one that has just worked keeps working for a burst of requests and then a steady trickle. The actor was rotating to a new IP on every call, which threw away the only thing worth keeping. It now holds a pool of proven proxy sessions and paces each one inside the endpoint's limit. Measured on 30 fully detailed products, against the previous behaviour under the same conditions: the same 30 rows delivered from 43 requests instead of 253, in about an eighth of the wall-clock time. Gateway tokens are also reused across the run, so each product costs one request instead of two.
Fixed
Storefront rows were billed as product-detailed instead of product-listed, because they name their own seller and that was read as evidence of a full product lookup. Storefront listing rows are now billed as listings.
A storefront item nobody has rated yet no longer reports rating: 0 — an absent rating is left out.
An unexpected internal failure was also being reported as "blocked" and retried for eight rounds. Only failures that waiting can actually fix are retried now; anything else is reported once, with its real cause.
Newest on a storefront was sending the search-page sort code, which the storefront ignores, so the results came back in default order. It now sends the storefront's own code.
Sorting a storefront by price is forwarded but noted in the log: AliExpress returns the same, unordered set for ascending and descending, so the run says so instead of leaving you to wonder whether the sort was dropped here.
Store names arrive HTML-escaped and were passed through that way (Stone's Store); they are now decoded.
A storefront link whose id redirects to another one (/store/1103576287 → 1103573332) now reports the store it actually read, in both store.storeId and store.url.
1.0 (2026-08-04)
Initial release. Three modes: Search & listings (keyword, category or listing URL, paginated), Product details (full record per product) and Reviews.
One row per product. Variants (skus), shipping (shipping), the seller (store), reviews (reviews) and the rating breakdown (reviewsSummary) are nested fields on the product's own row — no separate record types to join, no mixed row kinds. Keyword insights are the only other row kind, since they describe a search rather than a product.
Each row is pushed the instant that product is complete, so results appear within seconds and an aborted run keeps everything already collected.
Product data: title, sale and original price, discount %, currency, orders sold (text + parsed + exact where available), rating, review count, wishlist saves, stock, AliExpress Choice flag, sponsored flag, promo badges, bundle deals, category ID and path, listing date, image gallery.
Every SKU variant with its own attributes, price, stock, availability and image, plus the variant option groups and purchase limits.
Shipping per destination country: cost, free-shipping flag, carrier, delivery window in days, earliest/latest delivery dates, warehouse and tracking availability — every option, not just the default.
Full specifications (as pairs and as a flat object for clean CSV export), long description text, attached manuals, buyer protection and after-sales terms, compliance disclosures, coupons.
Reviews: star rating, original text and translation, buyer country, purchase date, variant bought, buyer photos, helpful votes, per-aspect ratings — plus a reviewsSummary with the star breakdown (5/4/3/2/1 counts, positive rate, photo-review count) and the recurring review themes.
Seller & store data on every row: store name, URL, logo, seller ID, country, years active, positive-feedback rate, rating count, seller level, top-rated and local-warehouse flags, follower count and service scores.
Keyword insights: total matching products, related and trending keywords, and every on-site filter with its values (brands, materials, colours, shipping origins, price bands).
50 shopper countries and 20 languages. Prices, promotions, shipping and delivery dates all come back as a shopper in the chosen country sees them, in that country's currency, so runs stay comparable. A currency that does not match the chosen country is reported in the log instead of silently mixing currencies.
Search filters: sort order, min/max price, on-sale, free shipping, AliExpress Choice, 4-stars-and-up, ships-from country and category ID.
maxItems is a hard ceiling on rows, and one row is one product — the run stops the moment it is reached, so a run never bills for more results than requested.
Results stream into the dataset as they are found, so an aborted run keeps everything collected so far.
Listing pages that cannot be loaded on the first pass are retried later in the run instead of being abandoned, and a product whose full record cannot be read still yields a row with everything the listing provided.