# NetEase Cloud Music Scraper: Charts, Playlists & Comments (`memo23/netease-music-scraper`) Actor

NetEase Cloud Music (网易云音乐) scraper with no login: 40 official charts (飙升榜, 热歌榜, 新歌榜, 原创榜 and more) and any playlist with rank, artists, album and popularity score, plus song comments with likes and replies. $0.80 per 1,000 tracks, $1.50 per 1,000 comments.

- **URL**: https://apify.com/memo23/netease-music-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 tracks

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

## NetEase Cloud Music Scraper: Charts, Playlists & Comments (网易云音乐)

Export **NetEase Cloud Music (网易云音乐) charts and playlists** for **$0.80 per 1,000 tracks**, and **song comments** for **$1.50 per 1,000**. Pick any of 40 official charts (飙升榜, 热歌榜, 新歌榜, 原创榜, rap, ACG, Korean, Japanese, Western, Billboard and more) or paste playlist links, and get one clean row per track: rank, track name, artists, album, duration, release date and NetEase's 0-100 popularity score. Paste song links to get their hot comments with likes and reply counts. No login, no NetEase account.

![How the NetEase Cloud Music Scraper works](https://api.apify.com/v2/key-value-stores/hNay5YnL9RhfYt1bC/records/how-it-works-netease-music.png)

```json
{
  "charts": ["19723756", "3778678"],
  "playlistUrls": ["https://music.163.com/#/playlist?id=2829883282"],
  "songUrls": ["https://music.163.com/song?id=186016"]
}
```

| Input | Rows |
|---|---|
| Official chart | One `track` row per chart position, up to 100 |
| Playlist link or id | One `track` row per song in the playlist, up to the first 100 |
| Song link or id | One `comment` row per comment: the 15 hot comments, then the song's earliest comments, up to 115 |

### Why Use This Scraper?

- **40 official charts in one list.** Choose them by name in the input; no need to look up chart ids.
- **Correct chart names.** Chart rows carry the chart's Chinese name and an English name (`Soaring`, `Hot Songs`), checked against NetEase's own chart list.
- **Low price.** $0.0008 per track and $0.0015 per comment, with a $0.005 start fee. Other NetEase actors on the Store charge $0.001 per track plus a $0.10 start, or $0.003 to $0.004 per comment.
- **Clean rows.** Numbers as numbers, ISO dates, artists as a list, https image links.

### Use Cases

- **Chart tracking:** snapshot 飙升榜 or 热歌榜 every day and follow how songs move.
- **Music marketing in China:** see which releases climb the rap, ACG, folk or Guofeng charts.
- **Playlist research:** export any public playlist with its play count and subscriber count.
- **Fan sentiment:** read the most liked comments on a song (网易云热评) with their like counts.
- **Catalog matching:** NetEase track, album and artist ids for every chart entry.

### How It Works

1. Charts, playlists and songs are read four at a time; each lookup takes about 40 seconds.
2. A chart or playlist lookup returns up to its first 100 tracks; each track becomes a row.
3. A song lookup returns its hot comments and its earliest comments; each comment becomes a row.
4. Every row is charged as it is delivered, and the run stops cleanly at your spending limit or row cap.

### Input Configuration

| Field | Type | Description |
|---|---|---|
| `charts` | array | Official chart ids, picked by name in the input form. |
| `playlistUrls` | array | music.163.com playlist links (desktop, `#/`, mobile `/m/`) or bare playlist ids. |
| `maxTracksPerPlaylist` | integer | 10 to 100. Default 100. |
| `songUrls` | array | music.163.com song links or bare song ids, for comments. |
| `maxCommentsPerSong` | integer | 5 to 115. Default 115. |
| `hotCommentsOnly` | boolean | Only the hot comments (about 15 per song). Default false. |
| `maxItems` | integer | Cap on all rows. Default 1,000; free-plan runs return up to 100. |

#### Example input

Today's Soaring and Hot Songs charts, plus the hot comments on 晴天:

```json
{
  "charts": ["19723756", "3778678"],
  "songUrls": ["https://music.163.com/song?id=186016"],
  "hotCommentsOnly": true
}
```

### Output Samples

A chart track (热歌榜, 2026-10-26):

```json
{
  "type": "track",
  "rank": 1,
  "trackId": "287398",
  "trackName": "我不难过",
  "trackAlias": null,
  "artists": ["孙燕姿"],
  "artistIds": ["9272"],
  "albumId": "28539",
  "albumName": "未完成",
  "albumCoverUrl": "https://p4.music.126.net/Pzxy6py26NgNmhJjYMf2RQ==/109951169724216323.jpg",
  "durationMs": 320400,
  "durationSeconds": 320,
  "releasedAt": "2003-01-09T16:00:00.000Z",
  "isExplicit": false,
  "popularityScore": 100,
  "trackUrl": "https://music.163.com/song?id=287398",
  "playlistType": "chart",
  "playlistId": "3778678",
  "playlistName": "热歌榜",
  "chartNameEn": "Hot Songs",
  "playlistUrl": "https://music.163.com/playlist?id=3778678",
  "playlistCoverUrl": "https://p4.music.126.net/0SUEG8yDACfx0Bw2MYFv4Q==/109951170048519512.jpg",
  "playlistTrackCount": 200,
  "playlistPlayCount": 14210461696,
  "playlistSubscribedCount": 13222943,
  "playlistUpdatedAt": "2026-10-26T00:27:05.036Z",
  "snapshotAt": "2026-10-26T14:40:38.161Z",
  "input": "chart:Hot Songs",
  "scrapedAt": "2026-10-26T14:40:30.267Z"
}
```

A hot comment on 晴天:

```json
{
  "type": "comment",
  "commentId": "4956438",
  "songId": "186016",
  "songName": "晴天（Sunny Day）",
  "songUrl": "https://music.163.com/song?id=186016",
  "text": "高一听的，那时候遇到了孩儿他妈，然后就这么幸福下来了",
  "likeCount": 823171,
  "replyCount": 14,
  "isHot": true,
  "isReply": false,
  "parentCommentId": null,
  "authorName": "蛋蛋是圆D",
  "authorAvatarUrl": "https://p2.music.126.net/FwTFLzZFZOZO5WFL6-JRBg==/2755376139227068.jpg",
  "postedAt": "2014-10-17T07:22:54.252Z",
  "input": "https://music.163.com/song?id=186016",
  "scrapedAt": "2026-10-26T14:40:30.267Z"
}
```

### Key Output Fields

| Field | Meaning |
|---|---|
| `type` | `track` or `comment` |
| `rank` | Position in the chart or playlist |
| `popularityScore` | NetEase's popularity score from 0 to 100. It is not a play count. |
| `playlistType` | `chart` for an official chart, `playlist` for any other playlist |
| `playlistName`, `chartNameEn` | Chart name in Chinese and English; null for user playlists (see FAQ) |
| `playlistPlayCount`, `playlistSubscribedCount` | Plays and saves of the whole chart or playlist |
| `releasedAt` | Release date, when NetEase gives one (often empty on chart rows) |
| `likeCount`, `replyCount`, `isHot` | Comment likes, replies and whether it is a hot comment (精彩评论) |

### FAQ

**How many tracks can I get from one chart or playlist?**
The first 100. The data source has no paging, so a 200-track chart such as 热歌榜 gives its top 100.

**Which comments do I get?**
The 15 hot comments (the most liked) and then the earliest comments the song received, 115 at most. The newest comments are not available, and sorting by time is not offered for that reason. For a popular old song the non-hot comments can be ten years old.

**Why is the playlist name empty for my playlist?**
The source does not return the names of user playlists. Every other playlist field (cover, track count, play count, saves) is filled. Charts always have their names.

**Do I get play counts per song?**
No. NetEase shows a 0-100 popularity score per song, and play counts only for whole playlists and charts.

**Can I search songs or look up artists and albums?**
Not yet. Album and artist links are skipped with a warning.

**Is anything charged for a playlist that does not exist?**
No. An empty answer delivers no rows and costs nothing beyond the start fee.

**Do I need a NetEase account?**
No.

### Pricing

| Event | When | Price |
|---|---|---|
| Actor start | Once per run (per GB of memory, 256 MB default) | $0.005 |
| Track | Each chart or playlist track | $0.0008 |
| Comment | Each song comment | $0.0015 |

Example: the top 100 of 10 charts every day for a month is 30 × 1,000 tracks × $0.0008 + 30 × $0.005 = $24.15.

### Support

Found a bug or need a field? Open an issue on the actor's Issues tab and include the run link.

### ⚠️ Disclaimer

This actor reads public NetEase Cloud Music data. It is not affiliated with or endorsed by NetEase. You are responsible for using the data in line with NetEase's terms and the laws that apply to you, including data-protection law for comment authors' names. Song names, artwork links and comments belong to their owners.

### SEO Keywords

NetEase Cloud Music scraper, 网易云音乐 scraper, 网易云音乐榜单, 网易云热评, NetEase music charts, NetEase playlist export, 飙升榜, 热歌榜, 新歌榜, 原创榜, China music charts, Chinese music data, music.163.com scraper, NetEase comments scraper, C-pop charts, music analytics

# Actor input Schema

## `charts` (type: `array`):

NetEase Cloud Music official charts. Each chart gives its top tracks (up to 100) with rank, artists, album, duration and a 0-100 popularity score.

## `playlistUrls` (type: `array`):

Playlist links from music.163.com (https://music.163.com/playlist?id=…, #/playlist?id=…, mobile /m/playlist?id=…) or bare playlist ids. Chart links work too.

## `maxTracksPerPlaylist` (type: `integer`):

The source gives the first 100 tracks of a chart or playlist at most; there is no paging beyond that.

## `songUrls` (type: `array`):

Song links (https://music.163.com/song?id=186016) or bare song ids. Each song gives its hot comments plus its earliest comments, up to 115.

## `maxCommentsPerSong` (type: `integer`):

Up to 115: the 15 hot comments first, then the earliest comments of the song. Newest comments are not available from the source.

## `hotCommentsOnly` (type: `boolean`):

Return only the hot comments (精彩评论, about 15 per song, the most liked ones).

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

Cap on all rows together. Free-plan runs return up to 100.

## Actor input object example

```json
{
  "charts": [
    "19723756"
  ],
  "maxTracksPerPlaylist": 100,
  "maxCommentsPerSong": 115,
  "hotCommentsOnly": false,
  "maxItems": 1000
}
```

# Actor output Schema

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

Rows told apart by `type`: `track` and `comment`.

# 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 = {
    "charts": [
        "19723756"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/netease-music-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 = { "charts": ["19723756"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/netease-music-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 '{
  "charts": [
    "19723756"
  ]
}' |
apify call memo23/netease-music-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/netease-music-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/6lDmApAYenjVLXlaB/builds/hTgpMGodadxhLHQ9G/openapi.json
