Naver Place Review Classifier — complaints & sponsors · $0.5/1k avatar

Naver Place Review Classifier — complaints & sponsors · $0.5/1k

Pricing

from $0.43 / 1,000 review classifications

Go to Apify Store
Naver Place Review Classifier — complaints & sponsors · $0.5/1k

Naver Place Review Classifier — complaints & sponsors · $0.5/1k

Naver Place review analysis (네이버 플레이스 리뷰): complaint types, sentiment, unanswered reviews; blog posts sponsored or not. Not for Google Maps (use leoworks/google-maps-review-classifier). Input placeUrls or datasetId. Cost: $0.5/1k judged + ~$1/1k collected by a separate scraper, billed to you.

Pricing

from $0.43 / 1,000 review classifications

Rating

0.0

(0)

Developer

Leoworks

Leoworks

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Part of LeoWorks review tools: Naver Place reviews → complaints and reply queue (this Actor) · Google Maps reviews (Google Maps Review Classifier) · Korean shopping and app reviews (Korean Review Classifier).

Analyze Naver Place reviews (네이버 플레이스 리뷰) — paste the place links of your restaurants or cafés. This Actor collects the newest visitor reviews of each place and labels every one with complaint types (taste, food condition, hygiene, service, wait, price and portion, atmosphere, facilities and parking), sentiment and an owner-reply flag. It tells you which reviews still have no owner reply, and, if you switch it on, labels the blog posts written about the place as sponsored or not. The output is a table, a reply-queue CSV and a per-place summary. Already have reviews? Pick the dataset of a Naver Place scraper, or paste review texts. Judging costs $0.50 per 1,000 reviews; the collection step adds about $1.00 per 1,000, so about $1.50 per 1,000 reviews all-in. No prompts, no LLM key.

Who collects the reviews: when you enter Places, the reviews are collected by a separate Actor, Naver Place Reviews + Blog scraper by huggable_quote — not by this Actor. Apify bills that Actor to your account at its own price (about $0.001 per review; it can change). This Actor adds $0.0005 per judged review. Collection needs a Korean residential proxy, which the Actor requests for you and Apify bills to your account at its proxy rate. Reviewer names and profile links are never copied into the output.

What can the Naver Place Review Classifier do?

  • Collects the reviews for you — paste a place link or its numeric place ID, or classify a dataset you already have
  • Complaint types for restaurants and cafés — 9 types: taste, food condition, hygiene and foreign objects, staff and service, waiting, price and portion, atmosphere and noise, facilities and parking, other — multi-label, each with a probability
  • Sentiment — positive / neutral / negative
  • Reply queue — reviews that need an owner reply and still have none, as a CSV
  • Serious-issue flag — food poisoning, injury, pests or foreign objects, discrimination, fraud accusations and legal threats
  • Sponsored blog posts (optional, beta) — each blog post about the place is labelled disclosed (the post itself states a sponsorship or fee), suspected (reads like an advertisement) or none, with a promotion score you can threshold yourself
  • Your own labels — up to 10 yes/no criteria in plain language (for example "mentions parking")

Use it to: answer unanswered complaints first · see why a branch loses stars (wait? taste? staff?) · check which blogs near your place read like paid promotion · compare branches · feed labelled reviews to a dashboard or an AI agent.

Works from Claude, Cursor or Claude Code — add it as a tool through the Apify MCP server and ask in plain language (see API, MCP and integrations below).

How to analyze Naver Place reviews

Option A — enter the places (the Actor collects the reviews):

  1. In Places, paste the place's own link (map.naver.com/p/entry/place/…, m.place.naver.com/… or naver.me/…) or just its numeric place ID — one per line, up to 20. The place ID is the number at the end of the Naver Map link of the place.
  2. Set Reviews per place (the newest reviews first; default 50, up to 200).
  3. Optional: switch on Also judge blog posts about each place, or add Custom labels.
  4. Click Start. The run log shows the estimated cost before anything is collected, and one place takes about a minute. If you set a maximum cost per run, the Actor lowers the reviews per place to stay within it.
  5. In Output, open Classified reviews, or download REPLY_QUEUE.csv and REPORT_PLACES.csv.

Search terms are best effort. The Search terms field (for example 성수 맛집) asks Naver's directory for places. Naver blocks searches intermittently: in our tests more than half of the searches found no place. Place links and IDs were reliable (27 of 27 places collected). Use links or IDs when you need a result.

Option B — you already have reviews:

  1. Run a Naver Place reviews scraper for the places you care about, or use any dataset with a review text field.
  2. Open this Actor, pick the dataset in Reviews dataset (or paste texts to try it). Fields such as reviewText, reviewRating, reviewDate and reviewReplyText are detected automatically.
  3. Click Start and open the same outputs.

Run it automatically after every scrape

In your Naver Place scraper (or its saved task), open Integrations → Add integration → Apify Actor, choose this Actor and set its input to:

{ "datasetId": "{{resource.defaultDatasetId}}" }

Pricing

Pay only for judged reviews — no subscription.

EventPriceWhen
review-judged$0.0005One Naver Place review judged: complaint types, sentiment and reply-needed flag for a visitor review (plus any custom labels), or the sponsorship label for a blog post. Items that fail or have no text are not charged.

How much does it cost to analyze Naver Place reviews?

That is $0.50 per 1,000 reviews for judging. When you enter Places, the collection is billed to you on top (about $0.001 per review, its price; the run log shows the live estimate): about $1.50 per 1,000 reviews all-in.

Cost examples (judging only)

ReviewsCost
100$0.05
1,000$0.50
10,000$5.00
100,000$50.00

With the free $5 monthly Apify credit you can judge about 10,000 reviews.

RunCollection (separate Actor)Judging (this Actor)Total
1 place, 50 reviewsabout $0.05$0.025about $0.075
1 place, 100 reviews + 10 blog postsabout $0.11$0.055about $0.165
10 places × 100 reviews + 10 blog posts eachabout $1.10$0.55about $1.65

Reviews without text are skipped and not charged. Reviews that fail after retries are reported with an error field and not charged. Blog posts, when switched on, are collected and judged at the same prices as reviews. Residential proxy traffic is billed by Apify at its proxy rate; text responses are small, check the Usage of your run.

Is it free to try?

Yes. The free $5 monthly Apify credit covers about 10,000 judged reviews, or about 3,300 when this Actor also collects them. The form defaults collect and judge the 50 newest reviews of one place for about $0.08.

Input and output examples

Output sample

Examples from our own test runs on public Naver Place reviews (October 2026). Review text is shortened, the reviewer name is not part of the output, and the star column is left out where the example does not show it.

reviewstarscomplaintssentimentneeds a reply
해산물이 상태가 안 좋아 푸석이고 비린내가 심해요. 실망 그 자체입니다.—food condition, tastenegativeyes
중앙시장 수산시장 횟집들이 점점 비싸지는듯요. 비추합니다.—pricenegativeyes
그냥 살짝 맵기만 하고…깊은 맛도 아닌 얼큰하지도 않고 싱거워서 넘 실망했어요—tastenegativeyes
직원들도 친절하고 고기류가 좋았네요 … 대게는 반절은 속이 다 비어있엇음—food condition, othernegativeyes
다 맛있어요. 잘 먹었습니다.5nonepositiveno

Most Naver visitor reviews are 5-star (87% of the 900 we collected for one test run), so the labels come from the text, not from the stars.

Blog post — each blog post about the place gets sponsorship and a sponsorPromotionalScore between 0 and 1:

{
"reviewType": "blog",
"placeName": "…",
"sponsorship": "suspected",
"sponsorPromotionalScore": 0.8,
"sponsorDisclosedProbability": 0.04
}

Input example

{
"placeUrls": ["https://map.naver.com/p/entry/place/1924779962", "11726468"],
"reviewsPerPlace": 100,
"includeBlogReviews": true,
"blogPerPlace": 10,
"customLabels": ["mentions parking"]
}

A place's own link (map.naver.com/p/entry/place/<id>, m.place.naver.com/<type>/<id>/…, naver.me/… short links) or the numeric <id>. A search page or a list page is not a place.

Output files and columns

  • Classified reviews (dataset): one row per review or blog post — reviewType, placeName, labels.complaint (types with probabilities), labels.sentiment, labels.needsReply, labels.alert, unanswered when the data has the owner reply field, sponsorship for blog posts, text (first 500 characters), reviewUrl.
  • REPLY_QUEUE.csv: reviews that need a reply and have none.
  • REPORT_PLACES.csv / REPORT: per place — complaint mix, sentiment, unanswered count and, with blog posts, the sponsorship mix.
  • SUMMARY: counts, cost and what was skipped.
  • A complaint that fits none of the 9 types but sits in a clearly negative or reply-worthy review is reported as other with inferred: true.

API, MCP and integrations

Works with

Call it from code

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('leoworks/naver-place-review-classifier').call({
placeUrls: ['1924779962'],
reviewsPerPlace: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((r) => r.labels?.unanswered));

Use with Claude, Cursor or Claude Code (MCP)

Add the Apify MCP server with this Actor as a tool (https://mcp.apify.com?tools=leoworks/naver-place-review-classifier) and ask, for example: "Judge the newest 50 Naver Place reviews of place 1924779962 and list the unanswered complaints."

Accuracy and limits

Accuracy

We measured the labels against a separate set of reviews collected after the labels were tuned (9 places, 149 visitor reviews and 60 blog posts). The correct answers were written by independent LLM labelers working from a written guide — not by humans. Intervals are Wilson 95%; n is the number of items behind the figure.

Headline: tuned to miss little. About 9 in 10 real complaints are caught; about 1 in 4 flagged reviews is not a real complaint, so a person should look at what is flagged.

WhatResult (Wilson 95% lower–upper)n
A complaint is present — recall27/30 = 90.0% (74.4–96.5%)30
A complaint is present — precision27/37 = 73.0% (57.0–84.6%)37
Sentiment (3 classes)143/149 = 96.0% (91.5–98.1%)149
Needs a reply — recall13/13 = 100% (77.2–100%)13
Needs a reply — precision13/19 = 68.4% (46.0–84.6%)19
Blog post suspected at 0.8 (default) — precision21/22 = 95.5% (78.2–99.2%)22
Blog post suspected at 0.8 (default) — recall21/33 = 63.6% (46.6–77.8%)33
Blog post suspected at 0.7 — precision / recall27/29 = 93.1% (78.0–98.1%) / 27/33 = 81.8% (65.6–91.4%)29 / 33
Serious-issue flagnot measurable: no such review in this set0
Blog post disclosednot measurable: only 3 posts state a sponsorship3

In 100 reviews that had no candidate label we found 0 complaints (0/100, upper bound 3.7%).

Complaint types — reference only. The per-type figures come from an earlier, larger set (300 visitor reviews, labeled with an earlier guide) and are not comparable with the table above. A type is marked reference only when its precision is below 70% or it has fewer than 20 flagged reviews.

TypePrecision (n flagged)Recall (n real)Status
Taste91.8% (45/49)81.8% (45/55)
Staff and service92.5% (37/40)88.1% (37/42)
Price and portion89.7% (26/29)89.7% (26/29)
Food condition87.5% (21/24)60.0% (21/35)
Waiting50.0% (9/18)81.8% (9/11)reference only
Atmosphere and noise64.3% (9/14)75.0% (9/12)reference only
Facilities and parking81.8% (9/11)90.0% (9/10)reference only (n < 20)
Hygiene and foreign objects5/65/5reference only (n < 10)
Other64.1% (25/39)75.8% (25/33)reference only

These types often occur together in one review, so they are less sharp than the yes/no "is there a complaint" figure. Whether a review enters the reply queue depends on the yes/no figure, not on the type.

Three cautions

  1. The correct answers were written by LLM labelers, not by humans, and the labelers marked about one review in five as a boundary case (28 of 149).
  2. The result depends on the places: the same Actor scored 93% precision on an earlier set of 18 other places (after we tuned it on that set) and 73% on the new set. Expect different results on your places.
  3. Most false flags are short positive reviews such as "너무 핫있고 음식도 이뻐요" that get a type attached.

Limits

  • Up to 20 places and 200 reviews per place per run when the Actor collects the reviews.
  • Visitor reviews and blog posts only; no photos, no menus, no business details.
  • Naver can rate-limit the collection step; the Actor then ends with a clear message and charges nothing for the failed step. Use Reviews dataset with data you already have.
  • Blog posts are judged from the title and the beginning of the post (the first part of the text, often about 750–1,300 characters). A sponsorship statement later in the post is not seen.
  • The labels are statistical. Do not use them alone to accuse a blogger or to take a legal step.

More Actors from LeoWorks

FAQ and support

How do I analyze Naver Place reviews?

Paste the place link or its numeric ID in Places and click Start, or pick the dataset of a Naver Place scraper in Reviews dataset.

Who collects the reviews and who is billed?

A separate Actor (Naver Place Reviews + Blog scraper) collects them and Apify bills it to your account. This Actor charges only for judged reviews and blog posts.

Does it collect reviewer names or profiles?

No. Reviewer names, profile links and user IDs are never copied into the output. A blog post keeps its own link (reviewUrl), which contains the address of that blog. Review text is truncated to 500 characters in the dataset.

Does it write the owner replies?

No. It tells you which reviews need one and which are still unanswered (when the data has the owner reply field).

How do I find a place ID?

Open the place on Naver Map; the number after /place/ in the address bar is the ID.

Which AI makes the judgments?

A Jev classifier model: each label is a yes/no question with a probability, so you can raise or lower the threshold with Complaint threshold (default 0.5) and Sponsored-post threshold (default 0.8).

The Actor reads public pages through a separate scraper. You are responsible for using the data in line with Naver's terms and applicable law, including Korean data protection law. Do not use it to identify or contact private individuals.

Disclaimer

Labels are statistical estimates and can be wrong; see Accuracy and limits. Sponsorship labels describe how a text reads, not what the author was paid. This Actor is not affiliated with Naver.

Reviews and support

Questions or a problem? Open an issue on the Actor's page. Tell us the run ID and what you expected; we reply there.

Changelog

See CHANGELOG.md.