Shopee Scraper
Introduction
The Shopee scraper provides reliable access to Shopee’s backend APIs across Southeast Asia and selected international markets.
Charted Sea maintains two independent implementations:
- Web Scraper — Uses browser automation and human gesture simulation to access Shopee’s web APIs.
- Android Scraper — Directly forges requests to Shopee’s Android backend APIs (no emulator or app required).
These are technically independent data sources. Using both significantly increases reliability during anti-bot updates or platform changes.
Web and Android are independent scraping surfaces. Using both reduces operational risk and improves availability.
Choosing Between Web and Android
| Feature | Web Scraper | Android Scraper |
|---|---|---|
| Technology | Browser automation | Direct mobile API request forging |
| Speed | 10s – 3min per task | Typically faster |
| Proxy consumption | Higher | Lower |
| API coverage | Very broad | Growing (beta) |
| Independence | Web surface | Mobile backend surface |
Recommendation
- Web is the recommended default for most production workloads.
- Android is useful for specific mobile-only data and advanced scenarios (e.g., deeper keyword pagination, sold count, stock level). It is currently in beta and priced higher.
- For mission-critical workloads, distributing traffic across both surfaces improves resilience.
Web Scraper - Usage
The Web scraper interacts with Shopee’s web backend using real browser automation and human-like behavior.
It is designed to withstand strong anti-bot protections and supports a broad range of Shopee APIs.
Endpoint
Submit tasks to:
POST /scraping-tasks/shopee/run
Example
curl --header "Content-Type: application/json" \
--header "Authorization: Bearer ${token}" \
--request POST \
--data '{"requests":[{"url": "https://shopee.sg/api/v4/search/search_items?keyword=tshirt"}]}' \
https://continuous-scraper.common.chartedapi.com/scraping-tasks/shopee/run
The Shopee Web API endpoint is specified inside the request body.
See the API Reference for full endpoint details.
Example Request Body
{
"requests": [
{
"url": "https://shopee.co.th/api/v4/pdp/get_pc?shop_id=146475693&item_id=25922366667",
"userData": {
"referrer": "https://shopee.co.th/LANEIGE-Water-Bank-Blue-Hyaluronic-Emulsion-120mL-for-Combination-to-Oily-skin--i.146475693.25922366667",
"language": "en"
}
},
{
"url": "https://shopee.sg/api/v4/shop/rcmd_items",
"method": "POST",
"payload": {
"bundle": "shop_page_category_tab_main",
"shop_id": 178877065,
"limit": 30,
"offset": 0,
"upstream": "",
"sort_type": 1,
"user_behaviour":{"user_behaviour_list":[]}
}
}
],
"language": "id"
}
Common Configuration Options
The following options can be set at request level (requests[]) or top level:
userData.referrer— Sets the HTTPRefererheader.languageoruserData.language— Sets thelanguagecookie andx-shopee-languageheader.enrichUrlQuery(default: true) — Automatically adds required query parameters (limits, session IDs, etc.).generateReferrer(default: true) — Generates realistic referrer headers.
These defaults are designed to improve authenticity and stability.
Web Scraper - APIs
Product Search by Keyword or Category
-
URL Path:
/api/v4/search/search_items
-
URL Parameters:
keyword: Search keyword, e.g., "tshirt".match_id: Category ID from/api/v4/pages/get_category_tree.categoryids: Comma-separated list of category IDs.fe_categoryids: Comma-separated list of FE category IDs.brandids: Comma-separated list of FE categorybrand IDs.infokeyword,match_id,categoryids,fe_categoryidsandbrandidsare mutually exclusive.by(default = "relevancy"): Sort by "relevancy", "ctime", "sales", or "price".order(default = "desc"): Sort order, "asc" or "desc".limit(default = set by scraper): Number of results per page.newest(default = 0): Offset for results, typically a multiple oflimit.page_type,scenario,version: Additional parameters with default settings.extra_params,view_session_id: Automatically generated, unless overridden.
-
Scraper Input Parameters
productSearch_enrichUrlQuery_pageSize: Number of results per request (default: 60).productSearch_crawlNextPages: Set to true to crawl subsequent pages.productSearch_crawlNextPages_maxPages: Limit on number of pages to crawl (default: 50).productSearch_crawlNextPages_maxResults: Maximum products to crawl (default: 3000).productSearch_crawlProductDetails: Set to true to crawl details of each product.
-
Example Input:
{
"requests": [
// Search products with the "tshirt" keyword
{ "url": "https://shopee.sg/api/v4/search/search_items?keyword=tshirt" },
// Search products in the category ID 11027421
// Note: Shopee uses /api/v4/recommend/recommend_v2 for the category page now
{ "url": "https://shopee.sg/api/v4/search/search_items?match_id=11027421&scenario=PAGE_CATEGORY" },
// Search products from the shop ID 290739469 (scenario PAGE_SHOP_SEARCH)
{ "url": "https://shopee.sg/api/v4/search/search_items?entry_point=ShopByPDP&match_id=290739469&page_type=shop&scenario=PAGE_SHOP_SEARCH" },
// Search products from the shop ID 290739469 (scenario PAGE_SHOP)
{ "url": "https://shopee.sg/api/v4/search/search_items?match_id=290739469&page_type=shop&scenario=PAGE_SHOP" },
// Search products from the brand ID 4508220
{ "url": "https://shopee.sg/api/v4/search/search_items?brandids=4508220&scenario=PAGE_OTHERS" }
],
// Set the "limit" URL parameter to 60
"productSearch_enrichUrlQuery_pageSize": 60,
// Automatically crawl the next pages
"productSearch_crawlNextPages": true,
// Crawl until the 3rd page
"productSearch_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of products to crawl
"productSearch_crawlNextPages_maxResults": 180,
// Automatically crawl the detail of each listed product
"productSearch_crawlProductDetails": true
}
-
Example Response:
-
Notable Response Fields:
items: Array of product summaries.items/itemidanditems/shopid: Essential for scraping product details and ratings.items/item_basic/name: Product name.items/item_basic/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "sg-11134201-7qvez-lgj50bviqvph8b" is "https://down-sg.img.susercontent.com/file/sg-11134201-7qvez-lgj50bviqvph8b".items/item_basic/ctime: Creation timestamp.items/item_basic/sold: Monthly sales.items/item_basic/historical_sold: Total sales.items/item_basic/price: Divide by 100,000 to get actual price.
Unfortunately sold and stock are not available anymore in non-authenticated mode. However, the
Shop Products V2 API and Android Product Listing API still provides these fields.
Similarly, access to multiple pages is not available anymore for keyword search in non-authenticated mode. Fortunately, the Android Product Search by Keyword or Category API still provides multiple pages.
Product Listing V2
-
Request Method:
POST
-
URL Path:
/api/v4/microsite/batch_get_item_card
-
Request Body:
{
"shop_item_ids": [
{
"item_id": 40505798777,
"shop_id": 1521408445
},
// ...
]
}
The shop_item_ids is an array containing a list of item_id (product identifier) and shop_id (product owner identifier).
- Example Input:
{
// List 5 products via their identifiers
"requests": [
{
"url": "https://shopee.sg/api/v4/microsite/batch_get_item_card",
"method": "POST",
"payload": {
"shop_item_ids": [
{
"item_id": 40505798777,
"shop_id": 1521408445
},
{
"item_id": 40905798740,
"shop_id": 1521408445
},
{
"item_id": 42105798857,
"shop_id": 1521408445
},
{
"item_id": 43005798827,
"shop_id": 1521408445
},
{
"item_id": 27937932620,
"shop_id": 1521408445
}
]
}
}
]
}
-
Example Response:
-
Notable Response Fields:
data/item_cards: Array of product summaries.data/item_cards/item_data/itemidanditems/shopid: Essential for scraping product details and ratings.data/item_cards/item_card_displayed_asset/name: Product name.data/item_cards/item_card_displayed_asset/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "sg-11134201-7qvez-lgj50bviqvph8b" is "https://down-sg.img.susercontent.com/file/sg-11134201-7qvez-lgj50bviqvph8b".data/item_cards/item_data/ctime: Creation timestamp.data/item_cards/item_data/item_card_display_price/price: Divide by 100,000 to get actual price.
Unfortunately sold and stock are not available anymore in non-authenticated mode. However, the
Shop Products V2 API and Android Product Listing API still provides these fields.
Product Details
-
URL Path:
/api/v4/pdp/get_pc
-
URL Parameters:
shop_id: The unique identifier of the shop.item_id: The unique identifier of the product.
-
Scraper Input Parameters
productDetail_crawlProductRatings: Define the types of product ratings to crawl. Options include "ALL", "ONE_STAR", "TWO_STARS" to "FIVE_STARS", "WITH_COMMENTS", "WITH_MEDIA", "LOCAL_REVIEWS". Combine multiple values for a broader range, e.g.,["ONE_STAR", "TWO_STARS"].
-
Example Input:
{
// Get the details of a product
"requests": [
{ "url": "https://shopee.sg/api/v4/pdp/get_pc?shop_id=414243778&item_id=23600133176" }
],
// Automatically crawl ratings of any stars
"productDetail_crawlProductRatings": ["ALL"],
// Set the rating "limit" URL parameter to 50
"productRatings_enrichUrlQuery_pageSize": 50,
// Automatically crawl the next rating pages
"productRatings_crawlNextPages": true,
// Crawl until the 3rd rating page
"productRatings_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of ratings to crawl
"productRatings_crawlNextPages_maxResults": 150,
}
-
Example Response:
-
Notable Response Fields:
data/item/item_idanddata/item/shop_id: Essential identifiers for the product and shop.data/item/title: Product name.data/item/description: Product description.data/item/image: Image key. Convert to URL using the provided format:https://down-${country}.img.susercontent.com/file/${imageKey}.data/item/ctime: Product creation timestamp.data/item/fe_categories: Category information including parent categories.data/item/models: Detailed SKU information.data/product_review: Aggregated rating statistics.data/product_shipping: Shipping details.data/shop_detailed: Comprehensive shop details including name, username (slug), and image.
-
Additional Notes:
- When fake prices are detected in the Shopee response, a field
diagnosticis added to the response with the content:{
"fakePriceDetected": true
}
- When fake prices are detected in the Shopee response, a field
Product Ratings
-
URL Path:
/api/v2/item/get_ratings
-
URL Parameters:
shopid&itemid: Unique identifiers for the shop and product.limit(default = set by scraper): Number of results per page.offset(default = 0): Offset for results, typically a multiple oflimit.type(default = 0, max = 5): Filter by number of stars (e.g. 2 = 2-stars ratings only). 0 = all ratings.filter(default = 0): Filter by content: 1 = with comments, 3 = with media, 9 = local ratings, 0 = all ratings.exclude_filter,filter_size,flag,fold_filter,relevant_reviews,request_source,tag_filter,variation_filters: Additional parameters with default settings.
-
Scraper Input Parameters
productRatings_enrichUrlQuery_pageSize: Number of results per request (default: 6).productRatings_crawlNextPages: Set to true to crawl subsequent pages.productRatings_crawlNextPages_maxPages: Limit on number of pages to crawl (default: 500).productRatings_crawlNextPages_maxResults: Maximum products to crawl (default: 3000).productRatings_autofixError10002: Automatically corrects error 10002 by splitting requests (default: true).
-
Example Input:
{
// Get the ratings of a product
"requests": [
{ "url": "https://shopee.sg/api/v2/item/get_ratings?shopid=414243778&itemid=23600133176" }
],
// Set the rating "limit" URL parameter to 50
"productRatings_enrichUrlQuery_pageSize": 50,
// Automatically crawl the next rating pages
"productRatings_crawlNextPages": true,
// Crawl until the 3rd rating page
"productRatings_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of ratings to crawl
"productRatings_crawlNextPages_maxResults": 150,
// Automatically fix the error 10002
"productRatings_autofixError10002": true,
}
-
Example Response:
-
Notable Response Fields:
data/ratings/cmtid: Unique identifier for each rating.data/ratings/ctime: Timestamp of the rating.data/ratings/rating_star: Star rating from 1 to 5.data/ratings/comment: Buyer's comment.data/ratings/author_username: Buyer's username (sometimes anonymized).data/ratings/author_portrait: Buyer's profile image.data/ratings/images&videos: Media associated with the rating.data/ratings/product_items: SKU details of the rated product.
Always be mindful of buyers' personal information and comply with local data protection laws. Avoid storing personal data unless necessary.
Product Select Variation
This API is invoked when the user selects a variant/SKU on a product page.
-
URL Path:
/api/v4/pdp/cart_panel/select_variation_pc- Or
/api/v4/pdp/cart_panel/select_variation_rw - Or
/api/v4/pdp/get/select_variation_rw
-
Request Body Parameters:
shop_id: The unique identifier of the shop.item_id: The unique identifier of the product.selected_tiers: Object representing the variant indexes (e.g.{"0": 2}for the 3rd product color). You can obtain this parameter from the response of the /api/v4/pdp/get_pc API, in the fielddata/item/models/0/extinfo/tier_index.quantity(optional, default = 1): Number of selected products.tz_offset_in_minutes(optional, default = depend on the domain): Timezone offset in minutes (e.g. 420 for Asia/Jakarta).
-
Example Input:
{
"requests": [
{
"url": "https://shopee.co.id/api/v4/pdp/cart_panel/select_variation_pc",
"method": "POST",
"payload": {
"item_id": 24731574651,
"shop_id": 1269032741,
"selected_tiers": {
"0": 1, // 2nd color
"1": 1 // 2nd size
}
}
}
]
}
-
Example Response:
-
Notable Response Fields:
data/product_price/price/single_value: Product variant price.data/tier_variation_display_indicators: Variant descriptions.
Product Recommendation
-
URL Path:
POST /api/v4/recommend/product_detail_page
-
Request Body Parameters:
shopid(optional): Shop identifier.itemid(optional): Product identifier.catid(optional): Category identifier.limit(default = 48): Number of results per page.offset(default = 0): Offset for results, typically a multiple oflimit.
-
Example Input:
{
"requests": [
{
"url": "https://shopee.sg/api/v4/recommend/product_detail_page",
"method": "POST",
"payload": {
"offset": 0,
"limit": 48,
"shopid": 119013379,
"itemid": 20395639234,
"catid": 100634
}
}
]
}
-
Example Response:
-
Notable Response Fields:
data/sections/units: Array of product summaries.data/sections/units/itemidandshopid: Essential for scraping product details and ratings.data/sections/units/name: Product name.data/sections/units/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "sg-11134201-7qvez-lgj50bviqvph8b" is "https://down-sg.img.susercontent.com/file/sg-11134201-7qvez-lgj50bviqvph8b".data/sections/units/ctime: Creation timestamp.data/sections/units/sold: Monthly sales.data/sections/units/historical_sold: Total sales.data/sections/units/price: Divide by 100,000 to get actual price.
Unfortunately sold and stock are not available anymore in non-authenticated mode. However, the
Shop Products V2 API and Android Product Listing API still provides these fields.
Product Recommendation (bis)
-
URL Path:
POST /api/v4/recommend/recommend_post
-
Request Body Parameters:
shopid(optional): Shop identifier.itemid(optional): Product identifier.catid(optional): Category identifier.limit(default = 25): Number of results per page.offset(optional): Number of skipped results.section,item_card,bundle: Additional parameters with default settings.
This API is called in the "From The Same Shop" section at the bottom of a product page.
Shopee usually invokes it with limit=25 and no offset, or with limit=48 and offset=0 (or 48, 96, ...)
- Example Input:
{
"requests": [
{
"url": "https://shopee.sg/api/v4/recommend/recommend_post",
"method": "POST",
"payload": {
"limit": 25,
"section": "from_same_shop",
"shopid": 18254273,
"itemid": 809240155,
"catid": 100001,
"item_card": 3,
"bundle": "product_detail_page_ftss"
}
}
]
}
-
Example Response:
-
Notable Response Fields:
data/sections[0]/data/item: Product summary.data/sections[0]/data/item/itemidandshopid: Essential for scraping product details and ratings.data/sections[0]/data/item/name: Product name.data/sections[0]/data/item/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "sg-11134201-7qvez-lgj50bviqvph8b" is "https://down-sg.img.susercontent.com/file/sg-11134201-7qvez-lgj50bviqvph8b".data/sections[0]/data/item/ctime: Creation timestamp.data/sections[0]/data/item/sold: Monthly sales.data/sections[0]/data/item/historical_sold: Total sales.data/sections[0]/data/item/price: Divide by 100,000 to get actual price.
Unfortunately sold and stock are not available anymore in non-authenticated mode. However, the
Shop Products V2 API and Android Product Listing API still provides these fields.
Product Recommendation V2
-
URL Path:
POST /api/v4/recommend/recommend_v2
-
Request Body Parameters:
catid: Category identifier.limit(default = 24): Number of results per page.offset(optional): Number of skipped results.cat_level: Category level (e.g. 3).bundle(optional): Set to "category_landing_page" by default.
This API is called in the category page.
- Example Input:
{
"requests": [
{
"url": "https://shopee.sg/api/v4/recommend/recommend_v2",
"method": "POST",
"payload": {
"catid": 11027421,
"offset": 0,
"limit": 60,
"bundle": "category_landing_page",
"cat_level": 1
}
}
]
}
-
Example Response:
-
Notable Response Fields:
data/units[0]/item: Product summary.data/units[0]/item/item_data/itemidandshopid: Essential for scraping product details and ratings.data/units[0]/item/item_card_displayed_asset/name: Product name.data/units[0]/item/item_card_displayed_asset/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "sg-11134201-7qvez-lgj50bviqvph8b" is "https://down-sg.img.susercontent.com/file/sg-11134201-7qvez-lgj50bviqvph8b".data/units[0]/item/item_data/ctime: Creation timestamp.data/units[0]/item/item_card_display_sold_count/monthly_sold_count: Monthly sales.data/units[0]/item/item_card_display_sold_count/historical_sold_count: Total sales.data/units[0]/item/item_data/item_card_display_price/price: Divide by 100,000 to get actual price.
Unfortunately sold and stock are not available anymore in non-authenticated mode. However, the
Shop Products V2 API and Android Product Listing API still provides these fields.
Shopee Category Tree
-
URL Path:
/api/v4/pages/get_category_tree
-
Example Input:
{
// Get the category tree
"requests": [
{ "url": "https://shopee.sg/api/v4/pages/get_category_tree" }
]
}
-
Example Response:
-
Notable Response Fields:
data/category_list/catid: Unique identifier for each category.data/category_list/name: Category name.data/category_list/children: Sub-categories.
This API only provides the two top category levels.
Category Details
-
URL Path:
/api/v4/search/get_fe_category_detail
-
URL Parameters:
catids: Unique identifiers for the category.
-
Example Input:
{
// Retrieve details for a specific category
"requests": [
{ "url": "https://shopee.sg/api/v4/search/get_fe_category_detail?catids=11027710" }
]
}
-
Example Response:
-
Notable Response Fields:
data/categories/catid: The unique identifier for the category.data/categories/parent_cat_id: Identifier for the parent category, helping to understand category hierarchy.data/categories/display_name: The category name as displayed in different languages across the platform.
Official Shops
-
URL Path:
/api/v4/official_shop/get_shops_by_category
-
URL Parameters:
category_id(default = -1): Specify a category ID to retrieve official shops within that category. Use -1 to list all official shops.need_zhuyin: An additional parameter, typically set to default.
Only shops associated with registered brands are considered "official" on Shopee.
- Example Input:
{
// Retrieve a list of all official shops
"requests": [
{ "url": "https://shopee.sg/api/v4/official_shop/get_shops_by_category" }
]
}
-
Example Response:
-
Notable Response Fields:
data/brands/brand_ids/shopid: The unique identifier for each official shop.data/brands/brand_ids/brand_name: The name of the brand associated with the shop.data/brands/brand_ids/username: The shop's username or slug, useful for direct queries or referencing.
Shop Search By Keyword
-
URL Path:
/api/v4/search/search_user
-
URL Parameters:
keyword(minimum: 3 characters): Enter a search term, such as "adi", to find relevant shops.limit(default = set by scraper): Number of results per page.offset(default = 0): Offset for results, typically a multiple oflimit.page,with_search_cover: Additional parameters with default settings.
This API covers all shops on Shopee, both mall and non-mall.
For a comprehensive shop list, consider searching with various trigrams.
-
Scraper Input Parameters
shopSearch_enrichUrlQuery_pageSize: Number of results per request (default: 6).shopSearch_crawlNextPages: Set to true to crawl subsequent pages.shopSearch_crawlNextPages_maxPages: Limit on number of pages to crawl (default: 500).shopSearch_crawlNextPages_maxResults: Maximum shops to crawl (default: 30000).shopSearch_crawlShopDetails: Set to true to crawl details of each shop.
-
Example Input:
{
// Search shop with the "adi" keyword
"requests": [
{ "url": "https://shopee.sg/api/v4/search/search_user?keyword=adi" }
],
// Set the "limit" URL parameter to 50
"shopSearch_enrichUrlQuery_pageSize": 50,
// Automatically crawl the next pages
"shopSearch_crawlNextPages": true,
// Crawl until the 3rd page
"shopSearch_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of shops to crawl
"shopSearch_crawlNextPages_maxResults": 150,
// Automatically crawl the detail of each listed shop
"shopSearch_crawlShopDetails": true
}
-
Example Response:
-
Notable Response Fields:
data/users/shopid: Unique identifier for the shop.data/users/shopname: Name of the shop.data/users/username: The shop's username or slug, useful for direct queries or referencing.data/users/portrait: Shop image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "6d4ff02a5978ee10a7b4527c25396b0b" is "https://down-sg.img.susercontent.com/file/6d4ff02a5978ee10a7b4527c25396b0b".
Shop Detail
-
URL Path:
/api/v4/shop/get_shop_base
-
URL Parameters:
username: Specify the shop's username (not the shop ID).shopid: Specify the shop's ID.infoUse either
usernameorshopid, but not both at the same time.entry_point,need_cancel_rate,request_source,version: Additional parameters with default settings.
-
Scraper Input Parameters
shopDetail_crawlShopProducts: Set to true to enable automatic crawling of the shop's products.
-
Example Input:
{
// Retrieve detailed information about a specific shop
"requests": [
{ "url": "https://shopee.sg/api/v4/shop/get_shop_base?username=xiaomiofficialstore.sg" }
],
// Automatically crawl shop products
"shopSearch_crawlShopDetails": true,
// Set the product "limit" URL parameter to 30
"shopProducts_enrichUrlQuery_pageSize": 30,
// Automatically crawl the next product pages
"shopProducts_crawlNextPages": true,
// Crawl until the 3rd product page
"shopProducts_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of products to crawl
"shopProducts_crawlNextPages_maxResults": 90,
}
-
Example Response:
-
Notable Response Fields:
data/shopid: The unique identifier for the shop.data/name: Official name of the shop.data/description: Brief description of the shop.data/cover: Image key for the shop's profile picture. Convert to URL using the provided format:https://down-${country}.img.susercontent.com/file/${imageKey}.data/account/username: The shop's unique username or slug.data/ctime: Timestamp marking the shop's creation.data/shop_rating: Aggregated rating details of the shop.data/seller_metrics: Various metrics providing insights into the shop's performance.data/item_count: Total number of products offered by the shop.
Shop Products
-
URL Path:
api/v4/shop/rcmd_items
-
URL Parameters:
shop_id: Unique identifier for the shop.limit(default = set by scraper): Number of results per page.offset(default = 0): Offset for results, typically a multiple oflimit.sort_type(default = 1): Sorting option for products. 1 = popular first, 2 = latest first, 13 = top sales first, 8 = price low to high, 4 = price high to lowcat_id(optional): Filter products by a category.bundle,upstream: Additional parameters with default settings.
-
Scraper Input Parameters
shopProducts_enrichUrlQuery_pageSize: Number of results per request (default: 30).shopProducts_crawlNextPages: Set to true to crawl subsequent pages.shopProducts_crawlNextPages_maxPages: Limit on number of pages to crawl (default: 100).shopProducts_crawlNextPages_maxResults: Maximum products to crawl (default: 3000).shopProducts_crawlNextPages_minSales: Minimum sales threshold for page crawling (optional). Crawling stops when a product with sales equal to or less than this value appears, assuming products are sorted by sales in descending order.shopProducts_crawlProductDetails: Set to true to automatically crawl product details (default: false).
-
Example Input:
{
// Get the products of a shop
"requests": [
{ "url": "https://shopee.sg/api/v4/shop/rcmd_items?shop_id=178877065" }
],
// Set the product "limit" URL parameter to 30
"shopProducts_enrichUrlQuery_pageSize": 30,
// Automatically crawl the next product pages
"shopProducts_crawlNextPages": true,
// Crawl until the 3rd product page
"shopProducts_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of products to crawl
"shopProducts_crawlNextPages_maxResults": 150,
// Automatically crawl product details
"shopProducts_crawlProductDetails": true
}
- Example Response:
This API is scraped by using the POST method.
- Notable Response Fields:
data/items: Array of product summaries.data/items/itemidanditems/shopid: Essential for scraping product details and ratings.data/items/name: Product name.data/items/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}.data/items/ctime: Creation timestamp.data/items/stock: Stock level.data/items/sold: Monthly sales.data/items/historical_sold: Total sales.data/items/price: Divide by 100,000 to get actual price.
Unfortunately sold and stock are not available anymore in non-authenticated mode. However, the
Shop Products V2 API and Android Product Listing API still provides these fields.
Shop Products V2
Retrieve products from a Shopee shop, sorted by popularity, recency, sales, or price.
-
URL Path:
api/v4/shop/get_products_tab_data_v2
-
Request Body Parameters:
shop_id: Unique identifier for the shop.top_item_ids(optional): Comma-separated list of item IDs to prioritize (e.g."22649016235,16324283563,24624953124").limit(default = set by scraper): Number of results per page.offset(default = 0): Offset for results, typically a multiple oflimit.by(default = "popular"): Sorting criteria: "popular", "latest", "topsales" or "price".order(default = "desc"): Sorting direction: "asc" or "desc".item_card_use_scene(optional, automatically set based onby):"popular"→"products_tab_popular""latest"→"products_tab_latest""topsales"→"products_tab_topsales""price"→"products_tab_price"
-
Scraper Input Parameters
emulateMobileDevice: Whether to emulate a mobile device (true) or a desktop browser (false).
-
Scraper Input Parameters
shopProducts_enrichUrlQuery_pageSize: Number of results per request (default: 30).shopProducts_crawlNextPages: Set to true to crawl subsequent pages.shopProducts_crawlNextPages_maxPages: Limit on number of pages to crawl (default: 100).shopProducts_crawlNextPages_maxResults: Maximum products to crawl (default: 3000).shopProducts_crawlNextPages_minSales: Minimum sales threshold for page crawling (optional). Crawling stops when a product with sales equal to or less than this value appears, assuming products are sorted by sales in descending order.shopProducts_crawlProductDetails: Set to true to automatically crawl product details (default: false).
The API returns different response structures depending on the browser type. Set emulateMobileDevice accordingly.
- Example Input:
{
"requests": [
{
"url": "https://shopee.sg/api/v4/shop/get_products_tab_data_v2",
"method": "POST",
"payload": {
"order": "desc",
"top_item_ids": "",
"by": "popular",
"item_card_use_scene": "products_tab_popular",
"shop_id": 18254273,
"limit": 20,
"offset": 0
}
}
],
"emulateMobileDevice": false,
// Set the product "limit" URL parameter to 30
"shopProducts_enrichUrlQuery_pageSize": 30,
// Automatically crawl the next product pages
"shopProducts_crawlNextPages": true,
// Crawl until the 3rd product page
"shopProducts_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of products to crawl
"shopProducts_crawlNextPages_maxResults": 150,
// Automatically crawl product details
"shopProducts_crawlProductDetails": true
}
- Example Response:
This API uses the POST method.
-
Notable Fields (Desktop):
data/item_cards: Array of product summaries.data/item_cards/item_card_data/itemidandshopid: Product identifiers.data/item_cards/item_card_data/name: Product name.data/item_cards/item_card_data/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}.data/item_cards/item_card_data/ctime: Creation timestamp.data/item_cards/item_card_data/stock: Stock level.data/item_cards/item_card_data/sold: Monthly sales.data/item_cards/item_card_data/historical_sold: Total sales.data/item_cards/item_card_data/price: Divide by 100,000 to get actual price.
-
Notable Fields (Mobile):
data/item_cards: Array of product summaries.data/item_cards/item_card_data/centralize_item_card/item_card/itemidandshopid: Product identifiers.data/item_cards/item_card_data/centralize_item_card/item_card/item_card_displayed_asset/name: Product name.data/item_cards/item_card_data/centralize_item_card/item_card/item_card_displayed_asset/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}.data/item_cards/item_card_data/centralize_item_card/item_card/ctime: Creation timestamp.data/item_cards/item_card_data/centralize_item_card/item_card/item_card_display_sold_count/monthly_sold_count: Monthly sales.data/item_cards/item_card_data/centralize_item_card/item_card/item_card_display_sold_count/historical_sold_count: Total sales.data/item_cards/item_card_data/centralize_item_card/item_card/item_card_display_price/price: Divide by 100,000 to get actual price.
Unfortunately sold and stock are not available anymore in non-authenticated mode. However, the
Shop Products V2 API and Android Product Listing API still provides these fields.
Keyword Suggestion
- URL Path:
/api/v4/search/search_suggestion
The keyword suggestions are normally displayed under the top search bar.
-
URL Parameters:
limit(default = set by scraper): Number of results per page.offset(default = 0): Offset for results, typically a multiple oflimit.bundle: An additional parameter, usually set to default.
-
Scraper Input Parameters
keywordSuggestions_enrichUrlQuery_pageSize: Number of keyword suggestions per request (default: 8).keywordSuggestions_crawlNextPages: Set to true to crawl subsequent pages.keywordSuggestions_crawlNextPages_maxPages: Limit on number of pages to crawl (default: 55).keywordSuggestions_crawlNextPages_maxResults: Maximum keyword suggestions to crawl (default: 440).
-
Example Input:
{
// Retrieve the 50 top suggested keywords
"requests": [
{ "url": "https://shopee.sg/api/v4/search/search_suggestion?limit=50" }
],
// Set the "limit" URL parameter to 50
"keywordSuggestions_enrichUrlQuery_pageSize": 50,
// Automatically crawl the next pages
"keywordSuggestions_crawlNextPages": true,
// Crawl until the 3rd page
"keywordSuggestions_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of keyword suggestions to crawl
"keywordSuggestions_crawlNextPages_maxResults": 150
}
-
Example Response:
-
Notable Response Fields:
data/queries/text: Suggested keyword.
Keyword Autocompletion
-
URL Path:
/api/v4/search/search_hint
-
URL Parameters:
keyword: The initial characters of a potential search term.extra_params,search_type,version: Additional parameters with default settings.
-
Example Input:
{
// Retrieve autocomplete suggestions for the keyword prefix "n"
"requests": [
{ "url": "https://shopee.sg/api/v4/search/search_hint?keyword=n" }
]
}
-
Example Response:
-
Notable Response Fields:
keywords/keyword: Suggested keyword based on the input characters.
Supermarket Product Search
-
URL Path:
/api/v4/search/search_mart_items
-
URL Parameters:
by(default = "relevancy"): Sort by "relevancy", "discount", "sales", or "price".order(default = "desc"): Sort order, "asc" or "desc".limit(default = 25): Number of results per page.newest(default = 0): Offset for results, typically a multiple oflimit.keyword(optional): Search keyword, e.g., "cheese".
-
Example Input:
{
"requests": [
// First page of the "all products" page
{ "url": "https://shopee.sg/api/v4/search/search_mart_items?by=relevancy&limit=25&newest=0&order=desc" },
// Search for the "cheese" keyword
{ "url": "https://shopee.sg/api/v4/search/search_mart_items?by=relevancy&keyword=cheese&limit=25&newest=0&order=desc" }
]
}
-
Example Response:
-
Notable Response Fields:
items: Array of product summaries.items/itemidanditems/shopid: Essential for scraping product details and ratings.items/item_basic/name: Product name.items/item_basic/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "sg-11134201-7qvez-lgj50bviqvph8b" is "https://down-sg.img.susercontent.com/file/sg-11134201-7qvez-lgj50bviqvph8b".items/item_basic/ctime: Creation timestamp.items/item_basic/sold: Monthly sales.items/item_basic/historical_sold: Total sales.items/item_basic/price: Divide by 100,000 to get actual price.
Unfortunately sold and stock are not available anymore in non-authenticated mode. However, the
Shop Products V2 API and Android Product Listing API still provides these fields.
Android Scraper - Usage
The Android scraper interacts directly with Shopee’s mobile backend APIs.
It does not run the Android application. Instead, it forges API requests that mimic real mobile traffic.
Benefits:
- Lower proxy consumption
- Faster execution
- Independent from web anti-bot logic
Endpoint
Submit tasks to:
POST /scraping-tasks/shopee-android/run
Example
curl --header "Content-Type: application/json" \
--header "Authorization: Bearer ${token}" \
--request POST \
--data '{"requests":[{"url": "https://mall.shopee.sg/api/v4/search/search_items?keyword=tshirt"}]}' \
https://continuous-scraper.common.chartedapi.com/scraping-tasks/shopee-android/run
Supported Domains
Only the following Android backend domains are supported:
| Region | Host |
|---|---|
| Brazil | https://mall.shopee.com.br |
| Indonesia | https://mall.shopee.co.id |
| Malaysia | https://mall.shopee.com.my |
| Philippines | https://mall.shopee.ph |
| Singapore | https://mall.shopee.sg |
| Thailand | https://mall.shopee.co.th |
| Taiwan | https://mall.shopee.tw |
| Vietnam | https://mall.shopee.vn |
Android Scraper - APIs
Product Search by Keyword or Category
-
URL Path:
/api/v4/search/search_items
-
URL Parameters:
keyword: Search keyword, e.g., "tshirt".match_id: Category ID when searching products by category, Shop ID when searching products by shop.categoryids: Comma-separated list of category IDs used to filter results.by(default = "relevancy"): Sort by "relevancy", "ctime", "sales", or "price".order(default = "desc"): Sort order, "asc" or "desc".newest(default = 0): Offset for results.page(default = 1): Page number (start from 1).page_type,scenario,version,trending_entrance,extra_params,view_session_id: Automatically generated, unless overridden.
-
Scraper Input Parameters
productSearch_crawlNextPages: Set to true to crawl subsequent pages (default: false).productSearch_crawlNextPages_maxPages: Limit on number of pages to crawl (default: 1).productSearch_crawlNextPages_maxResults: Maximum products to crawl (default: 20).
Unlike the web version of this API, we can crawl multiple pages
for keyword search. However, the number of items per page depend on the by parameter:
relevance: page size is 30- others: first page size is 20, next pages is 30
- Example Input:
{
"requests": [
// Search products with the "tshirt" keyword
{ "url": "https://mall.shopee.sg/api/v4/search/search_items?keyword=tshirt" },
// Search products in the category ID 11027421
{ "url": "https://mall.shopee.sg/api/v4/search/search_items?match_id=11027421&scenario=PAGE_CATEGORY" },
// Search products from the shop ID 290739469
{ "url": "https://mall.shopee.sg/api/v4/search/search_items?match_id=290739469&page_type=shop&scenario=PAGE_SHOP_SEARCH" },
],
// Automatically crawl the next pages
"productSearch_crawlNextPages": true,
// Crawl until the 3rd page
"productSearch_crawlNextPages_maxPages": 3,
// Alternatively, indicate the maximum number of products to crawl
"productSearch_crawlNextPages_maxResults": 180
}
-
Example Response:
-
Notable Response Fields:
items: Array of product summaries.items/itemidanditems/shopid: Product key.items/item_data/catid: Category ID.items/item_data/ctime: Creation timestamp.items/item_data/shop_data/shop_name: Shop name.items/item_data/item_card_display_price/price: Product price (divide by 100,000 to get actual price).items/item_data/item_card_display_price/discount: Discount percentage.items/item_data/item_rating/rating_star: Average rating (e.g., 4.89).items/item_data/item_rating/rating_count: Array of rating counts[total, 1-star, 2-star, 3-star, 4-star, 5-star].items/item_card_displayed_asset/name: Product name.items/item_card_displayed_asset/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "sg-11134201-7qvez-lgj50bviqvph8b" is "https://down-sg.img.susercontent.com/file/sg-11134201-7qvez-lgj50bviqvph8b".items/item_card_displayed_asset/images: Other image keys.
Product Listing
-
Request Method:
POST
-
URL Path:
/api/v4/item/get_list
-
Request Body:
{
"bff_meta": null,
"shop_item_ids": [
{ "item_id": 26826689395, "shop_id": 240877035 },
{ "item_id": 40703058516, "shop_id": 1058254930 }
],
"source": "microsite_individual_product"
}
The shop_item_ids is an array of item_id (product identifier) and shop_id (product owner identifier). You can request up to 5 items per scraping task.
- Example Input:
{
"requests": [
{
"url": "https://mall.shopee.sg/api/v4/item/get_list",
"method": "POST",
"payload": {
"bff_meta": null,
"shop_item_ids": [
{
"item_id": 26826689395,
"shop_id": 240877035
},
{
"item_id": 40703058516,
"shop_id": 1058254930
}
],
"source": "microsite_individual_product"
}
}
]
}
-
Example Response:
-
Notable Response Fields:
items: Array of product summaries.items/itemidanditems/shopid: Essential for scraping product details and ratings.items/name: Product name.items/image: Image key. Convert to URL withhttps://down-${country}.img.susercontent.com/file/${imageKey}, for example the URL to download the image "sg-11134201-7qvez-lgj50bviqvph8b" is "https://down-sg.img.susercontent.com/file/sg-11134201-7qvez-lgj50bviqvph8b".items/ctime: Creation timestamp.items/sold: Monthly sales.items/historical_sold: Total sales.items/price: Divide by 100,000 to get actual price.
Product Details
-
URL Path:
/api/v4/pdp/get
-
URL Parameters:
shop_id: The unique identifier of the shop.item_id: The unique identifier of the product.
Consider Cart Panel Item Detail as an alternative if success rate is too low.
- Example Input:
{
// Get the details of a product
"requests": [
{ "url": "https://mall.shopee.sg/api/v4/pdp/get?shop_id=414243778&item_id=23600133176" }
]
}
-
Example Response:
-
Notable Response Fields:
data/item/item_idanddata/item/shop_id: Essential identifiers for the product and shop.data/item/title: Product name.data/item/description: Product description.data/item/image: Image key. Convert to URL using the provided format:https://down-${country}.img.susercontent.com/file/${imageKey}.data/item/ctime: Product creation timestamp.data/item/fe_categories: Category information including parent categories.data/item/models: Detailed SKU information.data/item/models/sold: SKU Monthly sales.data/item/models/stock: SKU Stock level.data/product_review: Aggregated rating statistics.data/product_review/historical_sold: Total sales.data/product_shipping: Shipping details.data/shop_detailed: Comprehensive shop details including name, username (slug), and image.
Cart Panel Item Detail
-
Request Method:
POST
-
URL Path:
/api/v4/pdp/cart_panel/get
-
Request Body:
{
"_pft": 255,
"city": "",
"has_voucher": false,
"is_group_buy_new_group": false,
"item_id": 26826689395,
"method": 1,
"model_id": null,
"quantity": 1,
"selected_insurance_plans": [],
"selected_spl": null,
"selected_tiers": null,
"shop_id": 240877035,
"state": "",
"use_group_buy": false
}
The most important fields are item_id (product identifier) and shop_id (product owner identifier).
- Example Input:
{
"requests": [
{
"url": "https://mall.shopee.sg/api/v4/pdp/cart_panel/get",
"method": "POST",
"payload": {
"_pft": 255,
"city": "",
"has_voucher": false,
"is_group_buy_new_group": false,
"item_id": 26826689395,
"method": 1,
"model_id": null,
"quantity": 1,
"selected_insurance_plans": [],
"selected_spl": null,
"selected_tiers": null,
"shop_id": 240877035,
"state": "",
"use_group_buy": false
}
}
]
}
-
Example Response:
-
Notable Response Fields:
data/item/item_idanddata/item/shop_id: Essential identifiers for the product and shop.data/item/title: Product name.data/item/image: Image key. Convert to URL using the provided format:https://down-${country}.img.susercontent.com/file/${imageKey}.data/item/models: Detailed SKU information.data/item/models/stock: SKU stock level.data/item/stock: Product stock level.
Operational Recommendations
Shopee regularly updates its anti-bot protections.
For production usage:
- Monitor success rate continuously.
- Automatically pause traffic if success rate drops significantly.
- Distribute traffic between Web and Android for redundancy.
- Expect stricter defenses during major sales events.
Charted Sea actively maintains this scraper to restore reliability quickly after platform updates.
No action is required on your side when Shopee changes internal APIs.
Best Practices
- Start with small batches when testing new endpoints.
- Use asynchronous execution (
waitForCompletion=false) for large volumes. - Track proxy consumption, especially during high-traffic campaigns.
- Keep fallback strategies (Web + Android) for critical workloads.