How it will work: 3 steps
- 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.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
lofiin Search queries. Each start is one run. - 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
- Open the Input tab.
- Keep What to scrape on Search results and type a keyword in Search queries, for example
lofi(this is the prefill). - Keep Max tracks per query or link at 10 (prefill) or set up to 5,000.
- Click Start.
- Open the Output tab. The Tracks view shows cover, title, artist, plays, likes, reposts, comments, duration and link.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Find popular tracks in a genre | mode: search, queries | Track | plays, likes, reposts, genre, createdAt | Google Sheets, BI tool |
| Export an artist catalog | mode: user, urls | Track | isrc, albumTitle, labelName, releaseDate, plays | Catalog database, royalty checks |
| Check a playlist | mode: playlist, urls | Track | position, playlistTitle, plays, artist | Playlist pitching reports |
| Track new uploads | mode: search or user, createdWithin | Track | createdAt, plays, url | Schedules + 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
okrow 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_resultsanderrorrows, duplicate inputs and tracks skipped bycreatedWithin - 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.
{
"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)
| Field | Type | Meaning |
|---|---|---|
status | string | ok = a track row (paid). not_found, no_results and error are free status rows that explain an input without tracks. |
trackId | integer | SoundCloud track id. |
title | string | Track title. |
artist | string | Display name of the uploading account. |
artistId | integer | SoundCloud user id of the uploader. |
artistUrl | string | Uploader profile on soundcloud.com. |
artistFollowers | integer | Uploader follower count at fetch time. |
artistVerified | boolean | SoundCloud verified badge of the uploader. |
url | string | Track page on soundcloud.com. |
plays | integer | Play count. null when the uploader hides it; never replaced by 0. |
likes | integer | Like count; null when hidden. |
reposts | integer | Repost count; null when hidden. |
comments | integer | Comment count; null when hidden. |
downloads | integer | Download count; null when hidden. |
durationSec | number | Full track length in seconds (also for Go+ tracks that play only a preview). |
isPreviewOnly | boolean | true = a SoundCloud Go+ track: logged-out listeners hear only a 30-second preview. |
genre | string | Genre the uploader chose; null when empty. |
tags | array | Tags the uploader set; multi-word tags stay together. |
createdAt | string | Upload time on SoundCloud, ISO 8601 UTC. |
releaseDate | string | Release date set by the uploader, if any. |
license | string | License the uploader chose, e.g. all-rights-reserved or cc-by. |
labelName | string | Record label from track metadata. |
isrc | string | ISRC code from publisher metadata. |
albumTitle | string | Album title from publisher metadata. |
explicit | boolean | Explicit flag from publisher metadata. |
artworkUrl | string | Cover image, 500x500. |
downloadable | boolean | The uploader allows downloads on SoundCloud. The Actor never downloads audio. |
commentable | boolean | Comments are open. |
mode | string | Input mode that produced the row: search, user, playlist or track. |
query | string | Search query of the row (Search mode). |
inputUrl | string | Link or username from the input (URL modes). |
playlistId | integer | Playlist id when the row comes from a playlist. |
playlistTitle | string | Playlist title when the row comes from a playlist. |
position | integer | 1-based rank in the search results, artist list or playlist. |
errorCode | string | Status rows only: NOT_FOUND, UNSUPPORTED_URL, SOURCE_BLOCKED and similar. |
message | string | Status rows only: what happened, in plain words. |
source | string | Always soundcloud. |
fetchedAt | string | When 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.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| What to scrape | mode | string | "search" |
| Search queries | queries | array | ["lofi"] |
| SoundCloud links or usernames | urls | array | |
| Max tracks per query or link | maxItems | integer | 10 |
| Uploaded within | createdWithin | string | "any" |
Use cases with this tool
Each guide shows all the steps and the other tools.