Video & audio · Coming soon

SoundCloud Scraper: Tracks, Artists and Playlists

Get public SoundCloud track data by search, artist, playlist or link. Each track is one row with plays, likes, genre and ISRC.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

trackId2119863225
titleAll Of The Worlds
artistFlume

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: lofi in Search queries. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Scrape public SoundCloud tracks by keyword search, artist profile, playlist or track link, with no login, and get one clean row per track: plays, likes, reposts, comments, duration, genre, tags, ISRC, label, album and upload date.

  • Search — tracks that SoundCloud finds for your keywords, in SoundCloud's order.
  • Artist — all tracks an artist uploaded, in profile order (usually newest first). Paste a profile link or just the username.
  • Playlist — every track of a playlist or album, in playlist order, also for long playlists.
  • Track — one row for each track link you paste.

Good for

  • Music marketing and A&R: find tracks with many plays or likes for a genre keyword.
  • Labels and managers: export an artist's catalog with ISRC, album, label and release date.
  • Playlist research: get every track of a playlist with its stats and position.
  • Trend reports: run the same searches every week and compare plays.

Not a good fit

  • SoundCloud search shows at most about 300 tracks per query. Use several narrower queries for more.
  • No audio files, no lyrics, no listener data, no private or unlisted content that needs a login.
  • No search for playlists or users, no followers lists and no comments text.
  • Counts are what SoundCloud shows at fetch time. When an uploader hides a count, the value is null, not 0.

Who uses it

A&R and music marketers

Find tracks with many plays for a genre keyword.

Labels and managers

Export an artist catalog with ISRC, label and release date.

Playlist curators

Check every track of a playlist with its stats.

Price

Prices will be shown after release.

Questions

Can it download MP3 files?

No. It collects track data only, not audio.

How many tracks can I get from one artist?

Up to 5,000 tracks per link.

Why are some counts empty?

SoundCloud hides some counts. Then the value is empty, not zero.

Do I need a SoundCloud account?

No. It reads only what a logged-out visitor sees.

Can it download MP3 or audio?

No. It collects track data only. downloadable only tells you whether the uploader allows downloads on SoundCloud.

Are the counts live?

They are what SoundCloud showed at fetchedAt. Run again to refresh them.

Is the data complete?

Search is limited to about 300 tracks per query by SoundCloud. Artist and playlist runs return every public track up to maxItems. Hidden counts are null.

Is scraping SoundCloud allowed?

The Actor reads public pages at a modest rate, one request at a time, without login, and it does not collect personal profile data or audio. SoundCloud's terms limit automated collection and reuse. You are responsible for how you store and use the data, including artists' rights; do not use it to train AI models or to republish catalogs.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Keep What to scrape on Search results and type a keyword in Search queries, for example lofi (this is the prefill).
  3. Keep Max tracks per query or link at 10 (prefill) or set up to 5,000.
  4. Click Start.
  5. Open the Output tab. The Tracks view shows cover, title, artist, plays, likes, reposts, comments, duration and link.
Use cases
TaskInputYou getKey fieldsNext step
Find popular tracks in a genremode: search, queriesTrackplays, likes, reposts, genre, createdAtGoogle Sheets, BI tool
Export an artist catalogmode: user, urlsTrackisrc, albumTitle, labelName, releaseDate, playsCatalog database, royalty checks
Check a playlistmode: playlist, urlsTrackposition, playlistTitle, plays, artistPlaylist pitching reports
Track new uploadsmode: search or user, createdWithinTrackcreatedAt, plays, urlSchedules + webhooks
Tips for better results
  • Use several narrow queries; search gives about 300 tracks each.
  • Use the uploaded-within filter to find new tracks only.
  • Raise the timeout for many large artists or playlists.
Limits and good to know
  • Track saved: one per ok row in the Dataset
  • Actor start: charged by Apify once per run (per GB of memory; the default 256 MB counts as one)
  • Free: not_found, no_results and error rows, duplicate inputs and tracks skipped by createdWithin
  • Search: about 300 tracks per query (SoundCloud shows no more). The run summary warns when a query hits this cap
  • Artist and Playlist: up to 5,000 tracks per link (maxItems). In tests one artist's 5,000 tracks took about 70 seconds at 256 MB, and 2,000 tracks about 30 seconds
  • Up to 100 queries or links per run. Many links × 5,000 tracks need a longer run timeout than the default 300 s; a link cut by the timeout is marked partial
  • Tracks that SoundCloud removed or blocked in your playlist are skipped and counted in skippedUnavailable

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "status": "ok",
  "trackId": 2119863225,
  "title": "All Of The Worlds",
  "artist": "Flume",
  "artistId": 2976616,
  "artistUrl": "https://soundcloud.com/flume",
  "artistFollowers": 2228502,
  "artistVerified": true,
  "url": "https://soundcloud.com/flume/all-of-the-worlds",
  "plays": 35963,
  "likes": 1071,
  "reposts": 78,
  "comments": 23,
  "downloads": 0,
  "durationSec": 126,
  "isPreviewOnly": false,
  "genre": "Electronic",
  "tags": [],
  "createdAt": "2025-06-26T13:01:21Z",
  "releaseDate": "2025-08-22T00:00:00Z",
  "license": "all-rights-reserved",
  "labelName": "Flume",
  "isrc": "US38Y2548239",
  "albumTitle": "DUMB",
  "explicit": false,
  "artworkUrl": "https://i1.sndcdn.com/artworks-bvBQ1BhZQSM2-0-t500x500.jpg",
  "downloadable": false,
  "commentable": true,
  "mode": "user",
  "query": null,
  "inputUrl": "https://soundcloud.com/flume",
  "playlistId": null,
  "playlistTitle": null,
  "position": 1,
  "source": "soundcloud",
  "fetchedAt": "2026-10-15T09:23:40.949Z"
}
Data fields (38)
FieldTypeMeaning
statusstringok = a track row (paid). not_found, no_results and error are free status rows that explain an input without tracks.
trackIdintegerSoundCloud track id.
titlestringTrack title.
artiststringDisplay name of the uploading account.
artistIdintegerSoundCloud user id of the uploader.
artistUrlstringUploader profile on soundcloud.com.
artistFollowersintegerUploader follower count at fetch time.
artistVerifiedbooleanSoundCloud verified badge of the uploader.
urlstringTrack page on soundcloud.com.
playsintegerPlay count. null when the uploader hides it; never replaced by 0.
likesintegerLike count; null when hidden.
repostsintegerRepost count; null when hidden.
commentsintegerComment count; null when hidden.
downloadsintegerDownload count; null when hidden.
durationSecnumberFull track length in seconds (also for Go+ tracks that play only a preview).
isPreviewOnlybooleantrue = a SoundCloud Go+ track: logged-out listeners hear only a 30-second preview.
genrestringGenre the uploader chose; null when empty.
tagsarrayTags the uploader set; multi-word tags stay together.
createdAtstringUpload time on SoundCloud, ISO 8601 UTC.
releaseDatestringRelease date set by the uploader, if any.
licensestringLicense the uploader chose, e.g. all-rights-reserved or cc-by.
labelNamestringRecord label from track metadata.
isrcstringISRC code from publisher metadata.
albumTitlestringAlbum title from publisher metadata.
explicitbooleanExplicit flag from publisher metadata.
artworkUrlstringCover image, 500x500.
downloadablebooleanThe uploader allows downloads on SoundCloud. The Actor never downloads audio.
commentablebooleanComments are open.
modestringInput mode that produced the row: search, user, playlist or track.
querystringSearch query of the row (Search mode).
inputUrlstringLink or username from the input (URL modes).
playlistIdintegerPlaylist id when the row comes from a playlist.
playlistTitlestringPlaylist title when the row comes from a playlist.
positioninteger1-based rank in the search results, artist list or playlist.
errorCodestringStatus rows only: NOT_FOUND, UNSUPPORTED_URL, SOURCE_BLOCKED and similar.
messagestringStatus rows only: what happened, in plain words.
sourcestringAlways soundcloud.
fetchedAtstringWhen the row was fetched, ISO 8601 UTC.
Input settings (5)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
What to scrapemodestring"search"
Search queriesqueriesarray["lofi"]
SoundCloud links or usernamesurlsarray
Max tracks per query or linkmaxItemsinteger10
Uploaded withincreatedWithinstring"any"

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure