Spotify Scraper avatar

Spotify Scraper

Pricing

from $0.03 / 1,000 result extracteds

Go to Apify Store
Spotify Scraper

Spotify Scraper

Export public Spotify artists, tracks, albums, playlists, podcasts, episodes, audiobooks, images, markets, and public metrics. Direct URLs need no API key.

Pricing

from $0.03 / 1,000 result extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

a day ago

Last modified

Share

Export public Spotify artist, track, album, playlist, podcast, episode, audiobook, image, market, and public-metric metadata to structured datasets.

Direct Spotify URLs and spotify: URIs need no Spotify API key. Optional keyword search uses your Spotify app Client ID and Client Secret so it returns real catalog entities instead of a generic search-page row.

What can it do?

  • Export artists, tracks, albums, playlists, podcast shows, episodes, and audiobooks from public Spotify URLs.
  • Accept both https://open.spotify.com/... links and spotify:type:id URIs.
  • Return real keyword search results across selected entity types and a chosen market when credentials are supplied.
  • Collect stable IDs and URIs, names, descriptions, artist/owner/publisher details, images, dates, durations, markets, previews, and public counts when Spotify exposes them.
  • Save a RUN_SUMMARY record with completion status, counts, duplicates, and structured item errors.
  • Retry temporary network, rate-limit, and Spotify challenge responses without hiding terminal failures.

Who is it for?

  • Music and podcast researchers exporting consistent public metadata.
  • Labels, artist teams, and playlist curators monitoring public catalog pages.
  • Developers enriching internal records with stable Spotify IDs, URIs, images, markets, and dates.
  • Data teams scheduling repeatable exports to CSV, Excel, JSON, databases, or dashboards.
  • Automation builders who need explicit partial-failure diagnostics instead of silent empty runs.

Ready-to-run examples

These published tasks use stable public pages, return one bounded record, and require no Spotify developer credentials:

Input recipes

Export mixed public Spotify pages without credentials

Example input

{
"startUrls": [
{ "url": "https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02" },
{ "url": "https://open.spotify.com/track/1dGr1c8CrMLDpV6mPbImSI" },
{ "url": "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M" },
{ "url": "https://open.spotify.com/show/6E709HRH7XaiZrMfgtNCun" }
],
"spotifyUris": ["spotify:album:1NAmidJlEaVgA3MpcPFYGq"],
"maxItems": 20
}

Search the Spotify catalog with your Spotify app credentials

{
"searchQueries": ["indie jazz"],
"searchTypes": ["track", "artist", "album"],
"market": "US",
"maxSearchResults": 10,
"maxItems": 10,
"clientId": "YOUR_SPOTIFY_CLIENT_ID",
"clientSecret": "YOUR_SPOTIFY_CLIENT_SECRET"
}

What data can you collect?

FieldDescription
type, id, uri, urlEntity type and canonical Spotify identifiers
name, descriptionPublic title, description, or artist biography
artistNames, albumNameCredited artists and parent album
ownerName, publisherNamePlaylist owner or podcast/audiobook publisher
trackCountVisible track or episode count
followers, likes, monthlyListenersPublic metrics when Spotify publishes them
durationMs, releaseDateDuration and release date at the available precision
imageUrl, previewUrlPublic cover/profile image and audio preview when available
explicit, isrc, popularityContent and catalog identifiers when available
availableMarketsISO country codes returned by the public page or credential-backed search
trackNumber, discNumber, albumType, labelAdditional catalog details when available
source, sourceUrl, searchQueryProvenance for direct-page and search rows
scrapedAtISO timestamp when the record was created

Fields that do not apply to an entity remain null or an empty array. The dataset keeps the existing field names used by earlier versions and adds new fields without removing the old ones.

Example output

{
"type": "track",
"id": "1dGr1c8CrMLDpV6mPbImSI",
"uri": "spotify:track:1dGr1c8CrMLDpV6mPbImSI",
"url": "https://open.spotify.com/track/1dGr1c8CrMLDpV6mPbImSI",
"source": "public_page",
"name": "Lover",
"artistNames": ["Taylor Swift"],
"albumName": "Lover",
"durationMs": 221306,
"releaseDate": "2019-08-23",
"availableMarkets": ["AR", "AU", "AT"],
"imageUrl": "https://i.scdn.co/image/...",
"scrapedAt": "2026-07-15T12:00:00.000Z"
}

Input settings

SettingJSON keyDescription
Spotify URLsstartUrlsPublic artist, album, track, playlist, show, episode, or audiobook URLs; no credentials required
Spotify URIsspotifyUrisspotify:type:id values; no credentials required
Search queriessearchQueriesCatalog terms; requires both Spotify credential fields
Search result typessearchTypesTracks, artists, albums, playlists, shows, episodes, or audiobooks
Results per querymaxSearchResultsCombined cap per query; 1–1,000
Spotify marketmarketTwo-letter market code such as US, GB, DE, or PT
Spotify Client IDclientIdSpotify app credential used only for catalog search
Spotify Client SecretclientSecretSecret Spotify app credential used only for catalog search
Maximum recordsmaxItemsGlobal unique-row cap across direct targets and searches; 1–10,000
Proxy configurationproxyConfigurationOptional Apify Proxy settings for blocked public-page requests

Pricing

This Actor uses pay-per-event pricing. One start event is charged after input validation, and one result event is charged for each unique dataset row saved. Invalid input is rejected before the start charge. Failed targets, retries, duplicates, and RUN_SUMMARY are not result events.

EventCharged unitFree / no discountStarter / BronzeScale / SilverBusiness / GoldCustom / PlatinumCustom / Diamond
startOnce per valid run$0.005$0.005$0.005$0.005$0.005$0.005
resultPer 1,000 saved Spotify records$0.05501$0.04783$0.03731$0.02870$0.01913$0.01339

Apify platform usage for compute, storage, data transfer, or proxies may also apply. The run page shows the exact charge for your account.

Reliability and run outcomes

  • Invalid URLs, unsupported URL types, empty queries, invalid limits, and incomplete search credentials fail before paid work begins.
  • HTTP 429, temporary server errors, timeouts, and detected challenge pages receive bounded retries.
  • Removed or unavailable entities are reported separately from network blocks.
  • Mixed inputs preserve valid rows and record failed targets in RUN_SUMMARY with status PARTIAL.
  • A run where every requested target fails ends as FAILED; it no longer appears successful with an empty dataset.
  • A valid credential-backed search with no matches may finish as EMPTY_SOURCE with zero charged results.
  • Duplicate URLs, URIs, or search results are saved and charged once per run.

Tips for better results

  • Use direct URLs for known entities; they need no Spotify developer credentials.
  • Copy the full public Spotify link or URI. Shared tracking parameters are removed during normalization.
  • Use a realistic two-letter market for search availability.
  • Start with a small maxItems and maxSearchResults, then scale after checking the dataset.
  • Leave proxies disabled unless logs identify a block or challenge response.
  • Schedule repeat runs and compare stable id or uri values when monitoring public metrics.

Limits and practical notes

  • The Actor exports public metadata only. It does not access listening history, private libraries, private playlists, account analytics, or private user data.
  • It does not download songs or full podcast audio. A public preview URL may be returned when Spotify exposes one.
  • Direct public pages and credential-backed search expose different field sets. Search rows often contain fewer public metrics than direct artist or entity pages.
  • Spotify may hide, round, regionalize, remove, or rename fields; unavailable fields remain null rather than being guessed.
  • Spotify reduced the Web API search page maximum to 10 results in 2026, so larger requests are paginated.
  • Follow Spotify's developer terms and content policies, including attribution, media-use, and AI-training restrictions, when using Web API results.

API usage

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/spotify-scraper').call({
spotifyUris: ['spotify:track:1dGr1c8CrMLDpV6mPbImSI'],
maxItems: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/spotify-scraper").call(run_input={
"startUrls": [{"url": "https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"}],
"maxItems": 5,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~spotify-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"startUrls":[{"url":"https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M"}],"maxItems":5}'

MCP and AI-agent operation

Use the official Apify MCP server. The focused endpoint exposes only this Actor:

https://mcp.apify.com?tools=fetch_cat/spotify-scraper

Claude CLI setup:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/spotify-scraper"

Claude Desktop configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/spotify-scraper"
}
}
}

Example prompts:

  • “Run fetch_cat/spotify-scraper for these public artist URLs and return the dataset link.”
  • “Check this playlist URL weekly and report whether its public metadata changed.”
  • “Run these podcast show URLs and list any item errors from RUN_SUMMARY."

Do not use Spotify content to train or ingest into machine-learning models where Spotify's policies prohibit it.

FAQ

Do direct URLs need a Spotify API key?

No. Public entity URLs and Spotify URIs use public page data. Only searchQueries requires your Spotify app Client ID and Client Secret.

Why does search require credentials?

Spotify's public search web page does not reliably contain real server-rendered results. Credential-backed Web API search returns actual entity records and avoids the earlier misleading generic search row.

Can it export podcast shows and episodes?

Yes. Use public /show/ and /episode/ URLs or their Spotify URIs. Removed episodes fail with an explicit unavailable-entity error.

Can it export playlist or album tracks as separate rows?

This release exports the requested playlist or album as one metadata row, including its visible item count. Full child-track expansion is deferred because it changes charging and output volume; it is not advertised as current behavior.

What if one URL fails?

Valid rows are preserved. The run finishes with PARTIAL in RUN_SUMMARY, which includes a safe error code and message for each failed input. If every target fails, the Actor run fails.

Can I export CSV, Excel, or JSON?

Yes. Use Apify dataset exports or retrieve rows through the Dataset API.

Support

If a run fails, returns unexpected zero data, or a field looks wrong, open an issue from the Actor page. Include the Apify run ID or run URL, input JSON with secrets removed, one reproducible public URL, expected output, and actual output.

Privacy and data handling

The Actor processes the inputs you provide and public Spotify records needed for the run. Results and RUN_SUMMARY are stored in your Apify run storage. Spotify credentials are used only to request a short-lived read-only catalog token for search and should never be included in support reports. Use the Actor lawfully and follow Spotify's applicable terms and content policies.