Spotify Profile Scraper avatar

Spotify Profile Scraper

Pricing

Pay per usage

Go to Apify Store
Spotify Profile Scraper

Spotify Profile Scraper

Scrapes public Spotify user profiles: display name, follower/following counts, profile image, and the public playlist library.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Lukas Lunes

Lukas Lunes

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

11 days ago

Last modified

Categories

Share

Apify actor that scrapes public Spotify user profiles — display name, profile image, follower/following counts, and the public playlist library.

Built for Vana's data-pipe light-scrape path (the no-login, public-data lane — the analog of the Instagram profile scraper).

Input

FieldTypeDefaultDescription
profileUrlsstring[]— (required)Spotify user profiles: full URL (https://open.spotify.com/user/<id>), URI (spotify:user:<id>), or bare handle.
playlistLimitinteger100Max public playlists returned per profile (1–200).
proxyConfigurationobjectApify ProxyProxy used to reach Spotify.
{
"profileUrls": ["https://open.spotify.com/user/spotify", "barackobama"],
"playlistLimit": 100
}

Output

One dataset item per profile:

{
"user_id": "barackobama",
"uri": "spotify:user:barackobama",
"display_name": "Barack Obama",
"profile_image": "https://i.scdn.co/image/5c5cc54bd034019326ff5f2e1dc51dcd83656efd",
"followers_count": 360080,
"following_count": null,
"is_verified": true,
"total_public_playlists_count": 4,
"public_playlists_returned": 4,
"public_playlists": [
{
"uri": "spotify:playlist:3DYdRhM1VrOkNNPPaYnkLc",
"playlist_id": "3DYdRhM1VrOkNNPPaYnkLc",
"name": "Official Inauguration Playlist",
"image_url": "https://i.scdn.co/image/...",
"followers_count": 11937,
"owner_name": "Barack Obama",
"owner_uri": "spotify:user:barackobama"
}
],
"recently_played_artists": [],
"source_url": "https://open.spotify.com/user/barackobama",
"scraped_at": "2026-05-22T12:00:00.000Z",
"_method": "api"
}

Failed profiles produce an item with an error field (profile_not_found, profile_unavailable, invalid_input, scrape_failed) instead of crashing the run.

recently_played_artists is best-effort — present only for profiles that expose it; brand/label accounts return [].

How it works (robustness)

Two independent failure domains, so one Spotify change rarely breaks both:

  • Path A (primary) — a real Chromium (CDP/Playwright) loads open.spotify.com; the web player fetches its own anonymous auth tokens, which the actor intercepts off the network. It then calls one stable internal JSON endpoint, user-profile-view/v3/profile/{id}. No TOTP secret, no GraphQL persisted-query hashes — nothing brittle to maintain.
  • Path B (fallback) — if the API or tokens fail, the actor loads the profile page and reads the DOM via stable data-testid attributes only.

The _method field on each item records which path produced it.

Local development

npm install
# put test input in storage/key_value_stores/default/INPUT.json
node src/main.js
# results land in storage/datasets/default/