{
  "data": {
    "id": "OBp2YCjuqgFzas3t0",
    "actId": "vXYLnAW7cJHKOW6xQ",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-28T13:25:05.407Z",
    "finishedAt": "2026-10-28T13:25:09.265Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3774,
      "runTimeSecs": 3.774,
      "computeUnits": 0.004193333333333334,
      "imageSizeBytes": 318678528
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"NetEase Cloud Music Scraper Input\",\n  \"description\": \"Search NetEase Cloud Music, fetch songs, lyrics, artists, albums, playlists, all charts and comments. No login or proxy setup required.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to fetch. Each mode reads its own list field.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"bySongUrl\",\n        \"byArtist\",\n        \"byArtistAlbums\",\n        \"byAlbum\",\n        \"byPlaylist\",\n        \"byPlaylistUrl\",\n        \"byToplist\",\n        \"toplists\",\n        \"comments\"\n      ],\n      \"enumTitles\": [\n        \"Search songs, albums, artists or playlists\",\n        \"Song details by URL or ID (with lyrics)\",\n        \"Artist full song catalogue\",\n        \"Artist album discography\",\n        \"Album details and tracks\",\n        \"Browse playlists by category\",\n        \"Playlist details and full tracklist\",\n        \"One or more charts (or all charts)\",\n        \"Chart catalogue\",\n        \"Comments and replies\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries\",\n      \"type\": \"array\",\n      \"description\": \"Free-text queries (mode=search). One or more artist, song, album or playlist names.\",\n      \"editor\": \"stringList\",\n      \"default\": [\n        \"周杰伦\"\n      ],\n      \"prefill\": [\n        \"周杰伦\"\n      ]\n    },\n    \"searchType\": {\n      \"title\": \"Search result type\",\n      \"type\": \"string\",\n      \"description\": \"Which catalog entity to search for (mode=search).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"song\",\n        \"album\",\n        \"artist\",\n        \"playlist\"\n      ],\n      \"enumTitles\": [\n        \"Songs\",\n        \"Albums\",\n        \"Artists\",\n        \"Playlists\"\n      ],\n      \"default\": \"song\",\n      \"prefill\": \"song\"\n    },\n    \"songUrls\": {\n      \"title\": \"Song URLs or IDs (mode=bySongUrl)\",\n      \"type\": \"array\",\n      \"description\": \"music.163.com song URLs or bare song IDs, e.g. 186016.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"artistIds\": {\n      \"title\": \"Artist IDs, URLs or names (mode=byArtist / byArtistAlbums)\",\n      \"type\": \"array\",\n      \"description\": \"Artist IDs, music.163.com artist URLs, or exact artist names.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"artistOrder\": {\n      \"title\": \"Artist song order\",\n      \"type\": \"string\",\n      \"description\": \"Order the artist's song catalogue by popularity or release time (mode=byArtist).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"hot\",\n        \"time\"\n      ],\n      \"enumTitles\": [\n        \"Most popular\",\n        \"Newest release\"\n      ],\n      \"default\": \"hot\",\n      \"prefill\": \"hot\"\n    },\n    \"albumUrls\": {\n      \"title\": \"Album URLs or IDs (mode=byAlbum)\",\n      \"type\": \"array\",\n      \"description\": \"music.163.com album URLs or bare album IDs.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"playlistUrls\": {\n      \"title\": \"Playlist URLs or IDs (mode=byPlaylistUrl)\",\n      \"type\": \"array\",\n      \"description\": \"music.163.com playlist URLs or bare playlist IDs. Full tracklists are read.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"playlistCat\": {\n      \"title\": \"Playlist category\",\n      \"type\": \"string\",\n      \"description\": \"NetEase playlist genre, scene or mood to browse (mode=byPlaylist).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"全部\",\n        \"综艺\",\n        \"流行\",\n        \"怀旧\",\n        \"清晨\",\n        \"华语\",\n        \"影视原声\",\n        \"摇滚\",\n        \"夜晚\",\n        \"清新\",\n        \"欧美\",\n        \"ACG\",\n        \"民谣\",\n        \"学习\",\n        \"浪漫\",\n        \"儿童\",\n        \"日语\",\n        \"工作\",\n        \"校园\",\n        \"电子\",\n        \"韩语\",\n        \"游戏\",\n        \"午休\",\n        \"粤语\",\n        \"伤感\",\n        \"舞曲\",\n        \"治愈\",\n        \"下午茶\",\n        \"说唱\",\n        \"70后\",\n        \"地铁\",\n        \"轻音乐\",\n        \"放松\",\n        \"80后\",\n        \"驾车\",\n        \"爵士\",\n        \"孤独\",\n        \"90后\",\n        \"乡村\",\n        \"感动\",\n        \"运动\",\n        \"网络歌曲\",\n        \"旅行\",\n        \"兴奋\",\n        \"R&B/Soul\",\n        \"KTV\",\n        \"古典\",\n        \"快乐\",\n        \"经典\",\n        \"散步\",\n        \"翻唱\",\n        \"民族\",\n        \"酒吧\",\n        \"安静\",\n        \"英伦\",\n        \"思念\",\n        \"吉他\",\n        \"金属\",\n        \"钢琴\",\n        \"朋克\",\n        \"器乐\",\n        \"蓝调\",\n        \"榜单\",\n        \"雷鬼\",\n        \"00后\",\n        \"世界音乐\",\n        \"拉丁\",\n        \"New Age\",\n        \"古风\",\n        \"后摇\",\n        \"Bossa Nova\"\n      ],\n      \"enumTitles\": [\n        \"全部\",\n        \"综艺\",\n        \"流行\",\n        \"怀旧\",\n        \"清晨\",\n        \"华语\",\n        \"影视原声\",\n        \"摇滚\",\n        \"夜晚\",\n        \"清新\",\n        \"欧美\",\n        \"ACG\",\n        \"民谣\",\n        \"学习\",\n        \"浪漫\",\n        \"儿童\",\n        \"日语\",\n        \"工作\",\n        \"校园\",\n        \"电子\",\n        \"韩语\",\n        \"游戏\",\n        \"午休\",\n        \"粤语\",\n        \"伤感\",\n        \"舞曲\",\n        \"治愈\",\n        \"下午茶\",\n        \"说唱\",\n        \"70后\",\n        \"地铁\",\n        \"轻音乐\",\n        \"放松\",\n        \"80后\",\n        \"驾车\",\n        \"爵士\",\n        \"孤独\",\n        \"90后\",\n        \"乡村\",\n        \"感动\",\n        \"运动\",\n        \"网络歌曲\",\n        \"旅行\",\n        \"兴奋\",\n        \"R&B/Soul\",\n        \"KTV\",\n        \"古典\",\n        \"快乐\",\n        \"经典\",\n        \"散步\",\n        \"翻唱\",\n        \"民族\",\n        \"酒吧\",\n        \"安静\",\n        \"英伦\",\n        \"思念\",\n        \"吉他\",\n        \"金属\",\n        \"钢琴\",\n        \"朋克\",\n        \"器乐\",\n        \"蓝调\",\n        \"榜单\",\n        \"雷鬼\",\n        \"00后\",\n        \"世界音乐\",\n        \"拉丁\",\n        \"New Age\",\n        \"古风\",\n        \"后摇\",\n        \"Bossa Nova\"\n      ],\n      \"default\": \"华语\",\n      \"prefill\": \"华语\"\n    },\n    \"toplistIds\": {\n      \"title\": \"Chart IDs, names or URLs (mode=byToplist)\",\n      \"type\": \"array\",\n      \"description\": \"Chart IDs, music.163.com toplist URLs, or Chinese/English chart names. Use `all` or leave empty for every current chart.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"maxTracksPerChart\": {\n      \"title\": \"Max tracks per chart\",\n      \"type\": \"integer\",\n      \"description\": \"Limit tracks read from each chart before the global max items cap (mode=byToplist). 0 reads every track.\",\n      \"minimum\": 0,\n      \"maximum\": 1000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"commentUrls\": {\n      \"title\": \"Comment targets (mode=comments)\",\n      \"type\": \"array\",\n      \"description\": \"Song, album, playlist or chart URLs/IDs. A bare ID is treated as a song; use `album:123`, `playlist:123` or `chart:123` to be explicit.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"commentOrder\": {\n      \"title\": \"Comment order\",\n      \"type\": \"string\",\n      \"description\": \"Recommended comments or NetEase's hot-comment selection (mode=comments).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"recommended\",\n        \"hot\"\n      ],\n      \"enumTitles\": [\n        \"Recommended\",\n        \"Hot comments\"\n      ],\n      \"default\": \"recommended\",\n      \"prefill\": \"recommended\"\n    },\n    \"maxCommentsPerItem\": {\n      \"title\": \"Max comments per resource\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum top-level comments read per song, album, playlist or chart (mode=comments). NetEase stops anonymous pagination around 1,100.\",\n      \"minimum\": 1,\n      \"maximum\": 1100,\n      \"default\": 100,\n      \"prefill\": 100\n    },\n    \"includeReplies\": {\n      \"title\": \"Include comment replies\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the reply floor for comments that have replies (mode=comments).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxRepliesPerComment\": {\n      \"title\": \"Max replies per comment\",\n      \"type\": \"integer\",\n      \"description\": \"How many replies to read for each comment when replies are enabled (mode=comments).\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"default\": 20,\n      \"prefill\": 20\n    },\n    \"includeArtistProfile\": {\n      \"title\": \"Include artist profile\",\n      \"type\": \"boolean\",\n      \"description\": \"Emit one artist profile record with bio, images, sizes, rank, identities and fan count (mode=byArtist / byArtistAlbums).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeLyrics\": {\n      \"title\": \"Include lyrics\",\n      \"type\": \"boolean\",\n      \"description\": \"Attach full LRC lyrics plus translation, romanization and word-by-word lyrics when NetEase has them (every song mode).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeAlbumTracks\": {\n      \"title\": \"Include album tracks\",\n      \"type\": \"boolean\",\n      \"description\": \"Emit each album's tracks as song records (mode=byAlbum).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includePlaylistTracks\": {\n      \"title\": \"Include playlist tracks\",\n      \"type\": \"boolean\",\n      \"description\": \"Emit the playlist's full tracklist as song records (mode=byPlaylistUrl).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeToplistInfo\": {\n      \"title\": \"Include chart summary\",\n      \"type\": \"boolean\",\n      \"description\": \"Emit a chart summary record before each chart's tracks (mode=byToplist).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"minDurationSec\": {\n      \"title\": \"Min song duration (seconds)\",\n      \"type\": \"integer\",\n      \"description\": \"Skip song records shorter than this. Album, artist, playlist and chart metadata are unaffected.\",\n      \"minimum\": 0,\n      \"maximum\": 86400\n    },\n    \"maxDurationSec\": {\n      \"title\": \"Max song duration (seconds)\",\n      \"type\": \"integer\",\n      \"description\": \"Skip song records longer than this. Album, artist, playlist and chart metadata are unaffected.\",\n      \"minimum\": 0,\n      \"maximum\": 86400\n    },\n    \"minPopularity\": {\n      \"title\": \"Min song popularity\",\n      \"type\": \"integer\",\n      \"description\": \"Skip song records below this NetEase popularity score (0-100). Metadata records are unaffected.\",\n      \"minimum\": 0,\n      \"maximum\": 100\n    },\n    \"minPlayCount\": {\n      \"title\": \"Min playlist plays\",\n      \"type\": \"integer\",\n      \"description\": \"Skip browsed playlists with fewer plays (mode=byPlaylist).\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000\n    },\n    \"minTrackCount\": {\n      \"title\": \"Min playlist tracks\",\n      \"type\": \"integer\",\n      \"description\": \"Skip browsed playlists with fewer tracks (mode=byPlaylist).\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000\n    },\n    \"containsKeyword\": {\n      \"title\": \"Contains keyword\",\n      \"type\": \"string\",\n      \"description\": \"Keep only records whose name contains this text (case-insensitive). Applies to songs, albums, artists, playlists and charts.\",\n      \"editor\": \"textfield\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on total dataset records for the run, including error records.\",\n      \"minimum\": 1,\n      \"maximum\": 100000,\n      \"default\": 100,\n      \"prefill\": 3\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# NetEase Cloud Music Scraper: Songs, Charts & Comments\n\nNetEase Cloud Music (网易云音乐) is one of China's largest music streaming catalogs. This actor reads its public catalog without an account: search songs, albums, artists and playlists; pull song details with full LRC, translated, romanized and word-by-word lyrics; walk an artist's complete discography; read album and playlist tracklists; collect every current chart; and export comments with optional replies. No login, cookies, API keys or proxy setup.\n\n## What this actor does\n\n- **Ten modes:** `search`, `bySongUrl`, `byArtist`, `byArtistAlbums`, `byAlbum`, `byPlaylist`, `byPlaylistUrl`, `byToplist`, `toplists`, `comments`.\n- **Catalog search:** songs, albums, artists and playlists through NetEase's modern search endpoint, with popularity and duration included.\n- **Lyrics:** full LRC plus translation, romanization and word-by-word lyrics whenever NetEase publishes them.\n- **Playlists and charts:** complete tracklists from `trackIds`, including each track's playlist rank and the time it was added.\n- **Comments:** recommended or hot comments for songs, albums, playlists and charts, with an optional reply floor.\n- **Clean output:** empty fields are omitted; invalid or unavailable inputs become explicit `error` records instead of disappearing.\n\n## Services\n\n- **Music catalog lookup** — song, album, artist and playlist search.\n- **Song enrichment** — release dates, quality tiers, maximum bitrate, music-video links and full lyric variants.\n- **Artist intelligence** — full song catalogue, album catalogue, profile biography, images, ranks, identities and fan count.\n- **Playlist and chart coverage** — 70 live playlist categories, all 65 current charts, chart positions and rank movement where NetEase publishes it.\n- **Audience research** — comment text, likes, timestamps, authors, avatars, IP locations and replies.\n\n## How it works\n\nThe actor reads NetEase Cloud Music's public web catalog anonymously. Each mode calls the matching public catalog, lyric, chart or comment view and converts the response into flat, readable records. When NetEase responds with a verification challenge instead of data, the actor keeps the run alive by switching to a working connection automatically and continues from the same page. Runs stop on the requested item cap or when NetEase runs out of matching results — never on a fixed time limit.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | One of the ten modes listed above |\n| `searchQueries` | array | `[\"周杰伦\"]` | Queries for `search` |\n| `searchType` | string | `song` | `song`, `album`, `artist` or `playlist` |\n| `songUrls` | array | – | Song URLs or bare IDs for `bySongUrl` |\n| `artistIds` | array | – | Artist IDs, URLs or exact names for `byArtist` / `byArtistAlbums` |\n| `artistOrder` | string | `hot` | `hot` or `time` for an artist's songs |\n| `albumUrls` | array | – | Album URLs or IDs for `byAlbum` |\n| `playlistUrls` | array | – | Playlist URLs or IDs for `byPlaylistUrl` |\n| `playlistCat` | string | `华语` | 70 NetEase categories plus `全部` for `byPlaylist` |\n| `toplistIds` | array | – | Chart IDs, names or URLs for `byToplist`; `all` or empty scans every chart |\n| `maxTracksPerChart` | int | `0` | Tracks per chart; `0` reads all |\n| `commentUrls` | array | – | Song/album/playlist/chart URLs or IDs for `comments` |\n| `commentOrder` | string | `recommended` | `recommended` or `hot` |\n| `maxCommentsPerItem` | int | `100` | Top-level comments per resource (1–1,100) |\n| `includeReplies` | boolean | `false` | Also read reply floors |\n| `maxRepliesPerComment` | int | `20` | Replies read per comment |\n| `includeArtistProfile` | boolean | `false` | Emit an artist profile record |\n| `includeLyrics` | boolean | `false` | Attach every available lyric variant |\n| `includeAlbumTracks` | boolean | `true` | Emit album tracks as songs |\n| `includePlaylistTracks` | boolean | `true` | Emit the complete playlist tracklist |\n| `includeToplistInfo` | boolean | `true` | Emit a chart summary before tracks |\n| `minDurationSec` / `maxDurationSec` | int | – | Song duration window; metadata records are unaffected |\n| `minPopularity` | int | – | Song popularity floor (0–100) |\n| `minPlayCount` / `minTrackCount` | int | – | Playlist browse filters |\n| `containsKeyword` | string | – | Name must contain this text (case-insensitive) |\n| `maxItems` | int | `100` | Hard cap on all dataset records, including errors (1–100,000) |\n\n### Example: search songs\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"周杰伦\", \"晴天\"],\n  \"searchType\": \"song\",\n  \"maxItems\": 50\n}\n```\n\n### Example: song details with every lyric variant\n\n```json\n{\n  \"mode\": \"bySongUrl\",\n  \"songUrls\": [\"https://music.163.com/#/song?id=186016\"],\n  \"includeLyrics\": true,\n  \"maxItems\": 1\n}\n```\n\n### Example: a complete playlist with added-at timestamps\n\n```json\n{\n  \"mode\": \"byPlaylistUrl\",\n  \"playlistUrls\": [\"https://music.163.com/#/playlist?id=8803637201\"],\n  \"includePlaylistTracks\": true,\n  \"maxItems\": 500\n}\n```\n\n### Example: all current charts, first 20 tracks each\n\n```json\n{\n  \"mode\": \"byToplist\",\n  \"toplistIds\": [\"all\"],\n  \"maxTracksPerChart\": 20,\n  \"includeToplistInfo\": true,\n  \"maxItems\": 1000\n}\n```\n\n### Example: hot comments with replies\n\n```json\n{\n  \"mode\": \"comments\",\n  \"commentUrls\": [\"https://music.163.com/#/song?id=186016\"],\n  \"commentOrder\": \"hot\",\n  \"maxCommentsPerItem\": 100,\n  \"includeReplies\": true,\n  \"maxRepliesPerComment\": 10,\n  \"maxItems\": 200\n}\n```\n\n## Output\n\nEvery record carries `recordType`, `sourceUrl` and `scrapedAt` (UTC ISO). Empty fields are omitted at every depth.\n\n### Song (`recordType: \"song\"`)\n\n- `songId`, `name`, `alias[]`, `transName`\n- `artists[]`, `artist`, `albumId`, `album`, `coverUrl`\n- `durationSec`, `popularity`, `score`, `playedNum`, `starredNum`\n- `fee`, `copyright`, `copyrightId`, `single`\n- `mvid`, `mvUrl`, `disc`, `trackNo`, `position`\n- `publishTimeMs`, `publishDate`, `commentThreadId`\n- `availableQualities[]`, `maxBitrateKbps`\n- `lyric`, `lyricTranslation`, `lyricRomanization`, `lyricWordByWord`, `lyricCredit`\n- `rankPosition`, `chartId`, `chartName`, `previousRank`, `rankChange`\n- `playlistId`, `playlistName`, `addedToPlaylistAt`\n- `mp3Url` only when NetEase exposes a valid HTTPS source value\n\n### Album (`recordType: \"album\"`)\n\n`albumId`, `name`, `coverUrl`, `trackCount`, `publishTimeMs`, `publishDate`, `company`, `type`, `subType`, `paid`, `onSale`, `artists[]`, `artist`, `description`, `commentThreadId`, `albumUrl`, `sourceUrl`.\n\n### Artist (`recordType: \"artist\"`)\n\n`artistId`, `name`, `alias[]`, `transNames[]`, `briefDesc`, `avatarUrl`, `coverUrl`, `picUrl`, `albumSize`, `musicSize`, `mvSize`, `videoCount`, `fansCount`, `fansSize`, `rank`, `identities[]`, `sourceUrl`.\n\n### Playlist (`recordType: \"playlist\"`)\n\n`playlistId`, `name`, `coverUrl`, `playCount`, `trackCount`, `totalDurationMs`, `creatorName`, `creatorId`, `creatorAvatarUrl`, `tags[]`, `description`, `updateTimeMs`, `createTimeMs`, `commentThreadId`, `playlistType`, `privacy`, `updateFrequency`, `sourceUrl`.\n\n### Chart summary (`recordType: \"toplist\"`)\n\n`toplistId`, `name`, `englishTitle`, `coverUrl`, `description`, `playCount`, `trackCount`, `subscribedCount`, `updateFrequency`, `commentThreadId`, `createTimeMs`, `publishDate`, `specialType`, `playlistType`, `sourceUrl`.\n\n### Comment (`recordType: \"comment\"`)\n\n`commentId`, `parentCommentId`, `content`, `likedCount`, `createdAt`, `createdAtMs`, `authorNickname`, `authorUserId`, `authorAvatarUrl`, `ipLocation`, `isHot`, `replyCount`, `repliedToCommentId`, `repliedToUser`, `repliedToContent`, `threadId`, `resourceType`, `resourceId`, `sourceUrl`.\n\n### Error (`recordType: \"error\"`)\n\n`errorCode`, `errorMessage`, `inputValue` — emitted for an input that could not be parsed or found. Error records count toward `maxItems`, so a partially valid list still returns every usable record alongside clear failures.\n\n## Use cases\n\n- Build a searchable NetEase catalog slice for a genre, artist or mood.\n- Export synchronized, translated and romanized lyrics for language or music research.\n- Track chart positions and rank movement over time.\n- Audit a playlist's full running order and when each track was added.\n- Study listener sentiment and fan culture through comments and replies.\n- Mirror an artist's complete discography and album metadata into a local database.\n\n## Usage cost\n\nNetEase access is free and needs no subscription. You pay for the Apify run itself and the actor's Store price, which is shown on the listing. A small search run costs a fraction of a cent; large playlist, chart or comment runs cost more because they process more records. The daily prefill is deliberately tiny (`search`, one query, three records).\n\n## FAQ\n\n**Do I need a NetEase account, cookie or API key?**\nNo. Every mode reads public data anonymously. Nothing in the input asks for credentials.\n\n**Do I need to configure a proxy?**\nNo. The actor chooses a working connection automatically. Just fill in the input and run it.\n\n**Why do comments stop before the total shown on NetEase?**\nNetEase's public comment pages stop around 1,100 comments per resource. The actor reads up to 1,100 top-level comments, then stops with a note instead of pretending the rest are available.\n\n**Why do only a few songs show `previousRank` and `rankChange`?**\nNetEase publishes rank movement for the first six preview tracks of each chart. Every track still gets its current `rankPosition`; the comparison fields are omitted when the source has no previous rank.\n\n**Why are translation, romanization or word-by-word lyrics missing on some songs?**\nNetEase provides those variants only for some tracks. The main LRC is usually present; the other variants are added only when NetEase publishes them.\n\n**Can I get an artist's entire catalog, not just top songs?**\nYes. `byArtist` paginates the full song catalog, and `byArtistAlbums` walks every album. Set `includeArtistProfile` to add a profile record.\n\n**Can I search in Chinese and English?**\nYes. Search queries, artist names and chart names accept Chinese, English and mixed text.\n\n**What happened to the old `playlistOrder: \"new\"` option?**\nNetEase no longer serves a newest-first playlist listing; it returns nothing for every category. The setting is accepted for old saved tasks but is ignored, and the run says so in its status message.\n\n**Is the data live?**\nYes. Each run reads NetEase at run time, so chart positions, play counts and comments reflect the moment of the run.\n\n## Notes\n\n- Bare numeric IDs are accepted alongside music.163.com URLs.\n- For comments, a bare ID is treated as a song; use `album:123`, `playlist:123` or `chart:123` when the ID belongs to another resource.\n- `toplistIds: [\"all\"]` or an empty list scans every chart currently published by NetEase.\n- Legacy saved inputs (`searchQuery`, `artistId`, `artistName`, `toplistId`, `includeLyric`, `playlistOrder`) continue to work without being shown in the input form.\n- API callers can pass a `modes` array (for example `[\"bySongUrl\",\"byArtist\"]`) to run several modes in one run; the console's single `mode` field remains the normal path.\n- The chart catalogue is served live when available and falls back to the built-in 65-chart list if NetEase withholds it.\n- Song records include a valid `mp3Url` only when NetEase exposes one; the actor does not download audio.\n\n## Limitations\n\n- Comment pagination is capped around 1,100 per resource by NetEase; time-ordered (\"newest\") comments are not exposed by the public API.\n- `previousRank` and `rankChange` exist only for the top six preview tracks of a chart.\n- The newest-first playlist browse sort is no longer available upstream.\n- Translation, romanization and word-by-word lyrics are conditional on NetEase publishing them.\n- Playback/audio URLs are signed and can expire, so audio download is out of scope.\n- A temporary NetEase verification challenge can add latency while the actor switches connections; it does not produce an empty run.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "netease-cloud-music-song-chart-and-playlist",
      "title": "NetEase Cloud Music Scraper: Songs, Charts & Comments",
      "description": "Search NetEase Cloud Music or fetch songs, full lyrics, artists, albums, complete playlists, all 65 charts and comments. No login or proxy setup.",
      "version": "1.0",
      "buildTag": "latest",
      "defaultRunOptions": {
        "memoryMbytes": 1024,
        "timeoutSecs": 3600
      },
      "dockerfile": "./Dockerfile",
      "readme": "# NetEase Cloud Music Scraper: Songs, Charts & Comments\n\nNetEase Cloud Music (网易云音乐) is one of China's largest music streaming catalogs. This actor reads its public catalog without an account: search songs, albums, artists and playlists; pull song details with full LRC, translated, romanized and word-by-word lyrics; walk an artist's complete discography; read album and playlist tracklists; collect every current chart; and export comments with optional replies. No login, cookies, API keys or proxy setup.\n\n## What this actor does\n\n- **Ten modes:** `search`, `bySongUrl`, `byArtist`, `byArtistAlbums`, `byAlbum`, `byPlaylist`, `byPlaylistUrl`, `byToplist`, `toplists`, `comments`.\n- **Catalog search:** songs, albums, artists and playlists through NetEase's modern search endpoint, with popularity and duration included.\n- **Lyrics:** full LRC plus translation, romanization and word-by-word lyrics whenever NetEase publishes them.\n- **Playlists and charts:** complete tracklists from `trackIds`, including each track's playlist rank and the time it was added.\n- **Comments:** recommended or hot comments for songs, albums, playlists and charts, with an optional reply floor.\n- **Clean output:** empty fields are omitted; invalid or unavailable inputs become explicit `error` records instead of disappearing.\n\n## Services\n\n- **Music catalog lookup** — song, album, artist and playlist search.\n- **Song enrichment** — release dates, quality tiers, maximum bitrate, music-video links and full lyric variants.\n- **Artist intelligence** — full song catalogue, album catalogue, profile biography, images, ranks, identities and fan count.\n- **Playlist and chart coverage** — 70 live playlist categories, all 65 current charts, chart positions and rank movement where NetEase publishes it.\n- **Audience research** — comment text, likes, timestamps, authors, avatars, IP locations and replies.\n\n## How it works\n\nThe actor reads NetEase Cloud Music's public web catalog anonymously. Each mode calls the matching public catalog, lyric, chart or comment view and converts the response into flat, readable records. When NetEase responds with a verification challenge instead of data, the actor keeps the run alive by switching to a working connection automatically and continues from the same page. Runs stop on the requested item cap or when NetEase runs out of matching results — never on a fixed time limit.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | One of the ten modes listed above |\n| `searchQueries` | array | `[\"周杰伦\"]` | Queries for `search` |\n| `searchType` | string | `song` | `song`, `album`, `artist` or `playlist` |\n| `songUrls` | array | – | Song URLs or bare IDs for `bySongUrl` |\n| `artistIds` | array | – | Artist IDs, URLs or exact names for `byArtist` / `byArtistAlbums` |\n| `artistOrder` | string | `hot` | `hot` or `time` for an artist's songs |\n| `albumUrls` | array | – | Album URLs or IDs for `byAlbum` |\n| `playlistUrls` | array | – | Playlist URLs or IDs for `byPlaylistUrl` |\n| `playlistCat` | string | `华语` | 70 NetEase categories plus `全部` for `byPlaylist` |\n| `toplistIds` | array | – | Chart IDs, names or URLs for `byToplist`; `all` or empty scans every chart |\n| `maxTracksPerChart` | int | `0` | Tracks per chart; `0` reads all |\n| `commentUrls` | array | – | Song/album/playlist/chart URLs or IDs for `comments` |\n| `commentOrder` | string | `recommended` | `recommended` or `hot` |\n| `maxCommentsPerItem` | int | `100` | Top-level comments per resource (1–1,100) |\n| `includeReplies` | boolean | `false` | Also read reply floors |\n| `maxRepliesPerComment` | int | `20` | Replies read per comment |\n| `includeArtistProfile` | boolean | `false` | Emit an artist profile record |\n| `includeLyrics` | boolean | `false` | Attach every available lyric variant |\n| `includeAlbumTracks` | boolean | `true` | Emit album tracks as songs |\n| `includePlaylistTracks` | boolean | `true` | Emit the complete playlist tracklist |\n| `includeToplistInfo` | boolean | `true` | Emit a chart summary before tracks |\n| `minDurationSec` / `maxDurationSec` | int | – | Song duration window; metadata records are unaffected |\n| `minPopularity` | int | – | Song popularity floor (0–100) |\n| `minPlayCount` / `minTrackCount` | int | – | Playlist browse filters |\n| `containsKeyword` | string | – | Name must contain this text (case-insensitive) |\n| `maxItems` | int | `100` | Hard cap on all dataset records, including errors (1–100,000) |\n\n### Example: search songs\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"周杰伦\", \"晴天\"],\n  \"searchType\": \"song\",\n  \"maxItems\": 50\n}\n```\n\n### Example: song details with every lyric variant\n\n```json\n{\n  \"mode\": \"bySongUrl\",\n  \"songUrls\": [\"https://music.163.com/#/song?id=186016\"],\n  \"includeLyrics\": true,\n  \"maxItems\": 1\n}\n```\n\n### Example: a complete playlist with added-at timestamps\n\n```json\n{\n  \"mode\": \"byPlaylistUrl\",\n  \"playlistUrls\": [\"https://music.163.com/#/playlist?id=8803637201\"],\n  \"includePlaylistTracks\": true,\n  \"maxItems\": 500\n}\n```\n\n### Example: all current charts, first 20 tracks each\n\n```json\n{\n  \"mode\": \"byToplist\",\n  \"toplistIds\": [\"all\"],\n  \"maxTracksPerChart\": 20,\n  \"includeToplistInfo\": true,\n  \"maxItems\": 1000\n}\n```\n\n### Example: hot comments with replies\n\n```json\n{\n  \"mode\": \"comments\",\n  \"commentUrls\": [\"https://music.163.com/#/song?id=186016\"],\n  \"commentOrder\": \"hot\",\n  \"maxCommentsPerItem\": 100,\n  \"includeReplies\": true,\n  \"maxRepliesPerComment\": 10,\n  \"maxItems\": 200\n}\n```\n\n## Output\n\nEvery record carries `recordType`, `sourceUrl` and `scrapedAt` (UTC ISO). Empty fields are omitted at every depth.\n\n### Song (`recordType: \"song\"`)\n\n- `songId`, `name`, `alias[]`, `transName`\n- `artists[]`, `artist`, `albumId`, `album`, `coverUrl`\n- `durationSec`, `popularity`, `score`, `playedNum`, `starredNum`\n- `fee`, `copyright`, `copyrightId`, `single`\n- `mvid`, `mvUrl`, `disc`, `trackNo`, `position`\n- `publishTimeMs`, `publishDate`, `commentThreadId`\n- `availableQualities[]`, `maxBitrateKbps`\n- `lyric`, `lyricTranslation`, `lyricRomanization`, `lyricWordByWord`, `lyricCredit`\n- `rankPosition`, `chartId`, `chartName`, `previousRank`, `rankChange`\n- `playlistId`, `playlistName`, `addedToPlaylistAt`\n- `mp3Url` only when NetEase exposes a valid HTTPS source value\n\n### Album (`recordType: \"album\"`)\n\n`albumId`, `name`, `coverUrl`, `trackCount`, `publishTimeMs`, `publishDate`, `company`, `type`, `subType`, `paid`, `onSale`, `artists[]`, `artist`, `description`, `commentThreadId`, `albumUrl`, `sourceUrl`.\n\n### Artist (`recordType: \"artist\"`)\n\n`artistId`, `name`, `alias[]`, `transNames[]`, `briefDesc`, `avatarUrl`, `coverUrl`, `picUrl`, `albumSize`, `musicSize`, `mvSize`, `videoCount`, `fansCount`, `fansSize`, `rank`, `identities[]`, `sourceUrl`.\n\n### Playlist (`recordType: \"playlist\"`)\n\n`playlistId`, `name`, `coverUrl`, `playCount`, `trackCount`, `totalDurationMs`, `creatorName`, `creatorId`, `creatorAvatarUrl`, `tags[]`, `description`, `updateTimeMs`, `createTimeMs`, `commentThreadId`, `playlistType`, `privacy`, `updateFrequency`, `sourceUrl`.\n\n### Chart summary (`recordType: \"toplist\"`)\n\n`toplistId`, `name`, `englishTitle`, `coverUrl`, `description`, `playCount`, `trackCount`, `subscribedCount`, `updateFrequency`, `commentThreadId`, `createTimeMs`, `publishDate`, `specialType`, `playlistType`, `sourceUrl`.\n\n### Comment (`recordType: \"comment\"`)\n\n`commentId`, `parentCommentId`, `content`, `likedCount`, `createdAt`, `createdAtMs`, `authorNickname`, `authorUserId`, `authorAvatarUrl`, `ipLocation`, `isHot`, `replyCount`, `repliedToCommentId`, `repliedToUser`, `repliedToContent`, `threadId`, `resourceType`, `resourceId`, `sourceUrl`.\n\n### Error (`recordType: \"error\"`)\n\n`errorCode`, `errorMessage`, `inputValue` — emitted for an input that could not be parsed or found. Error records count toward `maxItems`, so a partially valid list still returns every usable record alongside clear failures.\n\n## Use cases\n\n- Build a searchable NetEase catalog slice for a genre, artist or mood.\n- Export synchronized, translated and romanized lyrics for language or music research.\n- Track chart positions and rank movement over time.\n- Audit a playlist's full running order and when each track was added.\n- Study listener sentiment and fan culture through comments and replies.\n- Mirror an artist's complete discography and album metadata into a local database.\n\n## Usage cost\n\nNetEase access is free and needs no subscription. You pay for the Apify run itself and the actor's Store price, which is shown on the listing. A small search run costs a fraction of a cent; large playlist, chart or comment runs cost more because they process more records. The daily prefill is deliberately tiny (`search`, one query, three records).\n\n## FAQ\n\n**Do I need a NetEase account, cookie or API key?**\nNo. Every mode reads public data anonymously. Nothing in the input asks for credentials.\n\n**Do I need to configure a proxy?**\nNo. The actor chooses a working connection automatically. Just fill in the input and run it.\n\n**Why do comments stop before the total shown on NetEase?**\nNetEase's public comment pages stop around 1,100 comments per resource. The actor reads up to 1,100 top-level comments, then stops with a note instead of pretending the rest are available.\n\n**Why do only a few songs show `previousRank` and `rankChange`?**\nNetEase publishes rank movement for the first six preview tracks of each chart. Every track still gets its current `rankPosition`; the comparison fields are omitted when the source has no previous rank.\n\n**Why are translation, romanization or word-by-word lyrics missing on some songs?**\nNetEase provides those variants only for some tracks. The main LRC is usually present; the other variants are added only when NetEase publishes them.\n\n**Can I get an artist's entire catalog, not just top songs?**\nYes. `byArtist` paginates the full song catalog, and `byArtistAlbums` walks every album. Set `includeArtistProfile` to add a profile record.\n\n**Can I search in Chinese and English?**\nYes. Search queries, artist names and chart names accept Chinese, English and mixed text.\n\n**What happened to the old `playlistOrder: \"new\"` option?**\nNetEase no longer serves a newest-first playlist listing; it returns nothing for every category. The setting is accepted for old saved tasks but is ignored, and the run says so in its status message.\n\n**Is the data live?**\nYes. Each run reads NetEase at run time, so chart positions, play counts and comments reflect the moment of the run.\n\n## Notes\n\n- Bare numeric IDs are accepted alongside music.163.com URLs.\n- For comments, a bare ID is treated as a song; use `album:123`, `playlist:123` or `chart:123` when the ID belongs to another resource.\n- `toplistIds: [\"all\"]` or an empty list scans every chart currently published by NetEase.\n- Legacy saved inputs (`searchQuery`, `artistId`, `artistName`, `toplistId`, `includeLyric`, `playlistOrder`) continue to work without being shown in the input form.\n- API callers can pass a `modes` array (for example `[\"bySongUrl\",\"byArtist\"]`) to run several modes in one run; the console's single `mode` field remains the normal path.\n- The chart catalogue is served live when available and falls back to the built-in 65-chart list if NetEase withholds it.\n- Song records include a valid `mp3Url` only when NetEase exposes one; the actor does not download audio.\n\n## Limitations\n\n- Comment pagination is capped around 1,100 per resource by NetEase; time-ordered (\"newest\") comments are not exposed by the public API.\n- `previousRank` and `rankChange` exist only for the top six preview tracks of a chart.\n- The newest-first playlist browse sort is no longer available upstream.\n- Translation, romanization and word-by-word lyrics are conditional on NetEase publishing them.\n- Playback/audio URLs are signed and can expire, so audio download is out of scope.\n- A temporary NetEase verification challenge can add latency while the actor switches connections; it does not produce an empty run.\n",
      "input": {
        "title": "NetEase Cloud Music Scraper Input",
        "description": "Search NetEase Cloud Music, fetch songs, lyrics, artists, albums, playlists, all charts and comments. No login or proxy setup required.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to fetch. Each mode reads its own list field.",
            "editor": "select",
            "enum": [
              "search",
              "bySongUrl",
              "byArtist",
              "byArtistAlbums",
              "byAlbum",
              "byPlaylist",
              "byPlaylistUrl",
              "byToplist",
              "toplists",
              "comments"
            ],
            "enumTitles": [
              "Search songs, albums, artists or playlists",
              "Song details by URL or ID (with lyrics)",
              "Artist full song catalogue",
              "Artist album discography",
              "Album details and tracks",
              "Browse playlists by category",
              "Playlist details and full tracklist",
              "One or more charts (or all charts)",
              "Chart catalogue",
              "Comments and replies"
            ],
            "default": "search",
            "prefill": "search"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Free-text queries (mode=search). One or more artist, song, album or playlist names.",
            "editor": "stringList",
            "default": [
              "周杰伦"
            ],
            "prefill": [
              "周杰伦"
            ]
          },
          "searchType": {
            "title": "Search result type",
            "type": "string",
            "description": "Which catalog entity to search for (mode=search).",
            "editor": "select",
            "enum": [
              "song",
              "album",
              "artist",
              "playlist"
            ],
            "enumTitles": [
              "Songs",
              "Albums",
              "Artists",
              "Playlists"
            ],
            "default": "song",
            "prefill": "song"
          },
          "songUrls": {
            "title": "Song URLs or IDs (mode=bySongUrl)",
            "type": "array",
            "description": "music.163.com song URLs or bare song IDs, e.g. 186016.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "artistIds": {
            "title": "Artist IDs, URLs or names (mode=byArtist / byArtistAlbums)",
            "type": "array",
            "description": "Artist IDs, music.163.com artist URLs, or exact artist names.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "artistOrder": {
            "title": "Artist song order",
            "type": "string",
            "description": "Order the artist's song catalogue by popularity or release time (mode=byArtist).",
            "editor": "select",
            "enum": [
              "hot",
              "time"
            ],
            "enumTitles": [
              "Most popular",
              "Newest release"
            ],
            "default": "hot",
            "prefill": "hot"
          },
          "albumUrls": {
            "title": "Album URLs or IDs (mode=byAlbum)",
            "type": "array",
            "description": "music.163.com album URLs or bare album IDs.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "playlistUrls": {
            "title": "Playlist URLs or IDs (mode=byPlaylistUrl)",
            "type": "array",
            "description": "music.163.com playlist URLs or bare playlist IDs. Full tracklists are read.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "playlistCat": {
            "title": "Playlist category",
            "type": "string",
            "description": "NetEase playlist genre, scene or mood to browse (mode=byPlaylist).",
            "editor": "select",
            "enum": [
              "全部",
              "综艺",
              "流行",
              "怀旧",
              "清晨",
              "华语",
              "影视原声",
              "摇滚",
              "夜晚",
              "清新",
              "欧美",
              "ACG",
              "民谣",
              "学习",
              "浪漫",
              "儿童",
              "日语",
              "工作",
              "校园",
              "电子",
              "韩语",
              "游戏",
              "午休",
              "粤语",
              "伤感",
              "舞曲",
              "治愈",
              "下午茶",
              "说唱",
              "70后",
              "地铁",
              "轻音乐",
              "放松",
              "80后",
              "驾车",
              "爵士",
              "孤独",
              "90后",
              "乡村",
              "感动",
              "运动",
              "网络歌曲",
              "旅行",
              "兴奋",
              "R&B/Soul",
              "KTV",
              "古典",
              "快乐",
              "经典",
              "散步",
              "翻唱",
              "民族",
              "酒吧",
              "安静",
              "英伦",
              "思念",
              "吉他",
              "金属",
              "钢琴",
              "朋克",
              "器乐",
              "蓝调",
              "榜单",
              "雷鬼",
              "00后",
              "世界音乐",
              "拉丁",
              "New Age",
              "古风",
              "后摇",
              "Bossa Nova"
            ],
            "enumTitles": [
              "全部",
              "综艺",
              "流行",
              "怀旧",
              "清晨",
              "华语",
              "影视原声",
              "摇滚",
              "夜晚",
              "清新",
              "欧美",
              "ACG",
              "民谣",
              "学习",
              "浪漫",
              "儿童",
              "日语",
              "工作",
              "校园",
              "电子",
              "韩语",
              "游戏",
              "午休",
              "粤语",
              "伤感",
              "舞曲",
              "治愈",
              "下午茶",
              "说唱",
              "70后",
              "地铁",
              "轻音乐",
              "放松",
              "80后",
              "驾车",
              "爵士",
              "孤独",
              "90后",
              "乡村",
              "感动",
              "运动",
              "网络歌曲",
              "旅行",
              "兴奋",
              "R&B/Soul",
              "KTV",
              "古典",
              "快乐",
              "经典",
              "散步",
              "翻唱",
              "民族",
              "酒吧",
              "安静",
              "英伦",
              "思念",
              "吉他",
              "金属",
              "钢琴",
              "朋克",
              "器乐",
              "蓝调",
              "榜单",
              "雷鬼",
              "00后",
              "世界音乐",
              "拉丁",
              "New Age",
              "古风",
              "后摇",
              "Bossa Nova"
            ],
            "default": "华语",
            "prefill": "华语"
          },
          "toplistIds": {
            "title": "Chart IDs, names or URLs (mode=byToplist)",
            "type": "array",
            "description": "Chart IDs, music.163.com toplist URLs, or Chinese/English chart names. Use `all` or leave empty for every current chart.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "maxTracksPerChart": {
            "title": "Max tracks per chart",
            "type": "integer",
            "description": "Limit tracks read from each chart before the global max items cap (mode=byToplist). 0 reads every track.",
            "minimum": 0,
            "maximum": 1000,
            "default": 0,
            "prefill": 0
          },
          "commentUrls": {
            "title": "Comment targets (mode=comments)",
            "type": "array",
            "description": "Song, album, playlist or chart URLs/IDs. A bare ID is treated as a song; use `album:123`, `playlist:123` or `chart:123` to be explicit.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "commentOrder": {
            "title": "Comment order",
            "type": "string",
            "description": "Recommended comments or NetEase's hot-comment selection (mode=comments).",
            "editor": "select",
            "enum": [
              "recommended",
              "hot"
            ],
            "enumTitles": [
              "Recommended",
              "Hot comments"
            ],
            "default": "recommended",
            "prefill": "recommended"
          },
          "maxCommentsPerItem": {
            "title": "Max comments per resource",
            "type": "integer",
            "description": "Maximum top-level comments read per song, album, playlist or chart (mode=comments). NetEase stops anonymous pagination around 1,100.",
            "minimum": 1,
            "maximum": 1100,
            "default": 100,
            "prefill": 100
          },
          "includeReplies": {
            "title": "Include comment replies",
            "type": "boolean",
            "description": "Fetch the reply floor for comments that have replies (mode=comments).",
            "default": false,
            "prefill": false
          },
          "maxRepliesPerComment": {
            "title": "Max replies per comment",
            "type": "integer",
            "description": "How many replies to read for each comment when replies are enabled (mode=comments).",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "prefill": 20
          },
          "includeArtistProfile": {
            "title": "Include artist profile",
            "type": "boolean",
            "description": "Emit one artist profile record with bio, images, sizes, rank, identities and fan count (mode=byArtist / byArtistAlbums).",
            "default": false,
            "prefill": false
          },
          "includeLyrics": {
            "title": "Include lyrics",
            "type": "boolean",
            "description": "Attach full LRC lyrics plus translation, romanization and word-by-word lyrics when NetEase has them (every song mode).",
            "default": false,
            "prefill": false
          },
          "includeAlbumTracks": {
            "title": "Include album tracks",
            "type": "boolean",
            "description": "Emit each album's tracks as song records (mode=byAlbum).",
            "default": true,
            "prefill": true
          },
          "includePlaylistTracks": {
            "title": "Include playlist tracks",
            "type": "boolean",
            "description": "Emit the playlist's full tracklist as song records (mode=byPlaylistUrl).",
            "default": true,
            "prefill": true
          },
          "includeToplistInfo": {
            "title": "Include chart summary",
            "type": "boolean",
            "description": "Emit a chart summary record before each chart's tracks (mode=byToplist).",
            "default": true,
            "prefill": true
          },
          "minDurationSec": {
            "title": "Min song duration (seconds)",
            "type": "integer",
            "description": "Skip song records shorter than this. Album, artist, playlist and chart metadata are unaffected.",
            "minimum": 0,
            "maximum": 86400
          },
          "maxDurationSec": {
            "title": "Max song duration (seconds)",
            "type": "integer",
            "description": "Skip song records longer than this. Album, artist, playlist and chart metadata are unaffected.",
            "minimum": 0,
            "maximum": 86400
          },
          "minPopularity": {
            "title": "Min song popularity",
            "type": "integer",
            "description": "Skip song records below this NetEase popularity score (0-100). Metadata records are unaffected.",
            "minimum": 0,
            "maximum": 100
          },
          "minPlayCount": {
            "title": "Min playlist plays",
            "type": "integer",
            "description": "Skip browsed playlists with fewer plays (mode=byPlaylist).",
            "minimum": 0,
            "maximum": 1000000000000
          },
          "minTrackCount": {
            "title": "Min playlist tracks",
            "type": "integer",
            "description": "Skip browsed playlists with fewer tracks (mode=byPlaylist).",
            "minimum": 0,
            "maximum": 1000000000
          },
          "containsKeyword": {
            "title": "Contains keyword",
            "type": "string",
            "description": "Keep only records whose name contains this text (case-insensitive). Applies to songs, albums, artists, playlists and charts.",
            "editor": "textfield"
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on total dataset records for the run, including error records.",
            "minimum": 1,
            "maximum": 100000,
            "default": 100,
            "prefill": 3
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "NetEase Cloud Music Scraper Output",
        "description": "NetEase Cloud Music songs, albums, artists, playlists, chart summaries, comments and lyrics metadata.",
        "properties": {
          "items": {
            "type": "string",
            "title": "NetEase Cloud Music records",
            "description": "Dataset containing song, album, artist, playlist, toplist, comment and error records.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "NetEase records",
              "transformation": {
                "fields": [
                  "recordType",
                  "name",
                  "artist",
                  "album",
                  "rankPosition",
                  "chartName",
                  "playlistName",
                  "durationSec",
                  "sourceUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.0.2",
    "imageDigest": "e0e20b1ef237dfe232e5516dcf8ec14283233a4c0889b85cfca120b8ba46c7b6",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.004193333333333334
    }
  }
}