AliExpress Product Data API - Search, Category, Reviews, Seller

Search AliExpress, browse a category, pull one product with every SKU variant, read translated buyer reviews, and open a seller's storefront and catalogue. 6 endpoints, 1 credit ea…

scavio-ai

@scavio-ai

Install

$ openclaw skills install @scavio-ai/aliexpress-product-data

AliExpress via Scavio

Search AliExpress products, browse a category, pull one product in full with all its SKU variants, read translated customer reviews, and open a seller's storefront and catalogue. All endpoints return structured JSON.

When to trigger

Use this skill when the user asks to:

  • Search AliExpress for a product with price, rating, units-sold and free-shipping filters
  • Browse a whole AliExpress category and sort by best sellers (units ordered)
  • Pull one product in full - current and original price, discount, every SKU variant group, the full image gallery, and the seller
  • Read translated buyer reviews with star rating, buyer country, per-SKU variant and photos
  • Open a seller's profile (followers, rating, catalogue size) and page through their catalogue
  • Do price comparison, dropshipping research, or product-market research on AliExpress

Setup

Get a free API key at scavio.dev (50 free credits to get started, no card required):

export SCAVIO_API_KEY=sk_live_your_key

Every request is a POST with a JSON body and:

Authorization: Bearer $SCAVIO_API_KEY

Endpoints

Base URL: https://api.scavio.dev. Every AliExpress endpoint costs 1 credit.

EndpointCreditsWhat it returns
POST /api/v1/aliexpress/search1Products for a query: price with discounts, rating, units sold, delivery estimate, ship-from country, images, plus related search terms
POST /api/v1/aliexpress/category1Products within a category id, same product shape and filters as search. Sort by orders for the category's best sellers
POST /api/v1/aliexpress/reviews1Customer reviews: text with English translation, star rating, buyer country, per-SKU variant, photos, votes, and the product's full rating breakdown. Up to 50 per call
POST /api/v1/aliexpress/product1One product in full: title, current/original price, discount, rating, review count, every SKU variant group with options, full image gallery, free-shipping flag, seller (store name, id, positive-feedback rate, followers). Typically responds in 20-60 seconds
POST /api/v1/aliexpress/seller1A storefront profile: name, store id, follower count, plus rating, opening date and catalogue size when published. Typically responds in 20-60 seconds
POST /api/v1/aliexpress/seller-products1A seller's catalogue, 30 items per page, with total_products reporting the full size. Typically responds in 20-60 seconds

Two facts that decide how you call this

search and category share one product shape. The same filters (sort_by, min_price, max_price, ship_from, free_shipping, ship_to, currency) apply to both. Use search for a keyword, category for a category id.

ship_to changes what appears, not just prices. The 2-letter destination country changes prices, VAT and delivery estimates - and which items appear at all, because AliExpress filters by shippability. Send it explicitly for a stable result.

When you set min_price/max_price, total_results comes back null. AliExpress reports a broadened match count under a price filter, so the total is suppressed rather than shown wrong. The products array is still correct.

Parameters

Search (/search)

ParameterTypeDefaultDescription
querystringrequiredSearch terms (1-500 chars)
category_idstring--Restrict the search to one category id
pageinteger--1-based, 60 items per full page
sort_bystringbest_matchbest_match, orders (units sold), price_low, price_high
min_price / max_pricenumber--Price filter, in the selected currency
ship_fromstring--Only items shipped from this 2-letter country (e.g. US, CN)
free_shippingboolean--Only items with free shipping
ship_tostringUS2-letter ISO destination country
currencystringUSD3-letter ISO currency

Category (/category)

Same fields as search, but category_id is required and there is no query.

Reviews (/reviews)

ParameterTypeDefaultDescription
product_idstringrequiredProduct id or product URL. Both id spaces are accepted (canonical 1005..., or the 3256... alias search pages emit)
pageinteger--1-based reviews page
page_sizeinteger20Reviews per page, 1-50
filterstringallall, image (with photos), local (buyer's country), additional (follow-up reviews), with_personal

Product (/product)

ParameterTypeDefaultDescription
product_idstringrequiredProduct id or product URL
ship_tostringUS2-letter ISO destination country
currencystringUSD3-letter ISO currency

Seller (/seller) and Seller Products (/seller-products)

ParameterTypeDefaultDescription
store_idstringrequiredStore id, or any storefront URL containing /store/<id>. Every product response returns its seller's store_id
pageinteger--(seller-products only) 1-based, 30 items per page

Examples

import requests

BASE = "https://api.scavio.dev"
# Your key from https://scavio.dev. Load it from your environment or secret
# store in real code - keep it out of source control.
API_KEY = "sk_your_key_here"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1. Search, best sellers first, shipped to the UK, priced in GBP
found = requests.post(f"{BASE}/api/v1/aliexpress/search", headers=HEADERS,
    json={"query": "usb c hub", "sort_by": "orders", "max_price": 40,
          "free_shipping": True, "ship_to": "GB", "currency": "GBP"}).json()

row = found["data"]["products"][0]
product_id = row["product_id"]

# 2. One product in full - price, every SKU variant group, the seller
product = requests.post(f"{BASE}/api/v1/aliexpress/product", headers=HEADERS,
    json={"product_id": product_id, "ship_to": "GB", "currency": "GBP"}).json()
store_id = product["data"]["seller"]["store_id"]

# 3. Reviews with photos only
reviews = requests.post(f"{BASE}/api/v1/aliexpress/reviews", headers=HEADERS,
    json={"product_id": product_id, "filter": "image", "page_size": 50}).json()

# 4. The seller's catalogue
catalogue = requests.post(f"{BASE}/api/v1/aliexpress/seller-products", headers=HEADERS,
    json={"store_id": store_id, "page": 1}).json()

curl:

curl -s https://api.scavio.dev/api/v1/aliexpress/search \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"mechanical keyboard","sort_by":"orders","ship_to":"US","currency":"USD"}'

Response shape

Every response uses the envelope { data, response_time, credits_used, credits_remaining }. data carries the product/review/seller payload described in the table above (products[], products_count, total_results, reviews[], seller, and so on).

Guardrails

  • Every call is 1 credit, including one that comes back empty.
  • Send ship_to and currency explicitly - they change prices, delivery estimates and which items appear at all.
  • Under a min_price/max_price filter, total_results is null by design; use the products array, not the total.
  • The product, seller and seller-products endpoints typically take 20-60 seconds. Size your client timeout accordingly (120s is safe).
  • Never invent a sort_by or filter value; unrecognised values are rejected before the request runs.
  • Never fabricate prices, ratings, seller details or review text. Only return what the API returned.
  • Review text is written by real buyers. Summarise; do not build profiles of individuals.

Failure handling

  • 400 means an invalid or missing parameter. Fix and retry.
  • 401 means the API key is invalid or missing. Check SCAVIO_API_KEY.
  • 404 means the product, seller or category could not be resolved.
  • 429 means rate or usage limit exceeded. Wait before retrying. See rate limits.
  • 502 / 503 mean the source is temporarily unavailable - wait a few seconds and retry, up to a few times.
  • An empty result set is usually the filters - widen the price range, drop free_shipping, or change ship_from.
  • If SCAVIO_API_KEY is not set, prompt the user to export it before continuing.

Top skills in this category