SoundCloud Scraper — Music Data & Artist Emails avatar

SoundCloud Scraper — Music Data & Artist Emails

Pricing

from $6.00 / 1,000 soundcloud result saveds

Go to Apify Store
SoundCloud Scraper — Music Data & Artist Emails

SoundCloud Scraper — Music Data & Artist Emails

Scrape public SoundCloud tracks, artists, playlists, catalogs and search results without cookies, for A&R, music research, outreach and monitoring. Returns engagement metrics, ISRCs, tags, URLs and publicly listed contact emails.

Pricing

from $6.00 / 1,000 soundcloud result saveds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

SoundCloud Scraper — Tracks, Artists & Playlists

Scrape public SoundCloud tracks, artists, playlists, artist catalogs, and search results from keywords or public URLs. Each saved row represents one normalized SoundCloud entity, with fields such as titles, canonical URLs, artist names, public descriptions or bios, tags, genre, engagement metrics, ISRC, UPC, labels, release dates, and publicly listed contact emails. The outcome is a structured Apify dataset you can use for music research, outreach preparation, monitoring, and AI workflows.

Best fit and connected workflows

This Actor fits workflows that begin with a SoundCloud search term or a public SoundCloud URL and end with structured music metadata in an Apify dataset. It is well suited for:

  • track discovery with plays, likes, reposts, comments, tags, genre, label, and ISRC data,
  • artist research with follower counts, following counts, playlists, verification, location, and public emails,
  • direct scraping of public track, artist, and playlist URLs,
  • artist catalog collection from public artist profile URLs,
  • playlist metadata capture, with optional expansion into track rows,
  • Apify MCP-based agent workflows that need normalized SoundCloud records.

Practical scenario

A music researcher has a public SoundCloud artist profile and wants a short catalog snapshot. They choose artistTracks, paste the artist profile URL into startUrls, and keep maxResults small while checking the output shape. The returned rows can include entityType, title, artistName, trackCount, followersCount, verified, tags, isrc, and sourceUrl. Based on those fields, the researcher can decide whether to add the artist to a monitoring list or hand the catalog to an outreach step that reviews the public contact emails written in track or artist descriptions.

Input reference

FieldTypePurposeDefault
modestringChooses search, direct URL scraping, or artist catalog collection.searchTracks
searchQueriesarray of stringsUp to 20 SoundCloud keywords or phrases for search modes.["lofi hip hop"]
startUrlsarray of objectsUp to 50 public SoundCloud track, artist, or playlist URLs.Working public track URL
maxResultsintegerGlobal cap for dataset rows and paid result events.25
includeContactEmailsbooleanExtracts public emails explicitly written in descriptions.true
expandPlaylistsbooleanSaves playlist track rows after the playlist row.true
dataSourcestringChooses auto, native soundcloud, or scrapeCreators fallback.auto

Focused JSON example

{
"mode": "scrapeUrls",
"startUrls": [
{
"url": "https://soundcloud.com/kehlanimusic/lights-on-feat-big-sean"
},
{
"url": "https://soundcloud.com/kehlanimusic"
}
],
"maxResults": 10,
"includeContactEmails": true,
"expandPlaylists": true,
"dataSource": "auto"
}

Output reference

FieldTypeMeaning
entityTypestringNormalized entity type: track, artist, or playlist.
idstringStable SoundCloud identifier.
urlstringCanonical public SoundCloud URL.
titlestringTrack, playlist, or artist title or username.
descriptionstring or nullPublic description or biography.
artistIdstring or nullAssociated SoundCloud artist ID.
artistNamestring or nullPublic artist or owner name.
artistUrlstring or nullCanonical artist profile URL.
contactEmailsarrayPublic emails explicitly published in descriptions.
genrestring or nullGenre from uploader metadata when available.
tagsarrayNormalized SoundCloud tags.
durationMsinteger or nullTrack or playlist duration in milliseconds.
playbackCountinteger or nullPublic plays for track rows.
likesCountinteger or nullPublic likes when available.
repostsCountinteger or nullPublic repost count when available.
commentCountinteger or nullPublic comment count when available.
downloadCountinteger or nullPublic download count when available.
trackCountinteger or nullTrack count for artist or playlist rows.
playlistCountinteger or nullPublic playlist count for artist rows.
followersCountinteger or nullPublic follower count.
followingCountinteger or nullPublic following count.
verifiedboolean or nullSoundCloud verification flag.
artworkUrlstring or nullTrack or playlist artwork URL.
avatarUrlstring or nullArtist avatar URL.
waveformUrlstring or nullTrack waveform data URL.
isrcstring or nullISRC from publisher metadata.
upcstring or nullUPC or EAN from publisher metadata.
labelNamestring or nullLabel name.
licensestring or nullSoundCloud license identifier.
releaseDatestring or nullISO 8601 release date.
createdAtstring or nullISO 8601 creation timestamp.
lastModifiedAtstring or nullISO 8601 last update timestamp.
isExplicitboolean or nullExplicit-content flag.
streamableboolean or nullPublic streamability flag.
downloadableboolean or nullPublic download flag.
citystring or nullPublic artist city.
countryCodestring or nullPublic artist country code.
sourceUrlstringInput URL or search query that produced the record.
dataSourcestringRoute that supplied the record.
scrapedAtstringTimestamp when the row was normalized.
warningsarrayRow-specific warnings, when present.

Illustrative JSON record

{
"entityType": "track",
"id": "123456789",
"url": "https://soundcloud.com/artist/example-track",
"title": "Example Track",
"description": "Public track description.",
"artistId": "2959954",
"artistName": "Example Artist",
"artistUrl": "https://soundcloud.com/exampleartist",
"contactEmails": ["bookings@example.org"],
"genre": "Electronic",
"tags": ["electronic", "indie"],
"durationMs": 218000,
"playbackCount": 125000,
"likesCount": 4200,
"repostsCount": 310,
"commentCount": 44,
"downloadCount": null,
"trackCount": null,
"playlistCount": null,
"followersCount": null,
"followingCount": null,
"verified": null,
"artworkUrl": null,
"avatarUrl": null,
"waveformUrl": null,
"isrc": "USAAA2500123",
"upc": null,
"labelName": null,
"license": null,
"releaseDate": "2025-01-17T00:00:00.000Z",
"createdAt": "2025-01-17T12:00:00.000Z",
"lastModifiedAt": "2025-02-01T12:00:00.000Z",
"isExplicit": false,
"streamable": true,
"downloadable": false,
"city": null,
"countryCode": null,
"sourceUrl": "lofi hip hop",
"dataSource": "soundcloud",
"scrapedAt": "2026-07-15T12:00:00.000Z",
"warnings": []
}

How it works

The Actor uses SoundCloud public web data first. For supported direct track and artist routes, it can also use an owner-managed ScrapeCreators fallback when dataSource is set to auto or scrapeCreators. Search and playlist extraction stay on the native SoundCloud route, so soundcloud and auto are the relevant options for those workflows.

The input schema includes four modes:

  • searchTracks
  • searchArtists
  • scrapeUrls
  • artistTracks

maxResults sets the global limit for dataset rows and paid result events. Playlist rows count once, and expanded playlist tracks count as additional results. includeContactEmails extracts emails explicitly written in public descriptions. expandPlaylists controls whether playlist track rows are appended after the playlist row. The dataset uses a stable schema, and the terminal contract also writes compact OUTPUT and detailed RUN_SUMMARY records.

Pricing

This Actor uses Pay per event pricing plus standard Apify platform usage. The primary charged event is soundcloud-result, billed for each complete, schema-valid row saved to the default dataset. The Actor also charges the standard apify-actor-start event.

For the live pricing details, open the Pricing tab in Apify Console. As an example, a run that saves ten rows produces ten result events, plus the Actor start event and any platform usage associated with the run.

Use with AI agents (MCP)

This Actor is usable through Apify MCP as a structured SoundCloud data tool. The exact Actor identity is khadinakbar/soundcloud-scraper.

It is useful for agent workflows that need to search SoundCloud, inspect public artist profiles, collect playlist metadata, or extract public contact emails from published descriptions. Because the output is normalized, agents can read dataset rows directly instead of parsing SoundCloud pages.

Search SoundCloud for "lofi hip hop", return up to 10 rows, include public contact emails, and summarize the artist names, ISRC values, and engagement metrics from the dataset.

Output interpretation is straightforward:

  • dataset rows are the primary results,
  • sourceUrl shows which query or URL produced each row,
  • dataSource shows whether the row came from soundcloud or scrapecreators,
  • warnings carries row-specific notes when present.

For bounded agent runs, keep maxResults small and treat it as both an output cap and a cost cap. Pagination follows the selected SoundCloud route and stops when the global cap is reached.

API example

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/soundcloud-scraper').call({
mode: 'searchTracks',
searchQueries: ['lofi hip hop'],
maxResults: 10,
includeContactEmails: true,
expandPlaylists: true,
dataSource: 'auto',
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(dataset.items);

Python:

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("khadinakbar/soundcloud-scraper").call(run_input={
"mode": "searchTracks",
"searchQueries": ["lofi hip hop"],
"maxResults": 10,
"includeContactEmails": True,
"expandPlaylists": True,
"dataSource": "auto",
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Best results and outcome guidance

Use the narrowest mode that matches the job:

  • searchTracks for track discovery,
  • searchArtists for artist discovery,
  • scrapeUrls for known public links,
  • artistTracks for catalog collection from an artist profile.

Keep maxResults aligned with the question you are asking. Small runs are useful for testing output shape and cost behavior. Public contact emails are most useful when a profile or track description explicitly includes them, while engagement fields help compare tracks and artists at a glance. Playlist workflows work well when you want the playlist row first and track rows afterward.

Continue the workflow

Design note

I found that the dataset contract keeps every field explicit across tracks, artists, and playlists, including fields that often stay null such as upc, waveformUrl, and countryCode. That makes the row shape stable for exports and downstream joins.

FAQ

When should I use searchTracks versus searchArtists?

Use searchTracks when you want track-level engagement and metadata. Use searchArtists when the starting point is a name, label, or scene keyword and you want artist rows with follower and catalog fields.

Use scrapeUrls. It accepts public track, artist, and playlist URLs, and it can expand playlists into track rows when expandPlaylists is enabled.

How do I collect an artist catalog?

Use artistTracks and provide artist profile URLs in startUrls. The output contains track rows associated with the artist profile.

How is the data source chosen?

Set dataSource to auto for public SoundCloud data first, with fallback support for eligible direct track and artist routes. Set soundcloud for native extraction only, or scrapeCreators for the owner-managed fallback route where supported.

What tells me whether a row came from SoundCloud or the fallback route?

Check dataSource in the dataset row. It is either soundcloud or scrapecreators.

Responsible use

This Actor works with public SoundCloud data only. It is built for public tracks, artists, playlists, search results, and published description fields. Respect SoundCloud terms, privacy rules, and applicable outreach laws when using public contact emails. The downloadable field reports a public metadata flag, and the Actor does not download audio. For longer jobs, split work into bounded runs and keep RUN_SUMMARY for audits and cost review.