# Migu Music Scraper: 咪咕音乐 (`getascraper/migu-music-scraper`) Actor

Scrape Migu Music (咪咕音乐, China Mobile's music service) song, album, artist, and playlist search results plus chart/toplist rankings and the singer directory. No login, no signature, HTTP-only.

- **URL**: https://apify.com/getascraper/migu-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.10 / 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

## 🎵 Migu Music Scraper: 咪咕音乐

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FFF4ED;border:1px solid #FAD1B0;border-top:4px solid #C2410C;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Pull Migu Music songs, charts, and artists straight from China Mobile's own catalog.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search songs, albums, artists, and playlists, then layer in chart rankings and the singer directory, all from one Actor with no login and no signature to fight.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FAD1B0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#9A3412">🎵 Full catalog search</span><br>
<span style="font-size:12px;color:#57534E">Songs, albums, artists, playlists, music videos, and lyric matches in one Actor</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FAD1B0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#9A3412">🏆 Full chart rankings</span><br>
<span style="font-size:12px;color:#57534E">Every ranked song per chart, with duration, play count, and chart score, not just a title list</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FAD1B0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#9A3412">⚡ No login, no blocks</span><br>
<span style="font-size:12px;color:#57534E">No signature scheme, no cookies, no signup wall standing between you and the data</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FAD1B0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#9A3412">🎤 Artist directory</span><br>
<span style="font-size:12px;color:#57534E">Browse singers by region and gender or group, not just search by name</span>
</td>
</tr>
</table>

Give this Actor a search keyword, a chart ID, or a singer-directory category, and it returns structured rows from **Migu Music** (咪咕音乐, `music.migu.cn`), the China Mobile-operated music service: song, album, artist, and playlist search results, music-video and lyric-match search, full chart/toplist rankings, and singer-directory browsing. Built for music-data researchers, chart-trend trackers, and app developers who need a fast, dependable Chinese music catalog lookup. Runs on the Apify platform with scheduling, integrations (Make, Zapier, Google Sheets), and run monitoring built in.

### 🔍 What does Migu Music Scraper do?

This Actor reads Migu Music's own JSON catalog and chart endpoints directly, the same data that powers the [music.migu.cn](https://music.migu.cn) web player, without touching a login page or a browser.

Pick one data mode per run: search songs, artists, albums, or playlists (songlists) by keyword; search music videos or lyric-matched songs; fetch a chart's full ranked song list by chart ID, or fetch the chart index itself to discover chart IDs and names; or browse the singer directory by region (Chinese, Western, Japanese/Korean) and gender or group. Every mode returns clean, structured rows ready for a spreadsheet or a database.

<table width="100%"><tr>
<td style="padding:12px 18px;background:#FFF4ED;border-left:4px solid #C2410C">
<span style="font-size:15px;color:#1C1917">&#9889; <b>Honest heads-up:</b> Migu Music has no comment or review feature anywhere on its platform, confirmed absent. This Actor covers catalog, charts, and artists, not comment sentiment. If you need comment data on a Chinese music platform, look at a NetEase or QQ Music scraper instead.</span>
</td>
</tr></table>

### 💡 Why use Migu Music Scraper?

- **I am a music-data researcher** comparing catalog size and chart movement across Chinese streaming platforms, and need Migu's numbers pulled the same fast, reliable way as my other sources.
- **I am a C-pop or K-pop fan-analytics builder** tracking which songs are climbing Migu's charts this week, without babysitting a scraper that keeps getting blocked or challenged.
- **I am an app developer** who needs a lightweight Chinese music catalog lookup (song, artist, album, playlist) for a side project, and don't want to stand up a browser just to search titles.
- **I am a market researcher** building a competitive snapshot of Chinese music platforms, and need Migu's chart data and artist directory as one clean input alongside everything else I track.

### 🚀 How to use Migu Music Scraper

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FFF4ED;border:1px solid #FAD1B0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#9A3412;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a data mode</span><br>
<span style="font-size:12px;color:#57534E">Song, album, artist, playlist, music video, lyric match, chart, or singer directory.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF4ED;border:1px solid #FAD1B0;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#9A3412;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add keywords or a chart ID</span><br>
<span style="font-size:12px;color:#57534E">Search terms for catalog modes, or a chart ID (leave it blank to discover chart IDs first).</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF4ED;border:1px solid #FAD1B0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#9A3412;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export your results</span><br>
<span style="font-size:12px;color:#57534E">Download one row per song, album, artist, or ranked chart entry.</span>
</td>
</tr>
</table>

### ⚙️ Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `entityType` | enum | No | Which data mode to run: `song`, `singer`, `album`, `songlist` (playlist), `mv` (music video), or `lyric` search by keyword; `chart` for toplist rankings; or `singerDirectory` to browse artists by category. Defaults to `song`. |
| `keywords` | array of strings | No | Search terms, used when `entityType` is a search mode. One request is made per keyword. Ignored for `chart` and `singerDirectory`. |
| `chartIds` | array of strings | No | Chart IDs (`rankId`) to fetch the full ranked song list for, used when `entityType` is `chart`. Leave empty to instead fetch the lightweight chart index (every available chart's ID, name, and category), useful for discovering IDs before a scheduled run. |
| `singerCategory` | enum | No | Region to browse when `entityType` is `singerDirectory`: `huayu` (Chinese), `oumei` (Western), or `rihan` (Japanese/Korean). Defaults to `huayu`. |
| `singerGender` | enum | No | Sub-category to browse when `entityType` is `singerDirectory`: `nan` (male), `nv` (female), or `group`. Defaults to `nan`. |
| `includeCreatorId` | boolean | No | Include the playlist creator's user ID in `songlist` results. Off by default since it is a personal identifier; turn on only if you specifically need it. |
| `maxItems` | integer | No | Maximum number of records to save in this run, across all keywords or chart IDs combined. Defaults to `50`. |
| `proxyConfiguration` | object | No | Proxy routing settings. Defaults to Apify's datacenter proxy, which this target does not block. |

### 📦 Output

Download the results as a spreadsheet, a table, or structured data ready for your own systems. Each row's shape depends on the data mode. A song search result:

````

{
"type": "song",
"id": "1140505222",
"name": "圣诞星（feat. 杨瑞代）",
"searchQuery": "周杰伦",
"contentId": "600929000000096577",
"copyrightId": "60054704965",
"singerNames": "周杰伦",
"singerIds": "112",
"albumName": "圣诞星",
"albumId": "1140505221",
"tags": \["国语", "爱情", "圣诞节", "流行说唱"],
"lyricUrl": "https://d.musicapp.migu.cn/data/oss/resource/00/2t/1l/38a861e9806641448f8cab425b1f2b18",
"imageUrl": "https://d.musicapp.migu.cn/data/oss/resource/00/5u/7q/959ba4e19cf64d488f1f623f95892bf2.webp",
"scrapedAt": "2026-07-19T06:16:24.724Z"
}

```

A chart ranking result (`entityType: "chart"` with a `chartIds` value):

```

{
"type": "chartSong",
"id": "1142735344",
"name": "梦哑",
"rankId": "23189399",
"rankPosition": 1,
"songId": "1142735344",
"singerNames": "任然",
"albumName": "梦哑",
"duration": 234,
"playCountDesc": "4.6万",
"chartScore": 76.13,
"imageUrl": "https://d.musicapp.migu.cn/data/oss/resource/00/5w/ng/83d489de5cbd44e38e5c8ff955f89884.webp",
"scrapedAt": "2026-07-19T06:25:49.245Z"
}

````

### 📊 Output data fields

| Field | Type | Description |
| --- | --- | --- |
| `type` | string | Which data mode produced this row: `song`, `singer`, `album`, `songlist`, `mv`, `lyric`, `chart`, `chartSong`, or `singerDirectory`. |
| `id` | string | The record's own ID within Migu's catalog. |
| `name` | string | Song, album, artist, playlist, or chart name. |
| `searchQuery` | string | The keyword that produced this result, for search modes. |
| `imageUrl` | string | Cover art, artist photo, or chart artwork. |
| `contentId` / `copyrightId` | string | Migu's internal content and copyright identifiers for a song, MV, or lyric match. |
| `singerNames` / `singerIds` | string | Comma-separated artist name(s) and ID(s). |
| `albumName` / `albumId` | string | The song's album, when available. |
| `tags` | array of strings | Genre, mood, and campaign tags Migu attaches to a song. |
| `lyricUrl` | string | Direct link to the song's lyric file, when available. |
| `publishDate` | string | Album release date. |
| `creatorUserId` | string | The playlist creator's user ID. Only included when `includeCreatorId` is on. |
| `trackCount` / `favoriteCount` / `playCount` / `shareCount` | number | Playlist track count, favorites, plays, and shares. |
| `mvId` / `mvPlayCount` | string / number | Music video ID and play count, for `mv` results. |
| `matchedLyric` | string | The highlighted lyric snippet that matched your search, for `lyric` results. |
| `hotValue` / `directoryTag` | number / string | Popularity value and tag (such as "hot") shown in the singer directory. |
| `category` / `gender` | string | The region and gender/group used for a `singerDirectory` browse. |
| `rankId` / `rankName` / `rankCategory` / `rankDesc` | string | Chart identity: ID, name, and which chart group it belongs to. |
| `rankPosition` | number | The song's position in the chart, 1-indexed. |
| `songId` | string | The ranked song's own ID, for `chartSong` results. |
| `duration` | number | Track length in seconds. |
| `playCountDesc` | string | Human-readable play count as Migu displays it (such as "4.6万"). |
| `chartScore` | number | Migu's internal chart score for the ranked song. |
| `qualities` | array of strings | Audio quality tiers available for the track. |
| `scrapedAt` | string | Timestamp when this row was collected. |

### 💰 Pricing

This Actor uses pay-per-result pricing: you pay for the records you actually get back, and nothing for an empty run. There is no subscription and no minimum spend. Use `maxItems` to control how many results a run returns.

### ⭐ Enjoying Migu Music Scraper: 咪咕音乐?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#FFF4ED;border:1px solid #FAD1B0;border-left:5px solid #C2410C;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">Got clean Migu Music data without fighting a single login wall?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other music-data researchers and chart-trend trackers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#C2410C;border:1px solid #FAD1B0;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/migu-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

- Leave `chartIds` empty on your first `chart` run to get the chart index (every chart's ID, name, and category), then feed a real `rankId` back in for the full ranked song list.
- `maxItems` caps the dataset regardless of how many results Migu's API actually returns for a query. The singer directory in particular returns its full category (often 1,000+ artists) no matter what page size you ask for, so `maxItems` is what actually keeps a run small.
- Turn on `includeCreatorId` only if you specifically need the playlist creator's user ID. It stays off by default since it is a personal identifier.
- Search modes cover songs, albums, artists, playlists, music videos, and lyric matches, but there is no "look up by ID" mode: Migu's own by-ID endpoints don't work, so a keyword search or a chart lookup is the reliable path to a specific record.
- Re-run the same chart IDs on a schedule to track how rankings move week over week.

### ❓ FAQ, disclaimers, and support

**Does this Actor get blocked?** No. Migu Music's catalog and chart endpoints returned complete data to a plain, unauthenticated request in every test run, with no login, no signature, and no rate limit encountered. Apify's proxy is available if you ever need it, but it is not required for this target.

**Does it scrape comments or reviews?** No. Migu Music has no comment or review feature anywhere on its platform, on any client. This is a confirmed absence, not a missing feature of this Actor.

**How fresh is the data?** Every run reads Migu's live catalog and chart endpoints at run time. Chart rankings in particular update on Migu's own schedule, so re-running with the same chart ID picks up movement automatically.

**Are all Migu Music data types supported?** Song, album, artist, and playlist search, music-video and lyric-match search, full chart rankings, and singer-directory browsing are all supported. A direct "look up this exact song ID" mode is not, since Migu's own by-ID endpoints don't work; use a keyword search or a chart lookup instead.

**Found a bug or need a field added?** Open an issue on the Actor's **Issues** tab. Custom solutions are available on request.

### 🔗 Other actors

- [che168 Used Car Scraper: Autohome 二手车 Listings, Dealer Profiles & Phone Reveals](https://apify.com/getascraper/che168-car-scraper) ↗ - scrapes China's largest used-car marketplace, including dealer profiles and phone reveals.
- [51job China Jobs Scraper: Aliyun WAF Bypass & Bilingual Fields](https://apify.com/getascraper/51job-scraper) ↗ - pulls job listings from China's largest recruitment platform with bilingual fields.
- [Buyee Scraper: Yahoo Auctions & Mercari Japan Data](https://apify.com/getascraper/buyee-scraper) ↗ - scrapes Japanese Yahoo Auctions and Mercari listings for cross-border buyers.
- [BookMyShow scraper](https://apify.com/getascraper/bookmyshow-scraper) ↗ - pulls movie, event, and show listings from India's largest entertainment ticketing platform.

# Actor input Schema

## `entityType` (type: `string`):

Song, singer, album, and songlist (playlist) modes search Migu's catalog by keyword. MV and lyric modes search music videos and lyric-matched songs. Chart mode returns toplist rankings. Singer directory browses artists by category, not keyword.
## `keywords` (type: `array`):

One or more search terms, e.g. a song title, artist name, or lyric snippet. One request is made per keyword.
## `chartIds` (type: `array`):

One or more Migu chart rankIds to fetch the full ranked song list for (e.g. 23189399 for the Mainland chart / 内地榜). Leave empty to instead fetch the lightweight chart index — every available chart's rankId, name, and category — so you can discover IDs for a future run. This index-only mode is the recommended input for a scheduled snapshot.
## `singerCategory` (type: `string`):

Which artist category to browse. Note: Migu's directory endpoint returns the full category (~1,400 artists) regardless of "Max items" below - this setting only limits how many are saved to the dataset, not how many are fetched from the API.
## `includeCreatorId` (type: `boolean`):

Playlist (songlist) search results include the creator's userId, a personal identifier. Off by default; enable only if you specifically need it.
## `maxItems` (type: `integer`):

Maximum number of records to save in this run (applies across all keywords/chart IDs combined). Also used as the per-request page size, capped at 100.
## `proxyConfiguration` (type: `object`):

Migu's gateways returned full JSON with zero auth, zero cookies, and zero signature to every UA tested (including a bare curl), with no WAF/rate-limit signature observed. Datacenter proxy is the default; switch to residential only if you see blocks in production.

## Actor input object example

```json
{
  "entityType": "song",
  "keywords": [
    "周杰伦"
  ],
  "chartIds": [],
  "singerCategory": "huayu-nan",
  "includeCreatorId": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

# Actor output Schema

## `results` (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 = {
    "entityType": "song",
    "keywords": [
        "周杰伦"
    ],
    "chartIds": [],
    "singerCategory": "huayu-nan",
    "includeCreatorId": false,
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/migu-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 = {
    "entityType": "song",
    "keywords": ["周杰伦"],
    "chartIds": [],
    "singerCategory": "huayu-nan",
    "includeCreatorId": False,
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/migu-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 '{
  "entityType": "song",
  "keywords": [
    "周杰伦"
  ],
  "chartIds": [],
  "singerCategory": "huayu-nan",
  "includeCreatorId": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/migu-music-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Migu Music Scraper: 咪咕音乐",
        "description": "Scrape Migu Music (咪咕音乐, China Mobile's music service) song, album, artist, and playlist search results plus chart/toplist rankings and the singer directory. No login, no signature, HTTP-only.",
        "version": "0.1",
        "x-build-id": "8M8UXKHjwLz5e1APQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~migu-music-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-migu-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~migu-music-scraper/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-migu-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~migu-music-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-migu-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": {
                    "entityType": {
                        "title": "Data mode",
                        "enum": [
                            "song",
                            "singer",
                            "album",
                            "songlist",
                            "mv",
                            "lyric",
                            "chart",
                            "singerDirectory"
                        ],
                        "type": "string",
                        "description": "Song, singer, album, and songlist (playlist) modes search Migu's catalog by keyword. MV and lyric modes search music videos and lyric-matched songs. Chart mode returns toplist rankings. Singer directory browses artists by category, not keyword.",
                        "default": "song"
                    },
                    "keywords": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "One or more search terms, e.g. a song title, artist name, or lyric snippet. One request is made per keyword.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "chartIds": {
                        "title": "Chart IDs (rankId)",
                        "type": "array",
                        "description": "One or more Migu chart rankIds to fetch the full ranked song list for (e.g. 23189399 for the Mainland chart / 内地榜). Leave empty to instead fetch the lightweight chart index — every available chart's rankId, name, and category — so you can discover IDs for a future run. This index-only mode is the recommended input for a scheduled snapshot.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "singerCategory": {
                        "title": "Region & gender/group",
                        "enum": [
                            "huayu-nan",
                            "huayu-nv",
                            "huayu-group",
                            "oumei-nan",
                            "oumei-nv",
                            "oumei-group",
                            "rihan-nan",
                            "rihan-nv",
                            "rihan-group"
                        ],
                        "type": "string",
                        "description": "Which artist category to browse. Note: Migu's directory endpoint returns the full category (~1,400 artists) regardless of \"Max items\" below - this setting only limits how many are saved to the dataset, not how many are fetched from the API.",
                        "default": "huayu-nan"
                    },
                    "includeCreatorId": {
                        "title": "Include playlist creator user ID",
                        "type": "boolean",
                        "description": "Playlist (songlist) search results include the creator's userId, a personal identifier. Off by default; enable only if you specifically need it.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of records to save in this run (applies across all keywords/chart IDs combined). Also used as the per-request page size, capped at 100.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Migu's gateways returned full JSON with zero auth, zero cookies, and zero signature to every UA tested (including a bare curl), with no WAF/rate-limit signature observed. Datacenter proxy is the default; switch to residential only if you see blocks in production.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
