# Naver DataLab Search Trends (`maximedupre/naver-search-trends`) Actor

Compare Naver search trends for up to five keyword groups. Get daily, weekly, or monthly interest ratios with device, gender, and age filters. Export each group series as JSON, CSV, or Excel for research and reports.

- **URL**: https://apify.com/maximedupre/naver-search-trends.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** SEO tools, Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$135.00 / 1,000 trend series

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

### 📈 Compare Naver search interest over time

For SEO teams, marketers, and researchers, this Actor returns Naver search trends for Korean or English terms. Compare named keyword groups, keep the audience filters with each series, and export the data for reports without copying chart values by hand.

- Compare brand names on one shared search-interest scale.
- Find seasonal peaks for product terms before planning campaigns.
- Combine Korean and English spellings to study one topic.
- Compare mobile and PC search interest in separate runs.
- Study interest among selected age bands for audience research.

#### 📊 Keyword groups with dates and interest ratios

Each row holds one keyword group's series, its terms, and the comparison settings. Compare up to five groups, with up to 20 terms per group. Choose daily, weekly, or monthly periods and filter by device, gender, and age band.

Naver ratios use a shared 0 to 100 scale within the comparison. They are not absolute search counts. Changing the groups, date range, or audience can change that scale. Naver may leave out low-volume points; the Actor does not fill those gaps with zeros.

#### ▶️ Run a keyword comparison

1. Add one to five named keyword groups.
2. Choose dates from January 1, 2016 onward, within Naver's available periods.
3. Choose the period interval and audience filters.
4. Start the Actor, then open the dataset to view or export the series.

Weekly and monthly inputs must cover whole calendar months. Naver can return narrower weekly boundaries within that range. You do not need to supply a Naver account or API key.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `keywordGroups` | array of objects | Required. One to five groups compared together. The form prefills a Coffee group; there is no schema default. |
| `keywordGroups[].name` | string | Required nonblank group label. Must not contain `__SZLIG__` or `__OUML__`. |
| `keywordGroups[].terms` | array of strings | Required. One to 20 nonblank terms combined for this group. Each term must not contain a comma or `__OUML__`. Put each full phrase in its own entry. |
| `startDate` | string | Required `YYYY-MM-DD` calendar date, January 1, 2016 or later. Weekly and monthly ranges must start on the first day of a month. Form prefill: `2024-01-01`; no schema default. |
| `endDate` | string | Required `YYYY-MM-DD` calendar date on or after the start. Daily ranges can cover one day. Weekly and monthly ranges must end on the last day of a month. Form prefill: `2024-01-31`; no schema default. Data depends on Naver's available periods. |
| `maxItems` | integer | Maximum saved group series, not period points. Use 0 or omit it for all available series. Minimum 0, with no fixed upper bound. Form prefill: 100; no schema default. |
| `timeUnit` | string | `date` for daily, `week` for weekly, or `month` for monthly. Default when omitted: `date`. Weekly and monthly ranges require whole calendar months. |
| `device` | string | `all`, `mo` for mobile, or `pc`. Default when omitted: `all`. |
| `gender` | string | `all`, `f` for female, or `m` for male. Default when omitted: `all`. |
| `ages` | array of strings | Naver age-band codes. Empty or omitted means all ages, the default. Repeated codes are combined. |

Age codes are `1`: 0-12, `2`: 13-18, `3`: 19-24, `4`: 25-29, `5`: 30-34, `6`: 35-39, `7`: 40-44, `8`: 45-49, `9`: 50-54, `10`: 55-59, and `11`: 60+.

**Successful default input**

This is the public input from the successful current-beta default-input run.

```json
{
  "keywordGroups": [
    {
      "name": "Coffee",
      "terms": [
        "커피",
        "coffee"
      ]
    }
  ],
  "startDate": "2024-01-01",
  "endDate": "2024-01-31",
  "maxItems": 100,
  "timeUnit": "date",
  "device": "all",
  "gender": "all",
  "ages": []
}
```

#### 🧾 Output

**Output fields**

| Field | Type | What it does |
| --- | --- | --- |
| `groupName` | string | Name of this keyword group. |
| `terms` | array of strings | Terms combined in this group. |
| `startDate` | string | First date covered by the returned comparison. |
| `endDate` | string | Last date covered by the returned comparison. |
| `timeUnit` | string | `date`, `week`, or `month`. |
| `device` | string | `all`, `mo`, or `pc`. |
| `gender` | string | `all`, `f`, or `m`. |
| `ages` | array of strings | Selected age codes; empty means all ages. |
| `periods` | array of objects | Published period dates and relative search-interest values. |
| `periods[].period` | string | Naver's period date in `YYYY-MM-DD` form. |
| `periods[].ratio` | number | Relative interest from 0 to 100 within this comparison. |
| `comparisonUrl` | string | Naver result-page link for the comparison. It may expire. |

**Example series**

This complete row comes from a successful current-beta monthly comparison of Naver and YouTube terms.

```json
{
  "groupName": "YouTube",
  "terms": [
    "유튜브",
    "youtube"
  ],
  "startDate": "2024-01-01",
  "endDate": "2024-03-31",
  "timeUnit": "month",
  "device": "pc",
  "gender": "m",
  "ages": [
    "9"
  ],
  "periods": [
    {
      "period": "2024-01-01",
      "ratio": 100
    },
    {
      "period": "2024-02-01",
      "ratio": 87.7661
    },
    {
      "period": "2024-03-01",
      "ratio": 95.78802
    }
  ],
  "comparisonUrl": "https://datalab.naver.com/keyword/trendResult.naver?hashKey=N_7751d278fb4c3350249af2248ffa1233"
}
```

#### 💳 Pricing

The `keyword-group-series` event costs $0.135 for each keyword-group series saved to the dataset. The charge covers the group and all its returned period values, rather than each point. There is no separate run-start event in this Actor's pricing. Empty runs and input checks that save no series do not trigger this event.

Set `maxItems` to limit saved series. Repeated rows with the same group name and ordered term list are saved only once per run.

#### 🔌 Integrations

Export the dataset as JSON, CSV, or Excel. Start runs and read saved rows through the Apify API, or use Apify schedules to repeat the same comparison for reports.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Why do weekly dates differ from my input dates?

Weekly input must cover whole months, but the returned dates follow Naver's published weekly boundaries. The row keeps those returned boundaries.

##### Does a missing period mean zero searches?

No. Naver may omit low-volume points. The Actor keeps the published points and does not fill gaps with zeros.

##### Can I compare ratios from separate runs?

The scale belongs to each comparison. Keep the groups, date range, and audience settings the same when comparing runs, and keep that context with your reports.

##### What if my run succeeds but has no rows?

Check the log for an input warning or a message that no trends matched. Invalid dates or unsupported choices can stop the run without saving rows. Try terms and periods with published Naver data.

##### Is this the official Naver DataLab tool?

This is an Apify Actor that returns public Naver DataLab search trends. You can also use [Naver DataLab](https://datalab.naver.com/) to view search trends. This Actor's input does not ask for Naver API credentials.

### 📝 Changelog

**v0.0** (29-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~naver-search-trends/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Naver Blog Review Scraper](https://apify.com/maximedupre/naver-blog-review-scraper): Read public review posts about topics found in your trend research.
- [Pinterest Trends Scraper: Rising Search Terms](https://apify.com/maximedupre/pinterest-trends-scraper): Study Pinterest search terms alongside Naver interest.
- [Naver DataLab Search Trends Scraper](https://apify.com/automation-lab/naver-datalab-search-trends-scraper): Compare another Actor for Naver keyword trend series.
- [Naver DataLab Search Trend (English)](https://apify.com/hantaeyoung/naver-datalab-trend): Explore another Naver search-trend workflow for Korean or English terms.
- [Naver Search Autocomplete Scraper](https://apify.com/battery/naver-autocomplete): Find query suggestions before choosing trend terms.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `keywordGroups` (type: `array`):

Add one to five groups to compare together. Each group combines one to 20 Korean or English terms. Put each full phrase in its own terms entry.

## `startDate` (type: `string`):

First date to include, in YYYY-MM-DD form. For Daily, choose any available day. For Weekly or Monthly, choose the first day of a calendar month; partial months are not supported. Choose January 1, 2016 or later. Check available periods at https://datalab.naver.com/.

## `endDate` (type: `string`):

Last date to include, in YYYY-MM-DD form. For Daily, choose any available day, including the start date for a single-day range. For Weekly or Monthly, choose the last day of a calendar month; partial months are not supported. Choose a date on or after the start date. Check available periods at https://datalab.naver.com/.

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

Stop after this many output rows. Leave blank or use 0 for all available rows.

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

Show search interest for each day, week, or month. Weekly and Monthly require a range of whole calendar months, from the first day of the start month through the last day of the end month.

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

Choose which devices to include in the search trends.

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

Choose which audience to include in the search trends.

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

Choose one or more Naver age bands. Leave empty or omit this field for all ages.

## Actor input object example

```json
{
  "keywordGroups": [
    {
      "name": "Coffee",
      "terms": [
        "커피",
        "coffee"
      ]
    }
  ],
  "startDate": "2024-01-01",
  "endDate": "2024-01-31",
  "maxItems": 100,
  "timeUnit": "date",
  "device": "all",
  "gender": "all",
  "ages": []
}
```

# Actor output Schema

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

Search-interest series and comparison details.

# 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 = {
    "keywordGroups": [
        {
            "name": "Coffee",
            "terms": [
                "커피",
                "coffee"
            ]
        }
    ],
    "startDate": "2024-01-01",
    "endDate": "2024-01-31",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/naver-search-trends").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 = {
    "keywordGroups": [{
            "name": "Coffee",
            "terms": [
                "커피",
                "coffee",
            ],
        }],
    "startDate": "2024-01-01",
    "endDate": "2024-01-31",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/naver-search-trends").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 '{
  "keywordGroups": [
    {
      "name": "Coffee",
      "terms": [
        "커피",
        "coffee"
      ]
    }
  ],
  "startDate": "2024-01-01",
  "endDate": "2024-01-31",
  "maxItems": 100
}' |
apify call maximedupre/naver-search-trends --silent --output-dataset

```

## MCP server setup

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

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/3ZP57JCMdqZJBDJUE/builds/LQmDJD0275Bvtd6IN/openapi.json
