# Naver Scraper API – 네이버 Blog, News, Place & Map Reviews, KiN (`deadc0dex/naver-scraper`) Actor

Naver API & scraper, no login: Naver blog search & posts, Naver news search, ranking, articles (sports too) & comments, Naver Place & Naver Map search, reviews, details, KiN Q\&A, web search SERP, autocomplete, DataLab keywords, webtoons, stocks (네이버 블로그·뉴스·플레이스·지도 리뷰). JSON. From $0.0005/row.

- **URL**: https://apify.com/deadc0dex/naver-scraper.md
- **Developed by:** [AsiaData](https://apify.com/deadc0dex) (community)
- **Categories:** Social media, News, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 search result rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Naver Scraper API – 네이버 Blog, News, Place & Map Reviews, KiN

**Naver API and scraper in one Actor (네이버 블로그·뉴스·플레이스·지식iN 데이터): public Naver data, no login, no cookies, no API key.** Naver blog search and full blog posts, Naver news search, most-viewed ranking, full articles and news comments, Naver Place (Naver Map) search, place details and visitor reviews, KiN (지식iN) Q\&A, Naver web search results, autocomplete suggestions, DataLab Shopping Insight keyword ranks, Naver Webtoon lists and Korean stock quotes.

- **Array inputs**: many keywords, URLs or place ids in one run; each input is isolated (one bad URL never fails the run).
- **Agent-ready output**: flat JSON, the same keys on every row (`null` when unknown), `lean` / `table` modes for fewer tokens, free `error` rows with a fix, a `summary` row last.
- **English in, Korean out**: common English terms are translated (`Gangnam restaurants` → `강남 맛집`); each row shows `queryUsed`.
- **Monitoring**: `deltaKey` returns only new reviews, comments, posts or articles since the last run.
- **Pay per row** from **$0.0005** (reviews, comments). Free dry run, free capabilities manifest, `maxCostUsd` stop.

Leave the input empty to get today's Naver News most-viewed ranking (about 1 s).

### What you get

| You want | Operation | One row = |
|---|---|---|
| Naver blog posts for a keyword | `blog_search` (+ `include: ["fullText"]`) | title, blog, date, snippet, URL (+ full text, images) |
| Naver news + comments | `news_search`, `news_ranking`, `news_articles`, `news_comments` | article, press, time, body; comment text, likes, time |
| Naver Place / Naver Map reviews | `place_search`, `place_details`, `place_reviews` | place, rating, review counts, hours, menu, booking link; review text, rating, visit date |
| KiN Q\&A (지식iN) | `kin_search`, `kin_questions` | question, answers, views |
| Naver search results (SERP) | `web_search`, `autocomplete` | rank, title, URL, domain, snippet; suggestion |
| Keyword demand | `shopping_keywords` | DataLab Shopping Insight rank, keyword, category |
| Webtoons, stocks | `webtoons`, `stock_quotes` | title, author, rating; price, change, volume, PER |

### Prices (pay per event)

| Event | Price | Rows |
|---|---|---|
| `search-result` | $0.002 | Naver blog, news, KiN, web search rows; blogger RSS posts |
| `post` | $0.003 | Full blog post, full news article, KiN question with answers |
| `place` | $0.001 | Naver Place row (search result or details) |
| `review` | $0.0005 | Naver Place visitor review or news comment |
| `keyword-row` | $0.002 | Autocomplete suggestion, Shopping Insight keyword |
| `trend` | $0.001 | News ranking, webtoon, stock quote row |
| Actor start | $0.00005 | per run |

Error, summary, plan (dry run), capabilities and insights rows are free.

**Research workflow in one call** (keyword → articles → full text → comments → insights): `{"operation":"news_search","keywords":["삼성전자"],"include":["fullText","comments","insights"],"maxItemsPerInput":10,"commentsPerItem":20,"maxCostUsd":0.5}` — 10 articles ($0.003 each) + 200 comments ($0.0005 each) ≈ $0.13. The same works for blogs (`blog_search` + `fullText`) and places (`place_search` + `reviewStats` + `reviews`).

### Naver blog search & posts

- `blog_search` – title, snippet, blog name/id, date, thumbnail, URL; 30 per page, paged automatically; `sortBy` relevance/date; `dateFrom`/`dateTo`. `include: ["fullText"]` opens each post.
- `blog_posts` – full post text, images, category, date and comment count (count only).
- `blog_user_posts` – a blogger's latest 50 public posts (title, summary, tags, category, date).

```json
{"operation":"blog_search","keywords":["제주 맛집"],"maxItemsPerInput":30,"sortBy":"date"}
{"operation":"blog_posts","urls":["https://blog.naver.com/jellaby__me/224424031119"]}
{"operation":"blog_user_posts","users":["jellaby__me"],"maxItemsPerInput":20}
```

### Naver news, ranking & comments

- `news_search` – title, press, time, snippet, URL, Naver article id; 10 per page; `sortBy` relevance/date; `dateFrom`/`dateTo`. Add `include: ["fullText","comments"]`.
- `news_ranking` – most-viewed articles (5 per press, ~80 presses; rank-1 of every press first). `sortBy: "comments"` = most-commented. `sections` filters by press. `dateFrom` = ranking of that day.
- `news_articles` – full article: press, reporter, section, published/updated time, summary, body, images, original URL, comment count. Sports (m.sports) and entertainment (m.entertain) articles work too (comment count/comments not available for those).
- `news_comments` – comment text, likes, dislikes, reply count, time, best flag, author as Naver masks it (`ab****`).

```json
{"operation":"news_search","keywords":["삼성전자"],"include":["fullText","comments","insights"],"maxItemsPerInput":10,"commentsPerItem":20}
{"operation":"news_ranking","maxItems":20,"outputMode":"lean"}
{"operation":"news_articles","urls":["https://n.news.naver.com/mnews/article/008/0005425552","https://m.sports.naver.com/article/003/0014250704"]}
{"operation":"news_comments","urls":["https://n.news.naver.com/mnews/article/022/0004166216"],"sortBy":"date","maxItemsPerInput":200}
```

### Naver Place search, details & reviews (Naver Map)

- `place_search` – place id, name, category, address, road address, phone, coordinates, rating, visitor and blog review counts, booking/Naver Pay flags, amenities; 50 per page. `include: ["details"]` adds business hours, menu with prices, payment methods, directions; `include: ["reviews"]` adds reviews.
- `place_details` – the same detail fields by place id or URL (m.place, map.naver.com, naver.me), plus blog review count, booking flag and Naver Booking URL.
- `place_reviews` – visitor reviews: rating, text, visit count, visit date, voted keywords, media count, owner reply. Reviewer names and ids are never returned.
- `include: ["reviewStats"]` (place_search, place_details; same place price) – Naver's own review summary on each place row: average rating, review totals, top voted keywords (e.g. 음식이 맛있어요 29,610 votes, `shareOfVoters` 0.97), most-mentioned menu items and review themes (맛, 서비스, 분위기 …).

```json
{"operation":"place_search","keywords":["강남역 맛집"],"maxItemsPerInput":20,"include":["details"]}
{"operation":"place_details","urls":["https://map.naver.com/p/entry/place/38562941"],"include":["reviewStats","reviews"],"reviewsPerPlace":20}
{"operation":"place_reviews","ids":["38562941"],"maxItemsPerInput":100,"deltaKey":"my-store"}
```

### Naver KiN Q\&A (지식iN)

- `kin_search` – question title, snippet, date, answer count, category, tags; `include: ["fullText"]` adds question text and answers.
- `kin_questions` – question text, views, date, tags and every answer (text, date, adopted flag).

```json
{"operation":"kin_search","keywords":["노트북 추천"],"maxItemsPerInput":20}
{"operation":"kin_questions","urls":["https://kin.naver.com/qna/detail.naver?dirId=10102&docId=495288897"]}
```

### Naver web search, autocomplete & Shopping Insight keywords

- `web_search` – Naver web results (SERP, the 웹 tab: sites, blogs, cafe and influencer cards): rank, title, URL, domain, site name, snippet; 20 per page, paged automatically up to the ~180 results Naver serves per keyword.
- `autocomplete` – up to 10 ranked Naver suggestions per keyword.
- `shopping_keywords` – DataLab Shopping Insight top keywords per category and period (rank 1–500), with `device`, `gender`, `ages`, `timeUnit` filters.

```json
{"operation":"web_search","keywords":["환율"],"maxItemsPerInput":45}
{"operation":"autocomplete","keywords":["아이폰","캠핑"]}
{"operation":"shopping_keywords","categories":["50000003"],"dateFrom":"2026-10-01","dateTo":"2026-10-07","maxItemsPerInput":100}
```

### Naver Webtoon & stock quotes

```json
{"operation":"webtoons","maxItems":50}
{"operation":"stock_quotes","ids":["005930"],"keywords":["카카오"]}
```

`stock_quotes` returns price, change, %, open/high/low, volume, trading value, market cap, PER, EPS, PBR, dividend yield, 52-week range and foreign ownership.

### For AI agents

- **Call shape**: `operation` + one array (`keywords`, `urls`, `ids`, `users`, `categories`). `auto` routes by input type. Nothing is required.
- **Free first steps**: `{"operation":"capabilities"}` returns every operation, field, include option, price and limit; `"dryRun": true` returns the plan and cost estimate without fetching.
- **Control**: `maxItems` (total billable rows, default 50), `maxItemsPerInput`, `fields` (projection), `include`, `outputMode` (`compact` · `full` · `lean` · `table`), `maxTextChars`, `maxCostUsd`, `deltaKey`.
- **Errors never fail silently**: each bad input gives a free row `{"type":"error","errorCode":"NOT_FOUND","message":"…","fix":"…"}`; codes: MISSING_INPUT, INVALID_INPUT, INVALID_URL, NOT_FOUND, NO_RESULTS, LOGIN_REQUIRED, UNSUPPORTED_OPERATION, BUDGET_REACHED, BLOCKED, UPSTREAM_ERROR. The run status message states rows, errors, cost and the first fix.
- **Summary row last**: rows by type, billed events, cost, stop reason, warnings, next steps, timings (also in key-value record `RUN_SUMMARY`), plus trust fields: `perInput` (requested vs returned per input, status `complete` · `source_exhausted_or_filtered` · `stopped` · `error`), `isPartial`, `pagesFetched`.
- **Partial rows are flagged**: when a requested enrichment (fullText, details, reviewStats) fails for a row, the row is kept with `isPartial: true` and `unavailableFields` and billed at the cheaper base event. `null` = unknown / not given by Naver; `0` = Naver reported zero.
- **Free insights row**: `include: ["insights"]` adds one unbilled `insights` row before the summary: top terms, top review keywords, date range, comment like ratio, average review rating and a lexicon-based sentiment count (labelled heuristic; not a model).
- **Fair maxItems**: with several inputs, every input gets at least one row of the `maxItems` budget before any input takes the rest.
- **Fast default**: an empty input returns 50 ranking rows in ~1–2 s; most single-input calls finish in 1–5 s, well inside a 30 s wait. Default memory 256 MB (benchmark runs peak at 10–40 MB).

Example lean row:

```json
{"type":"place","id":"38562941","name":"고수닭갈비","category":"닭갈비","roadAddress":"서울 강남구 강남대로96길 12","rating":4.82,"visitorReviewCount":33454,"blogReviewCount":2026}
```

### FAQ

**Do I need a Naver account, cookies or an API key?** No. Everything is public data read without login.

**What does it cost?** You pay per row. Examples per 1,000 rows: blog/news/KiN/web search rows $2, full posts or articles $3, places $1, reviews or comments $0.50, ranking/webtoon/stock rows $1. 100 place reviews = $0.05; 20 news articles with 20 comments each = $0.06 + $0.20. Set `maxCostUsd` to cap a run, or `dryRun: true` for a free estimate.

**How many results can I get?** Blog search ~1,000 per keyword, news search ~4,000, KiN ~1,000, web search ~180, Place search up to 300 places per keyword, up to 5,000 visitor reviews per place and 5,000 comments per article per run (maxItems max 5,000), Shopping Insight ranks 1–500.

**Does it work with English keywords?** Yes for common terms (305 curated phrases such as `Gangnam restaurants`, `Samsung Electronics`); each row shows the Korean `queryUsed`. Set `expandQuery: false` to search exactly what you typed.

**How do I monitor new reviews or comments?** Run on a schedule with the same `deltaKey`; later runs return and bill only rows not returned before (60 days memory).

**What are the limits?** See "Not included" below. Sports/entertainment article comments, Naver Cafe, blog comments and Naver Shopping are not covered. Review order is Naver's default (about newest first).

### Not included

- **Naver Cafe** posts and comments (Naver's Sep 2026 notice; most Cafe content is members-only).
- **Blog comments** (commenter privacy; Naver blocks guest access). Blog posts include the comment count.
- **Naver Shopping / SmartStore** products and reviews (blocked for automated access). Use `shopping_keywords` for popular product keywords.
- DataLab search-trend ratios, Naver Land, image/video search and AI briefing are planned.

Requests for these return an `UNSUPPORTED_OPERATION` row (free) with an alternative.

### Privacy

Personal data is minimised for Korea's PIPA: no reviewer or commenter ids, no profile links or avatars; place reviewer names are dropped; news comment authors appear only in the masked form Naver itself displays; KiN answerer names are dropped. Use the data in line with Naver's terms and the laws that apply to you.

Unofficial; not affiliated with or endorsed by NAVER Corp.

# Actor input Schema

## `operation` (type: `string`):

auto (default): blog/news/KiN/place URLs -> full item, place ids -> place_details, KRX codes -> stock_quotes, users -> blog_user_posts, keywords -> blog_search, nothing -> news_ranking. blog_search, news_search, kin_search, web_search, autocomplete, place_search take keywords. blog_posts, news_articles, news_comments, kin_questions take urls. place_details, place_reviews take ids/urls. shopping_keywords takes categories. webtoons, news_ranking need nothing. capabilities = free manifest.

## `keywords` (type: `array`):

Search terms for blog_search, news_search, kin_search, web_search, autocomplete, place_search (and company names for stock_quotes). Korean works best; common English terms are auto-translated (Gangnam restaurants -> 강남 맛집; see queryUsed). URLs placed here are treated as urls. Example: \["제주 맛집", "Samsung Electronics"].

## `urls` (type: `array`):

Naver links: blog.naver.com/<id>/<logNo>, n.news.naver.com/mnews/article/<oid>/<aid> (also m.sports / m.entertain articles), kin.naver.com/qna/detail.naver?…docId=…, m.place.naver.com/<type>/<id>, map.naver.com/p/entry/place/<id>, naver.me short links. Used by blog_posts, news_articles, news_comments, kin_questions, place_details, place_reviews. Cafe and Shopping links return an UNSUPPORTED_OPERATION row.

## `ids` (type: `array`):

Naver Place ids (digits in map.naver.com/p/entry/place/<id>) for place_details / place_reviews; 6-digit KRX codes for stock_quotes (005930 = Samsung Electronics); news ids as "oid/aid" (008/0005425552) for news_articles / news_comments.

## `users` (type: `array`):

Blog ids (the part after blog.naver.com/) or blog URLs for blog_user_posts: latest 50 public posts per blog via its RSS.

## `maxItems` (type: `integer`):

Stop after this many billable rows in total, nested comments/reviews included. Default 50, range 1-5000 (values outside are clamped). Error, summary, plan and capabilities rows are free and not counted.

## `maxItemsPerInput` (type: `integer`):

Cap per input (keyword, article, place, blogger, category). Default min(maxItems, 20), range 1-1000. Blog search pages 30 rows, news/KiN 10, places 50, reviews 50, comments 100 per request; the Actor pages automatically.

## `include` (type: `array`):

fullText: open each blog/news/KiN search row (billed as post). comments: comment rows per news article (commentsPerItem). reviews: visitor review rows per place (reviewsPerPlace). details: hours, menu, amenities on place_search rows (same price). reviewStats: Naver review summary on place rows (avg rating, top voted keywords, menu mentions; same price). insights: one free row: top terms, review keywords, heuristic sentiment. Example: \["fullText","comments","insights"].

## `fields` (type: `array`):

Return only these keys (plus type). Any field of the row type is allowed, e.g. \["title","url","publishedAt"]. Unknown names are reported in the summary warnings. Field lists per row type: operation capabilities.

## `outputMode` (type: `string`):

compact (default): envelope (type, operation, input, queryUsed, id, url, fetchedAt) + core fields, null when unknown. full: every field. lean: fewest tokens, no null/empty keys, text cut to maxTextChars (160). table: lean rows + one TSV table per row type in record LEAN_TABLE.

## `sortBy` (type: `string`):

relevance (default) or date (newest first) for blog_search, news_search, kin_search. news_comments: relevance = most liked, date = newest. news_ranking: comments = most-commented ranking instead of most-viewed.

## `dateFrom` (type: `string`):

Start date: 2026-10-01, ISO date-time, or relative 7d / 24h / 3m (KST). blog_search and news_search filter on Naver; reviews, comments, KiN and blogger posts are filtered locally; shopping_keywords period start; news_ranking = ranking of that day.

## `dateTo` (type: `string`):

End date, same formats as dateFrom. shopping_keywords default period = last 7 days ending yesterday.

## `businessType` (type: `string`):

place_search: keep only this business category; place_reviews: review type when the URL does not say it. restaurant, cafe, hospital, beauty, hairshop, accommodation, attraction, place (any). Empty = any.

## `categories` (type: `array`):

shopping_keywords: 8-digit Naver Shopping category ids or names. 50000000 fashion clothing, 50000001 accessories, 50000002 beauty, 50000003 digital/appliances, 50000004 furniture, 50000005 baby, 50000006 food, 50000007 sports, 50000008 living/health, 50000009 leisure, 50005542 books. Sub-category ids work too.

## `sections` (type: `array`):

news_ranking: keep only these presses (names like 연합뉴스, 조선일보 or 3-digit press ids like 001, 023). Empty = all ~80 presses (rank-1 articles of every press first).

## `maxCostUsd` (type: `number`):

Stop before the run's charges would exceed this amount, e.g. 0.10. Partial results stay valid; a BUDGET_REACHED row (free) says so. The platform max charge per run is respected too.

## `dryRun` (type: `boolean`):

Return free plan rows (tasks, estimated rows, cost, seconds) without fetching or billing anything.

## `deltaKey` (type: `string`):

Monitoring: rows already returned by earlier runs with the same deltaKey are skipped and not billed (ids kept 60 days in the named key-value store naver-scraper-delta in your account). E.g. "my-store-reviews" for new place reviews or comments.

## `expandQuery` (type: `boolean`):

Translate common English search terms to Korean with a curated dictionary (Gangnam restaurants -> 강남 맛집, Samsung Electronics -> 삼성전자). Unknown words stay as typed. Each row shows queryUsed.

## `commentsPerItem` (type: `integer`):

With include \["comments"]: comment rows per news article. Default 20, max 1000.

## `reviewsPerPlace` (type: `integer`):

With include \["reviews"]: visitor review rows per place. Default 20, max 1000.

## `maxTextChars` (type: `integer`):

Cut long text (post text, article body, review, question, answers) to this many characters. Default 0 = no cut (lean/table default 160). Cut rows get truncated: true.

## `includeAds` (type: `boolean`):

blog/news/web search: keep sponsored (power content) rows. Default false.

## `device` (type: `string`):

shopping_keywords filter: all (default), pc or mobile.

## `gender` (type: `string`):

shopping_keywords filter: all (default), f or m.

## `ages` (type: `array`):

shopping_keywords filter: any of 10, 20, 30, 40, 50, 60. Empty = all ages.

## `timeUnit` (type: `string`):

shopping_keywords aggregation: date (default), week or month.

## `dedupe` (type: `boolean`):

Drop duplicate rows within a run (same id). Default true.

## Actor input object example

```json
{
  "operation": "auto",
  "maxItems": 20,
  "outputMode": "compact",
  "sortBy": "relevance",
  "dryRun": false,
  "expandQuery": true,
  "commentsPerItem": 20,
  "reviewsPerPlace": 20,
  "includeAds": false,
  "timeUnit": "date",
  "dedupe": true
}
```

# Actor output Schema

## `results` (type: `string`):

All dataset rows; the last row is type summary.

## `places` (type: `string`):

Place rows.

## `reviews` (type: `string`):

Place review rows.

## `news` (type: `string`):

News rows.

## `runSummary` (type: `string`):

RUN_SUMMARY record: rowsByType, billedEvents, costUsd, stopReason, warnings, nextSteps.

## `leanTable` (type: `string`):

Only with outputMode table: one tab-separated table per row type.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("deadc0dex/naver-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxItems": 20 }

# Run the Actor and wait for it to finish
run = client.actor("deadc0dex/naver-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 20
}' |
apify call deadc0dex/naver-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deadc0dex/naver-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/x46lqxgGHu5t8QN67/builds/I2vo56lxVEchvghql/openapi.json
