Shopee Scraper - Suggestions, Products & Shops
Pricing
from $2.20 / 1,000 results
Shopee Scraper - Suggestions, Products & Shops
Collect Shopee search suggestions, related product cards, discover-feed products and shop profiles across 11 market codes. Pay per delivered row plus a start fee; available data varies by market.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
20
Total users
6
Monthly active users
15 hours
Issues response
a day ago
Last modified
Categories
Security
Limited permissionsShare
Shopee Scraper
Export Shopee search suggestions, related product cards, discover-feed products and shop profiles as structured rows, with a choice of 11 market codes.
- Research suggested queries and their linked product and shop IDs.
- Collect related products with prices, sales counts and ratings when available.
- Read a market's discover feed or a shop's public profile.
- Export rows for spreadsheets, applications and AI agents.
- Pay $3.00 per 1,000 delivered rows on the Free plan, plus a start fee.
What does Shopee Scraper do?
Shopee Scraper collects public Shopee data for keyword research, product comparisons and shop research. Each row represents one suggestion, product card or shop profile. Suggestions are search signals, not full product search results.
- Suggestions: enter
keywordorkeywordsto receive suggested queries. - Products: provide a product seed to collect related product cards, not the seed's full detail page.
- Discover: collect product cards from a market's homepage feed.
- Shop: provide a shop ID or username to collect its profile and available categories.
Choose PH (Philippines), SG (Singapore), MY (Malaysia), TH (Thailand), TW (Taiwan), VN (Vietnam), ID (Indonesia), BR (Brazil), MX (Mexico), CO (Colombia) or CL (Chile). Singapore is the default. Available data varies by market and mode.
Optional filters, category trees and category details are off by default. They add supporting information rather than separately billed rows. Every delivered dataset row uses the same row price for your plan.
What data can you extract from Shopee?
All row types include rowType, id, title, market, keyword and captured_at. The examples below illustrate field shapes, not verified offers.
Suggestions: rowType="suggestion"
| Field | Description | Example |
|---|---|---|
query | Suggested search text; also used as title. | phone case clear |
id | Normalized query used to identify the row. | phone case clear |
rank | Position among returned suggestions. | 1 |
market | Selected market code. | SG |
item_id | First linked product ID, if present. | 123456789 |
shop_id | First linked shop ID, if present. | 1234567 |
product_url | Link assembled from those IDs. | https://shopee.sg/product/1234567/123456789 |
suggestion_item_ids | Linked product IDs, capped at 50. | ["123456789"] |
suggestion_shop_ids | Linked shop IDs, capped at 50. | ["1234567"] |
suggestion_images | Linked image URLs, capped at 50. | [] |
suggestion_item_count | Product-ID count before truncation. | 1 |
tracking | Available ranking information. | {"rank_score":0.2} |
search_info | Additional search information supplied by Shopee. | {} |
Suggestion rows leave price, sold_text and rating_text empty. A linked product ID does not mean its price or stock was collected.
Products and discover: rowType="product_listing"
| Field | Description | Example |
|---|---|---|
title | Product name. | Clear phone case |
item_id | Product ID. | 123456789 |
shop_id | Seller's shop ID. | 1234567 |
product_url | Product page link. | https://shopee.sg/product/1234567/123456789 |
price | Available reference price as a decimal string. | 12.90 |
voucher_discounted_price | Available voucher-adjusted price. | 10.90 |
currency_code | Currency for the selected market. | SGD |
discount | Discount information when present. | 15% |
sold | Available sales count. | 120 |
monthly_sold | Available monthly sales count. | 25 |
stock | Stock count when supplied by the discover feed. | 40 |
rating_star | Aggregate rating. | 4.8 |
rating_count | Total rating count. | 52 |
rating_count_distribution | Rating-count array supplied by Shopee. | [] |
images | Product image URLs. | [] |
shop_name | Shop display name when available. | Example Shop |
is_official_shop | Official-shop flag when available. | true |
category_breadcrumb | Optional category path. | ["Mobile & Gadgets"] |
global_cat | Positive category ID, or null. | 100011 |
global_cat_raw | Original category object or array, otherwise null. | {"catid":[100011,100046,100780]} |
tier_variations | Available variation information. | [] |
item_card_display_price | Price details retained from the product card. | {} |
When Shopee supplies a category object or array, global_cat is null and global_cat_raw preserves the complete value without selecting an ID from it.
price prefers a positive strikethrough or original price before other available prices. It is not a guaranteed checkout price; compare it with voucher_discounted_price and the product card's price details.
Shops: rowType="shop_profile"
| Field | Description | Example |
|---|---|---|
shop_id | Shop ID. | 1234567 |
shop_name | Shop display name; also used as title. | Example Shop |
username | Shop username. | example_shop |
description | Public shop description. | Phone accessories |
product_url | Shop page link on this row type. | https://shopee.sg/shop/1234567 |
item_count | Reported product count. | 80 |
follower_count | Reported follower count. | 500 |
rating_star | Aggregate shop rating. | 4.9 |
response_rate | Reported response rate. | 95 |
shop_location | Public shop location. | Singapore |
shop_categories | Available in-shop categories. | [] |
mall_categories | Optional market-level Mall categories. | [] |
How to scrape Shopee
- Open Shopee Scraper in Apify Console.
- Fill a target field and select its
market. - Set
limitto3for a small first run. - Click Start and wait for completion.
- Open the dataset and download rows, or read them through the API.
Empty input runs the form's example: phone case, SG, at most three suggestion rows. Normal event charges apply. With fetchMode: "auto", a product link or item ID selects products, a shop ID or username selects shop, and a keyword selects suggestions. When targets conflict, the priority is product link, item ID, shop ID, shop username, then keyword.
Suggestions
Enter one keyword or a keywords list. Each keyword receives its own limit allowance, subject to the run's combined budget.
Products
Enter itemUrl, or itemId with shopId. Use a Shopee link shaped like /product/<shopId>/<itemId> or -i.<shopId>.<itemId>, and select the matching market. Avoid mixing a link with separate IDs. To find related products from a keyword, explicitly select fetchMode: "products"; finding a suitable seed is not guaranteed.
Discover
Explicitly select fetchMode: "discover" and choose the market. No target is required. This is a homepage feed, not a keyword-filtered search.
Shop
Enter shopId or shopUsername. A shop input returns one profile, not all of that shop's products.
What to fill in
| Field | What to enter | Default |
|---|---|---|
fetchMode | auto, suggestions, products, discover or shop. | auto |
keyword | One search phrase. | Example: phone case |
keywords | List of search phrases; takes precedence over keyword. | Empty |
itemUrl | Shopee product link. | Empty |
itemId | Numeric product ID, paired with shopId. | Empty |
shopId | Numeric shop ID. | Empty |
shopUsername | Shop username, without a URL. | Empty |
market | One supported market code. | SG |
limit | Maximum rows per input, from 1 to 200. | 70; form prefill 3 |
includeFilterConfig | Suggestions: add filters to SEARCH_SIGNALS. | false |
includeCatTree | Suggestions: save CATEGORY_TREE. | false |
includeSearchFacet | Products: request breadcrumbs for up to three rows. Shop: request Mall categories. | false |
Suggestions:
{"keywords": ["phone case", "wireless earbuds"],"market": "SG","limit": 3}
Related products; replace the illustrative link with a real product:
{"fetchMode": "products","itemUrl": "https://shopee.sg/product/1234567/123456789","market": "SG","limit": 3}
Discover feed:
{"fetchMode": "discover","market": "MY","limit": 3}
Shop profile; replace the illustrative shop ID:
{"shopId": "1234567","market": "SG","limit": 1}
maxItems and maxResults are aliases for limit. Unknown fields alone do not fail the run: close misspellings are corrected and other unknown fields are ignored with a note. The resulting input must still be valid.
Input errors stop collection before any row is charged, with messages such as INVALID_INPUT: shopId — fill shopId together with itemId, or give itemUrl instead. The start fee is separate. Runs reaching input validation write INPUT_REPORT in the default key-value store, showing inferred, filled, corrected and ignored fields.
Output example
Illustrative suggestion row:
{"rowType": "suggestion","id": "phone case clear","title": "phone case clear","query": "phone case clear","record_type": "search_suggestion","market": "SG","keyword": "phone case","rank": 1,"item_id": "123456789","shop_id": "1234567","product_url": "https://shopee.sg/product/1234567/123456789","price": "","sold_text": "","rating_text": "","suggestion_item_ids": ["123456789"],"suggestion_shop_ids": ["1234567"],"captured_at": "2026-10-24T08:00:00+00:00","source": "suggestion_api","provider": "suggestion_api"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. RUN_SUMMARY holds the outcome and row count. Suggestions also write SEARCH_SIGNALS with keyword hints and optional filters. Other modes write PRODUCT_SIGNALS, DISCOVER_SIGNALS or SHOP_SIGNALS. A requested category tree is stored separately as CATEGORY_TREE, not as product rows.
Why use this Shopee scraper?
- Pay per delivered row. Row charges follow dataset output, with a separate start fee.
- Keep row types distinct. Suggestions do not masquerade as zero-price products.
- Inspect input decisions.
INPUT_REPORTexplains how fields were interpreted. - Process several keywords. Use one
keywordslist instead of creating separate runs. - No proxy setup. You do not need to set up proxies.
Rows already written to the dataset remain available. Do not assume that stopping a run preserves everything collected: this Actor writes its rows after processing the inputs, so an interruption before that write can leave no output.
How much does it cost to scrape Shopee?
The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of allocated memory, with a minimum of one event. At the default 1024 MB, the start charge is $0.005. Platform usage is included in these prices.
| Apify plan | Start at 1024 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
limitapplies to each input, not the whole run. With a supplied target and no limit, it defaults to 70; the maximum accepted value is 200.- Free Apify plan users are capped at 200 rows per run and 10 runs of this Actor.
- Set Maximum cost per run (
maxTotalChargeUsdin the API) to bound the combined run charge. An insufficient budget can reduce row delivery or stop collection. - Requested counts are ceilings, not guarantees. Fewer available rows mean fewer row charges.
Example: three keywords delivering 50 rows each produce 150 rows. On the Free plan at 1024 MB, the charge is 150 × $0.003 + $0.005 = $0.455.
What happens when the run timeout is too short
Some Shopee collections, such as a long keywords list or a large limit, can take longer than the run timeout you chose. In that case the run does not fail. It ends early with the status message "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." and shows as ABORTED for a while.
When the results are ready, the same run starts again by itself, reports "Resumed: delivering N rows.", writes the rows to the same dataset and finishes as SUCCEEDED. Rows that were already delivered are skipped, so no row is delivered or charged twice. You do not need to start another run.
- This can happen at most 3 times per run. To avoid it, keep the default timeout of 3600 seconds.
- The synchronous API endpoints (
run-sync,run-sync-get-dataset-items) wait at most 300 seconds and can return an empty dataset while the run is paused. For larger jobs, start the run asynchronously and read the dataset after the run reaches SUCCEEDED, or use a webhook on the "succeeded" event.
Use with AI agents and the API
Apify MCP server (Claude, ChatGPT, Cursor, VS Code)
Add this Actor to a client that supports remote MCP servers:
https://mcp.apify.com?tools=lentic_clockss/shopee-search-scraper
Sign in with Apify using OAuth when prompted, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; read rows with get-dataset-items.
For clients without remote support, run npx @apify/actors-mcp-server --tools lentic_clockss/shopee-search-scraper with APIFY_TOKEN set.
Example prompt: "Collect three Shopee search suggestions for phone case in Singapore and return the suggested text and linked product URLs."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/shopee-search-scraper").call(run_input={"keyword": "phone case", "market": "SG", "limit": 3})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/shopee-search-scraper').call({keyword: 'phone case', market: 'SG', limit: 3});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Or send POST https://api.apify.com/v2/acts/lentic_clockss~shopee-search-scraper/runs with your input as JSON and an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use the Integrations tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or a webhook. Use Apify Schedules for repeated runs.
FAQ
Is it legal to scrape Shopee?
Collect only data you are entitled to use. Public availability does not remove your responsibility for Shopee's terms and applicable data-protection law. Processing personal data requires a lawful basis; obtain legal advice for your intended use.
Why did my run end as ABORTED?
Check the run's status message and log to establish why it stopped. An aborted run is not proof of successful collection, and this Actor does not promise automatic restart. Check the dataset before starting a replacement run, which incurs its own start fee.
How many results can I get?
Request up to 200 rows per input. Actual counts depend on available suggestions, recommendations or feed products and the run's budget. A shop target returns one profile. Raising limit cannot create additional source data.
Why are some fields empty?
Shopee does not supply every field in every mode. Suggestions deliberately have no price or sales data. Missing values may appear as empty strings, empty arrays or null, rather than invented values.
Can this return every product matching a keyword?
No. Suggestions contain suggested queries, while products mode collects recommendations from a seed. Neither is a complete keyword-search catalog.
Why did my Free-plan run stop with a limit message?
This Actor's developer sets a 10-run allowance and a 200-row per-run cap for Free-plan users. The run status explains when that allowance is exhausted. Paid plans still have input limits and the cost cap you choose.
Can I collect reviews or private shop data?
No. The Actor returns rating aggregates when present, not individual review bodies, private messages or account-only information.
Is this an official Shopee API?
No. This is an independent Actor returning structured Shopee data through Apify.
Limitations
- Only the 11 listed market codes are accepted. A configured market does not guarantee every mode has data.
- Colombia and Chile can have empty recommendation pools or unavailable discover feeds.
- Product cards are not full product-detail records. Prices, stock, ratings and optional category data may be missing.
- Source-confirmed empty results can succeed with zero rows and
emptyReason: "NO_MATCH"; collection errors are not treated as proof of no matches. - Linked suggestion lists are capped at 50 entries each. Counts can be higher than the retained lists.
- Product breadcrumbs are requested for at most the first three rows when enabled.
Related scrapers
More e-commerce and marketplace scrapers from the same publisher:
- Walmart Product Scraper
- Temu Product Scraper
- Allegro Scraper
- TikTok Shop Product Scraper
- Amazon Search, Category & Best Sellers Scraper
- Coupang Product Scraper
- MercadoLibre Scraper
- Rakuten Japan Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.