Search and export public SoundCloud tracks, playlists, users, artist catalogs, playlist contents, and New & hot chart data with engagement, genre, BPM, release, access, and ranking fields.
This Actor reads public SoundCloud web data. Users do not provide a SoundCloud login, cookies, client ID, client secret, or Artist Pro account.
At a glance
- Search tracks: Run multiple keyword, artist, genre, mood, or campaign searches.
- Search playlists and albums: Find public sets by playlist, album, genre, mood, curator, or campaign keywords.
- Resolve track URLs: Paste known public tracks and export one complete metadata row per URL.
- Extract playlists and albums: Export every public track with the parent playlist's title, owner, counts, dates, tags, artwork, and license.
- Search users separately: Find public artist, label, and creator profiles as user rows with profile and audience fields.
- Resolve user URLs: Paste known public profile URLs and export one complete user row per URL.
- Follow New & hot: Export SoundCloud's current global ranking or filter its ranked tracks by published genre.
- Collect profile tracks: Export tracks published on one or more public SoundCloud profiles.
- Filter precisely: Limit keyword searches by genre, tags, BPM, duration, upload date, and playback access.
- Measure engagement: Save plays, likes, reposts, comments, downloads, and artist follower counts when visible.
- Keep stable identifiers: Receive SoundCloud URNs alongside backward-compatible numeric IDs and canonical URLs.
- Export anywhere: Download JSON, CSV, Excel, or XML; use the Apify API, schedules, webhooks, or MCP.
The Actor exports metadata only. It does not download audio, access private tracks, collect login sessions, or bypass playback restrictions.
Example input
{
"trackUrls": [
{ "url": "https://soundcloud.com/chillhopdotcom/anbuu-monsieur-teddy-high-tide-1" }
],
"playlistQueries": ["chillhop essentials"],
"playlistUrls": [
{ "url": "https://soundcloud.com/chillhopdotcom/sets/chillhop-essentials-summer-2026" }
],
"userQueries": ["chillhop"],
"userUrls": [
{ "url": "https://soundcloud.com/chillhopdotcom" }
],
"chartGenres": ["Hip-hop & Rap"],
"maxItems": 20,
"maxRuntimeSecs": 240,
"proxyConfiguration": { "useApifyProxy": false }
}
All source modes can be combined under one maxItems limit. Track-search filters apply only to queries; playlist/user search, direct URLs, playlist/profile catalogs, and charts retain their published source order.
Example output
{
"recordType": "track",
"trackId": 123456,
"trackUrn": "soundcloud:tracks:123456",
"trackTitle": "Example Track",
"url": "https://soundcloud.com/artist/example-track",
"durationMs": 184000,
"bpm": 120,
"genre": "Electronic",
"tags": ["ambient", "techno"],
"playbackCount": 10000,
"likesCount": 500,
"repostsCount": 30,
"access": "playable",
"publisherIsrc": "USABC2600001",
"artistUsername": "artist",
"artistFollowersCount": 4200,
"playlistTitle": "Chillhop Essentials Summer 2026",
"playlistTrackCount": 24,
"sourceType": "playlist",
"source": "https://soundcloud.com/chillhopdotcom/sets/chillhop-essentials-summer-2026",
"rank": 1,
"warnings": [],
"scrapedAt": "2026-07-20T12:00:00.000Z"
}
Optional fields can be null or empty when the uploader does not publish them or has hidden statistics.
What data can you export?
| Data group | Output fields |
|---|---|
| Track identity | trackId, trackUrn, trackTitle, url, permalink, apiUri |
| Descriptive metadata | description, createdAt, displayDate, durationMs, bpm, keySignature, genre, tags |
| Engagement | playbackCount, likesCount, repostsCount, commentCount, downloadCount |
| Rights and availability | license, sharing, embeddableBy, access, availableCountryCodes, revealStats, revealComments |
| Release and publisher | labelName, metadataArtist, release, releaseDate, purchaseTitle, purchaseUrl, publisher and ISRC fields |
| Media | original and high-resolution artwork/avatar URLs, waveformUrl |
| Artist profile | numeric ID, stable URN, username, display name, public bio/location, profile URL, counts, verification, plan, and website |
| Playlist context | playlist ID/URN, title, URL, description, artwork, genre, tags, duration, track/like/repost counts, dates, license, and owner |
| Playlist-search records | recordType: playlist plus public playlist identity, metadata, engagement, owner, album/set type, and rank |
| User-search records | recordType: user plus public identity, bio, location, profile URL, avatar, audience/catalog counts, verification, plan, and website |
| Chart context | chartKind, chartGenre, and original global New & hot rank |
| Run context | sourceType, source, query, profileUrl, rank, warnings, scrapedAt |
High-resolution media fields are additive. The original artworkUrl and artistAvatarUrl values remain unchanged for backward compatibility.
Input settings
| Setting | JSON key | What it controls |
|---|---|---|
| Search queries | queries |
One or more public track searches. |
| Playlist search queries | playlistQueries |
Playlist, album, genre, mood, curator, or campaign keywords; produces playlist records. |
| Public profile URLs | profileUrls |
SoundCloud profile pages whose public tracks should be collected. |
| Direct track URLs | trackUrls |
Known public SoundCloud tracks to resolve directly. |
| Playlist URLs | playlistUrls |
Public playlist or album URLs whose tracks and playlist context should be exported. |
| User search queries | userQueries |
Artist, label, creator, or profile keywords; produces user records. |
| Direct user URLs | userUrls |
Known public SoundCloud profiles to resolve as standalone user records. |
| Chart genres | chartGenres |
all-music for the full New & hot chart, or genre names/slugs to filter its ranked tracks. |
| Maximum records | maxItems |
Total unique paid track, playlist, or user rows across every source; 1–1,000. |
| Genres | genres |
Optional genre filters for keyword searches. |
| Tags | tags |
Optional tag filters for keyword searches. |
| Minimum BPM | bpmFrom |
Lowest accepted published tempo. |
| Maximum BPM | bpmTo |
Highest accepted published tempo. |
| Minimum duration | durationFromMs |
Shortest accepted duration in milliseconds. |
| Maximum duration | durationToMs |
Longest accepted duration in milliseconds. |
| Created on or after | createdAtFrom |
Earliest upload date, YYYY-MM-DD. |
| Created on or before | createdAtTo |
Latest upload date, YYYY-MM-DD. |
| Playback access | access |
Any combination of playable, preview, and blocked. |
| Work budget | maxRuntimeSecs |
Active work time, 45–600 seconds; default 240. Use a larger opt-in budget for high-volume runs; the default platform timeout is 670 seconds. |
| Proxy configuration | proxyConfiguration |
Optional request routing; direct traffic is the default. |
Add at least one query, URL, or chart genre. The Actor removes blank and duplicate sources and rejects malformed profile, track, playlist, and user URLs before network or paid work.
Common workflows
- Genre and mood research: Search several genre or mood terms, then compare plays, likes, BPM, tags, and artist followers.
- Artist catalog monitoring: Schedule a profile URL input and compare stable track URNs between datasets.
- Playlist analysis: Export playlist membership together with track, artist, release, and engagement metadata.
- Playlist discovery: Search playlists or albums by genre, mood, curator, artist, or campaign term and receive standalone playlist rows.
- Artist and label discovery: Use
userQueriesto build public creator datasets without mixing user rows into track search. - Known-profile lookup: Use
userUrlsfor one current profile row, orprofileUrlswhen you want that profile's public tracks. - Trending research: Use
chartGenres: ["all-music"]for the live global New & hot chart, or a genre such asHip-hop & Rapfor ranked genre matches. - Campaign reporting: Search a campaign, brand, or release term and preserve rank plus engagement snapshots.
- Music metadata enrichment: Export ISRC, label, release, license, key, tempo, media, and artist fields for known search terms.
- Public-playback discovery: Set
accesstoplayableorpreviewto exclude metadata-only blocked tracks.
Search filters
The Actor applies genre, tag, BPM, duration, creation-date, and access filters to track-search rows. A track can still have missing output values when its uploader did not publish a field.
Use milliseconds for durations:
- 30 seconds:
30000 - 3 minutes:
180000 - 10 minutes:
600000
For dates, use YYYY-MM-DD. Reversed ranges fail before the run is charged.
Reliability and run lifecycle
The Actor validates input before charging or requesting SoundCloud data. It then:
- reuses a small shared copy of SoundCloud's current public web configuration and refreshes it only when stale or rejected;
- retries bounded transient failures and honors
Retry-After; - classifies authentication, forbidden, removed, malformed, and non-JSON responses;
- rejects unsafe pagination hosts and repeated pagination URLs;
- saves and charges each accepted row atomically;
- deduplicates by stable URN, then numeric ID, then canonical URL;
- isolates one failed query, URL, chart entry, or profile without discarding valid rows from other sources;
- reserves at least 30 seconds for checkpoint and summary persistence;
- writes
RUN_CHECKPOINTwhen work remains andRUN_SUMMARYfor diagnostics.
Unexpected zero-result runs fail with an actionable message instead of reporting misleading success.
Dataset views and run records
The default dataset provides:
- SoundCloud records: core identity, artist, genre, tempo, engagement, access, playlist, chart, and source fields.
- Engagement metrics: track and artist counts for analysis and monitoring.
- SoundCloud users: public user-search and direct-user results with audience/catalog fields.
- Playlists and playlist tracks: standalone playlist-search rows plus track rows with parent playlist context.
- Chart tracks: New & hot rows with genre and original rank.
- Complete SoundCloud data: every published output field.
The default key-value store can contain:
RUN_SUMMARY: counts, filters, source errors, and deadline status.RUN_CHECKPOINT: pending sources and deduplication state when the safe deadline stops new work.
Tips for better results
- Begin with 20–50 records before increasing
maxItems; larger runs remain bounded by the shared runtime and checkpoint. - Use specific genre, mood, artist, or campaign phrases.
- Combine searches with profile URLs when you need both discovery rank and catalog coverage.
- Keep direct traffic unless your own network requires proxy routing.
- Use stable
trackUrnvalues for monitoring and joins; numeric IDs remain for legacy consumers. - Treat engagement counts as snapshots because they can change after the run.
Limits and practical notes
- Public metadata only; no private tracks, audio downloads, cookies, or user-login sessions.
- Maximum 1,000 saved records and 50 combined sources per run.
- Track filters apply only to track-search rows and do not alter playlist/user search, direct URLs, profile catalogs, playlist extraction, or charts.
- SoundCloud currently publishes one server-rendered global New & hot chart. Genre values filter those ranked tracks by their published genre; they are not a substitute for SoundCloud's discontinued dedicated genre or Top 50 pages.
- Quiet-mode tracks can hide plays, likes, or comments; check
revealStats,revealComments, andwarnings. - Country availability and playback access can vary by region and over time.
- SoundCloud can change or throttle its public web data service without notice. The Actor bounds retries and stops safely rather than amplifying a limit.
- Comments, follower lists, private entities, contact enrichment, audio downloads, and stream-resource rows are outside the contract.
Schedule SoundCloud monitoring
Create an Apify Schedule with the same queries or profile URLs and a bounded maxItems. Export each run’s dataset to a warehouse or spreadsheet, then join by trackUrn to identify new tracks or compare engagement snapshots.
For alerting, attach a webhook to successful Actor runs and inspect RUN_SUMMARY before processing the dataset.
API usage
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/soundcloud-tracks-search-scraper').call({
queries: ['ambient techno'],
genres: ['Electronic'],
bpmFrom: 100,
bpmTo: 140,
maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/soundcloud-tracks-search-scraper').call(run_input={
'profileUrls': [{'url': 'https://soundcloud.com/chillhopdotcom'}],
'access': ['playable', 'preview'],
'maxItems': 25,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['trackTitle'], item['playbackCount'])
cURL
curl -X POST \
"https://api.apify.com/v2/acts/fetch_cat~soundcloud-tracks-search-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries":["lofi beats"],"tags":["instrumental"],"maxItems":25}'
Keep your Apify token in an environment variable or secret manager, not source code.
Use with MCP and AI agents
The official Apify MCP server can expose only this Actor:
claude mcp add --transport http apify \
"https://mcp.apify.com?tools=fetch_cat/soundcloud-tracks-search-scraper"
Claude Desktop, Cursor, or VS Code configuration:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/soundcloud-tracks-search-scraper"
}
}
}
Example prompts:
- “Find 25 playable ambient techno tracks between 100 and 140 BPM and rank them by plays.”
- “Export public tracks from this SoundCloud profile with ISRC, release, and engagement fields.”
- “Export every public track from this playlist with playlist and artist context.”
- “Search SoundCloud for ambient playlists and return the most-liked public sets.”
- “Find SoundCloud users matching this label name and rank them by followers.”
- “Resolve this SoundCloud profile URL to one current user record.”
- “Export the current New & hot Hip-hop & Rap tracks with their original global chart ranks.”
Responsible use
Use exported metadata only within the authorization, licenses, privacy obligations, and intellectual-property rights that apply to your project. Do not use it for spam, harassment, unauthorized audio copying, rights circumvention, or decisions that unfairly affect individuals.
This independent Actor is not SoundCloud and does not imply SoundCloud endorsement. It accesses public web data without asking customers for SoundCloud credentials.
Support
If a run fails, returns unexpected zero output, or produces incorrect fields, open an issue or report a bug from the Actor page. Include:
- the Apify run ID or run URL;
- the input JSON with secrets removed;
- the expected output;
- the actual output returned by the Actor;
- one reproducible public URL or search query.
Do not include SoundCloud or Apify credentials in a support report.