AliExpress Products Scraper
Pricing
from $1.05 / 1,000 results
AliExpress Products Scraper
Product listings from AliExpress search and category pages: title, sale and original price, star rating, orders sold, images and badges. Locale-pinned so language and currency stay fixed, with cross-page de-duplication.
Pricing
from $1.05 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Product listings from AliExpress search and category pages — title, sale and original price, star rating, orders sold, images and promo badges.
HTTP only, no browser, no login. Locale is pinned, so language and currency stay fixed no matter which country your proxy exits from.
Input
{"mode": "search","keywords": ["mechanical keyboard", "usb c hub"],"locale": "US","sortBy": "orders","maxPages": 3,"maxItems": 200}
Or point it at listing URLs you already have:
{"mode": "urls","listingUrls": ["https://www.aliexpress.com/w/wholesale-headphones.html"],"locale": "DE"}
What you get
recordType | One per | Carries |
|---|---|---|
SEARCH_SUMMARY | keyword / URL | pages fetched, rows fetched vs returned, duplicates dropped, upstream's total per page, why paging stopped, how many products had no price |
PRODUCT | product | id, URL, title, prices, rating, orders, images, badges — plus the full raw upstream object |
ERROR | failed input | why |
{"recordType": "PRODUCT","productId": "3256809308143808","productUrl": "https://www.aliexpress.com/item/3256809308143808.html","title": "AJAZZ NK61 Wired Mechanical Keyboard 61 Keys 60% Compact...","currencyCode": "USD", "salePrice": 14.18, "originalPrice": 48.25,"starRating": 4.9,"ordersText": "10,000+ sold", "ordersMin": 10000,"sellingPoints": ["New shoppers save $34.07", "Lowest price in 90 days"],"imageUrls": ["https://ae-pic-a1.aliexpress-media.com/kf/....jpg", "..."],"raw": { "...": "upstream's object, untouched" }}
Known limits — read these before you rely on the output
Listings only. Product detail pages are not supported. /item/… pages
and per-buyer review text sit behind Alibaba's Baxia WAF with no HTTP-only
path (10+ endpoints were probed). A detail URL is refused with an
explanation rather than half-working.
The same search returns different products each time. Page 1 was fetched
twice, back to back, identical URL and session: 28 of 60 products
matched — 32 differed. That is upstream ranking churn, not this actor.
Consequences: products are de-duplicated by id across pages automatically
(duplicatesDropped tells you how many), and two runs with identical input
will legitimately differ. If you need a stable set, run wider (more pages)
rather than repeating.
upstreamTotalResultsByPage is reported, not trusted. AliExpress's own
result count for one query moved between 62,054 and 5,713 / 5,727 /
5,730 within a single session. It is passed through per page so you can see
the wobble, and is never used to compute completeness or page counts.
Some genuine products ship with no price. Upstream sends prices: null
on a real minority of listing cards — same itemType, real id, real title,
ratings and images all present. Measured 27 of 60 on "phone case", 0 of 60 on
"mechanical keyboard": it varies by query. Those rows keep salePrice: null;
nothing is defaulted to 0. The rate per query is in the summary's
productsWithoutPrice.
Orders are a band, not a count. Upstream publishes "10,000+ sold", never
an exact figure. ordersMin is the parsed lower bound and ordersText
keeps the original string. Do not treat ordersMin as a sales total.
Locale changes results, not just labels. With no locale pinned,
AliExpress decides from the exit IP — an Indonesian exit returned Indonesian
titles and IDR prices, and a different ranking (a straw handbag was the top
hit for "laptop"; with US it was an actual MSI laptop). This actor always
pins the locale cookie, so your proxy country does not leak into your data.
Seller/store data is gone. AliExpress removed per-item store fields from
this payload in 2026 — store is null on every row. That is upstream, not
a parsing gap, so no store column is offered.
Technical
Server-rendered listing pages; the payload is a JSON object on
window._dida_config_._init_data_. 60 products per page.
The WAF here (Alibaba Baxia/Aliyun) answers with HTTP 200 and a challenge body, never a 4xx — so every response is body-scanned for challenge markers before being treated as content, and a challenge rotates both TLS profile and exit IP. No challenge was encountered on the listing surface during testing.
robots.txt checked: no ClaudeBot/anthropic-ai group, no blanket
disallow, /w/ not disallowed.
Full recon trail is in CRAWLING_METHOD.md.