Shopee Product Details Scraper
Pricing
Pay per event
Shopee Product Details Scraper
Extract public Shopee product details from URLs or IDs across eight country storefronts, including descriptions, media, attributes, variants, stock, seller context, and price, sales, or rating signals when exposed.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Extract structured public Shopee product details from product URLs or shop ID/item ID pairs. The Actor is designed for recurring catalog monitoring across Shopee Singapore, Malaysia, Indonesia, Thailand, Philippines, Vietnam, Brazil, and Mexico.
It returns one normalized product record per successful input, including product identity,
description, media, attributes, category path, seller context, availability, visible stock,
and variants. Price, sales, likes, and rating signals are included when Shopee exposes them
in the public product response; these fields can be null.
What does this Shopee scraper do?
The Actor accepts a focused list of products instead of crawling broad search results. For each supplied product it:
- identifies the country storefront, shop ID, and item ID;
- opens the product through a country-matched residential session;
- reads Shopee's server-rendered product state;
- validates that the returned item matches the requested item ID;
- normalizes product, variant, seller, stock, media, and conditional price signals;
- stores one JSON record in the default dataset.
This makes the output suitable for scheduled comparisons, spreadsheets, databases, BI tools, data pipelines, and catalog-quality checks.
Who is it for?
- Marketplace analysts tracking selected Shopee assortment and availability.
- Brands and distributors checking how public product content changes by storefront.
- Catalog teams collecting titles, descriptions, images, specifications, and variants.
- Pricing teams recording public price fields when Shopee makes them available.
- Developers needing a normalized Shopee API-style dataset from URLs or IDs.
- Sourcing teams comparing visible variant labels, stock, seller, and category context.
The Actor is not a broad keyword-search crawler and does not require a Shopee account.
Supported Shopee storefronts
| Country | Country code | Domain |
|---|---|---|
| Singapore | SG | shopee.sg |
| Malaysia | MY | shopee.com.my |
| Indonesia | ID | shopee.co.id |
| Thailand | TH | shopee.co.th |
| Philippines | PH | shopee.ph |
| Vietnam | VN | shopee.vn |
| Brazil | BR | shopee.com.br |
| Mexico | MX | shopee.com.mx |
Product URLs automatically select their storefront. ID-only inputs can include a country
prefix, for example id:196846900:11089699432.
What Shopee data can you extract?
| Field group | Examples | Availability |
|---|---|---|
| Identity | item ID, shop ID, title, canonical URL, country | Expected for successful products |
| Content | description, brand, category path, attributes | When present on the public page |
| Media | image URLs and video URLs | When exposed |
| Availability | normalized status and visible stock | When public product state exposes it |
| Variants | model ID, name, stock, availability, conditional price | When the product has models/SKUs |
| Seller | shop ID, public name, location, official/preferred flags, logo | When exposed |
| Commerce | currency, price range, previous price, discount | Conditional; can be null |
| Engagement | sold, rating, rating count, likes | Conditional; can be null |
| Audit | source URL and scrape timestamp | Included in every successful row |
A null value means the field was not exposed in the public response used for that run.
The Actor does not invent or infer hidden prices, ratings, or sales.
How to run the Actor
- Open the Actor input page.
- Add one or more public Shopee product URLs under Shopee product URLs.
- Optionally add
shopId:itemIdorcountry:shopId:itemIdentries. - Set Maximum products to bound the run.
- Leave retries at the default unless you need a stricter runtime bound.
- Click Start.
- Open the Shopee products dataset view when the run finishes.
- Export the rows as JSON, CSV, Excel, XML, or RSS, or fetch them through the API.
The prefilled Singapore product URL is a real supported input and is suitable for a first run.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array | example product | Shopee product URLs in -i.shopId.itemId or /product/shopId/itemId form |
productIds | string array | none | shopId:itemId or country:shopId:itemId entries |
countryCode | string | SG | Storefront for ID entries without a country prefix |
maxItems | integer | 20 | Maximum unique products, from 1 to 500 |
maxRetries | integer | 2 | Fresh residential retries after a transient or incomplete response, from 0 to 3 |
At least one URL or ID is required. Duplicate products are processed once. Unsupported domains and malformed IDs fail before any product is fetched.
Input examples
Extract one Singapore product by URL:
{"startUrls": [{ "url": "https://shopee.sg/product-i.131198971.6646421738" }],"maxItems": 1}
Extract one Shopee Indonesia product by IDs:
{"productIds": ["id:196846900:11089699432"],"maxItems": 1}
Use the default country for several ID pairs:
{"countryCode": "SG","productIds": ["131198971:6646421738","1120328630:29972859686"],"maxItems": 2}
Output example
The following shortened example reflects current output shape. Public values vary by item
and run, and conditional fields may be null.
{"itemId": "6646421738","shopId": "131198971","countryCode": "SG","canonicalUrl": "https://shopee.sg/product/131198971/6646421738","title": "Baseus WM01 TWS Bluetooth Earphones...","brand": "BASEUS","currency": "SGD","price": null,"availability": "available","stock": 100,"rating": null,"categoryPath": ["Mobile & Gadgets", "Audio", "Earphones"],"imageUrls": ["https://down-sg.img.susercontent.com/file/cn-11134207-7r98o-lt3ijo9b9xwde3"],"attributes": [{ "name": "Connection Type", "value": "Wireless" }],"variants": [{"id": "198131699565","name": "Pink","stock": 10,"price": null,"isAvailable": true}],"seller": {"id": "131198971","name": "Baseus Official Store","location": "SG","isOfficial": true},"scrapedAt": "2025-01-15T12:00:00.000Z"}
Understanding prices and null fields
Shopee can vary public product fields by country, session, item, and time. The Actor exports price fields only when they are present in the public server response. It does not log in, place items in a cart, choose a delivery address, or estimate a price.
For monitoring, compare price, priceMin, priceMax, and variant prices only when both
snapshots contain values. Keep the currency and country code with every comparison.
The same rule applies to rating, rating count, sold count, likes, seller name, and seller flags.
A missing field is represented as null, not zero.
How much does it cost to extract Shopee product details?
The Actor uses pay-per-event pricing:
- a $0.005 start event is charged once per valid run;
- the BRONZE tier is $0.016 per successfully delivered product;
- failed, duplicate, malformed, or undelivered products do not receive an item event charge.
Example BRONZE event charges:
| Delivered products | Start | Product events | Total event price |
|---|---|---|---|
| 1 | $0.005 | $0.016 | $0.021 |
| 10 | $0.005 | $0.160 | $0.165 |
| 100 | $0.005 | $1.600 | $1.605 |
Apify applies lower per-product rates at higher account tiers. Platform usage and any account limits are shown by Apify before and during the run. Check the Actor pricing tab for your active tier.
Catalog and stock monitoring workflow
A repeatable monitoring setup looks like this:
- Keep a stable list of product URLs or country-qualified IDs.
- Create an Apify Task using that input.
- Schedule the Task at the interval appropriate for your business.
- Save each dataset with
scrapedAt,itemId,countryCode, andcurrency. - Join snapshots on country, shop ID, item ID, and variant ID.
- Alert only on fields that were present in both compared snapshots.
- Treat a run failure as missing evidence, not as an out-of-stock event.
This avoids confusing a blocked or incomplete response with a real catalog change.
Export and integration options
You can use the default dataset with:
- JSON or JSONL ingestion pipelines;
- CSV and Excel exports for analysts;
- Google Sheets through Apify integrations;
- webhooks triggered when a run succeeds or fails;
- Make, Zapier, and custom automation;
- scheduled Tasks for recurring product snapshots;
- database loaders keyed by country, shop ID, item ID, and scrape time.
Arrays such as variants, attributes, and imageUrls remain nested in JSON. Flatten them
in your destination only when your reporting model requires it.
Use the Shopee scraper API with cURL
Start a run synchronously and receive dataset items:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~shopee-product-details-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://shopee.sg/product-i.131198971.6646421738"}],"maxItems": 1}'
For production systems, keep the token in an environment variable or secret manager. Do not commit it to source control.
Use the API with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/shopee-product-details-scraper').call({productIds: ['id:196846900:11089699432'],maxItems: 1,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
The asynchronous call method lets you inspect run status, usage, and dataset metadata.
Use the API with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/shopee-product-details-scraper').call(run_input={'startUrls': [{'url': 'https://shopee.sg/product-i.131198971.6646421738'}],'maxItems': 1,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items[0])
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/shopee-product-details-scraper"
Claude Desktop setup
Add the following server configuration in Claude Desktop. The same HTTP MCP server can also be used by editor clients.
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/shopee-product-details-scraper"}}}
Cursor setup: add the same apify server URL to Cursor's MCP settings.
VS Code setup: add the same HTTP server URL to the MCP configuration used by your VS Code AI extension.
Example prompts:
- "Extract this Shopee Singapore product and summarize its visible variants and stock."
- "Fetch these Shopee Indonesia product IDs and return a table of brands and categories."
- "Compare these two scheduled Shopee datasets and flag variant availability changes."
Reliability and failure behavior
Shopee applies traffic controls and can vary data by geography. The Actor therefore uses a residential proxy matched to the product storefront and a sticky identity for each attempt. It downloads only the initial product document and blocks scripts, images, fonts, video, analytics, and other unnecessary browser resources.
A product is saved only when the structured response contains the requested item ID.
A blocked, incomplete, mismatched, or malformed response is retried with a fresh identity up
to maxRetries. If every product fails, the Actor fails with a non-zero run status.
If some products succeed, those records are delivered and individual failures are logged.
Limits and troubleshooting
Why is a price or rating field null?
Shopee did not expose that field in the public product response used for the run. This is an expected source limitation. The Actor does not infer private or location-dependent values.
Why did a product fail?
Check that the URL is public, belongs to a supported country domain, and includes the shop ID and item ID. Deleted, region-restricted, adult-gated, or challenged products may not return a usable public record. A retry can recover transient blocks but cannot make private data public.
Can I enter a short link?
Use a final Shopee product URL containing -i.shopId.itemId or /product/shopId/itemId.
Short redirect links are not accepted because they do not identify the storefront and product
before the country-matched session is created.
Does it scrape reviews?
No. The output includes public aggregate rating signals when exposed, but it does not paginate individual review text. This keeps the product focused on product-detail and catalog snapshots.
Does it support search keywords or shop crawling?
No. Supply exact product URLs or IDs. Broad discovery, keyword search, and full-shop crawling are outside this Actor's scope.
Responsible use and legality
Use the Actor only for lawful purposes and public information you are permitted to process. Respect Shopee's terms, applicable database and copyright rights, privacy law, rate limits, and the rights of sellers and buyers. Do not use the output to profile individuals, evade access controls, or collect private account data.
You are responsible for choosing an appropriate schedule, retention period, and lawful basis. The Actor does not log in and does not request buyer-private or seller-private information.
Related automation-lab Actors
- Lazada Products, Sellers & Reviews Scraper for a related Southeast Asia marketplace workflow.
- Tokopedia Products, Sellers and Reviews Monitor for Indonesian marketplace assortment and seller monitoring.
- AliExpress Products & Seller Catalog Scraper for global marketplace catalog extraction.
Use separate Tasks for each marketplace so country, source, pricing, and failure semantics stay clear in downstream monitoring.
FAQ
Can I mix countries in one run? Yes. Each URL selects its own storefront. Country-qualified product IDs can also be mixed.
How are duplicate inputs handled? The Actor deduplicates by storefront, shop ID, and item ID before fetching or charging items.
Will a failed product be charged as an item? No. The item event is emitted only after a validated product record is ready for delivery.
Can I request more than 500 products? Split the input into bounded Tasks or batches. The per-run limit protects runtime, proxy cost, and predictable retries.
Are the image and video files downloaded? No. The Actor returns public media URLs and blocks media downloads during extraction.
Can I schedule it? Yes. Save the input as an Apify Task and use a schedule. Keep historical datasets if you need to compare product snapshots over time.