Coupang Review Scraper — Ratings, Complaints & Sentiment
Pricing
from $5.20 / 1,000 product summary rows
Coupang Review Scraper — Ratings, Complaints & Sentiment
Scrape Coupang product reviews and get a computed verdict per product: rating distribution, top complaint keywords, per-option rating gaps and a one-line headline. Korean-native. Unofficial tool, not affiliated with Coupang.
Pricing
from $5.20 / 1,000 product summary rows
Rating
0.0
(0)
Developer
daehwan kim
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
1.7 hours
Issues response
11 days ago
Last modified
Categories
Share
Coupang Review Scraper (쿠팡 리뷰 분석) — Complaints & Ratings
🇰🇷 한국어 안내
쿠팡 상품 리뷰를 수집하고, 읽으면 바로 판단이 서는 "판정 요약"까지 계산해 드립니다. 상품 URL만 넣으세요.
- 리뷰 행 — 별점 · 작성일 · 구매 옵션 · 리뷰 제목/본문 · 사진 수 · 도움돼요 수
- 판정 요약 행 (상품당 1행, 경쟁 스크래퍼에 없는 레이어) — 평균 별점과 별점 분포, 1~2점 리뷰에서 반복되는 불만 키워드 top 5, 옵션별 평점 편차("빨간색만 별점이 낮다"를 잡아냅니다), 재구매 언급 수, 사진 리뷰 비율, 그리고 이 모든 걸 압축한 한 줄 판정(
headline).
예시 headline:
코멧 일회용 마스크 — 평점 4.3/5 (수집 120건, 1~2점 8%) · 주요 불만 키워드: 냄새, 고무줄, 얇음 · 옵션 간 평점 차 0.6점("대형 50매" 주의) · 재구매 언급 14건
누구에게 필요한가요
- 셀러·브랜드: 경쟁 상품 10개의 불만 키워드를 한 번에 — 상세페이지와 개선 포인트가 그대로 나옵니다
- 소싱·구매 담당: 옵션별 평점 편차로 불량 옵션을 사입 전에 걸러냅니다
- 마케터·리서처: 카테고리의 실제 소비자 언어(불만·재구매 표현)를 정형 데이터로
모니터 모드 — 매주 "바뀐 것만" 받기
monitorMode를 켜면 지난 실행과 비교해 새 리뷰 · 수정된 리뷰 · 사라진 리뷰만 돌려주고, 판정 요약 행에는 지난 실행 대비 평점 변동(ratingDelta)이 붙습니다. 이 액터를 주 1회 스케줄로 걸어두면 어젯밤 달린 1점 리뷰가 알아서 도착합니다. 첫 실행은 기준점(baseline)을 저장하고 전부 돌려줍니다.
수집 실패(차단·품절 등) 시 해당 상품은 과금되지 않고, 상황을 설명하는 안내 행이 남습니다. 잠시 후 다시 실행하면 대개 통과합니다.
비공식 도구입니다. 쿠팡(Coupang Corp.)과 무관하며, 로그인 없이 누구에게나 공개된 페이지만 읽습니다.
What it does
Put in Coupang product URLs (Korea's largest e-commerce platform) and get back one flat dataset with two row types:
reviewrows — rating, date, purchase option, review headline & text, photo count, helpful votes, reviewer's public nicknamesummaryrows — one computed verdict per product, a layer no other Coupang scraper ships: rating distribution, top complaint keywords mined from 1–2★ reviews, per-option rating gaps (catches "the red variant is the bad one"), repurchase mentions, photo-review ratio, and a one-lineheadlineverdict in Korean +headlineEnin English.
The verdict is computed by counting, not by an LLM — deterministic, reproducible, no hallucinated claims.
Unofficial tool. This Actor is not affiliated with, endorsed by, or sponsored by Coupang Corp. It collects only publicly accessible pages — no login, no private data.
What you get (row types)
summary — one verdict row per product
| Field | Description |
|---|---|
productId / productUrl / productTitle | The product (productTitle when Coupang exposes it, else null) |
displayName / displayNameSource | The name used in the headline. Priority: your productLabels entry (label) → official title (product-title) → the most-reviewed purchase option string (top-option, e.g. "유하미카쿠토 코로로 포도, 6개" — Coupang option strings carry the product name, but this is a display fallback, not the official title) → null (product-id) |
headline | One-line verdict in Korean — read it and you know whether to buy/source/worry |
headlineEn | The same verdict in English |
avgRating / ratingDistribution | Average and 1–5★ histogram of collected reviews |
lowStarRatio | Share of collected reviews at 1–2★ |
complaintKeywords | Top recurring words in 1–2★ reviews ([{word, mentions}]) |
optionRatings / optionRatingGap | Average rating per purchase option and the worst-vs-best gap |
repurchaseMentions | Reviews mentioning repurchase (재구매/재주문/또 구매 …) |
photoReviewRatio | Share of reviews with photos |
reviewsCollected / pagesCollected | Sample size behind the verdict |
skippedEmptyReviews | Number of reviews skipped due to having no reviewText AND no survey (only appears when skipEmptyReviews=true) |
requestedScope / appliedScope | The reviewScope you asked for, and the one actually applied (they differ when the URL carried no matching id) |
matchedItemId / matchedVendorItemId | The purchase option or seller listing this verdict is filtered to, when a narrow scope applied |
totalReviewCount | Reviews Coupang reports for the whole product — the denominator behind reviewsCollected |
scopeFilteredOut | Reviews read but not delivered because they belong to a different option or seller listing |
stopReason | Why collection stopped: limit, time-budget, end-of-list or blocked |
previousAvgRating / ratingDelta | Monitor mode only — the average on your previous run and how far it moved |
review — one row per review
| Field | Description |
|---|---|
productId / productUrl / productTitle | The product |
reviewId | Coupang's own id for this review, as a string. This is the column to join on when you compare this month's file with last month's — nickname and date are not unique, and Coupang re-ranks the "helpful" order between runs |
itemId / vendorItemId | The purchase option and the seller listing this review was written against, as strings |
rating | 1–5 stars |
reviewDate | YYYY-MM-DD |
option | Purchase option as displayed (size, color, count …) |
reviewHeadline / reviewText | Review title and body |
helpfulCount | "도움돼요" votes |
imageCount | Photos attached |
reviewer | Public display nickname only — exactly what Coupang shows any visitor |
survey | Coupang's structured survey answers when present (e.g. "맛 만족도: 만족") |
monitorRowId | Monitor mode only — the key this Actor's own run-to-run comparison uses |
changeType / changeDetail | Monitor mode only — new / changed / removed / unchanged, and what moved |
Status rows (noticeCode + message) explain anything that could not be collected and are never charged. Two of them concern scope: scope-param-missing (your URL carried no itemId / vendorItemId, so that product was read at product scope) and scope-no-match (the product was read fine, but none of its reviews belong to the option or seller listing you asked for — the notice carries totalReviewCount and scopeFilteredOut so you can see what is there).
Input
{"productUrls": ["https://www.coupang.com/vp/products/7108509622","6912345678"],"maxReviewsPerProduct": 100,"sortBy": "helpful"}
productUrls— up to 20 products per run; full URLs or bare numeric IDsproductLabels— optional display names matched toproductUrlsby position (e.g.["우리 제품", "경쟁사 A"]); when set, headlines use your label — recommended when comparing many productsmaxReviewsPerProduct— 1–500; the verdict is computed from what is collectedsortBy—helpful(Coupang's best-ranked first, default) orrecent(newest first — use for monitoring). Note: Coupang's own "newest" feed skews toward quick star-only ratings with little or no written text, since those take buyers seconds to submit —reviewTextwill often be empty onrecentruns even though the rating and (when present) the survey answers are still real. Usehelpfulwhen you need text-rich reviews to read.monitorMode— return only what changed since your previous run (defaultfalse); see Monitor mode belowmonitorKey— optional name for the watch, e.g.our-product-weekly; empty = derived from your inputincludeUnchanged— monitor mode only; also return reviews that have not changed (defaultfalse)skipEmptyReviews— when true, excludes reviews that have no reviewText AND no survey answers (star-only ratings) from the output and does not charge for them. Default: false. The maxReviewsPerProduct limit applies to exported reviews only; skipped reviews do not count toward it, so more pages are fetched until the limit or run budget is reached. The skipped count appears in the summary row asskippedEmptyReviews.reviewScope—product(default),itemorvendorItem; see Scope: one seller's reviews below. The default returns every review on the product page, exactly as before.
Scope: one seller's reviews
A Coupang product page pools the reviews of every purchase option and every seller listing under it. If you sell one of those listings, most of what the page shows was written about somebody else's.
Set reviewScope and paste the full link from your own listing — the one that ends in ?itemId=…&vendorItemId=…:
product— every review on the page. The default, and the behaviour this Actor has always had.item— only reviews of the purchase option in youritemId(one size, one colour, one pack count).vendorItem— only reviews of the seller listing in yourvendorItemId. This is the one to pick if you asked "my reviews, not the whole page".
Coupang's review endpoint serves the whole product and ignores those two parameters, so we read the product and filter here. Three consequences worth knowing:
- You pay for delivered rows only. Reviews dropped by the scope filter are never written to the dataset and are never charged. The summary row reports
scopeFilteredOutandtotalReviewCountso you can see the whole page behind your slice. - A narrow scope reads more pages to fill
maxReviewsPerProductwith matching reviews, so those runs take longer. - No match is an answer, not an error. If nothing on the page belongs to your listing, you get a free
scope-no-matchstatus row with the counts, and the run still finishes successfully.
Comparing two months
Join on reviewId. It is Coupang's own id and it does not move. Nicknames are masked and repeat, dates repeat, and the helpful ordering is re-ranked by Coupang between runs — matching on any of those will show you differences that are not there.
Monitor mode (weekly change alerts)
A product page is never finished: the review that decides your week is the 1★ one posted last night. Turn on Monitor mode and the Actor compares this run with your previous run and returns only what moved:
changeType | Meaning |
|---|---|
new | A review that was not there the last time you ran this |
changed | Same reviewer, date and option — but the star rating or the text was edited; changeDetail shows what it was before |
removed | It was in the list last time and is not now (deleted, or pulled from display) |
unchanged | Identical to last time — withheld by default, set includeUnchanged to receive it |
The verdict row is always delivered, and in monitor mode it carries previousAvgRating and ratingDelta, so the headline reads … · 지난 실행 대비 +0.25점 — the rating movement you actually schedule this for. Every run also returns one free change-report row, e.g. 12 new reviews, 1 gone, 3 changed since 2026-08-19.
Put it on a weekly schedule (3 steps)
- Run the Actor once with Monitor mode on and
sortBy: "recent"— the first run saves a baseline and returns everything it collected. - On the run's page click Actions ▸ Schedule Actor, and pick
Every week. - Add an integration on the schedule (Slack, email, webhook) so a new 1★ review reaches you without opening Apify.
Runs are matched by monitor key. Leave monitorKey empty and it is derived from your input, so one schedule keeps one history automatically; set it (e.g. our-product-weekly) to keep several independent watches. State is kept in a named key-value store holding only review identifiers and a 3★ 김**-style label — never review text.
Two deliberate safeguards: a product that could not be collected this run is left untouched (its reviews are never reported as deleted because of a block), and removed is only reported when the whole review list fitted inside maxReviewsPerProduct — otherwise a review falling out of the collection window would look like a deletion.
Use cases
- Competitor teardown — feed 10 competing products, read 10
headlineverdicts: their complaint keywords are your product page and roadmap - Sourcing QA — the per-option rating gap flags the defective variant before you buy inventory
- Weekly review monitoring — schedule with
sortBy: "recent"to catch new complaints as they appear - Korean consumer language mining — real phrasing Korean buyers use to complain and to praise, structured
Pricing
Pay per event: a small per-run start fee, then per delivered row — review and summary rows are billed at their own rates (see the Pricing tab). Status/notice rows are free.
Rows scale with what you ask for: raise maxReviewsPerProduct and you pay for the extra reviews, nothing else.
In Monitor mode the same review price applies to each delivered change row, removed rows included: a deleted 1★ review is exactly the answer you scheduled the run for. A week with no new reviews delivers only the verdict row per product, so a quiet week costs the run-start fee plus one summary row per product. The change-report row is a notice and is never charged.
Fair collection
- Only publicly accessible pages — no login, no CAPTCHA solving, no private data
- Small, query-scoped collection with polite pacing — this Actor answers per-product questions, it is not a bulk database copier (per-run caps: 20 products, 500 reviews each)
- Products that cannot be collected on a run are reported as status rows and not charged
- Personal data: rows contain only what Coupang publicly displays to any visitor (public nickname, public review text). Use downstream in compliance with applicable law (e.g. PIPA, GDPR); you are the controller of what you do with the data, including compliance with Coupang's terms as they apply to you.
- Optional
cookiesinput: if you paste a session cookie, use only your own Coupang account. It is never logged or stored, and is used only to make this run's requests as your own session.
Limitations
- Reviews are served by Coupang per product page; a product with reviews disabled or zero reviews returns a status row (not charged)
- Coupang's edge accepts very little non-Korean traffic; this Actor routes through Korean residential proxies automatically — a run can still occasionally be turned away, in which case the affected product is reported as a status row (not charged) and usually passes on retry
- The complaint-keyword miner reads Korean text frequency; it does not translate or interpret
- Product Q&A and seller responses are not collected in this version
- Invalid input ends the run as SUCCEEDED with a notice row
Works well with
- naver-blog-scraper — See what Korean bloggers say about the same product — reviews plus search demand.
- lighthouse-website-audit — Audit your own product page for speed and SEO once you know what buyers complain about.
Every run of this Actor also returns these suggestions in the nextSteps field of its summary row.
Leave a review
A short review on the Reviews tab, good or bad, helps other people find this Actor and tells us what to build next. Found a bug or need a feature? Open an issue on the Issues tab and we'll look into it.