SoundCloud Scraper · Tracks + Artists + Emails · $1.50/1k avatar

SoundCloud Scraper · Tracks + Artists + Emails · $1.50/1k

Pricing

from $1.50 / 1,000 results

Go to Apify Store
SoundCloud Scraper · Tracks + Artists + Emails · $1.50/1k

SoundCloud Scraper · Tracks + Artists + Emails · $1.50/1k

Scrape SoundCloud tracks, artists, playlists, albums, and search results in one actor — with management/booking emails parsed directly from artist bios. Auto-classifies any SoundCloud URL. Uses the public v2 JSON API (no browser, no client_id setup). 30+ fields per row, JSON or CSV

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

SoundCloud Scraper — Tracks, Artists, Playlists, Search & Bio Emails

Auto-classify any SoundCloud URL — tracks, artist profiles, playlists/albums, or search queries — and get a clean structured dataset with 30+ fields per row plus management/booking emails parsed directly from artist bios. Uses the public v2 JSON API (no browser, no client_id setup). Pure HTTP.

How it works

How it works


Why use this scraper

  • All SoundCloud URL kinds in one input — paste a track, an artist profile, a playlist, and a search query in the same array. Each is auto-classified and routed to the right v2 API endpoint. No separate actors per URL shape.
  • Bio emails included — SoundCloud artists routinely put management/booking emails in their description field (e.g. Flume's bio begins with Management: flume@threesixzero.com). The actor parses these directly from the API response — no separate website fetch needed, ~30-50% hit rate on verified artists.
  • 30+ fields per artist — username, fullName, followers, followings, track count, playlist count, city, country, verified flag, pro subscription, creation date, avatar URL, bio, and more.
  • 20+ fields per track — title, plays, likes, reposts, comments, genre, tags, duration, license, label, release date, monetization model, artwork URL, waveform URL.
  • 15+ fields per playlist/album — title, track count, total duration, set type (album / EP / compilation), full track list with permalinks, genre, tags, release date, label name.
  • No browser, no client_id setup — the actor extracts a fresh client_id from SoundCloud's JS bundle automatically (24h cache, auto-refresh on 401/403). No manual setup.
  • CSV-friendly flatten — nested API objects auto-expand to underscore-separated top-level fields, perfect for spreadsheet workflows.

Overview

SoundCloud has 175+ million tracks and 40+ million artists. Whether you're building a label scouting tool, a music-industry sales pipeline, a trend tracker, or a producer-collab finder, you eventually need this data in CSV.

The actor uses SoundCloud's public v2 JSON API (api-v2.soundcloud.com) — the same API the web app uses. Five URL shapes are auto-classified by URL pattern, so you don't tell the actor "what kind of URL this is"; you just paste URLs.


Supported inputs

InputRow(s) emitted
Track/{artist}/{track-slug}1 track row with title, plays, likes, reposts, genre, tags, duration, license, monetization, artwork.
Artist profile/{artist}1 artist row with username, full name, followers, followings, track count, country, city, verified flag, pro subscription, bio — plus emails parsed from bio.
Playlist or album/{artist}/sets/{slug}1 playlist row with title, set type (album / ep / single / compilation / '' for plain playlist), track count, full track list (id + title + permalink for each), release date, label.
Search/search?q=...Fans out to up to N rows across tracks + users (filtered search supported: /search/sounds, /search/people, /search/sets, /search/albums). Cursor-paginated.
Discover/discoverFans out SoundCloud's curated mixed-selections panels (~40-60 playlist rows depending on maxItems). /discover/sets/genre:{slug} returns featured tracks for that genre.

Mix any of these in the same startUrls[] array — the actor auto-classifies each one. JSON + CSV output.

Pure HTTP. No browser, no client_id manual setup, no third-party services.


Use cases

  • Label A&R — find emerging electronic artists by genre=techno + followers_count > 10000 + active in the last 6 months.
  • Music-industry sales pipeline — collect management/booking emails for booking agents and labels by scraping artists in your target genre.
  • Track release monitor — re-scrape your competitor labels' artists daily to catch new track uploads.
  • Producer/remix sourcing — search by tag to find remixers; cold-pitch them via bio emails.
  • Genre trend tracker — search by tag/keyword + sort by playback_count to find what's blowing up.
  • Playlist curation analysis — pull a curator's full set list to study how they sequence tracks.
  • Verified-artist market research — filter verified=true to study only the SoundCloud-verified accounts in your category.

How it works (under the hood)

Five stages, all pure HTTP via the v2 JSON API, ~150ms per resolve call:

  1. Classify URL — every input URL is matched against a deterministic regex set. Five URL shapes, one classifier function. Reserved paths (/upload, /discover, /search, etc.) are filtered out so they don't get misclassified as artists.
  2. Extract client_id — SoundCloud's v2 API requires a client_id query param. On first call, the actor fetches one JS bundle from a-v2.sndcdn.com, scans for the pattern client_id:"…", caches the result for 24h. Auto-refresh on 401/403.
  3. Call v2 APIresolve endpoint for individual entities; search/{tracks|users|albums|playlists} for search queries. impit's Chrome TLS fingerprint + Referer header pass the API's anti-bot cleanly.
  4. Parse bio emails — for artist rows, the actor runs an email regex over the description field (mailto + plain-text patterns, junk-filtered for CRM relays and template addresses). Surfaces as harvestedEmails[] field.
  5. Push flat row to dataset — one row per track, artist, or playlist. Optionally flattened (CSV-friendly) or kept nested (JSON-rich).

End-to-end live smoke test: 12 rows from 5 mixed URLs (2 artists + 1 playlist + 9 search results), 1 email harvested (flume@threesixzero.com from Flume's bio), 0 hard failures, completed in ~3 seconds.


Input configuration

FieldTypeRequiredNotes
startUrlsstring[]yesAny mix of track / artist / playlist / search URLs. Auto-classified.
harvestArtistEmailsbooleannoDefault true. Parses emails from each artist's bio. Disable for slightly cleaner raw output.
paginateSearchbooleannoDefault true. Follow cursor pagination on search URLs until maxItems is reached. Disable for first-page-only.
flattenbooleannoDefault true. Flatten nested API objects to underscore-separated top-level keys for CSV-friendly output.
includeRawbooleannoDefault false. Attach the full v2 API response as a raw field on every row.
hydratePlaylistTracksbooleannoDefault true. SoundCloud's playlist endpoint returns the first few tracks fully populated and the rest as id-only stubs. When enabled, the actor issues one extra /tracks?ids=… call per playlist to fill in titles and permalinks for every track. Disable to save one API call per playlist (titles for stub tracks will be null).
maxItemsintegernoHard cap on rows emitted (combined tracks + artists + playlists). Default 1000. Free-tier users capped at 100.
maxConcurrencyintegernoAPI calls in parallel. Default 8. SC's API is forgiving — 6-10 is the sweet spot.
proxyobjectnoDefault: Apify Proxy. Provide your own residential pool only if you hit rate-limits — the API doesn't require one in testing.

Example input

{
"startUrls": [
"https://soundcloud.com/skrillex",
"https://soundcloud.com/flume",
"https://soundcloud.com/skrillex/sets/recess",
"https://soundcloud.com/search?q=techno",
"https://soundcloud.com/search/people?q=label%20manager"
],
"harvestArtistEmails": true,
"paginateSearch": true,
"maxItems": 500
}

Output overview

Three row shapes, distinguished by the rowType field: track, artist, playlist.

rowType: "artist" — for /{artist} URLs

{
"rowType": "artist",
"sourceUrl": "https://soundcloud.com/flume",
"userId": 2976616,
"username": "Flume",
"fullName": "",
"permalinkUrl": "https://soundcloud.com/flume",
"avatarUrl": "https://i1.sndcdn.com/avatars-...-large.jpg",
"description": "Management: flume@threesixzero.com\n...",
"city": "Sydney",
"countryCode": "AU",
"followersCount": 2226886,
"followingsCount": 203,
"trackCount": 231,
"playlistCount": 46,
"likesCount": 1289,
"repostsCount": 78,
"verified": true,
"isPro": true,
"harvestedEmails": ["flume@threesixzero.com"],
"scrapedAt": "2026-05-26T..."
}

rowType: "track" — for /{artist}/{track-slug} URLs

{
"rowType": "track",
"trackId": 74415567,
"title": "Scary Monsters and Nice Sprites",
"permalinkUrl": "https://soundcloud.com/skrillex/scary-monsters-and-nice-sprites",
"durationMs": 249000,
"genre": "Dubstep",
"tags": ["dubstep", "electronic", "scary monsters"],
"playbackCount": 127500000,
"likesCount": 2500000,
"repostsCount": 450000,
"commentCount": 80000,
"labelName": "Big Beat Records",
"license": "all-rights-reserved",
"artistId": 856062,
"artistUsername": "Skrillex",
"artistUrl": "https://soundcloud.com/skrillex"
// 8 more fields...
}

rowType: "playlist" — for /{artist}/sets/{slug} URLs (also covers albums)

{
"rowType": "playlist",
"playlistId": 91234567,
"title": "Recess",
"setType": "album",
"isAlbum": true,
"trackCount": 11,
"tracks": [
{ "id": 142535312, "title": "All Is Fair in Love and Brostep", "permalinkUrl": "..." },
{ "id": 142535313, "title": "Recess", "permalinkUrl": "..." }
// ... 9 more
],
"releaseDate": "2014-03-18T00:00:00Z",
"labelName": "OWSLA",
"artistUsername":"Skrillex"
// 10 more fields...
}

Key output fields

The most-used fields for filtering / scoring:

  • harvestedEmailsstring[] of plausible management/booking emails parsed from the artist bio. Empty when the bio has no email patterns.
  • followersCount — primary popularity metric for artists. Skrillex = 6.6M. Use to filter "established artists" (e.g. > 10000).
  • verified — boolean SoundCloud-verified flag. Useful for filtering only the "real" accounts.
  • isPro — boolean derived from creator_subscription.product.id. Pro/Plus accounts are paying SC subscribers = serious artists.
  • playbackCount + likesCount + commentCount — track engagement metrics. Combined → "trending track" score.
  • genre + tags — for category filters. Tags include both single-word and quoted multi-word tags.
  • countryCode — 2-letter ISO country. Filter for territorial campaigns.
  • setType — distinguishes album / ep / single / compilation from regular playlists.

FAQ

Q: Do I need a SoundCloud account or API key? A: No. Everything in scope here is publicly accessible. The actor auto-extracts a fresh client_id from SoundCloud's public JS bundle on each run (cached 24h).

Q: How am I billed for a run? A: Two pay-per-event line items combined:

  • Output record — $0.0025 per row paid tier, $0.0015 free tier. One event per dataset row (track, artist, or playlist).
  • Additional data — $0.0001 per event, charged at 2× the count of nested items inside each row. That means each track listed inside a playlist row, each email harvested from an artist bio, and each tag on a track or playlist all bill at this rate.

So a Skrillex artist row with 0 emails costs just $0.0025. A Flume artist row with 1 email costs $0.0025 + (1 × 2 × $0.0001) = $0.0027. A 50-track playlist row with ~30 tags costs $0.0025 + ((50 + 30) × 2 × $0.0001) = $0.0185. The dense /discover panels (40-50 tracks per playlist, ~30 tags each) are where additional-data charges add up — you're getting a lot of dense data per primary row.

Q: What's the realistic email-harvest rate? A: 30-50% of verified artists put a management/booking email in their bio. Smaller/hobbyist accounts rarely do. Rate depends heavily on your input list — top-tier artists (e.g. on a label scouting list) hit ~50%.

Q: Why is description sometimes null? A: SoundCloud lets users leave their bio blank. Free / inactive accounts often have null descriptions. No bio → no email harvest possible.

Q: Can I scrape a specific artist's full track catalog? A: V1 — pass the artist URL to get the artist row (track count + summary). The artist's individual track URLs would each need to be passed separately. A future version will support /{artist}/tracks as a fan-out URL.

Q: How does Discover work, given SoundCloud removed the /charts endpoint? A: SC pulled the old /charts?genre=…&kind=top endpoint in 2026. The actor now uses what's still alive: /mixed-selections (4 curated panels of playlists — what you see on the /discover page itself) and /featured_tracks/top/{genre} (genre-targeted track lists). Pass /discover for the editorial panels or /discover/sets/genre:{slug} (e.g. /discover/sets/genre:techno) for genre-targeted tracks.

Q: How does the actor handle SoundCloud's API rate limits? A: The actor uses impit's Chrome TLS fingerprint + a real Referer header — passes cleanly in testing. If you hit a 401/403, the actor auto-refreshes the client_id once and retries. Set maxConcurrency lower (4 or below) if you're seeing transient errors.

Q: Does this work for SoundCloud Go+ exclusive tracks? A: The metadata for Go+ tracks is public (so you'll get title, artist, etc.), but the playable audio isn't accessible without a SoundCloud Go+ subscription. The actor scrapes metadata only.

Q: Output format? A: JSON (Apify Dataset default) or CSV via the Apify Console "Export" tab. Default flatten makes CSV directly usable in Excel / Google Sheets.


Support

Found a bug, hit an unexpected URL pattern, or want a new entity type supported? File feedback via the Apify Console "Issues" tab on this actor's page.


Additional services

Open to building custom scrapers, data enrichment pipelines, or co-developing actors. Reach out via the Apify Console contact form on the memo23 profile.


Explore more scrapers

These pair well with the SoundCloud scraper for music-industry workflows:

Full portfolio: apify.com/memo23.


⚠️ Disclaimer

This scraper accesses publicly available data on soundcloud.com via SoundCloud's public v2 JSON API. It does NOT bypass authentication, scrape private content, or access content not intended for public consumption.

Users are responsible for ensuring their use of this scraper complies with:

  • SoundCloud Terms of Service — review at soundcloud.com/terms-of-use
  • SoundCloud API Terms of Use — review at developers.soundcloud.com/docs
  • Applicable data protection laws including GDPR (Europe), CCPA (California), and equivalent regulations in your jurisdiction. Email harvesting falls under data-protection obligations — process responsibly, honor opt-outs, and consult legal counsel before using harvested emails for outbound marketing.
  • robots.txt and rate-limiting guidance from SoundCloud
  • Local jurisdiction laws regarding web scraping and data collection

The scraper is provided for legitimate purposes such as market research, label A&R, music-industry sales pipelines, trend tracking, and personal use. Commercial use, redistribution, or use that violates SoundCloud's Terms of Service is the user's responsibility.

This actor is independently built and is not affiliated with, endorsed by, or sponsored by SoundCloud Limited.

By using this scraper, you acknowledge that you understand and accept these responsibilities.


SEO Keywords

soundcloud scraper, soundcloud api, soundcloud data extraction, soundcloud tracks scraper, soundcloud artists scraper, soundcloud playlist scraper, soundcloud search scraper, soundcloud emails, soundcloud management contacts, soundcloud booking emails, soundcloud labels scraper, soundcloud a&r tool, soundcloud verified artists, soundcloud genre tracker, soundcloud playback count, soundcloud followers scraper, soundcloud csv export, soundcloud trending tracks, soundcloud techno scraper, soundcloud electronic music data, soundcloud producer scraper, soundcloud remix sourcing, soundcloud market research, soundcloud apify, soundcloud automation, scrape soundcloud without api key, soundcloud without oauth, no-code soundcloud scraper, soundcloud v2 api scraper.