Naver Stock Discussion Scraper (종목토론실) avatar

Naver Stock Discussion Scraper (종목토론실)

Pricing

from $1.00 / 1,000 scraped discussion posts

Go to Apify Store
Naver Stock Discussion Scraper (종목토론실)

Naver Stock Discussion Scraper (종목토론실)

Scrape Naver stock discussion boards (네이버 종목토론실) for Korean and US stocks: every post with title, text, time, author, holder badge, views, likes and dislikes. Retail investor sentiment data from Korea, by stock code, ticker or name.

Pricing

from $1.00 / 1,000 scraped discussion posts

Rating

0.0

(0)

Developer

Harish Garg

Harish Garg

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

3 days ago

Last modified

Categories

Features

Limited permissions

Share

Scrape the Naver stock discussion boards (종목토론실, also called 종목토론방) for Korean and foreign stocks. Get every post with its title, full text, time, author, verified-holder badge, views, likes and dislikes, newest first. Use it to measure Korean retail investor sentiment on KOSPI and KOSDAQ stocks, ETFs, and US stocks such as Tesla and NVIDIA.

The boards are on Naver Pay Securities (네이버페이 증권), the stock section of Naver Finance (네이버 증권). They are among the busiest stock forums in Korea, and popular stocks get new posts every few minutes.

  • No Naver account and no login.
  • No coding: run it in the browser, or call it from code or from an AI assistant.
  • Export to JSON, CSV, Excel, or HTML, or read the rows through the API.

What does the Naver Stock Discussion Scraper do?

You give it a list of stocks. For each stock, it opens the stock's discussion board and returns the posts, newest first. It stops at the post cap or at the oldest date that you set.

You can name a stock in four ways:

Input formExamples
Korean stock code005930 (Samsung Electronics), 000660 (SK hynix), 069500 (KODEX 200 ETF)
TickerTSLA, NVDA, AAPL, QQQ
Stock name삼성전자, 에코프로, 테슬라, 엔비디아
Naver stock page URLhttps://finance.naver.com/item/board.naver?code=005930, https://m.stock.naver.com/worldstock/stock/AAPL.O/total

It works for KOSPI and KOSDAQ stocks and ETFs, US stocks and ETFs on NASDAQ and NYSE, and other foreign stocks that have a Naver board, such as Hong Kong stocks.

Use cases

  • Retail sentiment analysis — feed post text into a sentiment model or an LLM, and track the mood of Korean individual investors (개미) for one stock or a whole watchlist.
  • Event studies — collect all posts around earnings, a product launch, or a price shock, and compare the volume and tone before and after.
  • Holder vs. non-holder opinion — Naver marks authors who own the stock (보유 인증). Filter on isHolderVerified to see what real shareholders say.
  • Korean investors on US stocks — follow what Korean retail investors (서학개미) write about Tesla, NVIDIA, Apple, or QQQ.
  • Attention and hype signals — count posts, views, and likes per day to find stocks with sudden retail interest.
  • Korean-language NLP datasets — build a corpus of informal Korean financial text for classification or model training.
  • Daily monitoring — start a run each day from your own code or workflow tool, with dateFrom set to the previous day, and collect only the new posts.

Input

FieldTypeDefaultDescription
stocksstring[]—Stocks to scrape, one per line: Korean codes, tickers, stock names, or Naver stock page URLs. Required.
dateFromstring—Return only posts written on or after this date, in Korea time. Format YYYY-MM-DD. Leave empty for no date limit.
maxResultsinteger100The most posts to return for each stock, newest first. 0 means all posts, up to 100,000 per stock in one run.

Example input:

{
"stocks": ["005930", "에코프로", "TSLA"],
"dateFrom": "2026-11-01",
"maxResults": 500
}

Output

You get one row for each post. This is a real post from the 삼성전자 (Samsung Electronics) board:

{
"type": "post",
"stockCode": "005930",
"stockName": "삼성전자",
"market": "KOSPI",
"postId": "431838499",
"url": "https://m.stock.naver.com/domestic/stock/005930/discussion/431838499",
"title": "이번에도 똑같다.",
"text": "맨날 똑같은데 맨날 이번에는 다르데\n영익최고점 2021차트랑 데칼코마니...\n22년 영역이 줄었냐고 그때도 안줄었어.",
"writtenAt": "2026-11-08T15:29:55+09:00",
"author": "GOODTIME",
"authorProfileId": "28660337077604813",
"isHolderVerified": true,
"views": 30,
"likes": 1,
"dislikes": 0,
"imageCount": 0,
"imageUrl": null,
"postType": "normal",
"isCleanbotPassed": true,
"scrapedAt": "2026-11-08T06:38:58.411Z"
}

Output fields

FieldDescription
typepost for a post row, notice for a row that explains a skipped or empty stock
stockCodeKorean stock code (005930) or Naver's code for a foreign stock (TSLA.O, 1810.HK)
stockNameStock name as Naver shows it, usually in Korean
marketExchange: KOSPI, KOSDAQ, NASDAQ, NYSE, HONG_KONG, and others
postId, urlPost ID and a link to the post on Naver
title, textPost title and full text, with line breaks kept
writtenAtTime the post was written, in Korea time (+09:00)
authorAuthor's nickname
authorProfileIdAuthor's Naver profile ID
isHolderVerifiedtrue when Naver verified that the author owns the stock (보유 인증)
viewsView count
likesLike count (공감)
dislikesDislike count (비공감)
imageCountNumber of images in the post
imageUrlLink to the post's main image, or null
postTypenormal for a regular user post, itemNewsPrice for Naver's automatic price-move alerts
isCleanbotPassedResult of Naver's CleanBot content check for the post
scrapedAtTime the row was collected (UTC)

Notice rows

When a stock gives no posts, the dataset gets one notice row that tells you why:

{
"type": "notice",
"code": "invalid_input",
"message": "No stock found for \"ZZZZNOTASTOCK999\". Use a Korean stock code (005930), a ticker (AAPL), a name (삼성전자) or a Naver stock URL.",
"input": "ZZZZNOTASTOCK999",
"scrapedAt": "2026-11-08T06:39:07.765Z"
}
codeMeaning
invalid_inputNaver does not know the stock, or the stock has no discussion board
no_resultsThe board has no posts, or no posts since dateFrom
source_errorNaver did not answer for this stock after several attempts

To keep only posts, filter on type = "post". The run's status message also gives the totals.

How to use the Naver Stock Discussion Scraper

In Apify Console

  1. Open the Actor and go to the Input tab.
  2. In Stocks, add one stock per line, for example 005930 and TSLA.
  3. Optional: set Oldest post date, for example 2026-11-01.
  4. Set Max posts per stock, for example 500.
  5. Click Start.
  6. When the run finishes, open the Output tab. Download the posts as JSON, CSV, Excel, or HTML.

Through the API (HTTP)

This call runs the Actor, waits for it to finish, and returns the posts. Replace <YOUR_APIFY_TOKEN> with your token from Apify Console → Settings → API & Integrations.

curl -X POST "https://api.apify.com/v2/acts/hgservices~naver-stock-discussion-scraper/run-sync-get-dataset-items?format=json" \
-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"stocks": ["005930", "TSLA"], "dateFrom": "2026-11-01", "maxResults": 200}'

A synchronous call waits for at most 5 minutes. For larger jobs, start the run with POST /v2/acts/hgservices~naver-stock-discussion-scraper/runs, then read the posts from GET /v2/datasets/{defaultDatasetId}/items when the run finishes.

With the JavaScript client

$npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('hgservices/naver-stock-discussion-scraper').call({
stocks: ['005930', 'TSLA'],
dateFrom: '2026-11-01',
maxResults: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const post of items.filter((row) => row.type === 'post')) {
console.log(post.writtenAt, post.stockName, post.title, post.likes);
}

With the Python client

$pip install apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("hgservices/naver-stock-discussion-scraper").call(
run_input={
"stocks": ["005930", "TSLA"],
"dateFrom": "2026-11-01",
"maxResults": 200,
}
)
for post in client.dataset(run.default_dataset_id).iterate_items():
if post["type"] == "post":
print(post["writtenAt"], post["stockName"], post["title"], post["likes"])

With AI assistants (Claude, ChatGPT) through the Apify MCP server

The Apify MCP server lets an AI assistant run this Actor in a chat. Use this server URL, which adds the Naver Stock Discussion Scraper as a tool:

https://mcp.apify.com?tools=hgservices/naver-stock-discussion-scraper

Claude (claude.ai and Claude Desktop)

  1. Open Settings → Connectors.
  2. Select Add custom connector.
  3. Enter a name, for example Apify, and paste the server URL above.
  4. Sign in to Apify when Claude asks.

Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com?tools=hgservices/naver-stock-discussion-scraper"

ChatGPT

  1. Turn on Developer mode in ChatGPT.
  2. Open Settings → Apps & Connectors, then select Create.
  3. Paste the server URL above in MCP Server URL, and select OAuth for authentication.
  4. Sign in to Apify, then add the connector to a new chat with the + button.

For other MCP clients, such as Cursor or VS Code, get a ready-made configuration at mcp.apify.com.

Then ask in plain language, for example:

Get the latest 300 posts from the 삼성전자 discussion board on Naver. Summarize whether retail investors are bullish or bearish, and list the three most-liked posts.

Compare what Korean investors wrote about TSLA and NVDA since November 1. Which stock has more posts from verified holders?

FAQ

Do I need a Naver account? No. The Actor reads only public board pages that anyone can open without a login.

How far back can I go? As far back as the board goes. Set maxResults to 0 and dateFrom to the oldest date that you need. One run returns at most 100,000 posts per stock. Busy stocks such as 삼성전자 can get thousands of posts a day, so use dateFrom to keep the run small.

Does it get comments under each post? No. It returns the posts that the board list shows. It does not open each post to collect its comments.

What if a stock name matches more than one stock? The Actor uses Naver's first search result for that name. For an exact match, use the stock code or ticker. For example, 토요타 currently matches the Toyota ADR (TM) on NYSE.

What if I enter the same stock twice? When two inputs name the same stock, for example 086520 and 에코프로, the Actor scrapes that stock once.

Why is text empty for some posts? Naver posts automatic price-move alerts on the boards, for example "5% 이상 상승했어요". These posts have a title but no text. Their postType is itemNewsPrice, so you can filter them out.

What time zone are the dates in? writtenAt and dateFrom use Korea time (KST, UTC+9). scrapedAt is in UTC.

Can I run it every day? Yes. dateFrom is a fixed date, so set it to the previous day each time you start a run through the API or a client. With an Apify schedule, the input stays the same on each run, so use maxResults to cap each run instead. You can send the results to Google Sheets, Slack, a webhook, or a database with Apify integrations.

Is it legal to scrape Naver stock discussions? The Actor collects only public posts that anyone can see without a login. Post content can include personal opinions and nicknames. Use the data in line with the laws of your country, data protection rules, and Naver's terms of service.