Shopee Reviews Scraper - 虾皮 Ratings, Photos & Seller Replies avatar

Shopee Reviews Scraper - 虾皮 Ratings, Photos & Seller Replies

Pricing

from $2.79 / 1,000 reviews

Go to Apify Store
Shopee Reviews Scraper - 虾皮 Ratings, Photos & Seller Replies

Shopee Reviews Scraper - 虾皮 Ratings, Photos & Seller Replies

Shopee reviews scraper for any Shopee shop in all 8 markets: star rating, text, buyer photos and video, the product and variation, three sub-scores and the seller's reply. Put the market in the URL: a shop id works on one market only. $3.79 per 1,000 on the free plan, down to $2.79 on paid plans.

Pricing

from $2.79 / 1,000 reviews

Rating

5.0

(2)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

2

Bookmarked

185

Total users

74

Monthly active users

4 hours ago

Last modified

Share

Shopee reviews scraper for a shop URL, one row per review: the star rating, the buyer's words, their photos and video, the product and the exact variation the review is about, three sub-scores and the seller's public reply.

Put the market in the URL, always. Shopee runs eight separate markets and a shop id exists on only one of them, so shopee.sg/shop/1103391312 and shopee.ph/shop/1103391312 are two different things. An id on the wrong market comes back empty rather than wrong.

Two more things worth knowing before the first run. Shopee serves at most about 1,000 reviews per star rating, so roughly 5,000 per shop however many it declares. And there is no free trial row: the input box arrives pointing at a real shop, and an API call that leaves the URLs out gets that same shop, so either way the run sweeps it.

Use the shop's number link where you can: a link by name fails when Shopee doesn't serve the shop's profile.

InputShopee shop URLs, with the market host on them. A number link (shopee.sg/shop/1103391312) still returns the reviews when Shopee doesn't serve the shop's profile, with the shop's name and rating totals left empty
OutputOne row per review: stars, text, photos and video links, product and variation, three sub-scores, the seller's reply. Plus one free summary row per shop, and a free notice row when a URL gives nothing
CeilingAbout 1,000 reviews per star rating, roughly 5,000 per shop
Account neededNone
Price$3.79 per 1,000 reviews on the free plan, down to $2.79 on the larger paid plans. The free plan's $5 a month covers about 1,300
Using an AI agent?
Actordami_studio/shopee-shop-reviews-scraper
Set one fieldstartUrls, labelled "Shopee shop or product URLs" in the Console
Cap the billmaxTotalChargeUsd on the run, for example 0.10: it never charges past that
MCP, one linkhttps://mcp.apify.com/?tools=fetch-actor-details,dami_studio/shopee-shop-reviews-scraper
How oftenWeekly, or daily for a shop you watch closely

🌏 中文说明

填Shopee(虾皮)店铺链接,每条评价一行:星级、买家评价、买家照片和视频、评价对应的商品和规格、三项分项评分,以及卖家的公开回复。每个店铺另有一行免费的汇总。

在startUrls里填带站点域名的店铺链接(比如shopee.sg),最好用带店铺编号的链接(shopee.sg/shop/1103391312这种),点Start就行,不需要账号。按评价条数收费,价格见上方表格。本工具不是Shopee的官方产品,与Shopee没有关联。

🔍 What Shopee Reviews Scraper does

Shopee pages its reviews one star rating at a time, so this sweeps each bucket separately and interleaves them. On a capped run that matters: you get a spread across all five ratings instead of a hundred five-star ratings and nothing else.

Every review names its product, its variation (model_name) and the shop it belongs to, so one sweep of a 165-item shop is already a per-product breakdown.

Each row carries a coverage_note saying how much of the shop you actually got: "Collected 100 of the shop's 78,646 declared ratings (0.13%)". If a star bucket hit Shopee's own ceiling, the note says that too. You never have to guess whether a run was complete.

📋 What data you get from each Shopee review

What you getField
The star rating and the written reviewrating_star, comment, has_comment
Product quality, seller service and delivery sub-scoresdetailed_rating
The product and the exact variation boughtproduct_name, model_name, itemid, product_url
Buyer photos, links to their clips, and how many of eachimages, videos, image_count, video_count
The seller's public reply and when it cameseller_reply, seller_reply_date
The buyer's handle, masked where Shopee masks itauthor_username, author_masked, anonymous
The market the review was written on, and whether that was overseasbuyer_region, buyer_overseas
The quick tags the buyer picked ("Value For Money")tags
Review date and a stable review idreview_date, ctime, cmtid
The shop and its market (the name and username only when Shopee serves the shop's profile)shop_name, shop_username, shopid, host, country
How much of the shop the run coveredcoverage_note
On the free shop row: when the shop opened and its seller was last active, cancellation rate, vacation, Preferred Plus and verified flags, and reviews collected per starshop_opened_at, seller_last_active_at, cancellation_rate, on_vacation, is_preferred_plus_seller, is_shopee_verified, reviews_collected_by_star

▶️ How to scrape Shopee shop reviews

  1. Open Shopee Reviews Scraper and click Try for free.
  2. Put your shop URLs into Shopee shop or product URLs, one per line, each with its market host.
  3. Set Max reviews per shop. Start at 100 and read the coverage note before going bigger.
  4. If you only want reviews people actually wrote, tick Only reviews that have written text.
  5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the API.

💰 How much does it cost to scrape Shopee reviews?

$3.79 per 1,000 reviews on the free plan. It falls with your Apify plan: $3.59 on Bronze, $3.09 on Silver, and $2.79 on Gold, Platinum and Diamond. On the free plan, the $5 Apify gives you each month covers about 1,300 reviews.

You pay per review row. The shop summary row is not a review and is not charged as one, and neither are the notice rows. Filtered-out reviews are not charged, and with Only reviews newer than set a repeat run pays only for what is new.

Three hundred reviews from one shop is a bit over a dollar on the free plan. If you set a maximum charge for a run, it stops at the last review that fits; a maximum too small for a single review ends the run with a free note saying so.

📥 What you give it

{
"startUrls": ["https://shopee.sg/shop/1103391312"],
"maxReviewsPerShop": 300,
"starRatings": ["5", "4", "3", "2", "1"],
"onlyWithText": true
}
FieldDefaultWhat it is
startUrlsa real example shopShop URLs (/shop/123456, or /shopusername when Shopee serves the shop's profile) or product URLs. The market host is part of the address, so keep it. Left out of an API call, the example shop is swept and billed.
maxReviewsPerShop1001 to 5,000 per shop. With a filter on, only reviews that pass it count, and the run reads on until it has this many. When very few match, it may stop sooner and leave a free note saying so. Anything above roughly 5,000 cannot be met, because Shopee stops serving.
starRatingsall fiveWhich buckets to sweep. Narrowing it makes a run faster. One-star only is the fastest useful run there is.
onlyWithTextfalseMany Shopee ratings are stars and nothing else. Turn this on to keep only reviews with a written comment.
onlyWithMediafalseKeep only reviews that came with photos or video.
reviewsSinceemptyOnly reviews newer than a date (2026-10-01) or a number of days or weeks (30 days, 2 weeks). Any other wording, or a future date, stops the run before it reads anything, rather than quietly giving you the whole history.
onlyLocalBuyersfalseKeep only reviews Shopee marks as written on this shop's own market. Shops that sell in several markets also show reviews from the others.
includeShopSummarytrueAdds one row per shop: average rating, good, normal and bad counts, followers, item count, response rate. Those come from the shop's profile, so they are empty when Shopee doesn't serve it, and the row still counts the reviews collected.
requestDelayMs250Milliseconds between requests, 0 to 5,000.

📤 What you get back

Seven reviews read on 24 October 2026, buyer names blurred.

Shopee reviews

A real review row from a run on 30 September 2026, with the seller's reply cut short:

{
"type": "review",
"cmtid": 110032430827,
"orderid": 242837650266379,
"country": "SG",
"host": "shopee.sg",
"shopid": 1103391312,
"shop_username": "baseus.sg",
"shop_name": "Baseus Official Store Singapore",
"itemid": 40400151062,
"product_name": "【CCC Certified】Baseus Qpow3 Power Bank 10000/20000mAh 22.5W Digital Display with 2 Built-in Cables Smaller size Updated",
"model_name": "Blue,CCC 20KmAh 22.5W",
"product_url": "https://shopee.sg/product/1103391312/40400151062",
"rating_star": 2,
"comment": "Charging speed:it charged fast and overall served its purpose\nCompact size:slightly bulky\n\nbut it has a black scratch at the back? which makes it look dirty",
"has_comment": true,
"detailed_rating": {
"product_quality": 2,
"seller_service": 5,
"delivery_service": 5
},
"author_username": "k*****3",
"author_masked": true,
"anonymous": true,
"review_date": "2026-09-16T10:34:23.000Z",
"ctime": 1789554863,
"images": ["https://down-sg.img.susercontent.com/file/sg-11134103-8258e-mt6l00golzpla7"],
"image_count": 1,
"video_count": 1,
"like_count": 0,
"seller_reply": "Dear Customer,\n\nWe are sorry that your experience did not meet your expectations. ...",
"seller_reply_date": "2026-09-16T10:37:24.000Z",
"collected_at": "2026-09-30T00:47:00.340Z",
"coverage_note": "Collected 100 of the shop's 78,646 declared ratings (0.13%)."
}
FieldHow to read it
cmtidShopee's review id. Stable, so use it as your dedupe key across runs.
detailed_ratingShopee's three sub-scores. The overall star often disagrees with one of them, as here: two stars, but five for the seller and the delivery.
comment, has_commentThe written text. has_comment is false on a stars-only rating, and the comment is then an empty string rather than null.
author_username, author_masked, anonymousShopee masks some buyer names itself (k*****3). The two flags tell you when what you are reading is masked.
images, videos, image_count, video_countBuyer photos as URLs. Each clip in videos has its url, a cover image and duration_seconds; these are links to Shopee's own copy. None of them shows in the default table view.
buyer_region, buyer_overseasThe market code the review was written on (SG), and true when that is not this shop's market. null when Shopee does not say.
tagsThe quick tags the buyer ticked. An empty list when they ticked none.
seller_reply, seller_reply_dateThe shop's public answer, on the same row as the review. null when there isn't one.
review_date, ctimeThe same moment as an ISO string and as a Unix timestamp.

🧾 Reading the output

Three kinds of row share one dataset, and type is what separates them. The table view is built for reviews, so a shop or notice row looks nearly blank in it. Open the row itself and everything is there.

RowHow to spot itCharged
A reviewtype is reviewyes
The shop summarytype is shop, and it carries charged: falseno
A noticetype is notice, with a reason, a message and charged: falseno

Past 500 reviews, rows arrive in batches during the run: the earlier batches' notes say "so far", and the shop row sits before the last batch. With a cutoff set, the note counts reviews newer than the date.

The notices are also kept in the run's key-value store under NOTICES_AND_RUN_STATUS, with a run_summary of swept and delivered counts per shop.

NoticeWhat it means
unrecognised_urlNot a Shopee shop or product address.
shop_not_found_on_hostThat id does not exist on that market. Check the host in the URL.
shop_id_rejectedShopee refused the id outright.
shop_lookup_unavailableThe shop lookup did not answer. Usually worth one re-run.
page_failedOne page of one star bucket did not come back, so that bucket stops early. The coverage note on the rows will show the shortfall.
NOT_SERVEDShopee stopped serving partway, and the run ends there rather than pretending it finished. A link by shop name gets it too when Shopee would not look the shop up: use the shop's number link. Until 16 October 2026 this code was called upstream_route_blocked.
NOT_FOUNDNo reviews came back and Shopee did not confirm the shop on that market. Check the host in the URL.
bad_inputOnly reviews newer than could not be read, so the run stopped before reading anything.
no_inputNothing usable in startUrls.
FILTER_STOPSo few of the reviews read match your filters that the run stopped reading that shop early, or did not start the shop links after it. What it found is kept, and more may match further down. Turn off a filter or narrow the star ratings. The run still ends as succeeded.
NO_RESULTSThe run read that shop and no review matches your filters, so none were charged. Turn off a filter or pick other star ratings. The run still ends as succeeded.
TIME_LIMITThe time limit stopped the run before any review was delivered. Give it a longer timeout. The run still ends as succeeded.
COST_LIMITThe maximum cost you set for the run does not cover a single review. Raise it and run again. The run still ends as succeeded.
UNEXPECTED_ERRORThe run stopped early on an unexpected error. The reviews before this row are kept. This one notice is in the dataset only.

💡 What people use it for

  • Reading the one and two-star buckets on your own shop, which is where the operational complaints are, without wading through thousands of five-star ratings.
  • Watching a competing shop's new reviews on a schedule: set Only reviews newer than to the gap between runs and keep cmtid as the dedupe key.
  • Looking at the photos buyers posted for a product, next to the seller's own gallery.
  • Splitting sentiment by variation. model_name often shows one colour or size getting all the complaints.
  • Checking whether a shop replies to bad reviews, and how quickly.

🚧 What it does not do

  • About 1,000 reviews per star rating. That is Shopee's wall, not a setting. A shop with 78,000 ratings still tops out near 5,000.
  • No per-product review feed. A product URL returns its share of the shop sweep, not that product's whole history.
  • The market host is required. An id from another market returns nothing, and the run tells you so in a notice rather than guessing.
  • Shop profiles only when Shopee serves them. Otherwise the shop's name and rating totals are empty.
  • No free trial row. Every run sweeps a real shop, the example one included.
  • No buyer contact details. Usernames as Shopee shows them, masked where Shopee masks them.
  • No product data. No price, stock or listing detail, only what the review carries.
  • No translation. A Thai review arrives in Thai.
  • Counts are a snapshot taken during the run, and Shopee's declared total moves between runs.
  • It is not an official Shopee tool. Dami's Studio is independent and is not affiliated with or endorsed by Shopee, or by any other company named on this page.

🧭 Which marketplace scraper do you need?

If you wantUse
Shopee shop reviews with photos, sub-scores and seller repliesThis one
TikTok Shop products, prices and units soldTikTok Shop Scraper
Amazon product reviews with images and the verified-purchase badgeAmazon Reviews Scraper
Buyer reviews on 1688 listings, with the SKU bought1688 Reviews Scraper
AliExpress products with prices, ratings and order countsAliExpress Products Scraper
Shopify stores with their emails and tech stackShopify Store Leads

❓ Questions people ask

Do I need a Shopee account to scrape reviews?

No. Nothing to paste.

Which Shopee markets work?

All eight, as long as the host is in the URL you paste.

Why did my run come back empty?

Nine times out of ten the shop id belongs to a different market. Look for a notice row with shop_not_found_on_host.

Can I get all 78,000 ratings on a big shop?

No. Shopee stops serving past roughly 1,000 per star rating, and the coverage note on every row tells you exactly where a run stopped.

Why are so many comments empty?

Shopee lets buyers rate without writing anything, and plenty do. Use onlyWithText if those are no use to you.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has code for Python, JavaScript and the command line.

# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("dami_studio/shopee-shop-reviews-scraper").call(
run_input={
"startUrls": ["https://shopee.sg/shop/1103391312"],
"maxReviewsPerShop": 100,
"onlyWithText": True,
},
max_total_charge_usd=0.50, # the most this run may spend
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("type") == "review":
print(row["rating_star"], row["review_date"], (row.get("comment") or "")[:80])

MCP clients like Claude and ChatGPT use https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/shopee-shop-reviews-scraper; coding assistants can load our skill file. All three bill your Apify account at the same price.

These are public pages. Reviews are personal data under GDPR and similar laws, so have a reason for holding them and be careful about republishing. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the shop URL and the run ID. Read the run's notice rows first, since they usually name the reason already.