# Niconico Comments Scraper (`hgservices/niconico-comments-scraper`) Actor

Scrape comments from Nicovideo videos (ニコニコ動画, nicovideo.jp): owner, community and easy (かんたん) comment tracks with comment number, position, author, nicoru count and more.

- **URL**: https://apify.com/hgservices/niconico-comments-scraper.md
- **Developed by:** [Harish Garg](https://apify.com/hgservices) (community)
- **Categories:**
- **Stats:** 1 total users, 1 monthly users, 40.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 scraped comments

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?

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

Scrape comments from any [Nicovideo](https://www.nicovideo.jp) (ニコニコ動画) video — Japan's largest video sharing platform. Give it video URLs or video IDs and get every comment the site exposes to anonymous viewers: text, author, timestamp, video position, commands, nicoru (like) counts and more — through Apify's [API](https://docs.apify.com/api/v2), integrations, or scheduled runs.

### What does Niconico Comments Scraper do?

**Niconico Comments Scraper** extracts structured comment data from [nicovideo.jp](https://www.nicovideo.jp) anonymously, without login. It is fast, cheap and reliable, and always scrapes all three Nicovideo comment tracks:

- **Owner comments** — scripts and notes posted by the uploader on their own video
- **Community comments (main)** — the classic scrolling overlay comments
- **Easy comments (かんたんコメント)** — the anonymous emoji-style reactions

Each comment comes with its number, video position, post time, author, commands (position/size/color), nicoru count and shared-NG score. The Apify platform gives you API access, scheduling, webhooks, proxy rotation, monitoring, and export to JSON, CSV, Excel, and more.

### Why use Niconico Comments Scraper?

- **Sentiment & audience research** — analyze what viewers say around any moment of a video (vpos), for VOCALOID, anime, game and music content
- **Trend monitoring** — track new comments on selected videos over time with scheduled runs and compare snapshots
- **Comment analytics** — find the most nicoru'd (liked) comments, premium activity, or command usage patterns
- **Catalog enrichment** — attach comment data to video lists produced by other Nicovideo scrapers or your own catalogs

### How to use Niconico Comments Scraper

1. Open the Actor's page in [Apify Console](https://console.apify.com) and click **Try for free** or create a task.
2. Fill in at least one input source:
   - video URLs (e.g. `https://www.nicovideo.jp/watch/sm15751190`) in **Start URLs**
   - or video IDs / URLs (e.g. `sm15751190`) in **Video IDs**
3. Click **Start**. When the run finishes, preview and download the data from the **Output** tab.

### Input

Configure the Actor in the Input tab, or via API with JSON:

| Field          | Type | Description                                                                |
| -------------- | ---- | -------------------------------------------------------------------------- |
| **Start URLs** | list | Nicovideo video URLs (`https://www.nicovideo.jp/watch/sm15751190`)          |
| **Video IDs**  | list | Video IDs (`sm15751190`) or video URLs to scrape comments from              |

#### Accepted video references

Both fields accept the same forms, one video per entry:

| Form                                            | Example                                        |
| ----------------------------------------------- | ---------------------------------------------- |
| Prefixed video ID                               | `sm15751190`, `so44461946`, `nm1234`           |
| Legacy numeric video ID (oldest uploads)        | `1173108780`                                   |
| Watch URL, any `nicovideo.jp` subdomain         | `https://www.nicovideo.jp/watch/sm15751190`    |
| Watch URL with query string or trailing slash   | `https://www.nicovideo.jp/watch/sm9?ref=search`|
| `nico.ms` short link                            | `https://nico.ms/sm15751190`                   |

List pages are **not** supported, because this Actor scrapes the comments of one specific
video per entry. Mylist, series, user, channel and tag URLs are skipped with a warning in
the log. Expand those to individual video URLs before you run the Actor.

### Output

Each dataset item is one comment:

```json
{
    "videoId": "sm15751190",
    "videoUrl": "https://www.nicovideo.jp/watch/sm15751190",
    "threadId": "1317333989",
    "fork": "main",
    "forkCommentCount": 480205,
    "commentId": "1544971041528311808",
    "no": 480205,
    "vposMs": 219780,
    "postedAt": "2026-09-03T16:23:20+09:00",
    "body": "メカクシ完了",
    "commands": [],
    "userId": "143786914",
    "isPremium": true,
    "score": 0,
    "nicoruCount": 0,
    "source": "trunk",
    "videoTitle": "【初音ミク】カゲロウデイズ【オリジナルPV】",
    "videoRegisteredAt": "2011-09-30T07:06:29+09:00",
    "videoCommentCount": 503301,
    "scrapedAt": "2026-09-04T18:55:00.000Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data table

| Field                 | Description                                                 |
| --------------------- | ----------------------------------------------------------- |
| **videoId**           | Nicovideo video ID (e.g. `sm15751190`)                      |
| **fork**              | Comment track: `owner`, `main` (community) or `easy`        |
| **no**                | Comment number within its track                             |
| **vposMs**            | Video position the comment was posted at, in milliseconds   |
| **postedAt**          | When the comment was posted (ISO 8601, JST)                 |
| **body**              | Comment text                                                |
| **commands**          | Comment commands: position, size, color, `184`, ...         |
| **userId**            | Author user ID (hashed for easy/anonymous comments)         |
| **isPremium**         | Whether the author is a premium account                     |
| **nicoruCount**       | How many times the comment was nicoru'd (liked)             |
| **forkCommentCount**  | Total comments in the track (may exceed the scraped amount) |
| **videoTitle**        | Video title                                                 |
| **videoCommentCount** | Total comments of the video across tracks                   |

### Pricing / Cost estimation

How much does it cost to scrape Nicovideo comments? The Actor is very lightweight: each video needs only a fraction of a second of compute. On the Apify free plan you can scrape hundreds of videos per month. Runs with many videos or scheduled monitoring simply scale linearly with the number of videos — a run of 100 videos typically takes well under a minute of compute.

### Tips and advanced options

- **Batch many videos into one run** — combine Video IDs and Start URLs; the Actor processes videos in parallel.
- **Deleted, private, region-locked or paid videos** are skipped with a warning — their comments are not publicly available.
- **Anonymous window** — without login, Nicovideo exposes up to ~500 recent comments per track (most videos have fewer and are fully covered). The exact track total is always included in `forkCommentCount`.

### FAQ, disclaimers, and support

- **Is scraping Nicovideo comments legal?** This Actor accesses only publicly available data that the website serves to anonymous viewers, and respects the site's rate limits. You should still review Nicovideo's Terms of Service and scrape responsibly.
- **Why do I get fewer comments than the total count?** Nicovideo exposes only the latest ~500 comments per track to logged-out viewers; `forkCommentCount` always shows the true total.
- **Do you store personal data?** The Actor outputs comment text and author IDs as they are publicly visible on the site. Handle them according to your own privacy requirements.
- Found a bug or need a feature? Please report it on the Actor's **Issues** tab. Need a custom comment-related solution? The author is available for bespoke work.

# Actor input Schema

## `startUrls` (type: `array`):

Nicovideo video URLs to scrape comments from. Accepts watch pages (https://www.nicovideo.jp/watch/sm15751190), any nicovideo.jp subdomain, and nico.ms short links. List pages (mylist, series, user, tag) are not supported - give one URL per video.

## `videoIds` (type: `array`):

Video IDs or video URLs to scrape comments from. Accepts prefixed IDs (sm15751190, so44461946, nm1234), legacy numeric IDs (1173108780), watch URLs, and nico.ms short links.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.nicovideo.jp/watch/sm15751190"
    }
  ],
  "videoIds": []
}
```

# Actor output Schema

## `comments` (type: `string`):

Scraped Nicovideo comments, one dataset item per comment. Covers the owner, main and easy (かんたん) tracks selected in the input.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.nicovideo.jp/watch/sm15751190"
        }
    ],
    "videoIds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/niconico-comments-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 = {
    "startUrls": [{ "url": "https://www.nicovideo.jp/watch/sm15751190" }],
    "videoIds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("hgservices/niconico-comments-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 '{
  "startUrls": [
    {
      "url": "https://www.nicovideo.jp/watch/sm15751190"
    }
  ],
  "videoIds": []
}' |
apify call hgservices/niconico-comments-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hgservices/niconico-comments-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/7TOVD9ycyNB8uQ0Jw/builds/6OaON0wOhLBywS0ry/openapi.json
