# Naver Blog Post Scraper (네이버 블로그) (`hgservices/naver-blog-post-scraper`) Actor

Scrape Naver Blog posts by URL or blogger ID — extract full body text and HTML, images, hashtags, category, date, likes, and comment counts. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/hgservices/naver-blog-post-scraper.md
- **Developed by:** [Harish Garg](https://apify.com/hgservices) (community)
- **Categories:** Social media, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 post scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Naver Blog Post Scraper (네이버 블로그)

**Scrape the full content of [Naver Blog](https://blog.naver.com) posts by URL** — extract the **full body text and HTML, images, hashtags, publish date, author, likes, and comment count** of any post. Paste one post link or thousands. Results are structured data you can download as JSON, CSV, Excel, or HTML, or pull straight from the Apify API.

Running on the Apify platform adds API access, scheduling, integrations (Google Drive, Make, Zapier, Slack), automatic proxy rotation, and run monitoring on top of the scraper.

### What does Naver Blog Post Scraper do?

Give it a Naver Blog post URL and it returns the **complete article**, not just a preview:

- The **full body text** (clean and ready to use) and the **raw body HTML**.
- Every **in-post image** URL.
- The post's **hashtags (해시태그)**, **publish date**, and **author**.
- Engagement: **likes (공감)** with a per-reaction breakdown (like, haha, impressive, …) and the **comment count**.

Each post you provide becomes exactly one record. To scrape a *whole blogger's* posts and profile instead, use the companion **Naver Blog Profile Scraper**.

### Why use Naver Blog Post Scraper?

- **SEO & marketing monitoring** — Naver Blog ranking drives Korean search marketing. Pull the full text of top-ranking posts to analyze what wins.
- **Competitor & brand tracking** — archive specific posts, detect sponsored content, and watch messaging over time.
- **Content research & repurposing** — collect body text and images for analysis, translation, or summarization.
- **LLM / RAG ingestion** — feed clean post text and HTML into your own AI pipelines.

### How to use Naver Blog Post Scraper

1. Open the Actor and go to the **Input** tab.
2. In **Post URLs**, paste one post URL per line. Example: `https://blog.naver.com/naverofficial/224342736839`.
3. Keep the default **Apify Proxy (Korean residential)** — Naver rate-limits non-Korean IPs.
4. Click **Start**. When the run finishes, open the **Output** tab and download your data.

To collect a blogger's post URLs first, run the **Naver Blog Profile Scraper**, then paste the URLs here.

### Input

| Field                   | Description                                                                                                            |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **Post URLs**           | One Naver Blog post URL per line. Also accepts the `m.` mobile form, `PostView.naver` links, or a bare `{id}/{logNo}`. |
| **Language**            | Accept-Language hint. Korean is strongly recommended.                                                                  |
| **Max concurrency**     | How many posts to fetch in parallel. Keep modest — Naver rate-limits.                                                  |
| **Proxy configuration** | Defaults to Apify Proxy (residential, country KR).                                                                     |

### Output

Each post becomes one dataset record. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
    "blogId": "naverofficial",
    "logNo": "224342736839",
    "url": "https://blog.naver.com/naverofficial/224342736839",
    "title": "네이버 프라이버시 챌린지에 참여하세요!",
    "author": { "blogId": "naverofficial", "blogName": "네이버 공식블로그", "nickName": "naverofficial" },
    "content": "AI 시대의 개인정보 보호를 함께 고민할 대학(원)생 여러분을 초대합니다. ...",
    "contentHtml": "<div>...</div>",
    "contentLength": 685,
    "images": [
        "https://mblogthumb-phinf.pstatic.net/.../01.png?type=w800",
        "https://mblogthumb-phinf.pstatic.net/.../02.png?type=w800"
    ],
    "imageCount": 5,
    "tags": ["개인정보", "개인정보보호", "네이버프라이버시"],
    "commentCount": 2,
    "sympathyCount": 62,
    "reactions": { "like": 60, "haha": 1, "impressive": 1 },
    "publishedAt": "2026-07-13T00:30:00.000Z",
    "thumbnailUrl": "https://blogthumb.pstatic.net/.../03.png",
    "contentStatus": "ok",
    "scrapedAt": "2026-07-29T12:00:00.000Z"
}
```

#### Data fields

| Field                              | Description                                            |
| ---------------------------------- | ------------------------------------------------------ |
| `blogId`, `logNo`                  | The blogger's ID and the post's numeric ID.            |
| `url`, `mobileUrl`                 | Desktop and mobile post URLs.                          |
| `title`                            | Post title.                                            |
| `author`                           | `{ blogId, blogName, nickName }` of the blogger.       |
| `content`                          | Full body text, cleaned.                               |
| `contentHtml`                      | Raw body HTML of the post.                             |
| `contentLength`                    | Character length of `content`.                         |
| `images`, `imageCount`             | In-post image URLs and their count.                    |
| `tags`                             | Post hashtags.                                         |
| `commentCount`                     | Number of comments on the post.                        |
| `sympathyCount`                    | Total likes (공감) — the sum of all reactions.         |
| `reactions`                        | Per-reaction counts, e.g. `{ "like": 60, "haha": 1 }`. |
| `publishedAt`, `publishedDateText` | Publish time (ISO 8601, and the original Korean text). |
| `thumbnailUrl`                     | Post thumbnail image.                                  |
| `contentStatus`                    | `ok`, `empty` (no body found), or `fetch_failed`.      |
| `scrapedAt`                        | When the post was scraped.                             |

### How much does it cost to scrape Naver Blog posts?

This Actor uses **pay-per-result** pricing: you are charged **per post** scraped. Each post URL you provide is one result, so cost is easy to predict. Apify's free tier lets you try it at no cost.

### Tips

- **Use a Korean residential proxy** (the default). Naver rate-limits datacenter and non-Korean IPs.
- **Keep concurrency modest.** Very high concurrency does not make runs faster and can trigger rate limits.
- **Find post URLs with the Naver Blog Profile Scraper**, then paste them here for full content.

### FAQ, disclaimers, and support

- **Does it need a login?** No. It scrapes public post content only.
- **Can I pass a blogger ID instead of a post URL?** No — this Actor scrapes individual posts. Use the **Naver Blog Profile Scraper** to list a blogger's posts, then bring the URLs here.
- **Does it return comment text?** No — it returns the comment *count*. Comment threads are a separate Actor.
- **Are private or deleted posts included?** No. Posts that are private, deleted, or blocked are marked `fetch_failed`.
- **Is scraping Naver Blog legal?** This Actor collects publicly available content. You are responsible for using the data in line with Naver's Terms of Service and applicable laws (including personal-data rules). Do not scrape private or sensitive data.

Found a bug or need a field this Actor doesn't return yet? Open an issue on the Actor's **Issues** tab. Custom Naver data solutions are available on request.

# Actor input Schema

## `posts` (type: `array`):

Naver Blog post URLs — one per line. Accepts `https://blog.naver.com/{id}/{logNo}`, the `m.` mobile form, a `PostView.naver?blogId=&logNo=` link, or a bare `{id}/{logNo}`. Each post becomes one record with its full content.

## `language` (type: `string`):

Accept-Language hint sent to Naver. Korean is strongly recommended — Naver serves Korean content regardless, and non-Korean hints can trigger stricter bot checks.

## `maxConcurrency` (type: `integer`):

Maximum posts fetched in parallel. Naver rate-limits aggressively and the Actor self-throttles, so keep this modest.

## `proxyConfiguration` (type: `object`):

Proxy used for every request. Naver rate-limits datacenter and non-Korean IPs, so Korean residential proxies are strongly recommended. Defaults to Apify Proxy (RESIDENTIAL, country KR).

## Actor input object example

```json
{
  "posts": [
    "https://blog.naver.com/naverofficial/224342736839",
    "naverofficial/224342736839"
  ],
  "language": "ko",
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "KR"
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "posts": [
        "https://blog.naver.com/naverofficial/224342736839"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/naver-blog-post-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 = { "posts": ["https://blog.naver.com/naverofficial/224342736839"] }

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

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

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

```

## CLI example

```bash
echo '{
  "posts": [
    "https://blog.naver.com/naverofficial/224342736839"
  ]
}' |
apify call hgservices/naver-blog-post-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hgservices/naver-blog-post-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/tRnsdCVBZnIJDlcOf/builds/UMQ8eBCgwVBhhdkwV/openapi.json
