AliExpress Search Scraper avatar

AliExpress Search Scraper

Pricing

$0.70 / 1,000 product scrapeds

Go to Apify Store
AliExpress Search Scraper

AliExpress Search Scraper

Search AliExpress by keyword and get every result as a clean row: price, pre-discount price, star rating, delivery window, ships-from country, Choice status — and the exact units sold instead of the rounded "10,000+" label. Choose the country you shop from and prices arrive in its currency.

Pricing

$0.70 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

16 days ago

Last modified

Categories

Share

Search AliExpress the way a shopper does, and get the whole result list back as a clean table instead of a web page. Every product comes with its price, its pre-discount price, the discount, the star rating, the delivery window, where it ships from, whether it is a Choice item — and the exact number of units sold, not the rounded "10,000+ sold" label the store shows. One product on a recent run displayed "10,000+ sold" while the store's own figure was 33,937. That is the difference between guessing at demand and measuring it.

Built for people who need real numbers out of a marketplace: product researchers sizing demand, sellers watching a niche, agencies pricing against competitors, and anyone building a catalogue.

What you can do with it

  • Size demand for a niche. Sort by units sold and see exactly how many each product has moved, so you can rank a category by real volume rather than by marketing badges.
  • Track a competitor's pricing. Re-run the same terms on a schedule and watch price, pre-discount price and discount depth move over time.
  • Find winning products. Filter to items above a star rating and above a sales floor, and get only the products that are already proven.
  • Compare markets. Run the same term for several countries and see how each market's own selection, pricing and delivery estimates differ. Each country is a separate catalogue rather than the same list re-priced, so read them as two markets — every row is stamped with the country and currency it came from.
  • Separate real ranking from paid placement. Promoted products are flagged and given no organic position, so you can see where a product truly ranks.
  • Build a product feed. Pull thousands of rows per search term with images, titles, category path and links ready to load somewhere else.

What you get

One row per product. An abridged real row:

{
"keyword": "wireless earbuds",
"sortOrder": "best_match",
"country": "US",
"currency": "USD",
"page": 1,
"position": 1,
"organicPosition": 1,
"matchQuality": "exact",
"productId": "3256806779925038",
"globalProductId": "1005006966239790",
"skuId": "12000038883449396",
"title": "Digital Display Bluetooth Earphones with Mic TWS E6S Wireless Bluetooth Headset Noise Cancelling Headset for Xiaomi Huawei Oppo",
"imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/Sc752fce18a1247459d9bf29ae6914e6dr.jpg",
"price": 0.99,
"originalPrice": 6.97,
"discountPercent": 85,
"priceFormatted": "US $0.99",
"rating": 4.9,
"soldCount": 119539,
"soldCountDisplay": "100K+ sold",
"shipsFromCountry": "CN",
"deliveryMinDays": 6,
"deliveryMaxDays": 11,
"deliveryEarliestDate": "2026-08-15",
"deliveryLatestDate": "2026-08-20",
"categoryPath": ["44", "100000306", "63705"],
"categoryId": "63705",
"isChoice": true,
"isPromoted": false,
"hasFreeShippingOffer": true,
"freeShippingNote": "Free shipping",
"launchDate": "2024-05-13",
"collectedAt": "2026-08-09T12:00:00.000Z"
}

Input reference

FieldTypeDefaultWhat it does
keywordslist of text["wireless earbuds"]What to search for. One term per line, up to 50 terms per run.
countrychoiceusWhich country's version of the store to read. Sets the currency, the delivery estimates and which products are offered — each country has its own selection.
sortchoicebest_matchHow the store orders the results: best match, most orders, price low to high, price high to low, or "widest coverage", which combines all four and merges them into one deduplicated list.
maxResultsPerKeywordwhole number200Stop after this many distinct products per search term. A single ordering is held to about 1,198 — the most the store publishes for one ordering; "widest coverage" raises the ceiling to about 3,424.
maxPagesPerSortnumber10How deep to go for each ordering. Maximum 60.
minPricewhole numberemptyKeep only products at or above this price, in the currency of the country you chose.
maxPricewhole numberemptyKeep only products at or below this price, in the currency of the country you chose.
minRatingnumber0Keep only products rated at least this many stars. Unrated products are dropped when this is above 0.
minSoldwhole number0Keep only products that have sold at least this many units, judged on the exact figure rather than the rounded label. Products with no published sales figure are dropped when this is above 0.
freeShippingOnlyyes/nofalseAsk the store for only products it offers with free shipping to your chosen country.
shipFromCountrytextemptyTwo-letter code of the warehouse the product ships from, for example CN, US or ES.
categoryIdtextemptyNarrow the search to one category, using the number from that category's own address.
includePromotedyes/notrueKeep promoted placements (always flagged) or drop them entirely.
excludeLooseMatchesyes/nofalseDrop rows from result pages the store filled with loosely related products instead of real matches.
parallelSearcheswhole number2How many search terms to work through at once. Maximum 4. Each term collects the same products whatever this is set to; a wider setting only decides how many terms are in flight together, and the store slows itself down when pushed too hard.

Output fields

FieldTypeDescription
keywordtextThe search term this row came from.
sortOrdertextWhich ordering produced this row.
countrytextThe country the store was read as.
currencytextCurrency of price and originalPrice.
pagenumberWhich result page the row appeared on.
positionnumberRank on the result list, counting every card.
organicPositionnumberRank ignoring promoted placements. Empty for a promoted row.
matchQualitytextexact when the store reported a real keyword match, loose when it filled the page with related products instead.
productIdtextThe product's identifier in the country you chose.
globalProductIdtextThe product's identifier that stays the same across countries. Join on this one when merging two countries.
skuIdtextThe identifier of the specific variant the listed price belongs to.
titletextProduct title.
productUrltextDirect link to the product on the store.
imageUrltextMain product image.
pricenumberCurrent price in currency. Empty on the occasional listing that publishes no price; those rows are dropped when you set a price limit.
originalPricenumberPrice before the discount, where the store publishes one.
discountPercentnumberDiscount depth, 1–99.
priceFormattedtextPrice exactly as the store displays it.
ratingnumberStar rating out of 5. Empty when nobody has rated the product.
soldCountnumberExact units sold. Empty when the store publishes no figure.
soldCountDisplaytextThe rounded label the store shows a shopper, kept for reference.
shipsFromCountrytextTwo-letter code of the warehouse the item ships from.
deliveryMinDays / deliveryMaxDaysnumberFastest and slowest estimated delivery, in days. Empty where the store publishes no estimate for that country.
deliveryEarliestDate / deliveryLatestDatetextThe same estimate as dates, and empty in the same cases.
categoryPathlistCategory identifiers from broadest to narrowest.
categoryIdtextThe narrowest category identifier.
isChoiceyes/noWhether the product is in the store's Choice programme.
isPromotedyes/noWhether the product is a paid placement inside the results.
hasFreeShippingOfferyes/noWhether the listing advertises free shipping to your chosen country.
freeShippingNotetextThe exact wording of that offer, including any minimum spend.
badgeslistEvery promotional label on the card, with its wording.
launchDatetextThe date the product was first listed. This is not a "last updated" date.
collectedAttextWhen this row was collected.

A run summary is also written to the run's own OUTPUT record: how many products each term produced, how deep it went, how many rows were dropped by your filters, the related searches harvested from the store's own suggestion cards, and — kept strictly apart — which terms genuinely returned nothing and which ones could not be read at all.

Pricing

You pay per product row, and nothing else.

What you pay forPrice
Each product row returned$0.0007 (that is $0.70 per 1,000 products)

Worked example: five search terms, 200 products each, is 1,000 rows and costs $0.70. A deep single-term sweep using "widest coverage" to reach the full 3,424 products costs $2.40. Rows dropped by your own filters are never charged, because they are never returned.

Limits & what this actor cannot do

  • The store publishes a limited number of public results for any one search. A single ordering reaches about 1,198 distinct products (20 per result page, 60 pages). Combining all four orderings reaches about 3,424 distinct products for one term — that is everything the store makes public for that term, and no setting can go past it. For a bigger harvest, search several narrower terms rather than one broad one.
  • There is no store or seller information on a search result, and no review count. Search rows carry the product, its price and its performance — not the shop behind it. Those columns are not emitted at all rather than emitted permanently empty. There is also no numeric shipping cost: free shipping appears as the store's own wording, and paid shipping is not quoted here.
  • Prices and availability differ by country, and so does the product selection. Two countries return genuinely different products for the same term, not the same products at converted prices. Results reflect the country you select, and every row says which one it was.
  • The displayed price is often a promotional or first-time-shopper price, not a stable list price. Treat it as what a shopper would be offered today.
  • Prices, stock, ratings and rankings are a snapshot at the moment of collection and keep changing afterwards. The store also reshuffles its own ordering between reads, so position is that moment's rank, not a stable one.
  • Promoted placements appear inside the store's own results. They are flagged, given no organic position, and can be excluded.
  • A term with few real matches is filled out with loosely related products. Those rows are marked loose rather than passed off as matches, and can be dropped — but the store does not always admit when it is doing this, so treat a surprisingly rich result for an obscure term with care.
  • An exact hyphenated phrase cannot be searched. The store's own search treats usb-c cable as usb c cable, and apostrophes and slashes are mangled before the search ever runs, so they are removed from your terms.
  • A small number of listings publish no price. They are returned with the price left empty rather than filled with a zero, and they are dropped automatically whenever you set a price limit.
  • Delivery estimates are not published everywhere. Some countries' versions of the store quote a delivery window on every product and others quote none at all; where none is published, those columns are empty rather than guessed.
  • The store occasionally answers as a different market than the one asked for. Every row always states the country and currency it is actually in, and the run says so plainly in its summary when this happens — so a price limit is never quietly applied in the wrong currency without you being told.
  • Total-result figures shown by the store are estimates that drift between reads, so this actor does not return one. Count the rows instead.
  • Speed depends on the size of the job and on the store's own response times. No fixed throughput is promised.
  • The source site's terms govern automated access. You are responsible for using the data lawfully and in line with those terms.

FAQ

Do I need an account on AliExpress? No. Nothing is signed in and no account is involved.

Does it need my login or password? No. The actor never asks for credentials of any kind and cannot see your AliExpress account.

Can I schedule it? Yes. Schedule it on Apify like any other actor. Re-running the same terms daily or weekly is the intended way to track price and demand over time.

Is the data complete? It is complete up to what the store publishes for a search term — about 1,198 products per ordering and about 3,424 across all four. That is a ceiling of the site, not of the actor. Anything the actor could not read is reported separately from terms that genuinely had nothing to return, so a quiet zero never gets mistaken for a real answer.

Why is soldCount sometimes empty when soldCountDisplay has a value, or the other way round? Because the store does not always publish both. Where it publishes the exact figure, you get it; where it publishes only the rounded label, you get that and soldCount stays empty rather than being guessed at from the label.

Which product identifier should I join on? Use globalProductId if you are merging results from more than one country — productId is specific to the country's own catalogue and the same physical product carries a different one elsewhere. Within a single country either works.

Should I turn parallelSearches up? It will not change what you collect — each search term is worked through in order and returns the same products either way. It only decides how many terms run side by side, and the store slows itself down when pushed, so past the default of 2 the gain shrinks quickly. 4 is the ceiling.