Shopee Scraper avatar

Shopee Scraper

Pricing

Pay per usage

Go to Apify Store
Shopee Scraper

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

Benz

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

a month ago

Last modified

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 Dataset
run 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, or failed

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_SUMMARY
  • CATALOG_DISCOVERY_PRODUCTS
  • URL_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:

ModeInput valueUse when
Apify browser/proxylocal_playwrightBasic testing, smaller runs, less protected pages
Bright Data Browser APIbrowser_apiYou need rendered browser interaction through Bright Data
Bright Data Unlocker APIunlocker_apiYou 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 counts
  • RUN_SUMMARY: settings, retry counts, blocked counts, and catalog discovery summary
  • CATALOG_DISCOVERY_SUMMARY: available when full catalog discovery is enabled
  • API_PROBE_SUMMARY: available when API probe mode is enabled

For shops with hundreds of products:

  1. Run discovery-only with maxProducts set above the expected product count.
  2. Inspect URL_POOL_SUMMARY and the discovery dataset.
  3. Extract product details in batches of 150-200 products.
  4. Retry failed/blocked product rows with failedProductRetryPasses.
  5. 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-start event enabled.
  • Use the automatic apify-default-dataset-item event 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 install
npm test
npm start

To push to Apify:

$npx apify-cli push

Before publishing publicly:

  1. Run one product URL with export off.
  2. Run a 5-product shop test.
  3. Run discovery-only for a larger shop.
  4. Check Dataset views and key-value summaries.
  5. Configure monetization only after measuring real cost per 1,000 products.