# Naver Blog Rank Tracker (네이버 블로그 상위노출 순위) (`hgservices/naver-blog-rank-tracker`) Actor

Track Naver Blog keyword rankings (블로그 상위노출): see the rank of your blog or posts in the Naver blog tab and their position on the 통합검색 page, for many keywords at once. Schedule it for daily SEO rank checks.

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

## Pricing

from $5.00 / 1,000 checked blogs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Blog Rank Tracker (네이버 블로그 상위노출 순위)

**Track the Naver search rank of your blog or blog posts for your keywords** (블로그 상위노출). For each keyword, the tracker checks the **Naver blog tab (블로그 탭)** and the **통합검색 (integrated search) page**, and gives you the **rank of your posts** on both. Check many keywords and many blogs in one run, and schedule the tracker for daily Naver SEO rank checks.

Export the ranks as JSON, CSV, Excel, XML or HTML, or read them from the API. Use them in Claude, ChatGPT and other AI assistants.

No Naver account. No login. No coding needed.

> 네이버 블로그 상위노출 순위를 키워드별로 확인하세요. 블로그 탭 순위와 통합검색 노출 위치를 한 번에 조회하고, 여러 블로그와 키워드를 매일 자동으로 체크할 수 있습니다.

### What does Naver Blog Rank Tracker do?

Give the tracker your keywords and the blogs or posts to track. For each keyword and each blog or post, you get:

- **Blog tab rank** — the position of your best post in the Naver blog tab, and every other post of your blog that ranks there.
- **통합검색 position** — the position of your post on the main Naver search page, counted in result blocks (ads, place, clips, web pages, cafés and blog posts).
- **통합검색 blog rank** — the rank of your post among the blog posts on the main search page.
- **The ranking post** — the URL and title of the post that ranks, so you see which post wins the keyword.
- **Check depth** — how many blog tab posts were checked, so a "not found" result is clear.
- **Korean results** — the ranks are the ones that users in Korea see.
- **Many keywords and blogs in one run** — each keyword is searched once, and all your blogs and posts are checked against it.

### Use cases

- **블로그 상위노출 tracking** — See every day if your posts reach the top of Naver for your keywords.
- **SEO agency reporting** — Check many client blogs against many keywords in one run, and send the table to your clients.
- **Influencer and 체험단 campaign checks** — Confirm that the campaign posts rank for the agreed keywords.
- **Competitor tracking** — Track the blogs of your competitors on your keywords.
- **Keyword research** — Find the keywords where your blog already ranks, and the keywords where it does not.
- **AI-assisted SEO reports** — Ask Claude or ChatGPT to check your ranks and write the summary for you.

### Input

| Field      | Type     | Default | Description                                                                |
| ---------- | -------- | ------- | -------------------------------------------------------------------------- |
| `keywords` | string\[] | —       | The search keywords to check. Each keyword is checked separately. Required |
| `targets`  | string\[] | —       | The blogs or posts to track. Required                                      |

A target can be:

- **A blog ID**, for example `myblog123`, or **a blog URL**, for example `https://blog.naver.com/myblog123`. The tracker finds every post of that blog that ranks, also new posts.
- **A post URL**, for example `https://blog.naver.com/myblog123/224000000000`. The tracker finds only that post. Mobile URLs (`m.blog.naver.com`) also work.

#### Input examples

**One blog, one keyword**

```json
{
    "keywords": ["강남 맛집"],
    "targets": ["https://blog.naver.com/b2l1bpe"]
}
```

**Three keywords, a blog and a single post**

```json
{
    "keywords": ["강남 맛집", "강남역 맛집", "강남 회식"],
    "targets": ["myblog123", "https://blog.naver.com/otherblog/224424425341"]
}
```

### Output

You get one row for each keyword and each blog or post that you track. Example:

```json
{
    "keyword": "강남 맛집",
    "target": "https://blog.naver.com/b2l1bpe",
    "targetType": "blog",
    "blogId": "b2l1bpe",
    "logNo": null,
    "found": true,
    "blogTabRank": null,
    "blogTabPostUrl": null,
    "blogTabPostTitle": null,
    "integratedPosition": 7,
    "integratedBlogRank": 1,
    "integratedPostUrl": "https://blog.naver.com/b2l1bpe/224425048735",
    "integratedPostTitle": null,
    "blogTabMatches": [],
    "integratedMatches": [
        {
            "position": 7,
            "blogRank": 1,
            "url": "https://blog.naver.com/b2l1bpe/224425048735",
            "title": null
        }
    ],
    "blogTabPostsChecked": 63,
    "blogTabComplete": true,
    "integratedBlogPosts": 6,
    "integratedBlocks": 28,
    "checkedAt": "2026-10-20T05:51:08.911Z"
}
```

In Apify Console, the **Overview** table shows the keyword, the target, both ranks and the ranking posts side by side.

#### Output fields

| Field                                      | Description                                                                                               |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------- |
| `keyword`, `target`                        | The keyword that was checked, and the target as you entered it                                            |
| `targetType`, `blogId`, `logNo`            | `blog` (all the posts of the blog) or `post` (one post), and its IDs                                      |
| `found`                                    | `true` when the target ranks in the blog tab or on the 통합검색 page                                      |
| `blogTabRank`                              | The rank of the best post in the blog tab (1 = top). `null` = not in the posts checked                    |
| `blogTabPostUrl`, `blogTabPostTitle`       | The post with that rank                                                                                   |
| `integratedPosition`                       | The position of the best post on the 통합검색 page, counted in result blocks (ads, place, clips and more) |
| `integratedBlogRank`                       | The rank of that post among the blog posts on the 통합검색 page                                           |
| `integratedPostUrl`, `integratedPostTitle` | The post with that position. The title can be `null` when Naver shows the post without a headline         |
| `blogTabMatches`                           | Every post of the target in the blog tab: rank, URL, title and date                                       |
| `integratedMatches`                        | Every post of the target on the 통합검색 page: position, blog rank, URL and title                         |
| `blogTabPostsChecked`                      | How many blog tab posts were checked for the keyword                                                      |
| `blogTabComplete`                          | `true` when every blog tab page was read with no errors                                                   |
| `integratedBlogPosts`, `integratedBlocks`  | How many blog posts and result blocks the 통합검색 page had                                               |
| `checkedAt`                                | When the keyword was checked (UTC)                                                                        |

### How to use Naver Blog Rank Tracker

You can run the tracker in three ways: in Apify Console, from your own code with the Apify API, or from an AI assistant. All three give the same results.

#### 1. Track Naver blog ranks in Apify Console (no code)

1. Sign in to [Apify Console](https://console.apify.com/), or create an Apify account.
2. Open **Naver Blog Rank Tracker** from this page.
3. In **Keywords**, add one keyword per line, for example `강남 맛집`.
4. In **Blogs or posts to track**, add one blog ID, blog URL or post URL per line, for example `https://blog.naver.com/b2l1bpe`.
5. Click **Start**.
6. Open the **Output** tab. View the ranks as a table, or download them as JSON, CSV, Excel, XML or HTML.
7. Optional: create a schedule in **Schedules** that runs the tracker every day, and follow the ranks over time.

#### 2. Check Naver blog ranks with the Apify API

Run the tracker and read the results from any programming language with the [Apify API](https://docs.apify.com/api/v2). Get your API token in Apify Console under **Settings → API & Integrations**, and replace `<YOUR_API_TOKEN>` in the examples below.

##### HTTP (cURL)

Run the tracker and get the ranks in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/hgservices~naver-blog-rank-tracker/run-sync-get-dataset-items?format=json" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{ "keywords": ["강남 맛집", "강남역 맛집"], "targets": ["https://blog.naver.com/b2l1bpe"] }'
```

Change `format=json` to `format=csv` or `format=xlsx` to get a spreadsheet.

A single call waits up to 5 minutes. For many keywords, start the run and read the results when it finishes:

```bash
## 1. Start the run. The response has data.id (the run ID) and data.defaultDatasetId.
curl -X POST "https://api.apify.com/v2/acts/hgservices~naver-blog-rank-tracker/runs" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{ "keywords": ["강남 맛집", "강남역 맛집", "강남 회식"], "targets": ["myblog123"] }'

## 2. Check the run. When data.status is SUCCEEDED, the results are ready.
curl "https://api.apify.com/v2/actor-runs/<RUN_ID>" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>"

## 3. Get the results.
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=json" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>"
```

##### JavaScript / Node.js client

Install the client with `npm install apify-client`. This example prints both ranks for each keyword:

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('hgservices/naver-blog-rank-tracker').call({
    keywords: ['강남 맛집', '강남역 맛집', '강남 회식'],
    targets: ['myblog123', 'competitorblog'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const row of items) {
    console.log(
        row.keyword,
        row.target,
        `blog tab: ${row.blogTabRank ?? '-'}`,
        `통합검색: ${row.integratedPosition ?? '-'}`,
    );
}
```

##### Python client

Install the client with `pip install apify-client` (version 3.0 or later). This example lists the keywords where your blog is not in the top 10 of the blog tab:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("hgservices/naver-blog-rank-tracker").call(run_input={
    "keywords": ["강남 맛집", "강남역 맛집", "강남 회식", "신논현 맛집"],
    "targets": ["https://blog.naver.com/myblog123"],
})
if run is None:
    raise RuntimeError("The run was not found.")

for row in client.dataset(run.default_dataset_id).iterate_items():
    rank = row["blogTabRank"]
    if rank is None or rank > 10:
        print(f"{row['keyword']}: blog tab rank {rank or 'not found'}")
```

#### 3. Use Naver blog ranks in Claude, ChatGPT and other AI assistants (MCP)

The tracker works as a tool for AI assistants through the [Apify MCP server](https://mcp.apify.com/). Your assistant finds the tracker, reads its input options, runs it, and uses the ranks in its answer. On the first connection, you sign in to Apify in your browser. You do not need to copy an API token.

**Claude (claude.ai or Claude Desktop)** — Go to **Settings → Connectors**, and add a custom connector with the URL `https://mcp.apify.com`. Sign in to Apify when Claude asks.

**Claude Code** — Run this command:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=hgservices/naver-blog-rank-tracker"
```

**ChatGPT** — Turn on **Developer mode** in ChatGPT. Then go to **Settings → Apps & Connectors → Create**, and enter the MCP server URL `https://mcp.apify.com`. Select **OAuth** for authentication, and sign in to Apify. In a new chat, click **+**, then **More**, and select the Apify connector.

**Cursor, VS Code and other MCP clients** — Add this remote MCP server to the configuration of your client:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com?tools=hgservices/naver-blog-rank-tracker"
        }
    }
}
```

The `?tools=hgservices/naver-blog-rank-tracker` part gives the assistant only this tracker. Leave it out to let the assistant find and run any Actor in Apify Store.

Then ask in plain language:

> Use the Naver Blog Rank Tracker to check where blog.naver.com/myblog123 ranks for 강남 맛집, 강남역 맛집 and 강남 회식.

> Compare the Naver blog ranks of myblog123 and competitorblog for these 10 keywords, and make a table.

> For which of these keywords is my blog on the main Naver search page?

### Integrations and scheduling

Connect the tracker to the tools that you already use with [Apify integrations](https://apify.com/integrations): **Google Sheets, Slack, Zapier, Make, n8n, Airbyte, Keboola** and more. Use **webhooks** to call your own endpoint when a run finishes.

Use **Schedules** in Apify Console to run the tracker automatically, for example once a day. Send each run to Google Sheets to see the rank trend of every keyword.

### Good to know

- **Track a blog, not only a post.** A blog ID finds every post of the blog that ranks, also the posts that you publish later.
- **Many clients, one run.** Put all your client blogs in the targets. Each keyword is searched only once for all of them.
- **Desktop ranks.** The tracker checks the desktop search pages. Mobile ranks are often close, but they can be different.
- **Run at the same time each day.** Naver results can change during the day, so a fixed time gives a cleaner trend.

### Related Actors

- **[Naver Search Scraper](https://apify.com/hgservices/naver-search-scraper)** — every block of the Naver 통합검색 page, with ads, place, cafés, news and more.
- **[Naver Blog Search Scraper](https://apify.com/hgservices/naver-blog-search-scraper)** — Naver Blog posts by keyword, up to thousands per keyword.
- **[Naver Blog Sponsored Post Detector](https://apify.com/hgservices/naver-blog-sponsored-post-detector)** — find out which top posts for a keyword are sponsored.
- **[Naver Blog Profile Scraper](https://apify.com/hgservices/naver-blog-profile-scraper)** — a blogger's profile, follower and visitor counts, and full post list.

### FAQ

**Do I need a Naver account?**
No. You need only an Apify account. The tracker reads the public search pages that every visitor can see without an account.

**How deep does the blog tab check go?**
As deep as Naver goes. For most Korean keywords, the Naver blog tab shows about 60 posts, then it repeats posts. Some keywords go deeper. `blogTabPostsChecked` shows the depth for each keyword. A target that is not in those posts gets `blogTabRank: null`.

**What is the difference between the two ranks?**
The blog tab (블로그 탭) is a list of blog posts only. The 통합검색 page is the main Naver result page. It mixes ads, place, clips, web pages, cafés and blog posts. `integratedPosition` counts all the result blocks. `integratedBlogRank` counts only the blog posts.

**Why is `found` true when `blogTabRank` is null?**
The target ranks on the 통합검색 page, but not in the blog tab posts that were checked. `found` is true when the target ranks on at least one of the two pages.

**Can I track the ranks over time?**
Yes. Schedule the tracker, for example once a day, and send each run to Google Sheets or to your own database. Each row has `checkedAt`, so you can sort the ranks by date.

**Is it legal to check Naver rankings?**
The tracker reads only publicly available search results and never signs in. Use the data in line with Naver's Terms of Service and the laws that apply to you.

### Support

Did you find a bug, or do you need a field that is not here? Open an issue on the **Issues** tab. Custom solutions are available on request.

This tracker is not affiliated with or endorsed by Naver.

# Actor input Schema

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

The search keywords to check, one per line — e.g. 강남 맛집, 제주 숙소. Each keyword is checked separately.

## `targets` (type: `array`):

One per line. A blog ID (myblog123) or blog URL (https://blog.naver.com/myblog123) tracks every post of that blog. A post URL (https://blog.naver.com/myblog123/224000000000) tracks that post only.

## Actor input object example

```json
{
  "keywords": [
    "강남 맛집"
  ],
  "targets": [
    "https://blog.naver.com/b2l1bpe"
  ]
}
```

# 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 = {
    "keywords": [
        "강남 맛집"
    ],
    "targets": [
        "https://blog.naver.com/b2l1bpe"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/naver-blog-rank-tracker").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 = {
    "keywords": ["강남 맛집"],
    "targets": ["https://blog.naver.com/b2l1bpe"],
}

# Run the Actor and wait for it to finish
run = client.actor("hgservices/naver-blog-rank-tracker").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 '{
  "keywords": [
    "강남 맛집"
  ],
  "targets": [
    "https://blog.naver.com/b2l1bpe"
  ]
}' |
apify call hgservices/naver-blog-rank-tracker --silent --output-dataset

```

## MCP server setup

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

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/VPlT5CevYa9rOOafU/builds/hWrkhku7Ouh8z5L3Y/openapi.json
