# Niconico Mylist Videos Scraper (`scrapingmonkey/niconico-mylist-videos-scraper`) Actor

Collect videos from public Niconico mylists with playlist context, curator notes, added dates, creator details, and engagement metrics.

- **URL**: https://apify.com/scrapingmonkey/niconico-mylist-videos-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

**Niconico Mylist Videos Scraper** — Collect videos from public Niconico mylists with playlist context, curator notes, added dates, creator details, and engagement metrics. Add supported inputs and start a run to get structured public data without providing a Niconico account.

Collect videos from a public Niconico Touhou mylist. Keep video metadata, playlist notes and added dates together in each row for collection research.

| At a glance | Details |
|---|---|
| 📥 Input | Enter positive numeric mylist IDs or public Niconico mylist URLs, including user-scoped mylist URLs. Collection uses the mylist default order. |
| 📤 Output | One video per success row, with source input retained |
| 📄 Pagination | `pagesPerMylist` limits result pages per input, with a default of 1. The source may end sooner. |
| 🔐 Login required | No |
| ⚡ Processing | Up to 5 HTTP requests concurrently with automatic retries |
| 💾 Delivery | One Apify dataset view, useful flat columns and complete nested JSON |

### What the niconico mylist videos scraper collects 📊

Collect videos from public Niconico mylists with playlist context, curator notes, added dates, creator details, and engagement metrics.

Data can include:

- Source identity and public links
- Available id, url, title, content type, registered at, duration seconds, view count, comment count
- Original input retained with every result
- One consistent success or failed record format

### How to collect videos from Niconico 🚀

1. Enter one or more supported inputs in `inputList`.
2. Set the result-page budget for each input.
3. Start the Actor.
4. Open the **Videos** dataset view and review the individual records.
5. Export the dataset or retrieve it from your application.

```json
{
  "inputList": [
    "https://www.nicovideo.jp/mylist/9820700"
  ],
  "pagesPerMylist": 1
}
```

`pagesPerMylist` limits result pages per input, with a default of 1. The source may end sooner.

### Niconico videos data and complete output 📦

| Field | Type | Meaning |
|---|---|---|
| `input` | string | Original submitted input. |
| `status` | string | Result status: success or failed. |
| `type` | string or null | Entity type of this row. |
| `id` | string or null | Stable public entity ID, exported as text. |
| `url` | string or null | Public page URL for this entity. |
| `title` | string or null | Video or mylist title returned by the source. |
| `content_type` | string or null | Source video content type. |
| `registered_at` | string or null | Video publication timestamp as returned by Niconico. |
| `duration_seconds` | integer or null | Video duration in seconds. |
| `view_count` | integer or null | Public video view count. |
| `comment_count` | integer or null | Public video comment count. |
| `mylist_count` | integer or null | Public count of mylist additions for the video. |
| `like_count` | integer or null | Public video like count. |
| `short_description` | string or null | Short source preview of the description. |
| `latest_comment_summary` | string or null | Source-generated preview of recent comments; not a full comment export. |
| `thumbnails` | object or null | Available thumbnail variants. Missing variants remain null. |
| `thumbnails.url` | string or null | Public source URL. |
| `thumbnails.middle_url` | string or null | Available middle URL. |
| `thumbnails.large_url` | string or null | Available large URL. |
| `thumbnails.listing_url` | string or null | Available listing URL. |
| `thumbnails.hd_url` | string or null | Available hd URL. |
| `thumbnails.player_url` | string or null | Available player URL. |
| `thumbnails.ogp_url` | string or null | Available ogp URL. |
| `thumbnails.short_url` | string or null | Available short URL. |
| `owner` | object or null | Public video creator or playlist curator. |
| `owner.id` | string or null | Source identifier of this entity, retained as a string. |
| `owner.name` | string or null | Public name supplied by the source. |
| `owner.type` | string or null | Type when exposed by the public response. |
| `owner.url` | string or null | Public source URL. |
| `owner.icon_url` | string or null | Available icon URL. |
| `owner.visibility` | string or null | Visibility when exposed by the public response. |
| `is_channel_video` | boolean or null | Whether the video belongs to a channel. |
| `is_payment_required` | boolean or null | Source payment-required flag when present; null does not mean free. |
| `requires_sensitive_masking` | boolean or null | Source flag requesting sensitive-content masking. |
| `page` | integer or null | Result page within this input. |
| `mylist` | object or null | Public playlist metadata repeated on each video row. |
| `mylist.id` | string or null | Source identifier of this entity, retained as a string. |
| `mylist.url` | string or null | Public source URL. |
| `mylist.name` | string or null | Public name supplied by the source. |
| `mylist.description` | string or null | Available public description. |
| `mylist.owner` | object or null | Owner when exposed by the public response. |
| `mylist.owner.id` | string or null | Source identifier of this entity, retained as a string. |
| `mylist.owner.name` | string or null | Public name supplied by the source. |
| `mylist.owner.type` | string or null | Type when exposed by the public response. |
| `mylist.owner.url` | string or null | Public source URL. |
| `mylist.owner.icon_url` | string or null | Available icon URL. |
| `mylist.owner.visibility` | string or null | Visibility when exposed by the public response. |
| `mylist.video_count` | integer or null | Video count supplied by the source; absent values remain null. |
| `mylist.follower_count` | integer or null | Follower count supplied by the source; absent values remain null. |
| `mylist.is_public` | boolean or null | Is public when exposed by the public response. |
| `mylist.has_invisible_items` | boolean or null | Has invisible items when exposed by the public response. |
| `mylist_item_id` | string or null | Identifier of the video entry within this mylist. |
| `added_at` | string or null | Date this video was added to the mylist. |
| `mylist_item_description` | string or null | Curator description attached to this mylist item. |
| `mylist_item_status` | string or null | Availability status returned for the mylist entry. |

Nested arrays and media references stay in their parent record. Downloading source media files is not part of this Actor.

Every top-level output field appears in these complete examples. The success example is normalized from a public response. Long strings and arrays are shortened here; the Actor keeps the complete available values. Values are a snapshot and can change. Nested arrays remain inside their parent result.

Representative success result with every output field (long text and arrays shortened for readability):

```json
{
  "input": "https://www.nicovideo.jp/mylist/9820700",
  "status": "success",
  "type": "video",
  "id": "sm4069998",
  "url": "https://www.nicovideo.jp/watch/sm4069998",
  "title": "【合作】東方で後者【描いてみた】",
  "content_type": "long",
  "registered_at": "2008-07-25T04:59:34+09:00",
  "duration_seconds": 113,
  "view_count": 333267,
  "comment_count": 6707,
  "mylist_count": 7260,
  "like_count": 29,
  "short_description": "sm1316867を参考に動画製作者とその仲間達で東方で後者をやってみました。　企画/つゆき　動画/",
  "latest_comment_summary": "輝夜を割りたいって意味ねｗｗ てるよが見てる動画かぐやの動画か (物理) ちょwもこたんがいそう 何故ピチュったしww 香霖堂店主(変態)さんは服着てお帰り オケラが鳴くだろｗ ZUN！ww ママンと夢子！ こーりん帰れ ……神様だけどな 魅魔様！！...",
  "thumbnails": {
    "url": "https://nicovideo.cdn.nimg.jp/thumbnails/4069998/4069998",
    "middle_url": null,
    "large_url": null,
    "listing_url": "https://img.cdn.nimg.jp/s/nicovideo/thumbnails/4069998/4069998.original/r320x180l?key=80c26757f8ec7a260195abc94448ec380032807511f5a150da019a603177a72b",
    "hd_url": "https://img.cdn.nimg.jp/s/nicovideo/thumbnails/4069998/4069998.original/r640x360l?key=098aa8673820d51f43a736d301b1f372482315cf256a401ba18ff8cb1dfae753",
    "player_url": null,
    "ogp_url": null,
    "short_url": null
  },
  "owner": {
    "id": "139040",
    "name": "niji",
    "type": "user",
    "url": "https://www.nicovideo.jp/user/139040",
    "icon_url": "https://secure-dcdn.cdn.nimg.jp/nicoaccount/usericon/13/139040.jpg?1291578181",
    "visibility": "visible"
  },
  "is_channel_video": false,
  "is_payment_required": false,
  "requires_sensitive_masking": false,
  "page": 1,
  "mylist": {
    "id": "9820700",
    "url": "https://www.nicovideo.jp/mylist/9820700",
    "name": "東方一発ネタ",
    "description": "東方パッパラ祭　東方ウマウ祭　東方ぷんちきぱやっぱーヾ(゚∀゚)ノ　東方漲笛踊 　東方文字合同　東方野菜汁　東方厚鬱稲　東方暴月弾　東方你好娘　東方大豆歌　東方見輝岳　東方寝輝岳　東方相撲落　東方音遊戯　東方暴走舞　東方休々猫　東方箱入娘　東方出世魚　東方変速娘　東方跳躍娘　ございま～す！シリーズ　東方酒宴シリーズ　ナイト・オブ・ゲッダン　すべりこむ○○シリーズ　他東方一発ネタ",
    "owner": {
      "id": "8161702",
      "name": "北原そう",
      "type": "user",
      "url": "https://www.nicovideo.jp/user/8161702",
      "icon_url": "https://secure-dcdn.cdn.nimg.jp/nicoaccount/usericon/defaults/blank.jpg",
      "visibility": "visible"
    },
    "video_count": 413,
    "follower_count": 0,
    "is_public": true,
    "has_invisible_items": false
  },
  "mylist_item_id": "1216929573",
  "added_at": "2008-12-14T15:45:57+09:00",
  "mylist_item_description": "",
  "mylist_item_status": "public"
}
```

Complete failed result:

```json
{
  "input": "invalid input",
  "status": "failed",
  "type": null,
  "id": null,
  "url": null,
  "title": null,
  "content_type": null,
  "registered_at": null,
  "duration_seconds": null,
  "view_count": null,
  "comment_count": null,
  "mylist_count": null,
  "like_count": null,
  "short_description": null,
  "latest_comment_summary": null,
  "thumbnails": null,
  "owner": null,
  "is_channel_video": null,
  "is_payment_required": null,
  "requires_sensitive_masking": null,
  "page": null,
  "mylist": null,
  "mylist_item_id": null,
  "added_at": null,
  "mylist_item_description": null,
  "mylist_item_status": null
}
```

A failed row preserves `input`, sets `status` to `failed`, and sets every other top-level field to `null`. The run log records the reason. Optional successful fields can be null or empty when Niconico does not supply them. Object fields are exposed through useful columns in the single **Videos** view; arrays are not expanded into extra result rows.

### Input requirements and pagination settings ⚙️

| Parameter | Type | Required | Default | Rules |
|---|---|---|---|---|
| `inputList` | array of strings | Yes | None | Enter positive numeric mylist IDs or public Niconico mylist URLs, including user-scoped mylist URLs. Collection uses the mylist default order. At least `1` item. |
| `pagesPerMylist` | integer | No | `1` | Maximum result pages per input, starting at page 1. Stops at the available end of results. Rows per page vary; short pages can still have a continuation. Minimum `1`. |

Enter positive numeric mylist IDs or public Niconico mylist URLs, including user-scoped mylist URLs. Collection uses the mylist default order.

Examples of supported inputs: `https://www.nicovideo.jp/mylist/9820700`.

Duplicate normalized inputs are processed once. Within the collection for one source input, repeated records are removed while distinct interactions or objects remain separate. The same object returned for different source inputs retains its source relationship.

The first result page counts as page 1. Public-page preparation and metadata lookups do not consume result pages. Collection stops at your page budget or the end of the available list. A short page alone does not mean that the list has ended.

### Niconico videos use cases 🎯

#### Export a Niconico Touhou video playlist

Collect videos from a public Niconico Touhou mylist. Keep video metadata, playlist notes and added dates together in each row for collection research.

#### Catalog a Niconico music video playlist

Export videos listed in a public Niconico music mylist. Keep video titles, durations, visible counts and playlist context to review its selection.

#### Review additions to a public Niconico mylist

Collect a public Niconico mylist's video records with item IDs, notes and added dates. Compare exports in your own workflow to review collection changes.

### Pricing and saved-result behavior 💰

Check the Actor’s **Pricing** tab for the active pricing model and current rate. Store settings can change, so this README does not claim a fixed price or runtime.

Under dataset-item pricing:

- Each successful result represents one video for its source input.
- An invalid or unavailable input, an input with no accessible results, or an exhausted request can produce a `failed` row.
- Retry attempts and supporting requests do not create extra dataset rows by themselves.
- Nested media, profile information and other arrays remain part of their parent row.
- A normal empty continuation after earlier successes creates no additional row.
- Saved failed rows are not assumed to be free; check their treatment in the active pricing configuration.

More inputs and larger page budgets can produce more saved rows. Start with a small run and check actual usage before increasing the workload.

### Niconico videos API 🔌

Replace `$ACTOR_ID` with the identifier shown in this Actor’s **API** tab and `$APIFY_TOKEN` with your Apify token.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["https://www.nicovideo.jp/mylist/9820700"],"pagesPerMylist":1}'
```

Download the dataset in JSON, CSV, Excel or other formats available in the Console, or retrieve it through the Apify API. Use schedules, webhooks and Apify integrations to connect results to Google Sheets, Make, Zapier, cloud storage or your own application. These connections are configured separately by the user.

### Reliability, retries, and public-data limits ⚠️

Collection uses pure HTTP with up to five concurrent requests. Invalid syntax and confirmed missing, removed or unavailable targets stop without unnecessary retries. Temporary network or proxy failures, timeouts, blocking responses, malformed data, throttling and server errors allow up to five total attempts per request.

Successful earlier pages remain saved if a later request fails. A normal end after saved results is not retried. An input with no accessible results can receive a failed row; that alone does not prove that its underlying source does not exist. An exhausted later request can add a failed row while preserving previous output.

Only public mylists are supported. Video files and comments are not downloaded. Pages can contain fewer items than requested while still having another page. Mylist metadata is repeated as context on each video row; no separate metadata row is created.

Niconico controls public availability, ranking and optional fields. Result counts can be affected by duplicates, removed content and changes during a run. A page budget is a collection limit, not a promise of exhaustive coverage.

An invalid string within a valid input list does not stop other inputs. Invalid overall configuration, such as a non-string list item or a wrong page-count type, exits before source requests. Startup failures, unavailable dataset storage or an unrecoverable result-save error can still stop the whole run. A failed save is not retried as a new scraping request.

### Frequently asked questions ❓

#### What does one Niconico Mylist Videos Scraper result represent?

Each successful row represents one video. The source input is retained, and nested fields stay in the same row.

#### Which source limits apply?

Only public mylists are supported. Video files and comments are not downloaded. Pages can contain fewer items than requested while still having another page. Mylist metadata is repeated as context on each video row; no separate metadata row is created.

#### Does it download media files?

No. Where available, the Actor returns media URLs and metadata within the result row.

#### Does it require a Niconico account or personal cookies?

No. You do not need to provide a Niconico account, password or personal session cookie. Collection uses HTTP without opening a browser.

#### What happens to invalid or unavailable inputs?

Invalid individual inputs are recorded as failed without a source request. Confirmed missing or unavailable targets stop without unnecessary retries. Temporary failures allow up to five total attempts per request; other inputs and earlier saved results remain available.

#### Can I export results or run the same input again?

Yes. Export the default dataset or retrieve it through the Apify API. You can create an Apify schedule and connect completed runs to your own workflow.

### Support, responsible use, and related actors 🛟

For a reproducible issue, use the Actor’s **Issues** tab and provide the run ID, approximate time, a safe public input, expected behavior and actual result. Include the mode or page budget when relevant. Never share access tokens, personal cookies or proxy credentials.

Use public data responsibly and follow applicable privacy, copyright, contractual and platform requirements before storing, analyzing or redistributing collected information.

# Actor input Schema

## `inputList` (type: `array`):

Enter positive numeric mylist IDs or public Niconico mylist URLs, including user-scoped mylist URLs. Collection uses the mylist default order.

## `pagesPerMylist` (type: `integer`):

Maximum result pages per input, starting at page 1. Stops at the available end of results. Rows per page vary; short pages can still have a continuation.

## Actor input object example

```json
{
  "inputList": [
    "https://www.nicovideo.jp/mylist/9820700"
  ],
  "pagesPerMylist": 1
}
```

# Actor output Schema

## `videos` (type: `string`):

One dataset row per public video. Check success or failed status.

# 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 = {
    "inputList": [
        "https://www.nicovideo.jp/mylist/9820700"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/niconico-mylist-videos-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 = { "inputList": ["https://www.nicovideo.jp/mylist/9820700"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/niconico-mylist-videos-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 '{
  "inputList": [
    "https://www.nicovideo.jp/mylist/9820700"
  ]
}' |
apify call scrapingmonkey/niconico-mylist-videos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/niconico-mylist-videos-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/NehCWCKjkJKVljxub/builds/Ho3aEHFh75jSXxAnM/openapi.json
