NetEase Music Scraper avatar

NetEase Music Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
NetEase Music Scraper

NetEase Music Scraper

Scrape NetEase Cloud Music (music.163.com) without login - search song suggestions, fetch songs by URL, artist top songs, browse playlists, and pull top-100 charts with cover art and full metadata.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Scrapes NetEase Cloud Music (网易云音乐) — China's largest music streaming platform — without login.

Data source

Music data and lyrics come from the public NetEase Cloud Music web endpoints (music.163.com /api/...) — no login, no API key. See the Notes section for endpoint-level caveats.

What it does

ModeEndpoint (public, no auth)Output
search/api/search/get?type=1&s=&limit=&offset=Song search (paginated, deduped)
bySongUrl/api/song/detail/?id=&ids= (+ optional LRC lyric)Full song record incl. popularity, score, mv id
byArtist/api/artist/top/song?id=&offset=Artist top songs (paginated)
byArtistAlbums/api/artist/albums/{id}?limit=&offset=Artist album discography (paginated)
byPlaylist/api/playlist/list?cat=&order=&offset=Playlist browse (paginated)
byToplist/api/toplist/detail + /api/playlist/detail?id=Chart summary + top-100 tracks

All endpoints verified live (HTTP 200 with real content) from a datacenter network. The web search endpoint /api/search/get/web returns AES-encrypted payloads (anti-bot), so search uses the plaintext /api/search/get endpoint instead (paginated up to maxItems, deduped by song id). The album-detail endpoint (/api/album/*) is no longer served publicly — album metadata is exposed via byArtistAlbums, and album tracks via playlist/artist/toplist modes.

Output fields

song records (recordType: "song")songId, name, alias[], artists[], artist, albumId, album, durationSec, coverUrl, popularity, score, fee, mvid, publishTimeMs, commentThreadId, playedNum, starredNum, copyright, copyrightId, disc, trackNo, position, single, mp3Url, transName, lyric (optional, bySongUrl), sourceUrl, scrapedAt.

album records (recordType: "album", mode=byArtistAlbums)albumId, name, coverUrl, trackCount, publishTimeMs, company, type, subType, paid, onSale, artists[], artist, sourceUrl.

playlist recordsplaylistId, name, coverUrl, playCount, trackCount, creatorName, creatorId, creatorAvatarUrl, tags[], description, subscribedCount, commentCount, shareCount, totalDurationMs, updateTimeMs, sourceUrl.

toplist recordstoplistId, name, playCount, trackCount, subscribedCount, updateFrequency, description, coverUrl, sourceUrl.

error records (recordType: "error") — emitted for invalid URLs / missing songs / unknown toplists (errorCode, errorMessage, inputValue). Invalid inputs are never silently dropped.

Every data record carries sourceUrl, scrapedAt (UTC ISO) and recordType; error records carry inputValue in place of sourceUrl (the offending input, not a page URL). Null/empty fields are stripped before push.

Filters

  • minDurationSec / maxDurationSec — song length window
  • minPopularity — 0–100 popularity floor
  • containsKeyword — case-insensitive substring on title

Notes

  • Cover images are normalized to https://p*.music.126.net/... and verify HTTP 200 with image/* content-type from a clean shell (no Referer needed).
  • playlistOrder=new is exposed in the schema but the upstream /api/playlist/list endpoint ignores the order param from datacenter IPs (HTTP 200, empty playlists for every tested category) — the actor fail-softs with a status message and 0 records. Use the default hot order for playlist browsing.
  • Search results (mode=search) can omit popularity for some songs; the minPopularity filter drops records whose popularity is unknown rather than passing them (a record with unknown popularity cannot satisfy a popularity floor).
  • Paginated modes stop examining after 500 records; if filters match nothing, the run ends cleanly with 0 records and a status message (inverted minDurationSec > maxDurationSec is rejected up front). The upstream /api/artist/top/song endpoint ignores the offset param (it always returns the same ~50 top songs with more: true), so byArtist dedupes by song id and stops paginating once a page adds no new songs — the output never contains duplicate records.
  • Duplicate song URLs in songUrls (mode=bySongUrl) are deduped to a single unique record per song id.
  • maxItems is a hard cap on ALL emitted records including error records.
  • Auto-escalation: on HTTP 403/429 the actor lazily engages the Apify AUTO (datacenter) proxy and retries with exponential backoff.
  • Memory: 1024 MB (Tier 1, plain HTTP).