# QQ Music Scraper: QQ音乐 Songs, Charts & Comments (`getascraper/qq-music-scraper`) Actor

Scrape QQ Music (QQ音乐/y.qq.com) song, album, artist, and playlist metadata, chart/toplist rankings, and full song comments (nick, avatar, content, praise count) via its open JSON APIs. No login, no API key. Look up by songmid/albummid/singermid/dissid or search by keyword.

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

## Pricing

from $1.90 / 1,000 music records

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## QQ Music Scraper: QQ音乐 Songs, Charts & Comments

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EAFBF4;border:1px solid #BFEEDA;border-top:4px solid #0FA968;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Get QQ Music songs, charts, and fan comments into your spreadsheet in minutes.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pull song, album, artist, and playlist data from QQ音乐 (QQ Music) plus full fan comments: nickname, comment text, and like count included. No QQ account, no login, no password.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFEEDA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B7F4F">🔍 Catalog lookup</span><br>
<span style="font-size:12px;color:#57534E">Search by keyword or pull any song, album, artist, or playlist by its ID.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFEEDA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B7F4F">💬 Real fan comments</span><br>
<span style="font-size:12px;color:#57534E">Nickname, avatar, comment text, and like count on every song. No other tool on Apify has this.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFEEDA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B7F4F">🏆 Live chart rankings</span><br>
<span style="font-size:12px;color:#57534E">Hot-song and rising-song toplist snapshots with rank and score, updated daily.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFEEDA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B7F4F">⚡ No login required</span><br>
<span style="font-size:12px;color:#57534E">Runs on QQ Music's own public data. No account, no password, no CAPTCHA.</span>
</td>
</tr>
</table>

**QQ Music Scraper** pulls song, album, artist, playlist, and chart data straight from [QQ Music (QQ音乐)](https://y.qq.com), one of China's biggest music streaming platforms with hundreds of millions of monthly listeners. Give it a search keyword or an ID copied from a QQ Music link, and it returns clean, structured records: track titles, artists, albums, release dates, audio file sizes, and full timed lyrics on request. It also pulls something nobody else on the Apify Store offers: real QQ Music song comments, with the commenter's nickname, avatar, comment text, and like count. Run it on demand or schedule it to catch new comments and chart movement automatically, all with Apify's proxy rotation, run history, and API access built in.

### 🎯 Why use QQ Music Scraper?

* **I am a China music market researcher** tracking which songs are trending on QQ Music each week, comparing chart rank against listen counts to spot breakout hits before they cross over internationally.
* **I am an A&R or licensing scout** monitoring rising artists' catalogs and reading fan comment sentiment to find songs worth pitching for sync licensing before a competitor notices them.
* **I am a fan sentiment analyst** pulling thousands of song comments (nickname, comment text, like count) to measure real audience reaction to a new release, not just raw play counts.
* **I am a playlist curator** researching QQ Music's user and editorial playlists to find fresh Mandopop and C-pop tracks worth adding to my own streaming channel.
* **I am a developer** building a China-music-adjacent app or bot and need a reliable way to pull song metadata and lyrics without reverse-engineering QQ Music's endpoints myself.

### 🚀 How to use QQ Music Scraper

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EAFBF4;border:1px solid #BFEEDA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0FA968;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a resource type</span><br>
<span style="font-size:12px;color:#57534E">Choose search, song, album, artist, playlist, chart, or chart index in the input form.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAFBF4;border:1px solid #BFEEDA;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0FA968;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add your target</span><br>
<span style="font-size:12px;color:#57534E">Paste a keyword, or an ID (songmid, albummid, singermid, dissid) copied straight from a QQ Music link.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAFBF4;border:1px solid #BFEEDA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0FA968;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run and export</span><br>
<span style="font-size:12px;color:#57534E">Get a clean table of songs, albums, artists, playlists, or comments, ready to download as JSON, CSV, or Excel.</span>
</td>
</tr>
</table>

Click **Try for free**, hit **Start**, and check the Output tab a few seconds later. Schedule it on a recurring interval to track chart movement or catch new comments as they come in.

### ⚙️ Input

Configure the run from the Apify Console form or pass JSON directly through the API.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `resourceType` | enum | No | What to fetch: `search`, `song`, `album`, `singer`, `playlist`, `chart`, or `chartIndex`. Defaults to `search`. |
| `searchKeyword` | string | No | Song title, artist name, or lyric fragment to search for. Used only when `resourceType` is `search`. |
| `songMid` | string | No | QQ Music's song mid (not the numeric song ID), found in a song's URL or in this Actor's own `search` output. Used only when `resourceType` is `song`. |
| `albumMid` | string | No | QQ Music's album mid, found in an album's URL or in this Actor's `search`/`song` output. Used only when `resourceType` is `album`. |
| `singerMid` | string | No | QQ Music's artist mid, found in an artist's URL or in this Actor's output. Used only when `resourceType` is `singer`. |
| `dissId` | string | No | QQ Music's numeric playlist ID, found in a playlist's URL. Used only when `resourceType` is `playlist`. |
| `chartId` | string | No | QQ Music's numeric chart/toplist ID. Run `resourceType` as `chartIndex` first to discover available chart IDs. Used only when `resourceType` is `chart`. |
| `includeLyrics` | boolean | No | Fetch full timed lyrics for the song. Only applies when `resourceType` is `song`. Defaults to false. |
| `includeComments` | boolean | No | Fetch song comments as separate dataset rows: nickname, avatar, comment text, and like count. Only applies when `resourceType` is `song`. Defaults to false. |
| `commentsSortBy` | enum | No | `newest` (chronological, most reliable comment text) or `hot` (praise-ranked). Defaults to `newest`. |
| `commentsSince` | string | No | ISO date or datetime. Only comments posted after this moment are fetched, useful for scheduled runs that should only pull new comments. Leave empty to fetch the most recent comments. |
| `maxItems` | integer | No | Cap on songs or charts returned: search results, album tracks, artist catalog songs, playlist tracks, or chart entries. Defaults to 20. |
| `maxComments` | integer | No | Cap on comments fetched for one song. Defaults to 50. |
| `proxyConfiguration` | object | No | Proxy settings. QQ Music's public data endpoints need no special proxy, so the default (Apify datacenter proxy) works for virtually every run. |

### 📤 Output

Every run produces a table of clean JSON records. Here is a real song record with lyrics and a real comment record it returned during testing:

```json
{
  "recordType": "song",
  "songId": 102065750,
  "songMid": "001Bbywq2gicae",
  "songName": "搁浅",
  "singerNames": "周杰伦",
  "albumId": 20612,
  "albumMid": "003DFRzD192KKD",
  "albumName": "七里香",
  "durationSec": 240,
  "releaseDate": "2004-08-03",
  "size320Kbps": 9607864,
  "sourceUrl": "https://y.qq.com/n/ryqq/songDetail/001Bbywq2gicae",
  "scrapedAt": "2026-07-19T06:21:26.260Z"
}
````

```json
{
  "recordType": "comment",
  "songId": 102065750,
  "songMid": "001Bbywq2gicae",
  "songName": "搁浅",
  "nick": "over",
  "content": "搁浅绝对是周杰伦最悲伤的音乐",
  "praiseCount": 0,
  "isHot": true,
  "commentedAt": "2026-07-19T06:16:11.000Z",
  "scrapedAt": "2026-07-19T06:21:28.574Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel, or pull it straight into a spreadsheet, Google Sheets, or your own pipeline through Apify's API and integrations.

### 📋 Data table

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | string | What kind of row this is: `song`, `album`, `singer`, `playlist`, `chart`, or `comment`. |
| `songName` / `songMid` / `songId` | string / number | The track's title and its two QQ Music identifiers. |
| `singerNames` / `singers` | string / array | Artist name(s) as readable text and as a structured list with IDs. |
| `albumName` / `albumMid` / `albumId` | string / number | The track's album title and identifiers. |
| `durationSec` | number | Track length in seconds. |
| `releaseDate` | string | Release date of the track or album. |
| `size320Kbps` / `sizeFlacBytes` | number | Audio file size at 320kbps and lossless FLAC, in bytes, a proxy for available audio quality. |
| `lyrics` | string | Full timed lyrics, only present when `includeLyrics` is on. |
| `description` / `company` / `genre` | string | Editorial description, record label, and genre, when QQ Music publishes them. |
| `chartRank` / `chartScore` / `chartId` | number / string | A song's position and score on a chart, only present in chart runs. |
| `name` / `entityId` | string | The display name and ID of an album, artist, playlist, or chart entity row. |
| `fansCount` / `totalSongs` / `totalAlbums` | number | Artist follower count and catalog size, only on artist entity rows. |
| `nick` / `avatarUrl` / `content` | string | A commenter's nickname, avatar image, and comment text. |
| `praiseCount` | number | How many likes a comment has received. |
| `commentedAt` | string | When the comment was posted, in ISO 8601 format. |
| `sourceUrl` | string | Direct link back to the song, album, artist, playlist, or chart page on QQ Music. |

### 💰 Pricing

Pricing is pay per event, billed for the results this Actor actually returns. Empty runs cost nothing.

- No fixed monthly subscription.
- No charge for a run that finds nothing.
- Scale from a single song lookup to a scheduled comment monitor without changing plans.

### ⭐ Enjoying QQ Music Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#EAFBF4;border:1px solid #BFEEDA;border-left:5px solid #0FA968;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">This Actor just saved you from hand-copying QQ Music comments one by one.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other China music researchers and A&R scouts find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0FA968;border:1px solid #BFEEDA;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/qq-music-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 💡 Tips for better runs

- Start with `resourceType: "search"` to discover a song's `songmid`, then switch to `resourceType: "song"` with `includeComments` on to pull its full comment history.
- Run `resourceType: "chartIndex"` once to see every available chart ID before requesting a specific `chart`.
- For a recurring comment monitor, schedule the Actor daily and set `commentsSince` to the last run's finish time so you only pay for genuinely new comments.
- Keep `maxItems` and `maxComments` tight for a first test run, then raise them once you know the output shape fits your workflow.

### ❓ FAQ

##### Does this QQ Music scraper get blocked?

No. It reads QQ Music's own public data endpoints, the same ones the QQ Music website itself uses, so runs complete without proxies, CAPTCHAs, or block-related retries in the vast majority of cases.

##### Do I need a QQ Music account or login?

No. Every field this Actor returns, song metadata, lyrics, charts, and comments, is publicly viewable on QQ Music without signing in. This Actor never asks for or stores QQ Music credentials.

##### How fresh is the chart and comment data?

Every run fetches live data at the moment it runs. Chart snapshots reflect that day's ranking, and comments come back in the order QQ Music itself returns them, newest first by default.

##### 怎么抓取QQ音乐评论 (how do I scrape QQ Music comments)?

Set `resourceType` to `song`, provide a `songMid`, and turn on `includeComments`. The Actor returns each comment as its own row with the commenter's nickname, comment text, and like count, no QQ Music login needed.

### 🔗 Other actors

- [Kugou Music Scraper: 酷狗音乐 Catalog, Charts & Lyrics](https://apify.com/getascraper/kugou-music-scraper) ↗ - the same catalog-and-chart approach for Kugou Music, another major Chinese streaming platform.
- [Ximalaya Scraper 喜马拉雅: Podcasts & Comments](https://apify.com/getascraper/ximalaya-scraper) ↗ - pulls Chinese podcast episodes and listener comments from Ximalaya.
- [2GIS Reviews Scraper: Отзывы 2ГИС](https://apify.com/getascraper/2gis-reviews-scraper) ↗ - the same nickname-avatar-content-praise comment pattern, applied to 2GIS business reviews.
- [che168 Used Car Scraper: Autohome 二手车 Listings, Dealer Profiles & Phone Reveals](https://apify.com/getascraper/che168-car-scraper) ↗ - another Chinese-platform Actor, built for used car listings instead of music.
- [51job China Jobs Scraper: Aliyun WAF Bypass & Bilingual Fields](https://apify.com/getascraper/51job-scraper) ↗ - a China market job board scraper with bilingual Chinese and English fields.

# Actor input Schema

## `resourceType` (type: `string`):

search: song keyword lookup. song: one song's metadata (+lyrics/comments). album: album detail + tracklist. singer: artist bio + catalog. playlist: playlist detail + tracklist. chart: one chart's 100-song snapshot. chartIndex: list of all available charts/toplists.

## `searchKeyword` (type: `string`):

Song title, artist name, or lyric fragment to search for. Used only when Resource type = "search". Example: 周杰伦 or Jay Chou.

## `songMid` (type: `string`):

QQ Music's song mid (e.g. 001Bbywq2gicae), not the numeric songid. Found in a song's URL (y.qq.com/n/ryqq/songDetail/<songmid>) or in this Actor's own "search" output (songMid field). Used only when Resource type = "song".

## `albumMid` (type: `string`):

QQ Music's album mid (e.g. 003DFRzD192KKD). Found in an album's URL (y.qq.com/n/ryqq/albumDetail/<albummid>) or in this Actor's "search"/"song" output (albumMid field). Used only when Resource type = "album".

## `singerMid` (type: `string`):

QQ Music's singer/artist mid (e.g. 0025NhlN2yWrP4). Found in a singer's URL (y.qq.com/n/ryqq/singer/<singermid>) or in this Actor's output (singers\[].mid field). Used only when Resource type = "singer".

## `dissId` (type: `string`):

QQ Music's numeric playlist ID (e.g. 7707261125). Found in a playlist's URL (y.qq.com/n/ryqq/playlist/<dissid>). Used only when Resource type = "playlist".

## `chartId` (type: `string`):

QQ Music's numeric chart/toplist ID (e.g. 26 for the 巅峰榜·热歌 hot-songs chart). Run Resource type = "chartIndex" first to discover all available chart IDs. Used only when Resource type = "chart".

## `includeLyrics` (type: `boolean`):

Fetch the full timed (LRC) lyrics for the song. Adds one extra request. Only applies when Resource type = "song".

## `includeComments` (type: `boolean`):

Fetch song comments (nick, avatar, content, praise count) as separate dataset items. This is the Actor's differentiated data - nobody else on Apify exposes QQ Music comments. Only applies when Resource type = "song".

## `commentsSortBy` (type: `string`):

"newest" (chronological, newest first) is the reliable choice - every comment has populated text. "hot" (praise-ranked) can occasionally return a hot comment with no text populated by QQ Music's own API - see this Actor's AGENTS.md. Only applies when Include song comments is on.

## `commentsSince` (type: `string`):

ISO date/time (e.g. 2026-07-01 or 2026-07-01T00:00:00Z). Only comments posted after this moment are fetched - use this for recurring/scheduled runs to pull just the new comments since the last run, instead of re-fetching the whole history. Leave empty to fetch the most recent Max comments. Only applies when Include song comments is on and Comments sort order = "newest".

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

Maximum number of songs/charts to return: search results, album tracks, singer catalog songs, playlist tracks, or chart entries (chart/chartIndex modes). Ignored for Resource type = "song" (always 1 song).

## `maxComments` (type: `integer`):

Maximum number of comments to fetch for one song. Only applies when Include song comments is on.

## `proxyConfiguration` (type: `object`):

QQ Music's JSON APIs showed zero anti-bot signature during build-time recon (no WAF cookie, no signature, no TLS/JA3 gating) - datacenter proxy is the correct, cheaper default. Switch to residential only if you start seeing repeated connection failures at high volume.

## Actor input object example

```json
{
  "resourceType": "search",
  "searchKeyword": "周杰伦",
  "includeLyrics": false,
  "includeComments": false,
  "commentsSortBy": "newest",
  "maxItems": 20,
  "maxComments": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "resourceType": "search",
    "searchKeyword": "周杰伦",
    "includeLyrics": false,
    "includeComments": false,
    "commentsSortBy": "newest",
    "maxItems": 20,
    "maxComments": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/qq-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 = {
    "resourceType": "search",
    "searchKeyword": "周杰伦",
    "includeLyrics": False,
    "includeComments": False,
    "commentsSortBy": "newest",
    "maxItems": 20,
    "maxComments": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/qq-music-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "resourceType": "search",
  "searchKeyword": "周杰伦",
  "includeLyrics": false,
  "includeComments": false,
  "commentsSortBy": "newest",
  "maxItems": 20,
  "maxComments": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/qq-music-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=getascraper/qq-music-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "QQ Music Scraper: QQ音乐 Songs, Charts & Comments",
        "description": "Scrape QQ Music (QQ音乐/y.qq.com) song, album, artist, and playlist metadata, chart/toplist rankings, and full song comments (nick, avatar, content, praise count) via its open JSON APIs. No login, no API key. Look up by songmid/albummid/singermid/dissid or search by keyword.",
        "version": "0.1",
        "x-build-id": "RBaY3tUVL9zne72gY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~qq-music-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-qq-music-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/getascraper~qq-music-scraper/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-qq-music-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/getascraper~qq-music-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-qq-music-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "resourceType": {
                        "title": "Resource type",
                        "enum": [
                            "search",
                            "song",
                            "album",
                            "singer",
                            "playlist",
                            "chart",
                            "chartIndex"
                        ],
                        "type": "string",
                        "description": "search: song keyword lookup. song: one song's metadata (+lyrics/comments). album: album detail + tracklist. singer: artist bio + catalog. playlist: playlist detail + tracklist. chart: one chart's 100-song snapshot. chartIndex: list of all available charts/toplists.",
                        "default": "search"
                    },
                    "searchKeyword": {
                        "title": "Search keyword",
                        "type": "string",
                        "description": "Song title, artist name, or lyric fragment to search for. Used only when Resource type = \"search\". Example: 周杰伦 or Jay Chou."
                    },
                    "songMid": {
                        "title": "Song mid",
                        "type": "string",
                        "description": "QQ Music's song mid (e.g. 001Bbywq2gicae), not the numeric songid. Found in a song's URL (y.qq.com/n/ryqq/songDetail/<songmid>) or in this Actor's own \"search\" output (songMid field). Used only when Resource type = \"song\"."
                    },
                    "albumMid": {
                        "title": "Album mid",
                        "type": "string",
                        "description": "QQ Music's album mid (e.g. 003DFRzD192KKD). Found in an album's URL (y.qq.com/n/ryqq/albumDetail/<albummid>) or in this Actor's \"search\"/\"song\" output (albumMid field). Used only when Resource type = \"album\"."
                    },
                    "singerMid": {
                        "title": "Singer mid",
                        "type": "string",
                        "description": "QQ Music's singer/artist mid (e.g. 0025NhlN2yWrP4). Found in a singer's URL (y.qq.com/n/ryqq/singer/<singermid>) or in this Actor's output (singers[].mid field). Used only when Resource type = \"singer\"."
                    },
                    "dissId": {
                        "title": "Playlist ID (dissid)",
                        "type": "string",
                        "description": "QQ Music's numeric playlist ID (e.g. 7707261125). Found in a playlist's URL (y.qq.com/n/ryqq/playlist/<dissid>). Used only when Resource type = \"playlist\"."
                    },
                    "chartId": {
                        "title": "Chart / toplist ID",
                        "type": "string",
                        "description": "QQ Music's numeric chart/toplist ID (e.g. 26 for the 巅峰榜·热歌 hot-songs chart). Run Resource type = \"chartIndex\" first to discover all available chart IDs. Used only when Resource type = \"chart\"."
                    },
                    "includeLyrics": {
                        "title": "Include full lyrics",
                        "type": "boolean",
                        "description": "Fetch the full timed (LRC) lyrics for the song. Adds one extra request. Only applies when Resource type = \"song\".",
                        "default": false
                    },
                    "includeComments": {
                        "title": "Include song comments",
                        "type": "boolean",
                        "description": "Fetch song comments (nick, avatar, content, praise count) as separate dataset items. This is the Actor's differentiated data - nobody else on Apify exposes QQ Music comments. Only applies when Resource type = \"song\".",
                        "default": false
                    },
                    "commentsSortBy": {
                        "title": "Comments sort order",
                        "enum": [
                            "newest",
                            "hot"
                        ],
                        "type": "string",
                        "description": "\"newest\" (chronological, newest first) is the reliable choice - every comment has populated text. \"hot\" (praise-ranked) can occasionally return a hot comment with no text populated by QQ Music's own API - see this Actor's AGENTS.md. Only applies when Include song comments is on.",
                        "default": "newest"
                    },
                    "commentsSince": {
                        "title": "Comments since (cursor)",
                        "type": "string",
                        "description": "ISO date/time (e.g. 2026-07-01 or 2026-07-01T00:00:00Z). Only comments posted after this moment are fetched - use this for recurring/scheduled runs to pull just the new comments since the last run, instead of re-fetching the whole history. Leave empty to fetch the most recent Max comments. Only applies when Include song comments is on and Comments sort order = \"newest\"."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of songs/charts to return: search results, album tracks, singer catalog songs, playlist tracks, or chart entries (chart/chartIndex modes). Ignored for Resource type = \"song\" (always 1 song).",
                        "default": 20
                    },
                    "maxComments": {
                        "title": "Max comments per song",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of comments to fetch for one song. Only applies when Include song comments is on.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "QQ Music's JSON APIs showed zero anti-bot signature during build-time recon (no WAF cookie, no signature, no TLS/JA3 gating) - datacenter proxy is the correct, cheaper default. Switch to residential only if you start seeing repeated connection failures at high volume.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
