Type a product and pick a country: Web Unlocker returns the AliExpress search page with 60 products, their local prices, discounts, ratings and sales, billed as one page. Click a product for up to 100 of its reviews. A failed page costs nothing.
1,000 free requests · Pay only on success · 195+ countries · Claude ready
AliExpress search pages take 8 to 30 seconds. It is still working, no need to click again.
Ready for your own products? Get an API key or book a demo.
Tell us a little about your team and get:
An AliExpress search page carries 60 products with price, discount, rating, sales and delivery badges, and Web Unlocker bills it as one page. AliExpress product scrapers on Apify and Bright Data bill every product.
One page, 60 products.
167 pages, 10,000 products.
A page that fails to load costs nothing. Page 2, page 10 and every sort order, by orders or by price, are one more page of 60 each.
What 10,000 AliExpress products cost
167 search pages of 60 products, at published prices
Web Unlocker on the Growth plan, $0.98 per 1,000 pages. The others bill each product: Bright Data at pay as you go, the most used AliExpress search actor on Apify and a cheaper one on Apify's $19 plan.
Ready to run it on your own searches? Get your API key and free requests.
Our AliExpress scraping test: one hundred pages, one request each, no retries: searches for 20 products, pages 2 to 10 and every sort order, the same searches from 20 other countries, and reviews 100 at a time. This is what comes back, and how fast.
A page that does not come back costs $0.
You pay for pages, not for tries.
AliExpress hands out a product's reviews 100 to a request, each with the stars, the buyer's country, the variant bought, the text with AliExpress's English translation and the buyer's photos. The earbuds below have 2,153 reviews: 22 requests, two cents.
AliExpress's own API returns a rating.
The scraper returns the reviews.
AliExpress shows every country its own search and its own prices. The same search from eight countries came back in six currencies, and the US and German pages shared almost none of their 60 products.
AliExpress web scraping without HTML parsing: every search page carries AliExpress's own JSON with 60 products, and a product's review list answers in JSON, 100 reviews at a time. The same search from another country is one more page.
Fill in the form above. The key arrives by email within one business day.
A search for a keyword, its page 2 or a sort order, or a product's review list with pageSize=100.
Cut the item list out of the search page, or read the reviews straight from the answer: price, rating, sales, text and photos.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python aliexpress_search.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import time
import requests
query = "wireless earbuds"
country = "us"
def scrape(url):
for attempt in range(3):
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
params={"url": url + (f"?_r={time.time_ns()}" if attempt else ""), "geo": country, "format": "json"},
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
timeout=90,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
if '"itemList":{"content":' in page:
return page
time.sleep(5)
raise RuntimeError("No products came back, try again later")
def embedded(page, marker):
start = page.index(marker) + len(marker)
value, _ = json.JSONDecoder().raw_decode(page[start:])
return value
search = "https://www.aliexpress.com/w/wholesale-" + "-".join(query.lower().split()) + ".html"
page = scrape(search)
products = []
for item in embedded(page, '"itemList":{"content":'):
product_id = item.get("trace", {}).get("utLogMap", {}).get("x_object_id") or item["productId"]
price = item.get("prices", {}).get("salePrice", {})
products.append(
{
"id": product_id,
"title": item["title"]["displayTitle"],
"price": price.get("minPrice"),
"currency": price.get("currencyCode"),
"discount": price.get("discount"),
"rating": item.get("evaluation", {}).get("starRating"),
"sold": item.get("trade", {}).get("tradeDesc"),
"ad": bool(item.get("p4p")),
"url": f"https://www.aliexpress.com/item/{product_id}.html",
}
)
print(json.dumps({"query": query, "country": country, "products_on_page": len(products), "products": products}, indent=2, ensure_ascii=False))GOLOGIN_SCRAPING_API_KEY=your_key node aliexpress-reviews.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const productId = '1005007823486360';
const scrape = async (url) => {
for (let attempt = 0; attempt < 3; attempt += 1) {
const params = new URLSearchParams({ url: attempt ? `${url}&_r=${Date.now()}` : url, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const html = (await response.json()).data?.html ?? '';
const json = (html.match(/<pre[^>]*>([\s\S]*)<\/pre>/)?.[1] ?? html)
.replace(/"/g, '"')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/'/g, "'")
.replace(/&/g, '&');
try {
const data = JSON.parse(json).data;
if (data?.evaViewList) return data;
} catch {}
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error('No reviews came back, try again later');
};
const reviews = new Map();
let total = 0;
let pages = 1;
for (let page = 1; page <= pages; page += 1) {
const data = await scrape(
`https://feedback.aliexpress.com/pc/searchEvaluation.do?productId=${productId}&lang=en_US&country=US&page=${page}&pageSize=100&filter=all&sort=complex_default`,
);
total = data.totalNum;
pages = data.totalPage;
for (const review of data.evaViewList) {
reviews.set(review.evaluationIdStr, {
id: review.evaluationIdStr,
rating: review.buyerEval / 20,
date: review.evalDate,
country: review.buyerCountry,
variant: review.skuInfo?.trim() ?? '',
text: review.buyerTranslationFeedback || review.buyerFeedback || '',
photos: (review.images ?? []).join(' '),
});
}
}
const csv = (value) => `"${String(value).replace(/"/g, '""')}"`;
const rows = [...reviews.values()].map((r) => [r.id, r.rating, r.date, r.country, r.variant, r.text, r.photos].map(csv).join(','));
writeFileSync('reviews.csv', ['id,rating,date,country,variant,text,photos', ...rows].join('\n'));
console.log(`${reviews.size} of ${total} reviews from ${pages} requests saved to reviews.csv`);GOLOGIN_SCRAPING_API_KEY=your_key node aliexpress-prices.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst query = 'wireless earbuds';
const countries = ['us', 'gb', 'de', 'fr', 'es'];
const scrape = async (url, geo) => {
for (let attempt = 0; attempt < 3; attempt += 1) {
const params = new URLSearchParams({ url: attempt ? `${url}?_r=${Date.now()}` : url, geo, format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const html = (await response.json()).data?.html ?? '';
const at = html.indexOf('"itemList":{"content":');
if (at < 0) {
await new Promise((resolve) => setTimeout(resolve, 5000));
continue;
}
const start = html.indexOf('[', at);
let depth = 0;
for (const match of html.slice(start).matchAll(/"(?:[^"\\]|\\.)*"|[[\]{}]/g)) {
depth += '[{'.includes(match[0]) ? 1 : ']}'.includes(match[0]) ? -1 : 0;
if (depth === 0) return JSON.parse(html.slice(start, start + match.index + 1));
}
}
return [];
};
const search = `https://www.aliexpress.com/w/wholesale-${query.toLowerCase().split(' ').join('-')}.html`;
const seen = new Map();
for (const geo of countries) {
const items = await scrape(search, geo);
console.log(`${geo}: ${items.length} products in ${items[0]?.prices?.salePrice?.currencyCode ?? '-'}`);
for (const item of items) {
const id = item.trace?.utLogMap?.x_object_id ?? item.productId;
const price = item.prices?.salePrice?.formattedPrice;
if (!price) continue;
seen.set(id, { title: seen.get(id)?.title ?? item.title.displayTitle, prices: { ...seen.get(id)?.prices, [geo]: price } });
}
}
const shared = [...seen.entries()].filter(([, product]) => Object.keys(product.prices).length > 1);
console.log(`\n${shared.length} products found in more than one country:`);
for (const [id, product] of shared.slice(0, 5)) {
console.log(`${id} ${product.title.slice(0, 50)}\n ${Object.entries(product.prices).map(([geo, price]) => `${geo} ${price}`).join(' | ')}`);
}Ready to run it on your own products? Get your API key and free requests.
AliExpress's own API, the most used AliExpress actors on Apify and Bright Data's AliExpress scraper: what each bills for the same products and reviews, and what it asks of you before you start.
| What it takes | AliExpress API | Apify | Bright Data | |
|---|---|---|---|---|
| You pay for | A page | Nothing, for now | Each product or review | Each record |
| 10,000 search products | $0.16 | Free, if approved | $18.30 to $80 | $15 |
| 10,000 reviews | $0.10 | No reviews | $8 to $30 | $15 |
| Search by keyword | Yes | If approved | Yes | No, links only |
| Review text and photos | Yes | No, a rating only | Yes | Not listed |
| Start without an application | Yes | No | Yes | Yes |
| Free to start | 1,000 pages | Free for now | $5 a month | 5,000 records |
| Same price on any other site | Yes | No | No | No |
Selling on other marketplaces too? Web Unlocker returns any other site the same way, at the same price.
The full product page, with each variant's price and stock, delivery to your country and the seller, is built in the shopper's browser. Cloud Browser opens it as a shopper: 4 of 4 US product pages in 9 to 14 seconds.
Cloud Browser runs a real browser with a residential IP in the country you pick, so AliExpress builds the product page the way it does for a shopper there.
Read the variants from the page's own data: 27 for this case, each with its stock, its price before and after the deal, and the delivery date.
Playwright, Puppeteer or Claude open the page, read it and move on. Residential IPs included, nothing to rent or keep in step.
Run it from Playwright, Puppeteer or Claude. See Cloud Browser.
One account, one proxy network, one ecosystem. Pick the product the job needs.
Scraping other shops too? See the Amazon, eBay and Walmart scrapers, or every web scraping tool.
An AliExpress scraper collects public AliExpress data, such as products from search pages with their prices, ratings and sales, and buyers' reviews, into JSON or a spreadsheet. Gologin's AliExpress scraper is an API: send a search address and a country, and Web Unlocker returns the page with 60 products, billed as one page.
Send the AliExpress search address, aliexpress.com/w/wholesale- followed by your keyword, to Web Unlocker with the country you want. It opens the page in a real browser and returns it with AliExpress's own JSON inside: 60 products with ID, title, price, currency, discount, rating, sales and badges. A product's reviews come from its review list, 100 to a request. The code above does both.
A search page gives 60 products, each with ID, title, price and currency, discount, rating, sales, image links and AliExpress's badges such as "Free shipping" and "Fastest delivery in 7 days". Reviews give the rating, date, buyer country, variant, text and photos. For the full product page, with every variant's price and stock, the delivery date, the seller and the specs, pair this AliExpress product scraper with Cloud Browser.
Yes, the AliExpress Open Platform, for affiliates, sellers and apps that AliExpress approves. You apply, AliExpress reviews the app, and its affiliate product search takes a keyword, a country and a currency. It returns a rating for each product, not the reviews, and its terms bar passing the data on. Web Unlocker returns the public pages themselves, with no application.
Yes, for now: AliExpress's terms call the API temporarily free of charge, for developers whose application it approves. Web Unlocker comes with 1,000 free requests: 60,000 products from search pages, or 100,000 reviews.
Apply on the AliExpress Open Platform with your app, and AliExpress decides whether to grant access. A Web Unlocker key comes from the form above within one business day, with free requests to test on your own products.
Yes, once AliExpress approves you as an affiliate: its product query takes keywords, a country to ship to and a currency, with your tracking ID, and returns products with their commission rates and a rating. Reviews, variants and stock are not in it.
The Reviews to CSV tab above writes reviews.csv: one row per review with its rating, date, country, variant, text and photo links. If your review app imports a CSV, match its columns to the app's template and upload the file.
Yes. AliExpress loads a product's reviews from a list that answers in JSON, up to 100 reviews to a request: rating, date, buyer country, the variant bought, the text with AliExpress's English translation and the buyer's photos, plus the product's star split. A product with 2,153 reviews is 22 requests.
Up to 100 a request, page after page to the last one. AliExpress shuffles the order a little between requests, so one pass over a product's pages brings 95 to 99% of its reviews, and a second pass fills in most of the rest. On a phone case with 892 reviews, one pass returned 884.
Yes: ask for the same search or the same products on a schedule and compare. A check every hour on one search page is 24 pages a day, $0.71 a month. Prices shown to a visitor without an account include new-shopper deals, so compare like with like.
Not on AliExpress itself: a search page shows today's price, the discount and at most a badge such as "Lowest price in 90 days". Build your own history: save each check's prices with the date, 60 products a page. A daily check on one search for a year is 365 pages, about $0.36.
Yes. Sort a search by orders, compare sales, ratings and delivery badges across 60 products a page, and read the reviews with buyers' photos before you list a product. Run the same search from your buyers' country: AliExpress shows each country its own products and prices. For the store side, see Gologin for dropshipping.
Under $1 per 1,000 pages on the AliExpress scraper API, and the same for every page: 10,000 products from search pages cost $0.16, and 10,000 reviews about $0.10. A page that fails to load costs nothing. Web Unlocker plans start at $49 a month for 50,000 requests.
No. Web Unlocker picks the IP for you, in 195+ countries, and opens the page from the country you choose.
Three kinds compete. Apify actors and Bright Data sell ready rows and bill every product or review. A general web scraping API bills per request at a price set by the options a site needs. Web Unlocker is an AliExpress scraper that returns the whole page at one price per page, with AliExpress's own JSON inside, so you decide which fields you keep.
AliExpress can answer a visitor it does not trust with a page that loads but holds no products, and ready-made scrapers then report a finished run with an empty list. Web Unlocker returns the page a shopper sees: in our test, 100 of 100 pages came back with their products or reviews.
AliExpress search pages and reviews are public and load without a login. Web Unlocker loads them the way a shopper's browser does and returns the page. What you collect and how you use it is your call, so check it against the rules that apply to your project.
Tell us a little about your team and get: