Spotify Scraper
Pricing
from $0.03 / 1,000 result extracteds
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
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
a day ago
Last modified
Categories
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 andspotify:type:idURIs. - 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_SUMMARYrecord 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:
- Export Spotify Artist Metadata
- Export Spotify Track Metadata
- Export Spotify Album Metadata
- Export Spotify Playlist Metadata
- Export Spotify Podcast Show Metadata
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?
| Field | Description |
|---|---|
type, id, uri, url | Entity type and canonical Spotify identifiers |
name, description | Public title, description, or artist biography |
artistNames, albumName | Credited artists and parent album |
ownerName, publisherName | Playlist owner or podcast/audiobook publisher |
trackCount | Visible track or episode count |
followers, likes, monthlyListeners | Public metrics when Spotify publishes them |
durationMs, releaseDate | Duration and release date at the available precision |
imageUrl, previewUrl | Public cover/profile image and audio preview when available |
explicit, isrc, popularity | Content and catalog identifiers when available |
availableMarkets | ISO country codes returned by the public page or credential-backed search |
trackNumber, discNumber, albumType, label | Additional catalog details when available |
source, sourceUrl, searchQuery | Provenance for direct-page and search rows |
scrapedAt | ISO 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
| Setting | JSON key | Description |
|---|---|---|
| Spotify URLs | startUrls | Public artist, album, track, playlist, show, episode, or audiobook URLs; no credentials required |
| Spotify URIs | spotifyUris | spotify:type:id values; no credentials required |
| Search queries | searchQueries | Catalog terms; requires both Spotify credential fields |
| Search result types | searchTypes | Tracks, artists, albums, playlists, shows, episodes, or audiobooks |
| Results per query | maxSearchResults | Combined cap per query; 1–1,000 |
| Spotify market | market | Two-letter market code such as US, GB, DE, or PT |
| Spotify Client ID | clientId | Spotify app credential used only for catalog search |
| Spotify Client Secret | clientSecret | Secret Spotify app credential used only for catalog search |
| Maximum records | maxItems | Global unique-row cap across direct targets and searches; 1–10,000 |
| Proxy configuration | proxyConfiguration | Optional 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.
| Event | Charged unit | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
|---|---|---|---|---|---|---|---|
start | Once per valid run | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
result | Per 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_SUMMARYwith statusPARTIAL. - 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_SOURCEwith 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
marketfor search availability. - Start with a small
maxItemsandmaxSearchResults, then scale after checking the dataset. - Leave proxies disabled unless logs identify a block or challenge response.
- Schedule repeat runs and compare stable
idorurivalues 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
nullrather 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 ApifyClientclient = 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().itemsprint(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-scraperfor 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.
Related Actors
- YouTube Channel Videos Scraper
- YouTube Video Details Scraper
- TikTok Profile Scraper
- Reddit Scraper
- Google News Scraper
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.