Shopee Flash Sale & Price Drop Monitor
Pricing
from $1.40 / 1,000 results
Shopee Flash Sale & Price Drop Monitor
Track every Shopee Flash Sale across 11 country sites. Returns the session calendar plus each item's flash price, original price, saving, discount percent, remaining stock and units sold - as plain numbers, no currency symbols. Schedule it and diff on itemId. No login.
Pricing
from $1.40 / 1,000 results
Rating
0.0
(0)
Developer
Faisal Ahdan naufal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Track every Shopee Flash Sale across 11 country sites, with prices you can actually put in a spreadsheet.
Returns the session calendar — which sale is live now, which starts tonight — and every item inside a session with its flash price, original price, saving, discount percent, remaining stock and lifetime units sold.
No login, no cookies, no API key.
What you get
{"_country": "MY","sessionName": "[CFS] Shocking Sale 20 Sep Slot 5 (4pm - 8pm)","sessionIsOngoing": true,"name": "SKINTIFIC Cover Glow Perfect Pink Cushion Foundation","currency": "MYR","price": 25.84,"priceBeforeDiscount": 99.0,"savingAmount": 73.16,"discountPercent": 74.0,"flashSaleStock": 20,"stockRemainingPercent": 0.14,"historicalSold": 14506,"shopId": 1457622087,"itemId": 44421234179,"url": "https://shopee.com.my/product-i.1457622087.44421234179"}
Money is a number, never a string. Shopee quotes prices as integers scaled
by 100,000 (45955000000 means 459550). This Actor divides them out, so
price is 25.84 — no currency symbol, no thousands separator, nothing to
clean up before you sum a column. The currency lives in its own field.
Modes
| Mode | Requests | What you get |
|---|---|---|
monitor | 1 per country + 1 per session | Sessions and every item — the price-tracking mode |
sessions | 1 per country | Just the calendar. Use it to decide when to run monitor |
reference | 1–2 per country | Probes each site and reports what answered |
Using it as a price monitor
Schedule monitor and diff consecutive datasets on itemId:
pricemoving down on a competitor'sshopIdis a price cut.stockRemainingPercentfalling fast is a product selling out — the urgency signal a flash sale is built around.historicalSoldrising between runs is real sales velocity.
Pair it with Apify's webhooks to fire when a watched itemId drops below a
threshold.
Coverage, measured
Sessions verified live on 2026-09-20:
| Country | Site | Sessions |
|---|---|---|
| Indonesia | shopee.co.id | 3 |
| Singapore | shopee.sg | 4 |
| Malaysia | shopee.com.my | 5 |
| Philippines | shopee.ph | 4 |
| Vietnam | shopee.vn | 5 |
| Thailand | shopee.co.th | 4 |
| Brazil | shopee.com.br | 2 |
Taiwan, Mexico, Colombia and Chile are configured and accepted but were not verified in that run.
Items per session: 42–53 measured. itemsPerSession: 100 returns the whole
session in one request; lowering it saves rows, not requests.
What this Actor deliberately does not claim
Shopee gates most of its API at the load balancer. Measured the same day, plain HTTP, no browser:
| Endpoint | Result |
|---|---|
search/search_items | 403 |
item/get_ratings (reviews) | 403 |
shop/get_shop_seo | 403 |
| product page HTML | 200 / 848 KB with zero product data |
| product Q&A — every documented path | 404, no public API exists |
flash_sale/get_all_sessions | 200 ✅ |
flash_sale/flash_sale_get_items | 200 ✅ |
The refusal is identical every time (error 90309999,
sgw-errmsg: Status generated by albSet-Cookie is ever issued, so there is no
session warm-up that unlocks it. This Actor uses the two endpoints that sit
outside that gate, and when one of them is refused it emits a GATED record
naming the endpoint rather than an empty result. Those are very different
things and a scraper that conflates them is lying to you.
If GATED records appear, switch on proxyConfiguration with a residential
group — the gate is IP-sensitive.
Input example
{"mode": "monitor","countries": ["ID", "MY", "VN"],"ongoingOnly": true,"itemsPerSession": 100,"proxyConfiguration": { "useApifyProxy": true }}