Spotify Metadata Scraper
Pricing
from $1.50 / 1,000 spotify items
Spotify Metadata Scraper
Extract public metadata and nested track lists from Spotify URLs without login or an API key.
Pricing
from $1.50 / 1,000 spotify items
Rating
0.0
(0)
Developer
Md Jakaria Mirza
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Spotify Scraper - Tracks, Artists, Albums, Playlists & Podcasts Metadata
Scrape public Spotify metadata from tracks, artists, albums, playlists, podcast shows, and episodes. This Spotify scraper extracts names, artists, authors, release dates, durations, cover images, preview URLs, and playability from any Spotify web URL or spotify: URI. Export to JSON, CSV, Excel, or HTML, or pull via the Apify API — no Spotify login and no API key required, because it reads Spotify's public embed data.
Built with Node.js 20, TypeScript, and the Apify SDK. It accepts both web URLs and URIs, nests album tracks, artist top tracks, and up to 50 playlist tracks inside the parent record, retries temporary blocks, and supports optional Apify Proxy routing.
What It Extracts
sourceUrl— the input URL you providedurl— canonical Spotify web URLspotifyUri— thespotify:URItype— requested type (track, artist, album, playlist, show, episode)resolvedType— the type actually resolved from the pageid— Spotify IDname— track, artist, album, playlist, show, or episode namesubtitle— secondary line (e.g. artist or show context)artists— list of artists withname,uri,urlauthors— list of authors/publishers (podcasts) withname,uri,urlreleaseDate— release or publish datedurationMsanddurationText— duration in ms and human-readable formexplicit— explicit content flagplayableandplayabilityReason— playability status and reasonpreviewUrl— audio preview URLimageUrl— primary cover imageimages— all cover images withurl,width,heighttrackCount— number of nested trackstracksMayBePartial— true when the embed track limit was reachedtracks— nested track list (position, type, id, uri, url, name, subtitle, duration, explicit, playable, previewUrl)featuredItem— featured episode when a show resolves to onescrapedAt— extraction timestamp
Use Cases
- Music catalog audits — bulk-resolve Spotify URLs to clean metadata for cleanup and deduplication of internal datasets.
- Playlist research and curation — pull playlist tracks, durations, and explicit flags to study or rebuild playlists.
- Artist top-track monitoring — track an artist's top tracks and cover art over time.
- Podcast and episode indexing — extract show and episode names, authors, dates, and preview links for podcast directories.
- Cover-art and preview-link collection — gather high-resolution images and audio previews for enrichment or display.
Pricing
This Actor uses Apify Pay Per Event pricing. You pay only for input items successfully saved to the dataset — nested tracks are included at no extra charge and failed inputs are not billed.
| Event name | Price per event | 1,000 items | 10,000 items |
|---|---|---|---|
spotify-item | $0.0015 | $1.50 | $15.00 |
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | yes | sample track | Spotify web URLs or spotify: URIs, one per line. |
maxItems | integer | no | 100 | Maximum number of unique Spotify URLs to process (1–10000). |
maxConcurrency | integer | no | 5 | Spotify pages fetched in parallel (1–20). |
proxyConfiguration | object | no | Proxy off | Optional Apify Proxy settings. The public embed usually works without a proxy. |
Example Input
{"startUrls": ["https://open.spotify.com/track/4uLU6hMCjMI75M1A2tKUQC","spotify:album:4m2880jivSbbyEGAKfITCa"],"maxItems": 2,"proxyConfiguration": { "useApifyProxy": false }}
How to Scrape Spotify (Step by Step)
- Click Try for free / Run.
- Paste Spotify URLs or
spotify:URIs intostartUrls, one per line. - Set
maxItems(start small to test) and optionallymaxConcurrency. - Leave proxy off, or enable Apify Proxy if you need it.
- Run, then export the results as JSON, CSV, Excel, or HTML, or pull them via the Apify API.
Sample Output
{"sourceUrl": "https://open.spotify.com/track/4uLU6hMCjMI75M1A2tKUQC","url": "https://open.spotify.com/track/4uLU6hMCjMI75M1A2tKUQC","spotifyUri": "spotify:track:4uLU6hMCjMI75M1A2tKUQC","type": "track","resolvedType": "track","id": "4uLU6hMCjMI75M1A2tKUQC","name": "Never Gonna Give You Up","subtitle": "Rick Astley","artists": [{"name": "Rick Astley","uri": "spotify:artist:0gxyHStUsqpMadRV0Di1Qt","url": "https://open.spotify.com/artist/0gxyHStUsqpMadRV0Di1Qt"}],"authors": [],"releaseDate": "1987-07-27","durationMs": 213573,"durationText": "3:33","explicit": false,"playable": true,"playabilityReason": null,"previewUrl": "https://p.scdn.co/mp3-preview/example","imageUrl": "https://i.scdn.co/image/example","images": [{ "url": "https://i.scdn.co/image/example", "width": 640, "height": 640 }],"trackCount": 0,"tracksMayBePartial": false,"tracks": [],"featuredItem": null,"scrapedAt": "2024-06-10T12:00:00.000Z"}
How It Works
- Validates and parses each input into a canonical URL, ID, type, and embed URL.
- Fetches Spotify's public embed data for the item (optionally through Apify Proxy).
- Extracts and cleans fields, nesting album/artist/playlist tracks into the parent record.
- Deduplicates inputs and writes invalid or failed inputs to the separate
failed-urlsdataset. - Charges
spotify-itemonly after a successful record is saved, then writes it to the Apify Dataset.
Known Limits
- Spotify playlist embeds currently expose up to 50 tracks.
tracksMayBePartialistruewhen that limit is reached. - Spotify show embeds can resolve to a featured episode. In that case the show stays the parent record and the resolved episode is stored in
featuredItem. - This Actor extracts public metadata only. It does not download full audio or bypass Spotify access controls, so some fields (like
previewUrl) may benullwhen Spotify does not expose them.
Legal and Ethical Use
This Actor reads only public Spotify embed metadata and uses no login or API key. You are responsible for complying with Spotify's terms, copyright, and local regulations wherever you use the data.
Local development
npm installnpm run buildNew-Item -ItemType Directory -Force storage/key_value_stores/defaultCopy-Item test_input.json storage/key_value_stores/default/INPUT.jsonnpm start
License
Apache-2.0. See LICENSE.