Nimbryxo Studio

Use SoundCloud Charts, Search & Artist Catalog Scraper with Python

Scrape SoundCloud without an API key: global and genre New & Hot charts, keyword search with real genre filters, full artist catalogs, playlist contents, comments, followers, engagement metrics, artwork, waveform and stream metadata.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "artistUrls": [],
  "chartGenre": "all",
  "commentsSort": "newest",
  "includeAlbums": false,
  "includePlaylistTracks": true,
  "includePlaylists": false,
  "includeTopTracks": false,
  "includeTracks": true,
  "includeUserProfile": true,
  "includeWebProfiles": false,
  "maxItems": 2,
  "minLikeCount": 0,
  "minPlayCount": 0,
  "mode": "search",
  "relationship": "followers",
  "resolveStreamUrls": true,
  "searchGenre": "",
  "searchQueries": [
    "lofi"
  ],
  "searchType": "tracks",
  "sortBy": "relevance",
  "startUrls": [],
  "trackUrls": []
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredChoose the intent. Keyword search, New & Hot charts, an artist catalog, specific URLs, track comments, or an artist's followers.
searchQueriesarrayoptionalOne or more keywords or artist names (mode=search). Example: lofi, techno, ambient jazz.
searchTypestringoptionalWhat kind of results to return (mode=search).
chartGenrestringoptionalGlobal New & Hot returns up to 100 tracks. Genre values use SoundCloud's current trending-by-genre lists (about 50 tracks each).
searchGenrestringoptionalOptional SoundCloud genre filter for track and playlist searches. Leave as any genre to search everything. This is a real SoundCloud filter, not a client-side guess.
sortBystringoptionalHow to order the rows already fetched. SoundCloud search itself is relevance-ordered, so this is a client-side sort of that result set.
minPlayCountintegeroptionalDrop track/playlist rows below this play count after fetching. 0 means no filter.
minLikeCountintegeroptionalDrop track/playlist rows below this like count after fetching. 0 means no filter.
artistUrlsarrayoptionalArtist profile URLs, usernames, or numeric user IDs. Used by artistTracks and followers modes.
includeTracksbooleanoptionalInclude the artist's uploaded tracks.
includeAlbumsbooleanoptionalInclude the artist's albums/EPs as playlist rows.
includePlaylistsbooleanoptionalInclude the artist's playlists as playlist rows.
includeTopTracksbooleanoptionalInclude SoundCloud's small top-tracks list for each artist.
includeWebProfilesbooleanoptionalAdd the artist's public social/web profile links to the profile row.
startUrlsarrayoptionalTrack, playlist/album, or artist URLs. Numeric track IDs are also accepted. Used by mode=byUrl.
includePlaylistTracksbooleanoptionalFor playlist URLs, hydrate and emit every track (not just the first five).
includeUserProfilebooleanoptionalFor artist URLs in mode=byUrl, emit the profile row before the tracks.
trackUrlsarrayoptionalTracks whose public comments should be collected. Used by mode=comments.
commentsSortstringoptionalHow SoundCloud should order comments.
relationshipstringoptionalFor mode=followers, collect the artist's followers or the accounts the artist follows.
resolveStreamUrlsbooleanoptionalAdd a playable signed stream URL plus protocol, preview and expiry fields. Signed URLs expire after about two hours. Turn off for large runs if you only need the stable API endpoint.
maxItemsintegeroptionalHard cap on dataset rows. SoundCloud search still returns at most 300 rows per query; charts and per-artist sections have their own source limits.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/xauSnBo64ZqngihHG/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

SoundCloud tracks, artists, playlists, albums and comments - charts, search results, full artist catalogs, playlist contents, engagement metrics, creator details, artwork, waveform and stream metadata.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build kzMuZBsSVkEqN6Prx and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.