AliExpress API endpoint
Returns AliExpress's own discovery/trending keyword feed from its anonymous search box: the hot-search keywords it groups by category, plus its discovery and shading keyword modules. Each item carries the keyword, its display casing when different, the kind (hot, shading, discovery, history), the module's UI label, the hot-list category, and a ready-to-use search URL; keyword thumbnails are included where AliExpress supplies them. This is a keyword-discovery feed, not a product list and not a personalized recommendation: no product id, title, price or seller is returned, and AliExpress does not promise a stable order between calls. The anonymous feed carries roughly 40 hot keywords plus a few discovery/shading keywords per call; search history is empty for anonymous callers.
/aliexpress/trending-searchesMCP tool: aliexpress_trending_searches
Query parameters:
limit (optional): maximum trending keywords to return, 1 through 20;
defaults to 10.Response fields:
limit: the limit that was applied.count: number of items returned.available: how many keywords AliExpress carried in this call before limit
was applied (the anonymous feed currently carries roughly 40 hot keywords
plus a few discovery/shading keywords).items: the keywords, in AliExpress's own order (not documented as stable).
Each item has:
keyword: the search phrase to pass to aliexpress_search as q.display_keyword: AliExpress's display casing, present only when it differs
from keyword (for example Hair Dryer for hair dryer).kind: hot, shading, discovery, or history.label: the module's own UI label, for example Home Shading,
Discover more, Hot for you or #must buy list.category: the hot-list category label (for example Home Appliances);
only present on hot keywords.search_url: a public AliExpress search page for the keyword.image_url: the keyword's thumbnail, present only when AliExpress supplies
one (currently only hot keywords carry image_list entries).Notes on the feed and its shape:
history is empty for anonymous callers: AliExpress only fills the search
history module from a signed-in session, which this integration does not use.
An empty history module is not an error and produces no items.search_url uses AliExpress's own destination URL when the payload carries a
real web URL (shading/discovery). hot keywords carry an aecmd://
app-scheme URL instead, so their search_url is derived from keyword using
the same public /w/wholesale-<slug>.html?SearchText=... shape the search and
suggest endpoints use. search_keyword is never rewritten, so a caller always
has the exact phrase to search.limit and returns whatever the anonymous discovery feed currently carries.Errors:
400 for a limit outside 1-20. It is rejected before any upstream request.503 when AliExpress refuses or cannot serve the request (a bot challenge, a malformed payload, a transport failure), or when the feed returns no keywords at all (a degraded or reshaped payload, not a valid empty answer). A transient transport failure is retried once; a challenge is never retried, solved or bypassed.Data source:
Responses are cached for up to 15 minutes per limit; fetched_at is when AliExpress was last queried.
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| keyword | 10 | “Silicone Mould” and 9 other values |
| kind | 10 | hot (7), discovery (2), shading (1) |
| label | 10 | Hot for you (7), Discover more (2), Home Shading (1) |
| search_url | 10 | aliexpress.com |
| display_keyword | 7 | “Hair Dryer” and 6 other values |
| category | 7 | Home Appliances in all 7 |
| image_url | 7 | ae-pic-a1.aliexpress-media.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| limit | integer | No | 10 | Maximum trending keywords to return (1-20), defaults to 10 | 10 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/aliexpress/trending-searches?limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"limit": 10,
"count": 10,
"available": 43,
"source_url": "https://acs.aliexpress.com/h5/mtop.relationrecommend.AliexpressRecommend.recommend/1.0/",
"fetched_at": "2026-10-25T13:00:00Z",
"items": [
{
"keyword": "example shading keyword",
"display_keyword": "Example Shading Keyword",
"kind": "shading",
"label": "Home Shading",
"search_url": "https://www.aliexpress.com/w/wholesale-example-shading-keyword.html?q=Example+Shading+Keyword&osf=index"
},
{
"keyword": "example discovery keyword",
"kind": "discovery",
"label": "Discover more",
"search_url": "https://www.aliexpress.com/w/wholesale-example-discovery-keyword.html?q=Example+Discovery+Keyword&osf=index"
},
{
"keyword": "wireless earbuds",
"display_keyword": "Wireless Earbuds",
"kind": "hot",
"label": "Hot for you",
"category": "Consumer Electronics",
"search_url": "https://www.aliexpress.com/w/wholesale-wireless-earbuds.html?SearchText=wireless+earbuds&catId=0",
"image_url": "https://ae-pic-a1.aliexpress-media.com/kf/example-thumbnail.jpg"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/aliexpress.trendingSearchesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | aliexpress.TrendingSearchesResponse | No | ||||
| data.available | integer | No | 43 | |||
| data.count | integer | No | 10 | Count is len(Items); Available is how many keywords AliExpress carried before limit was applied. | ||
| data.fetched_at | string | No | ||||
| data.items | array | No | ||||
| data.items[].category | string | No | Home Appliances | Category is the hot-list card's category label (for example "Home Appliances"); it is only present for hot keywords. | ||
| data.items[].display_keyword | string | No | Wireless Earbuds | DisplayKeyword is AliExpress's display casing for the keyword, present only when it differs from keyword. | ||
| data.items[].image_url | string | No | ImageURL is the keyword's own thumbnail when the payload carries one; only hot keywords carry image_list entries. | |||
| data.items[].keyword | string | No | wireless earbuds | |||
| data.items[].kind | string | No | hot | Kind is one of hot, shading, discovery or history (the last is empty for anonymous callers, who have no search history). | ||
| data.items[].label | string | No | Hot for you | Label is the module's own UI label, e.g. "Home Shading", "Discover more", "Hot for you" or "#must buy list". | ||
| data.items[].search_url | string | No | https://www.aliexpress.com/w/wholesale-wireless-earbuds.html?SearchText=wireless+earbuds&catId=0 | |||
| data.limit | integer | No | 10 | |||
| data.source_url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/aliexpress/trending-searches?limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"