nuvemdesom API

July 30, 2026 · View on GitHub

See the split docs for full coverage:


SoundCloudAPI: additional methods

get_followers(profile_url, limit=200)

Yields Entity objects for users who follow the given profile.

sc = SoundCloudAPI()
for follower in sc.get_followers("https://soundcloud.com/noisia", limit=50):
    print(follower.name, follower.extra.get("followers_count"))

get_followers resolves the profile URL to a numeric user id first, then paginates /users/{id}/followers with linked_partitioning=1. It returns immediately if the profile URL cannot be resolved.

Parameters:

NameTypeDefaultDescription
profile_urlstrn/aSoundCloud profile URL
limitint200Maximum number of followers to yield

Returns: Iterator[mediavocab.Entity]


get_following(profile_url, limit=200)

Yields Entity objects for users that the given profile follows.

for followed in sc.get_following("https://soundcloud.com/noisia", limit=50):
    print(followed.name)

This has the same pagination behavior as get_followers. It paginates /users/{id}/followings.

Returns: Iterator[mediavocab.Entity]


get_reposts(profile_url, limit=50)

Yields Release objects for tracks reposted by the given profile.

for release in sc.get_reposts("https://soundcloud.com/noisia", limit=20):
    print(release.work.title, release.uri)

get_reposts paginates /stream/users/{id}/reposts. Items without a title are skipped silently.

Returns: Iterator[mediavocab.Release]


crawl(seeds, *, social_depth=50, max_artists=0, seen=None)

A BFS generator that discovers artists through their social graph.

seen = set()
for entity in sc.crawl(
    ["https://soundcloud.com/noisia", "black metal"],
    social_depth=20,
    max_artists=100,
    seen=seen,
):
    print(entity.name, entity.extra.get("followers_count"))

A seed can be a SoundCloud profile URL or a keyword query string. A keyword seed resolves to the top search_people result. If resolution fails, the seed is skipped. For each artist in the frontier, crawl fetches and enqueues up to social_depth followers and followings.

Parameters:

NameTypeDefaultDescription
seedslist[str]n/aProfile URLs or keyword query strings
social_depthint50Max followers/followings to enqueue per artist
max_artistsint0Stop after this many yields (0 = unlimited)
seenset[str] | NoneNoneMutable set of visited URLs, mutated in place for resumability

Returns: Iterator[mediavocab.Entity]

crawl mutates the seen set in place. Pass the same set across multiple crawl() calls to resume without visiting an already-seen profile again.


Entity: extra fields

The people methods (search_people, resolve_user, get_followers, get_following) all populate the following fields with _sc_user_to_dict():

entity.extra keySourceNotes
"artist_url"permalink_urlFull profile URL
"image"avatar_urlAvatar image URL
"country"country_codeISO 3166 alpha-2 when known
"permalink"permalinkURL slug
"verified"verified"1" when the account is verified; key absent otherwise
"followers_count"followers_countString int when present in the API response
"followings_count"followings_countString int when present in the API response
"track_count"track_countString int when present in the API response

All count fields are stored as strings, since Entity.extra is a dict[str, str]. Convert them as needed:

followers = int(entity.extra.get("followers_count") or 0)
verified   = bool(entity.extra.get("verified"))

← CLI reference · Home