Spotify Scraper: Monthly Listeners, Playlists & Tracks avatar

Spotify Scraper: Monthly Listeners, Playlists & Tracks

Pricing

from $2.80 / 1,000 music profiles

Go to Apify Store
Spotify Scraper: Monthly Listeners, Playlists & Tracks

Spotify Scraper: Monthly Listeners, Playlists & Tracks

Get Spotify artists' monthly listeners, followers, top cities and top tracks, plus playlists with followers and track play counts, from links or search. $0.0035 per profile or direct track: 100 cost $0.35. Optional collection tracks $0.001 each. No login. Daily change monitoring.

Pricing

from $2.80 / 1,000 music profiles

Rating

0.0

(0)

Developer

fortbrand

fortbrand

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Security

Limited permissions

Share

For music marketers, artist teams, labels and playlist researchers monitoring Spotify audiences and catalogs. Get listeners, followers, top cities, artist top tracks, playlists and song play counts from public links or search. Search matches receive full detail enrichment.

A music profile or direct track lookup costs $0.0035, so 100 cost $0.35 before plan discounts. Optional track rows from playlists and albums cost $0.001 each. An artist's nested top tracks are included in the artist price. There is also Apify's small $0.00005 start fee. No Spotify login, developer application or API key is required.

Validation: 38 varied cloud inputs passed; ten output rows matched rendered public pages on 29 October 2026.

What you get

Each music record starts with a readable verdict, a type and its stable Spotify ID. Counts are numbers suitable for spreadsheets, rather than abbreviations such as 92m. Missing values are null. A run also creates a free SUMMARY dataset row and a SUMMARY key-value record with coverage, skipped duplicates, unavailable inputs, request statistics and spending-limit information.

RecordFieldsIntended use
ArtistartistId, name, monthlyListeners, followers, worldRank, verified, topCities, topTracks, genres, urlTrack an audience, compare artists and check campaigns
PlaylistplaylistId, name, owner, followers, trackCount, description, urlResearch public playlists and monitor follower changes
TracktrackId, name, artists, album, playCount, durationMs, releaseDate, explicit, trackNumber, urlCompare song performance and enrich a catalog
AlbumalbumId, name, artists, releaseDate, trackCount, label, urlIdentify releases and optionally retrieve their tracks
Every music recordverdict, type, observedAt; image URL when suppliedJoin daily exports using IDs and observation timestamps
Watch observationPrevious listeners or followers, absolute changes, previousObservedAt, changeStatusDeliver a baseline once and then only changed profiles

Artist topCities contains city, country, region and listeners. These selected cities do not sum to monthly listeners. topTracks includes IDs, names, exact plays, durations, artists and album links for Spotify's selected top tracks, not the complete discography.

Genres are currently absent from the signed-out web-player response and remain null. World rank and verification also remain null when the source does not supply them. The Actor does not infer a genre, verified badge or rank from a biography or from similar artists.

Playlist owner is the public display name only. No curator emails, account identifiers, private profiles or contact enrichment are collected. Descriptions are converted to plain text. Private, deleted, personalized or region-restricted playlists may be unavailable even when the URL format is valid.

Search follows Spotify ranking and can include loose recommendations. Use exact URLs for strict artist or release identity.

Start in three steps

  1. Paste public Spotify links into startUrls, or add names to searchTerms and choose searchType.
  2. Set maxItems. Leave includeTracks off for a cheap profile-only snapshot. Enable it when you want separate album or playlist track rows.
  3. Run the Actor and open the Music overview, Audience and changes, or Tracks and play counts dataset view. Export JSON, CSV or Excel through Apify.

The prefilled input contains two artist links and a 20-record limit. A measured two-artist cloud test completed in 5.45 seconds. Large jobs are paced; increase the run timeout for jobs that need over an hour. Proxies and retries can add runtime.

Example: compare two artist audiences

{
"startUrls": [
"https://open.spotify.com/artist/4gzpq5DPGxSnKTe4SA8HAU",
"https://open.spotify.com/artist/4Z8W4fKeB5YxbusRsdQVPb"
],
"maxItems": 20,
"includeTopCities": true
}

Example: an album and its tracks

{
"startUrls": [
"https://open.spotify.com/album/6ZG5lRT77aJ3btmArcykra"
],
"includeTracks": true,
"maxItems": 20
}

This tested album returns one album and ten tracks, plus the free summary. Track rows carry album, release date, plays and parentId; SUMMARY.collections records membership.

Input reference

InputDefaultMeaning
startUrlsEmpty outside the prefillArtist, playlist, album or track links. Canonical links, supported intl-xx links, embed links and Spotify URIs are normalized. Query-string sharing parameters are removed.
searchTermsEmptyUp to 50 names or keyword queries. May be combined with links.
searchTypeartistOne of artist, playlist, track, album. Direct links keep their own type.
maxItems100Maximum unique music rows across the whole run, from 1 to 10,000. Collection parents and their tracks share the same limit.
includeTracksfalseRetrieve separate paid track rows from album and playlist contents. Does not change the nested artist top-track list.
includeTopCitiestrueInclude artist city statistics where available. With this disabled, topCities is null.
onlyChangedSinceLastRunfalseCompare artist listeners and followers, or playlist followers, with the same watch's previous successful observation.
watchIdEmptyRequired for change mode. Use 1 to 80 letters, digits, underscores or hyphens.
proxyConfigurationNo added proxyOptional Apify proxy settings. Signed-out cloud datacenter access passed the build tests.

Aliases urls, keywords and query are accepted. Bad inputs produce free notes or pre-run validation errors. Missing items and empty results have no music-record charge. Search considers at most 1,000 ranked results per term.

maxItems covers parents and tracks together. A playlist with a limit of six can return one playlist and five tracks, plus free notes and the summary. Repeated tracks are charged once; their first delivered occurrence determines the direct or collection unit.

Monitor audiences every day

Create an Apify task using the public artist or playlist links you want to watch. Turn on onlyChangedSinceLastRun and choose a stable watchId, for example weekly-roster. Add a daily or weekly schedule in your own Apify account. The Actor does not create schedules automatically.

The first run delivers a baseline. Later artist rows require changed listeners or followers; playlist rows require changed followers. Rows include previous values and absolute differences.

Unchanged profiles are free and counted in the summary. An empty changed-only dataset can be valid; the start fee still applies. Watches have no historical backfill.

Keep runs for a watch ID sequential. An unfinished-run marker prevents a later run from replacing an incomplete baseline. Resume the interrupted run or use another watch ID. Overlapping runs are not supported.

Playlist edits, world rank, top cities and top tracks do not trigger this filter. Albums and direct tracks are always returned. For complete catalog snapshots, leave it off. Watch state lives in a named Apify key-value store in your account; deleting it resets the baseline.

Pricing and spending controls

Useful unitBase priceBronzeSilverGold and higher
Artist, playlist or album profile$0.0035$0.003325$0.00315$0.0028
Direct or searched track lookup$0.0035$0.003325$0.00315$0.0028
Optional collection track row$0.001$0.00095$0.0009$0.0008

Apify's $0.00005 platform start fee is additional. Public-data requests, compute, storage operations during execution and optional Apify proxy use are included in the Actor's pay-per-event price. You do not need a separate Spotify API subscription.

At base prices, 100 artist profiles cost $0.35 plus the start fee. One playlist with 50 unique included tracks costs $0.0535 plus the start fee. One album with ten included tracks costs $0.0135 plus the start fee. Artist top tracks nested inside a profile do not add track charges. These examples assume the source returns every requested item and no duplicates.

Set Maximum charge per run for large jobs. The Actor saves a row before charging it, and stops when the next unit will not fit. Empty searches, unavailable links, retries, duplicates, notes and summaries add no music-unit charges. Reboots reconcile saved rows and acknowledged charges before continuing.

Output example from a real cloud run

Selected cloud fields from 29 October 2026; later counts can differ.

{
"verdict": "91,971,310 monthly listeners.",
"type": "artist",
"artistId": "4gzpq5DPGxSnKTe4SA8HAU",
"name": "Coldplay",
"monthlyListeners": 91971310,
"followers": 65999220,
"worldRank": 9,
"topCities": [
{"city": "Mexico City", "country": "MX", "region": "CMX", "listeners": 1430995}
],
"genres": null,
"verified": true,
"url": "https://open.spotify.com/artist/4gzpq5DPGxSnKTe4SA8HAU"
}

Track artists contains public IDs, names and links. album contains its ID, name and link. Durations use milliseconds. Release dates retain the source precision. playCountText preserves thresholds such as <1000; thresholds are not converted into invented exact counts.

API use

Start a run with the Apify API and then fetch the default dataset. Keep your Apify token in an environment variable and use an Authorization header. No Spotify credentials belong in the input.

curl --request POST \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header "Content-Type: application/json" \
--data '{"searchTerms":["Coldplay"],"searchType":"artist","maxItems":3}' \
'https://api.apify.com/v2/acts/vant47~spotify-artist-playlist-scraper/runs'

Poll the returned run ID until completion, then read /v2/datasets/DATASET_ID/items?clean=1. Short jobs can use run-sync-get-dataset-items. Preserve full JSON for nested city and top-track arrays.

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("vant47/spotify-artist-playlist-scraper").call(
run_input={"searchTerms": ["ambient"], "searchType": "playlist", "maxItems": 5}
)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
profiles = [row for row in rows if row.get("type") == "playlist"]

Use with AI agents (MCP)

Connect your MCP client to https://mcp.apify.com and ask it to run vant47/spotify-artist-playlist-scraper. Give the assistant concrete URLs or search terms, a result type, a maximum record count and whether included tracks are needed. Ask it to read the summary as well as the dataset so truncated collections and unavailable inputs are not mistaken for complete coverage.

Example: Find two Spotify artist matches for Coldplay with listeners, followers and top-track plays, below $0.02. For a playlist plus ten tracks, ask for maxItems: 11 because the parent also counts.

Join exports by stable IDs. Apify tasks, schedules and webhooks connect to Sheets, n8n, Make or Zapier. The Actor sends no messages and modifies no playlist or playback state.

Reliability and honest limits

Requests are serial, at least 1.25 seconds apart, with fresh retry connections and Retry-After support. Public embeds supply anonymous web-player sessions. No account cookies, login, challenge solving, playback or audio downloads are used.

Retired query identifiers can be rediscovered from Spotify's current public page assets. Authentication changes, blocked routes and removed fields can still require maintenance. Failures appear in free notes and the summary; metrics are never fabricated.

Collections are paged within item and spending limits. Removed tracks, local files, episodes and unavailable entries are not charged. Global deduplication can make the row count smaller than the playlist count. SUMMARY.collections records observed positions, delivered track IDs and truncation. A playlist edited during a run is not an atomic snapshot.

Availability can vary by market. A normalized locale link does not select a country's account catalog. There is no country or store-price mode. Monthly listeners are a rolling audience measure, not lifetime streams. Play counts need not update after each play.

FAQ

Does search return monthly listeners and play counts? Yes, matches are fetched through the detailed item route. If the source omits a field for an individual item it remains null and is not replaced with an estimate.

Why can a playlist have more positions than returned track rows? A cap, duplicate track, unavailable item or non-track entry can reduce unique output. Read the collection coverage and truncation flags in the summary before interpreting the result.

Can a reboot charge the same saved row twice? Delivery is serialized, keyed by run and record identity, and reconciled with dataset rows and authoritative charge counts after a restart. Ambiguous recovery stops further charging. The release is also checked with a real cloud reboot between saving a row and charging it.

Is this an official Spotify product? No. This independently built tool reads public Spotify data. Review Spotify's terms and the permissions relevant to your intended use. Access to a public page does not grant unrestricted rights to reuse its content.