Shopee Scraper
Pricing
Pay per usage
Shopee Scraper
Shopee product and shop catalog scraper. Captures product JSON, ordered gallery images, variants, attributes, prices, sales signals, and seller metadata.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Benz
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
0
Monthly active users
a month ago
Last modified
Categories
Share
Extract Shopee product and shop catalog data into an Apify Dataset.
This Actor is designed for Shopee product research, catalog exports, price monitoring, and media collection workflows. It captures product metadata, ordered gallery images, description images, variants, prices, stock/sales signals, ratings, and canonical product URLs.
The public Actor writes only to the Apify stack:
Shopee -> normalized product records -> Apify Datasetrun summaries/debug data -> Apify Key-value store
It does not write to external databases or external storage.
What You Get
Each product record includes:
- Shopee shop ID, item ID, canonical product URL, and source title
- Product description when available
- Price in the source currency, usually THB
- Stock, sold count, historical sold count, liked count, and rating when exposed by Shopee
- Ordered gallery image URLs
- Ordered description/long image URLs
- Product option tiers and SKU/model variants
- Extraction status:
ok,partial,blocked, orfailed
Best Use Cases
Use this Actor when you need:
- Product data from one or more Shopee product URLs
- A URL pool from a Shopee shop catalog
- Bulk product metadata from a seller shop
- Ordered product image URLs for content, ads, ecommerce imports, or design reference
- A clean JSON/CSV/XLSX export from Apify Dataset
Input Modes
1. Product URL Mode
Use this when you already know the products you want.
{"productUrls": ["https://shopee.co.th/product/SHOP_ID/ITEM_ID"],"maxProducts": 10}
This is the safest and cheapest mode because it skips shop discovery.
2. Shop Discovery Mode
Use this when you want products from a shop page.
{"shopUrl": "https://shopee.co.th/example-shop","maxProducts": 50,"shopScrollSteps": 20}
This mode opens the shop page, scrolls, discovers product URLs, and extracts product pages.
3. Full Shop Catalog Discovery
Use this when you want broader catalog coverage from a shop.
{"shopUrl": "https://shopee.co.th/example-shop","shopId": "123456789","shopUsername": "example-shop","fullShopCatalog": true,"maxProducts": 500,"catalogSorts": ["ctime", "sales", "pop", "relevancy"],"catalogMaxOffsetsPerGroup": 8}
The Actor resolves the shop, calls listing/search endpoints, rotates sort modes and offsets, dedupes product IDs, and then extracts product detail pages.
4. Discovery-only URL Pool
Use this before a large run to inspect how many product URLs can be found.
{"shopUrl": "https://shopee.co.th/example-shop","shopId": "123456789","shopUsername": "example-shop","fullShopCatalog": true,"catalogDiscoveryOnly": true,"maxProducts": 500}
The dataset will contain shopee_catalog_discovery_v1 rows instead of product-detail rows. The key-value store will include:
CATALOG_DISCOVERY_SUMMARYCATALOG_DISCOVERY_PRODUCTSURL_POOL_SUMMARY
For large shops, run discovery-only first, then extract product details in batches.
Bright Data Support
Shopee can be strict with automated traffic. The Actor supports three provider modes:
| Mode | Input value | Use when |
|---|---|---|
| Apify browser/proxy | local_playwright | Basic testing, smaller runs, less protected pages |
| Bright Data Browser API | browser_api | You need rendered browser interaction through Bright Data |
| Bright Data Unlocker API | unlocker_api | You want direct HTML/API extraction through Bright Data |
For Shopee catalog extraction, unlocker_api is usually the first mode to test because it avoids running a heavy browser for every page.
Example:
{"shopUrl": "https://shopee.co.th/example-shop","shopId": "123456789","shopUsername": "example-shop","brightDataProvider": "unlocker_api","brightDataUnlockerApiKey": "YOUR_BRIGHT_DATA_API_KEY","brightDataUnlockerZone": "YOUR_UNLOCKER_ZONE","fullShopCatalog": true,"maxProducts": 50}
Credential fields are marked as secret inputs in Apify, so saved task values are encrypted and only decrypted inside the Actor run.
Output
Results are stored in the run default Dataset. The Output tab includes product and image views.
Example product record:
{"output_version": "shopee_product_v1","extraction_status": "ok","source_platform": "shopee","source_shop_id": "123456789","source_shop_username": "example-shop","source_item_id": "987654321","source_url": "https://shopee.co.th/product/123456789/987654321","source_title": "Sample dress","source_currency": "THB","source_price_major": 1290,"primary_image_url": "https://down-th.img.susercontent.com/file/example","image_count": 8,"image_urls": ["https://down-th.img.susercontent.com/file/example"],"image_manifest": [{"order": 1,"role": "gallery","source_image_id": "example","source_url": "https://down-th.img.susercontent.com/file/example"}]}
Run summaries are stored in the key-value store:
PRODUCT_CATALOG_SUMMARY: product counts, status counts, and image countsRUN_SUMMARY: settings, retry counts, blocked counts, and catalog discovery summaryCATALOG_DISCOVERY_SUMMARY: available when full catalog discovery is enabledAPI_PROBE_SUMMARY: available when API probe mode is enabled
Recommended Large-shop Workflow
For shops with hundreds of products:
- Run discovery-only with
maxProductsset above the expected product count. - Inspect
URL_POOL_SUMMARYand the discovery dataset. - Extract product details in batches of 150-200 products.
- Retry failed/blocked product rows with
failedProductRetryPasses. - Export the final Apify Dataset as JSON, CSV, XLSX, or through the Dataset API.
This is cheaper and easier to retry than crawling a large shop blindly.
Pricing Notes For Actor Creators
If you monetize this Actor on Apify Store, prefer pay-per-event pricing over rental pricing. Apify is sunsetting the rental model in 2026, while pay-per-event supports per-result billing and AI/agentic discovery.
A simple pricing model:
- Keep the synthetic
apify-actor-startevent enabled. - Use the automatic
apify-default-dataset-itemevent for per-product pricing. - Start with a competitive per-product price, then adjust after real cost benchmarks.
Revenue is not guaranteed. Your profit depends on paid-user usage, event price, compute usage, proxy/API costs, and Apify's creator revenue share.
See MONETIZATION.md for the current PPE revenue formula and example revenue scenarios.
Troubleshooting
The run returns blocked
Try:
- Use
brightDataProvider: "unlocker_api" - Use a Bright Data Unlocker zone with the required target-domain permissions
- Lower
maxProducts - Run discovery-only first
- Increase
failedProductRetryPasses
The shop does not discover all products
Try:
- Provide
shopId - Increase
catalogMaxOffsetsPerGroup - Rotate more
catalogSorts - Add
catalogPriceSlices - Run discovery-only and inspect
CATALOG_DISCOVERY_SUMMARY
Product details are partial
Partial rows usually mean the page HTML had enough fallback data to identify the product, but a full structured product payload was not available. Keep requireProductPayload: true if you only want complete product rows.
Local Development
npm installnpm testnpm start
To push to Apify:
$npx apify-cli push
Before publishing publicly:
- Run one product URL with export off.
- Run a 5-product shop test.
- Run discovery-only for a larger shop.
- Check Dataset views and key-value summaries.
- Configure monetization only after measuring real cost per 1,000 products.