SoundCloud Track Audio Downloader avatar

SoundCloud Track Audio Downloader

Pricing

Pay per event

Go to Apify Store
SoundCloud Track Audio Downloader

SoundCloud Track Audio Downloader

Resolve public SoundCloud track URLs to fresh progressive MP3 and HLS links, detailed metadata, and optional stored audio files.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Resolve batches of public SoundCloud track URLs into fresh playable audio links and detailed track metadata. Optionally copy the preferred progressive audio file into the run's Apify key-value store.

This Actor is designed for researchers, creators, archivists, podcast pipelines, and media teams that already know which public tracks they need. It does not search SoundCloud or expand profiles and playlists.

What this Actor does

For every supplied public track URL, the Actor:

  1. loads SoundCloud's anonymous public track page;
  2. reads its embedded web-player data;
  3. resolves the currently available transcodings;
  4. prefers progressive MP3 for the primary audioUrl;
  5. preserves all resolved progressive and HLS alternatives;
  6. returns track, creator, license, publisher, and engagement metadata;
  7. optionally saves the preferred audio into the run key-value store.

Signed media URLs expire. Run the Actor again whenever a workflow needs refreshed links. When SoundCloud exposes expiry context, audioExpiresAt and each format's expiresAt make that freshness explicit.

Who is it for

  • Media archivists resolving permitted public recordings in batches.
  • Researchers collecting playable links and license context for public audio.
  • Podcast and audio pipelines refreshing expiring source links on a schedule.
  • Creators and rights holders backing up or processing tracks they control.
  • Developers feeding SoundCloud media into transcription, classification, or moderation workflows.

Use this Actor when track URLs are already known. For SoundCloud discovery, profiles, playlists, or search results, use SoundCloud Scraper instead.

Why use it

The output is more than a page title or generic track record. It includes:

  • fresh progressive MP3 and HLS media URLs;
  • transcoding preset, protocol, MIME type, quality, and duration;
  • signed-link expiry when decodable;
  • track and creator identity;
  • license, ISRC, publisher, and release fields;
  • engagement and download counts;
  • an opt-in stored-audio path for downstream Actor workflows;
  • one explicit success or error record per input URL.

No login, private cookie, browser, or proxy is required for the supported public-track workflow.

Supported input scope

Version 1 accepts only public SoundCloud track URLs such as:

https://soundcloud.com/forss/flickermood

It intentionally does not accept:

  • profile URLs;
  • playlist or /sets/ URLs;
  • search and discovery pages;
  • private or secret-link tracks;
  • deleted or geo-unavailable tracks;
  • non-SoundCloud URLs.

A run accepts up to 100 track URLs. Malformed or unsupported URL shapes fail input validation before processing begins. Unavailable tracks produce uncharged per-item error records so one bad URL does not discard the rest of a batch.

Input parameters

FieldTypeDefaultDescription
startUrlsarrayrequiredOne to 100 public SoundCloud track URLs.
downloadAudiobooleanfalseCopy the preferred audio file to the run key-value store.
maxConcurrencyinteger5Concurrent track-page workers from 1 to 10. Audio-copy runs use one worker.
maxAudioSizeMbinteger100Per-file limit from 1 to 150 MB when copying audio.

maxAudioSizeMb is a memory and transfer safety boundary. It does not shorten or transcode a track. If the public file is larger, that input returns an error instead of loading an unbounded file.

Quick start

  1. Open the Actor in Apify Console.
  2. Keep the prefilled public sample or paste your own track URLs.
  3. Leave Copy audio to key-value store disabled if fresh links are sufficient.
  4. Run the Actor.
  5. Open Track results to inspect dataset records.
  6. If audio copying was enabled, open Downloaded audio for saved files.

Small metadata-only input:

{
"startUrls": [
{ "url": "https://soundcloud.com/forss/flickermood" }
],
"downloadAudio": false,
"maxConcurrency": 5
}

Audio-copy input:

{
"startUrls": [
{ "url": "https://soundcloud.com/forss/flickermood" }
],
"downloadAudio": true,
"maxAudioSizeMb": 100
}

Output fields

FieldMeaning
statussuccess or error for this input URL.
inputUrlOriginal supplied URL.
trackId, urnStable SoundCloud track identifiers.
title, permalinkUrlPublic track identity.
creatorUploader ID, names, profile, avatar, and verification.
durationMsFull track duration in milliseconds.
genre, tags, descriptionCreator-supplied descriptive metadata.
license, isrc, publisherRights and publication context when SoundCloud provides it.
playbackCount, likesCount, repostsCountPublic engagement counters.
commentCount, downloadCountPublic comments and creator-enabled download count.
downloadable, streamableSoundCloud availability flags.
formatsAll successfully resolved progressive and HLS alternatives.
audioUrlPreferred playable URL, usually progressive MP3.
audioExpiresAtSigned-link expiry when it can be decoded.
audioStorageKey, audioStorageUrlSaved-file references when audio copying is enabled.
errorClear failure reason for an unavailable input.
scrapedAtUTC timestamp when the record was resolved.

Source fields can be null when a creator did not publish them. The dataset schema is intentionally tolerant of upstream omissions.

Example output

This abbreviated record reflects current Actor behavior. Signed query values are shortened because they are temporary bearer-like media links.

{
"status": "success",
"inputUrl": "https://soundcloud.com/forss/flickermood",
"trackId": 293,
"urn": "soundcloud:tracks:293",
"title": "Flickermood",
"permalinkUrl": "https://soundcloud.com/forss/flickermood",
"creator": {
"userId": 183,
"username": "Forss",
"fullName": "Eric Quidenus-Wahlforss",
"permalinkUrl": "https://soundcloud.com/forss",
"avatarUrl": "https://i1.sndcdn.com/avatars-example-large.jpg",
"verified": true
},
"durationMs": 213890,
"genre": "Electronic",
"license": "all-rights-reserved",
"isrc": "DEP960300042",
"streamable": true,
"formats": [
{
"preset": "mp3_0_0",
"protocol": "progressive",
"mimeType": "audio/mpeg",
"quality": "sq",
"durationMs": 213890,
"signedUrl": "https://cf-media.sndcdn.com/example.mp3?Policy=REDACTED",
"expiresAt": "2026-07-25T05:30:20.000Z"
}
],
"audioUrl": "https://cf-media.sndcdn.com/example.mp3?Policy=REDACTED",
"audioExpiresAt": "2026-07-25T05:30:20.000Z",
"audioStorageKey": null,
"audioStorageUrl": null,
"error": null,
"scrapedAt": "2026-07-25T05:25:20.000Z"
}

Audio formats and file copying

formats can include multiple HLS AAC/MP4 and MP3 variants plus progressive MP3. The exact list is controlled by SoundCloud and can differ per track, account, country, or time. A failed individual transcoding is omitted when another format still resolves successfully.

When downloadAudio is true, the Actor downloads audioUrl and stores it under a key such as:

audio-293.mp3

Audio-copy runs are serial to keep memory bounded. The Actor checks the reported file size before transfer when the server exposes it, then enforces the configured size after retrieval as well. The returned API storage URL may require the Apify token that owns the run.

Pricing

This Actor uses pay-per-event pricing:

  • $0.005 once per valid run;
  • $0.00001 per resolved track across Apify plan tiers;
  • $0.0005 per started MB stored on the Free plan when audio copying is enabled, discounted by plan tier;
  • error records are not charged as resolved tracks.

Examples on the Free plan:

WorkloadEstimated Actor charge
1 metadata-only track$0.00501
10 metadata-only tracks$0.0051
100 metadata-only tracks$0.006
1 resolved track plus a 4 MB stored file$0.00701

Audio-copy totals vary with actual file size. Apify platform usage, storage retention, and transfer charges governed by the user's Apify plan are separate from Actor event charges. Prices shown here are the Actor event prices declared for the current build.

Signed media URLs are temporary by design. For a pipeline that needs live links:

  1. save canonical SoundCloud track URLs, not old signed URLs;
  2. schedule this Actor at the required refresh interval;
  3. replace downstream links with each run's audioUrl;
  4. use audioExpiresAt to avoid serving stale URLs;
  5. retain license and publisher fields with derived data.

Apify schedules, webhooks, Make, Zapier, and dataset exports can automate the refresh.

Integration patterns

Useful workflows include:

  • feed resolved audio into a transcription Actor;
  • archive licensed creator-owned tracks to external object storage;
  • monitor public engagement while refreshing media links;
  • create a permitted audio-analysis dataset with ISRC and license context;
  • trigger a webhook only for status: success records;
  • schedule metadata-only runs frequently and audio copies less often.

For large batches, prefer metadata-only resolution first. Enable copying only for tracks that a downstream job truly needs.

API with cURL

Set APIFY_TOKEN in your environment, then run:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~soundcloud-track-audio-downloader/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url":"https://soundcloud.com/forss/flickermood"}],
"downloadAudio": false
}'

Avoid embedding tokens in source control or shared logs.

API with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/soundcloud-track-audio-downloader').call({
startUrls: [{ url: 'https://soundcloud.com/forss/flickermood' }],
downloadAudio: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].audioUrl, items[0].audioExpiresAt);

API with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation-lab/soundcloud-track-audio-downloader").call(
run_input={
"startUrls": [{"url": "https://soundcloud.com/forss/flickermood"}],
"downloadAudio": False,
}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items[0]["audioUrl"], items[0]["audioExpiresAt"])

Use through Apify MCP

Claude Code

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/soundcloud-track-audio-downloader"

Claude Desktop, Cursor, and VS Code

Claude Desktop, Cursor, and VS Code can use the equivalent HTTP MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/soundcloud-track-audio-downloader"
}
}
}

Example prompts:

  • “Resolve these five public SoundCloud track URLs and show progressive MP3 links with expiry times.”
  • “Refresh this track's formats and return its license and ISRC.”
  • “Copy this creator-owned public track to run storage and return the storage key.”

Limits and failure behavior

  • SoundCloud can change embedded fields or media resolver behavior without notice.
  • Tracks can become private, deleted, non-streamable, or unavailable by geography.
  • Not every track has progressive MP3; HLS can be the only available delivery format.
  • Engagement counts and creator metadata can be absent.
  • Signed URLs expire and should not be treated as permanent archive URLs.
  • Stored files remain subject to Apify storage retention and access rules.
  • The Actor does not decrypt DRM, bypass access controls, or access private tracks.

Transient network, rate-limit, and server errors receive bounded retries with backoff. Stable invalid URLs and unavailable tracks are not retried repeatedly.

Legality and responsible use

Only download or process audio that you own, license, or are otherwise legally authorized to use. A publicly streamable page does not automatically grant permission to redistribute, republish, train on, or commercially exploit the recording.

Respect:

  • copyright and neighboring rights;
  • the track's returned license metadata;
  • SoundCloud's terms and creator settings;
  • applicable privacy and data-protection law;
  • takedown requests and retention obligations.

downloadable reports SoundCloud's original-download setting. It is not a legal opinion and is distinct from technical public streamability.

Troubleshooting

“Expected a public SoundCloud track URL”

Supply a canonical track URL with exactly a creator slug and track slug. Do not supply a profile, playlist, search page, shortened link, or another domain.

“The URL did not resolve to a public SoundCloud track”

Open the URL anonymously. The track may be private, removed, geo-blocked, or no longer streamable. Use the canonical public page URL rather than an old media CDN URL.

The audio URL stopped working

Signed media URLs expire. Rerun the Actor with the canonical permalinkUrl and replace the old link. Use audioExpiresAt to schedule refreshes before expiry.

Audio was not copied

Confirm downloadAudio is true and inspect error. Increase maxAudioSizeMb only when the run has enough memory and you are authorized to retain the file. The hard supported maximum is 150 MB per track.

A format is missing

SoundCloud controls the formats per track. The Actor returns every transcoding that resolved successfully during that run, but it cannot create formats SoundCloud did not expose.

  • SoundCloud Scraper — discover tracks, playlists, and users or collect metadata without audio-link downloading.

A common two-step workflow is to discover public track URLs with SoundCloud Scraper, then send only selected lawful track URLs to this Actor for fresh playable links.

FAQ

Does this convert SoundCloud tracks to a higher quality?

No. It returns the public transcodings SoundCloud exposes and does not upsample, transcode, or claim source-master quality.

Does it support playlists or profiles?

Not in version 1. The narrow track-URL scope keeps output predictable and avoids silently expanding large collections.

Can it access private tracks?

No. It uses anonymous public web-player data and does not accept account cookies or credentials.

No. Use the canonical track URL as the permanent identifier and rerun to obtain a fresh signed link.

Is audio copying enabled by default?

No. It is opt-in because audio increases runtime, memory, transfer, and storage use.

Are failed tracks charged?

The one-time valid-run fee still applies, but the per-resolved-track event is emitted only for successful records. Audio-megabyte events are emitted only after a file is stored.