Nimbryxo Studio

SoundCloud Charts, Search & Artist Catalog Scraper

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.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

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).
Show all input fields
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.

Download the published input schema

View complete JSON
{
  "description": "Search SoundCloud, read the global or genre New & Hot charts, export an artist catalog, resolve track/playlist/profile URLs, collect comments, or list followers.",
  "properties": {
    "artistUrls": {
      "default": [],
      "description": "Artist profile URLs, usernames, or numeric user IDs. Used by artistTracks and followers modes.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "sectionCaption": "Artist catalog",
      "sectionDescription": "Controls what is exported for each artist profile. The profile row is always included in artistTracks.",
      "title": "Artists",
      "type": "array"
    },
    "chartGenre": {
      "default": "all",
      "description": "Global New & Hot returns up to 100 tracks. Genre values use SoundCloud's current trending-by-genre lists (about 50 tracks each).",
      "editor": "select",
      "enum": [
        "all",
        "all-genres",
        "trap",
        "hip-hop",
        "pop",
        "electronic",
        "r-n-b",
        "alternative-hip-hop",
        "indie",
        "dubstep",
        "house",
        "folk",
        "alternative-rock",
        "ambient",
        "hardcore",
        "rock",
        "reggae",
        "latin",
        "metal",
        "dancehall",
        "afrobeat"
      ],
      "enumTitles": [
        "Global New & Hot (100)",
        "All Genres (system list, ~50)",
        "Trap",
        "Hip Hop",
        "Pop",
        "Electronic",
        "R&B",
        "Alternative Hip Hop",
        "Indie",
        "Dubstep",
        "House",
        "Folk",
        "Alternative Rock",
        "Ambient",
        "Hardcore",
        "Rock",
        "Reggae",
        "Latin",
        "Metal",
        "Dancehall",
        "Afrobeat"
      ],
      "prefill": "all",
      "title": "Chart genre",
      "type": "string"
    },
    "commentsSort": {
      "default": "newest",
      "description": "How SoundCloud should order comments.",
      "editor": "select",
      "enum": [
        "newest",
        "oldest",
        "track-timestamp"
      ],
      "enumTitles": [
        "Newest first",
        "Oldest first",
        "By time in track"
      ],
      "prefill": "newest",
      "title": "Comment order",
      "type": "string"
    },
    "includeAlbums": {
      "default": false,
      "description": "Include the artist's albums/EPs as playlist rows.",
      "prefill": false,
      "title": "Include albums",
      "type": "boolean"
    },
    "includePlaylistTracks": {
      "default": true,
      "description": "For playlist URLs, hydrate and emit every track (not just the first five).",
      "prefill": true,
      "title": "Expand playlist tracks",
      "type": "boolean"
    },
    "includePlaylists": {
      "default": false,
      "description": "Include the artist's playlists as playlist rows.",
      "prefill": false,
      "title": "Include playlists",
      "type": "boolean"
    },
    "includeTopTracks": {
      "default": false,
      "description": "Include SoundCloud's small top-tracks list for each artist.",
      "prefill": false,
      "title": "Include top tracks",
      "type": "boolean"
    },
    "includeTracks": {
      "default": true,
      "description": "Include the artist's uploaded tracks.",
      "prefill": true,
      "title": "Include tracks",
      "type": "boolean"
    },
    "includeUserProfile": {
      "default": true,
      "description": "For artist URLs in mode=byUrl, emit the profile row before the tracks.",
      "prefill": true,
      "title": "Include artist profile row",
      "type": "boolean"
    },
    "includeWebProfiles": {
      "default": false,
      "description": "Add the artist's public social/web profile links to the profile row.",
      "prefill": false,
      "title": "Include web profiles",
      "type": "boolean"
    },
    "maxItems": {
      "default": 100,
      "description": "Hard cap on dataset rows. SoundCloud search still returns at most 300 rows per query; charts and per-artist sections have their own source limits.",
      "maximum": 5000,
      "minimum": 1,
      "prefill": 2,
      "title": "Maximum records",
      "type": "integer"
    },
    "minLikeCount": {
      "default": 0,
      "description": "Drop track/playlist rows below this like count after fetching. 0 means no filter.",
      "maximum": 1000000000,
      "minimum": 0,
      "prefill": 0,
      "title": "Minimum likes",
      "type": "integer"
    },
    "minPlayCount": {
      "default": 0,
      "description": "Drop track/playlist rows below this play count after fetching. 0 means no filter.",
      "maximum": 1000000000,
      "minimum": 0,
      "prefill": 0,
      "title": "Minimum plays",
      "type": "integer"
    },
    "mode": {
      "default": "search",
      "description": "Choose the intent. Keyword search, New & Hot charts, an artist catalog, specific URLs, track comments, or an artist's followers.",
      "editor": "select",
      "enum": [
        "search",
        "charts",
        "artistTracks",
        "byUrl",
        "comments",
        "followers"
      ],
      "enumTitles": [
        "Search by keyword - tracks, users, playlists or albums",
        "Charts - global New & Hot or a genre trending list",
        "Artist catalog - profile, tracks, albums, playlists",
        "Track, playlist or artist URLs",
        "Track comments",
        "Artist followers or followings"
      ],
      "prefill": "search",
      "title": "What to collect",
      "type": "string"
    },
    "relationship": {
      "default": "followers",
      "description": "For mode=followers, collect the artist's followers or the accounts the artist follows.",
      "editor": "select",
      "enum": [
        "followers",
        "followings"
      ],
      "enumTitles": [
        "Followers",
        "Accounts followed"
      ],
      "prefill": "followers",
      "title": "Follower relationship",
      "type": "string"
    },
    "resolveStreamUrls": {
      "default": true,
      "description": "Add 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.",
      "prefill": true,
      "sectionCaption": "Advanced",
      "sectionDescription": "Stream resolution and the overall record cap.",
      "title": "Resolve playable stream URLs",
      "type": "boolean"
    },
    "searchGenre": {
      "default": "",
      "description": "Optional 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.",
      "editor": "select",
      "enum": [
        "",
        "Alternative Rock",
        "Ambient",
        "Classical",
        "Country",
        "Dance & EDM",
        "Dancehall",
        "Deep House",
        "Disco",
        "Drum & Bass",
        "Dubstep",
        "Electronic",
        "Folk & Singer-Songwriter",
        "Hip-hop & Rap",
        "House",
        "Indie",
        "Jazz & Blues",
        "Latin",
        "Metal",
        "Piano",
        "Pop",
        "R&B & Soul",
        "Reggae",
        "Reggaeton",
        "Rock",
        "Soundtrack",
        "Techno",
        "Trance",
        "Trap",
        "Trip Hop",
        "World",
        "Lo-fi",
        "Lofi"
      ],
      "enumTitles": [
        "(any genre)",
        "Alternative Rock",
        "Ambient",
        "Classical",
        "Country",
        "Dance & EDM",
        "Dancehall",
        "Deep House",
        "Disco",
        "Drum & Bass",
        "Dubstep",
        "Electronic",
        "Folk & Singer-Songwriter",
        "Hip-hop & Rap",
        "House",
        "Indie",
        "Jazz & Blues",
        "Latin",
        "Metal",
        "Piano",
        "Pop",
        "R&B & Soul",
        "Reggae",
        "Reggaeton",
        "Rock",
        "Soundtrack",
        "Techno",
        "Trance",
        "Trap",
        "Trip Hop",
        "World",
        "Lo-fi",
        "Lofi"
      ],
      "prefill": "",
      "sectionCaption": "Search filters",
      "sectionDescription": "Optional refinements for mode=search. Genre is applied by SoundCloud; sort and minimum counts are applied to the fetched rows.",
      "title": "Genre filter",
      "type": "string"
    },
    "searchQueries": {
      "default": [],
      "description": "One or more keywords or artist names (mode=search). Example: lofi, techno, ambient jazz.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [
        "lofi"
      ],
      "title": "Search queries",
      "type": "array"
    },
    "searchType": {
      "default": "tracks",
      "description": "What kind of results to return (mode=search).",
      "editor": "select",
      "enum": [
        "tracks",
        "users",
        "playlists",
        "albums",
        "all"
      ],
      "enumTitles": [
        "Tracks",
        "Users / artists",
        "Playlists",
        "Albums",
        "All result types"
      ],
      "prefill": "tracks",
      "title": "Search result type",
      "type": "string"
    },
    "sortBy": {
      "default": "relevance",
      "description": "How to order the rows already fetched. SoundCloud search itself is relevance-ordered, so this is a client-side sort of that result set.",
      "editor": "select",
      "enum": [
        "relevance",
        "newest",
        "mostPlayed",
        "mostLiked"
      ],
      "enumTitles": [
        "Relevance (source order)",
        "Newest upload",
        "Most played",
        "Most liked"
      ],
      "prefill": "relevance",
      "title": "Sort fetched rows",
      "type": "string"
    },
    "startUrls": {
      "default": [],
      "description": "Track, playlist/album, or artist URLs. Numeric track IDs are also accepted. Used by mode=byUrl.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "SoundCloud track, playlist, album, user, or search URL.",
            "title": "URL",
            "type": "string"
          }
        },
        "type": "object"
      },
      "prefill": [],
      "sectionCaption": "URLs and playlists",
      "sectionDescription": "Playlist URLs export the playlist row and, when enabled, every track in it. Artist URLs export the profile and uploaded tracks.",
      "title": "SoundCloud URLs or IDs",
      "type": "array"
    },
    "trackUrls": {
      "default": [],
      "description": "Tracks whose public comments should be collected. Used by mode=comments.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "SoundCloud track URL used for comments mode.",
            "title": "URL",
            "type": "string"
          }
        },
        "type": "object"
      },
      "prefill": [],
      "sectionCaption": "Comments and audience",
      "sectionDescription": "Comment collection and follower/following collection. These modes keep the track or artist context on every row.",
      "title": "Track URLs or IDs",
      "type": "array"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "SoundCloud Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
soundcloudstringoptionalDataset containing every scraped SoundCloud track, artist, playlist/album and comment row.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "SoundCloud tracks, artists, playlists, albums and comments - charts, search results, full artist catalogs, playlist contents, engagement metrics, creator details, artwork, waveform and stream metadata.",
  "properties": {
    "soundcloud": {
      "description": "Dataset containing every scraped SoundCloud track, artist, playlist/album and comment row.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "SoundCloud records",
      "type": "string"
    }
  },
  "title": "SoundCloud Charts, Search & Artist Catalog Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "SoundCloud records",
      "transformation": {
        "fields": [
          "recordType",
          "title",
          "artist",
          "playCount",
          "likeCount",
          "genre",
          "uploadDate",
          "url"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

SoundCloud Charts, Search & Artist Catalog Scraper

Pull public SoundCloud data into one clean dataset: the current global New & Hot chart, 20 genre trending lists, keyword search across tracks, artists, playlists and albums, complete artist catalogs, playlist contents, track comments, and artist followers. No SoundCloud account, cookie or API key is required.

What this actor does

  • Search tracks, users/artists, playlists or albums by keyword, with a real SoundCloud genre filter for tracks and playlists.
  • Charts the global New & Hot list (up to 100 tracks) or one of 20 current genre trending lists (about 50 tracks each).
  • Artist catalog exports the profile row plus uploaded tracks and, optionally, albums, playlists, top tracks and public web profiles.
  • URLs resolves any public track, playlist/album or artist URL. Playlist URLs expand into every track, not just the first page. Artist URLs return the profile and uploaded tracks.
  • Comments collects public comments for one or more tracks, including the commenter's profile fields and the time in the track.
  • Followers collects an artist's followers or the accounts the artist follows.
  • Empty fields are omitted from records. No null, blank strings or empty arrays are pushed.

Output records

Every row has a recordType: track, user, playlist or comment. Existing field names are preserved; the revamp adds fields beside them.

Track fields

Field Meaning
recordType track
title, url, trackId, urn Track identity and canonical page URL
artist, artistUrl, artistId Uploader identity
artistFollowers, artistVerified, artistCity, artistCountry, artistDescription Creator details when SoundCloud publishes them
duration M:SS / H:MM:SS (unchanged legacy field)
durationMs, durationSeconds Numeric duration
playCount, likeCount, repostCount, commentCount, downloadCount Engagement snapshot
genre, tags, description Uploader metadata when present
uploadDate, lastModified, releaseDate ISO-8601 dates
labelName, license, isrc, upc Release and rights metadata when present
publisherArtist, albumTitle, writerComposer, explicit Publisher metadata when present
streamable, downloadable, hasDownloadsLeft, policy, monetizationModel Source playback flags
streamUrl Playable signed media URL when resolveStreamUrls=true; otherwise the stable API transcoding URL
streamUrlApi Stable SoundCloud transcoding endpoint (not directly playable without a client_id)
streamUrlProtocol, streamUrlMimeType, streamUrlPreset Stream format details
streamUrlExpiresAt Expiry of the signed media URL (about two hours)
streamUrlIsPreview true for a 30-second preview / SNIP track
artworkUrl, artworkUrlOriginal Cover image at 500x500 and original size
waveformUrl Waveform amplitude JSON (not an image)
chartGenre, chartRank, chartScore, chartLastUpdated Chart context
playlistId, playlistTitle, playlistUrl, playlistPosition Playlist context when a playlist is expanded
sourceQuery, sourceType, sourceUrl What input produced the row
scrapedAt ISO-8601 scrape time

User / artist fields

recordType=user; keeps title, url, trackId, artist, artistUrl, playCount, likeCount, repostCount, description, artworkUrl, scrapedAt. Adds userId, username, fullName, followersCount, followingsCount, trackCount, playlistCount, commentsCount, verified, pro, city, countryCode, lastModified, webProfiles, relationship (followers mode), sourceArtistId, sourceArtistUsername.

Playlist / album fields

recordType=playlist; keeps title, url, trackId, artist, artistUrl, duration, likeCount, repostCount, genre, description, uploadDate, artworkUrl, scrapedAt. Adds playlistId, urn, trackCount, setType, isAlbum, tags, releaseDate, lastModified, durationMs, labelName.

Comment fields

recordType=comment; commentId, body, createdAt, timestampMs, timestampFormatted, trackId, trackTitle, trackUrl, userId, username, userUrl, userFollowers, userCity, userCountry, scrapedAt.

Input

Field Type Default What it does
mode select search search, charts, artistTracks, byUrl, comments, followers
searchQueries string list [] One or more search keywords
searchType select tracks tracks, users, playlists, albums, all
chartGenre select all Global New & Hot or one of 20 genre trending lists
searchGenre select any genre Real SoundCloud genre filter for track/playlist search
sortBy select relevance relevance, newest, mostPlayed, mostLiked (client-side)
minPlayCount, minLikeCount integer 0 Client-side thresholds after fetching
artistUrls string list [] Artist URLs, usernames or numeric user IDs
includeTracks boolean true Artist tracks
includeAlbums boolean false Artist albums/EPs
includePlaylists boolean false Artist playlists
includeTopTracks boolean false Artist top tracks
includeWebProfiles boolean false Public social/web profile links
startUrls URL list [] Track, playlist or artist URLs / numeric track IDs
includePlaylistTracks boolean true Expand every playlist track
includeUserProfile boolean true Emit the profile row for artist URLs in byUrl
trackUrls URL list [] Tracks for comments mode
commentsSort select newest newest, oldest, track-timestamp
relationship select followers followers or followings
resolveStreamUrls boolean true Resolve signed playable stream URLs + expiry
maxItems integer 100 Hard record cap (1-5000)

Examples

Search tracks with a genre filter

{
  "mode": "search",
  "searchQueries": ["lofi", "ambient jazz"],
  "searchType": "tracks",
  "searchGenre": "Jazz & Blues",
  "maxItems": 100
}

Global New & Hot chart

{ "mode": "charts", "chartGenre": "all", "maxItems": 100 }

Trap trending list

{ "mode": "charts", "chartGenre": "trap", "maxItems": 50 }

Full artist catalog

{
  "mode": "artistTracks",
  "artistUrls": ["https://soundcloud.com/chillhopdotcom"],
  "includeTracks": true,
  "includeAlbums": true,
  "includePlaylists": true,
  "maxItems": 500
}

Expand a playlist

{
  "mode": "byUrl",
  "startUrls": ["https://soundcloud.com/chillhopdotcom/sets/chillhop-essentials-summer-2026"],
  "includePlaylistTracks": true,
  "maxItems": 300
}

Track comments

{
  "mode": "comments",
  "trackUrls": ["https://soundcloud.com/user/track"],
  "commentsSort": "newest",
  "maxItems": 200
}

Artist followers

{
  "mode": "followers",
  "artistUrls": ["https://soundcloud.com/chillhopdotcom"],
  "relationship": "followers",
  "maxItems": 500
}

Charts: what is available

SoundCloud's current public chart surface is New & Hot, not the retired all-time Top chart. The actor returns:

  • the global New & Hot list (up to 100 tracks), and
  • 20 current genre trending lists (about 50 tracks each).

The old per-genre chart endpoint and the all-time Top chart are no longer available from SoundCloud's public API. Requests for the legacy top value are mapped to the current global New & Hot list and the status message says so.

Stream URLs, previews and rights

Stream metadata comes from SoundCloud's public transcodings. streamUrl is a signed media URL and expires after about two hours; streamUrlExpiresAt records the exact time. streamUrlApi is the stable API endpoint, but it is not playable on its own without a client_id.

Not every track is fully playable: SoundCloud may return a 30-second preview (streamUrlIsPreview=true), use DRM/encrypted transcodings, or disable downloads. The actor reports the metadata it can see and never fabricates an audio file. This actor does not download or rehost audio.

Limitations

  • Search returns at most 300 rows per query. Use more queries or a genre filter to reach further.
  • The all-time Top chart and regional/country charts are not available from the current public surface.
  • Server-side BPM, duration, upload-date, license and access filters are not available on SoundCloud's public v2 search; the actor only exposes the real genre filter. sortBy and the minimum play/like thresholds are applied to the rows already fetched.
  • SoundCloud does not publish a user join date or a user repost count in this API.
  • BPM and musical key are not exposed for tracks.
  • City/country, description, genre, tags, ISRC, UPC, label and release date are conditional; fields are omitted when SoundCloud does not provide them.
  • Only public tracks, playlists and profiles are reachable. Private/unlisted content is out of scope.
  • Huge follower lists can be expensive; use maxItems to cap them.

FAQ

Do I need a SoundCloud account or API key? No. The actor reads the same public pages and public v2 JSON the SoundCloud web player uses, with no login.

Why is streamUrl sometimes missing? SoundCloud may expose only encrypted/DRM transcodings or a preview for that track. streamUrlApi, policy and the preview flag still describe what is available.

Why does a search stop at 300 rows? That is SoundCloud's public search window per query. Split the job into more queries or use searchGenre to partition it.

Why is waveformUrl a JSON file? SoundCloud's waveform field points to amplitude JSON, not an image. It is kept under the existing field name for compatibility.

Can I schedule monitoring? Yes. Run the actor on a schedule and compare playCount, likeCount, repostCount and followersCount snapshots. Monitoring helpers are not part of this version; the dataset is designed for external diffing.

Is this affiliated with SoundCloud? No. This is an independent actor that reads publicly visible data and is not endorsed by SoundCloud.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build kzMuZBsSVkEqN6Prx. Documentation is regenerated from the default published build; private drafts are not included.