Spotify Scraper | $2 / 1k | All-In-One
Pricing
$1.99 / 1,000 results
Spotify Scraper | $2 / 1k | All-In-One
Scrape Spotify and export clean data for tracks, artists, albums, playlists, podcasts and episodes. Get images, artists, links, release dates, popularity, duration and more. Great for discovery tools, trend tracking and catalog audits.
Pricing
$1.99 / 1,000 results
Rating
0.0
(0)
Developer
Fatih Tahta
Actor stats
2
Bookmarked
65
Total users
8
Monthly active users
an hour ago
Last modified
Categories
Share
Spotify Scraper
Slug: fatihtahta/spotify-scraper
Overview
Spotify Scraper collects structured Spotify search results for songs, artists, playlists, albums, podcasts, podcast episodes, and audiobooks, including stable identifiers, public URLs, ranking metadata, and type-specific descriptive fields. Spotify is a widely used audio platform for music, podcast, and spoken-word discovery, which makes its public catalog data useful for market intelligence, catalog analysis, enrichment, and recurring reporting workflows. The actor is designed for repeatable, automated collection with normalized JSON output that can move directly into analytics stacks, spreadsheets, ETL jobs, and internal applications. It supports both discovery-oriented keyword collection and direct URL-based collection, which helps teams standardize recurring acquisition across different research and monitoring scenarios. The result is a dependable, operationally consistent dataset that is practical for scheduled runs and downstream synchronization.
Why Use This Actor
- Market research and analytics teams: run structured extraction across songs, artists, albums, playlists, podcasts, or audiobooks to support market intelligence, trend tracking, and operational reporting.
- Product and content teams: collect repeatable catalog snapshots for discovery analysis, editorial benchmarking, release monitoring, and coverage reviews across Spotify search surfaces.
- Developers and data engineering teams: ingest normalized JSON records into downstream systems, enrichment pipelines, ETL workflows, search indexes, or warehouse models with minimal transformation.
- Lead generation and enrichment teams: build targeted datasets of artists, shows, playlists, or catalog entities for partnership research, creator discovery, and record enrichment workflows.
- Monitoring and competitive tracking teams: schedule recurring runs to detect ranking movement, new releases, playlist visibility, or changes in search result composition over time.
Common Use Cases
- Market intelligence: compare search-result composition for branded terms, genres, creators, shows, or release names across recurring reporting windows.
- Lead generation: build targeted lists of artists, playlists, or podcast properties for outreach, curation, sponsorship research, or partnership qualification.
- Competitive monitoring: track how artists, albums, playlists, or podcasts appear for strategic keywords and monitor result-position changes over time.
- Catalog and directory building: populate internal music, creator, or audio-content directories with structured public records and canonical Spotify URLs.
- Data enrichment: append current public Spotify attributes to CRM, BI, research, or analytics datasets using stable identifiers and normalized entity fields.
- Recurring reporting: schedule periodic runs to refresh dashboards, monitor keyword coverage, and support alerting or trend analysis workflows.
- Editorial and discovery analysis: review which entities rank for a given query and evaluate search visibility across different content types.
Quick Start
- Choose whether you want to collect by free-text
queries, directstartUrls, or a combination of both. - Select the appropriate
searchTypeso the run targets the entity class you want, such as songs, artists, playlists, albums, podcasts, podcast episodes, or audiobooks. - Start with a small
limitto validate the result shape and confirm the output matches your workflow. - Run the actor in Apify Console.
- Inspect the first dataset items and verify the record type, identifiers, and type-specific payload fields you need.
- Increase the limit, refine inputs, or schedule recurring runs once the output is validated.
Input Parameters
Use queries for keyword-based discovery or startUrls for direct Spotify search pages.
| Parameter | Type | Description | Default |
|---|---|---|---|
queries | array of strings | One or more free-text Spotify search queries. Useful for discovery-oriented collection when you want the actor to search by keyword. | ["Almost Real"] |
searchType | string | Entity type to search for. Allowed values: songs, artists, playlists, albums, podcasts, podcast episodes, audiobooks. | songs |
startUrls | array of strings | One or more open.spotify.com search URLs. Useful when you already know the exact Spotify search page or want to work from curated search links. | – |
limit | integer | Maximum number of records to collect across all inputs. Minimum value: 10. | 50000 |
proxyConfiguration | object | Optional Apify proxy settings used to configure the run environment. In Apify Console, this is managed through the built-in proxy editor. | {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]} |
Choosing Inputs
Use queries when you want keyword-based discovery, broad collection, or repeatable monitoring around search terms such as artist names, genres, release titles, or topical phrases. Use startUrls when you already have known Spotify search pages, want tighter control over the collection scope, or maintain curated search links outside Apify. Narrower inputs usually produce more targeted datasets, while broader queries improve discovery and surface a wider mix of relevant records. If you use limit, start small for validation and increase it only after you confirm that the returned records and record types fit your use case.
Example Inputs
Scenario: Query-driven song discovery
{"queries": ["lofi study beats","deep focus piano"],"searchType": "songs","limit": 50}
Scenario: Direct URL playlist collection
{"startUrls": ["https://open.spotify.com/search/workout/playlists","https://open.spotify.com/search/running/playlists"],"limit": 100}
Scenario: Broad podcast monitoring with conservative validation limit
{"queries": ["science","climate","economics"],"searchType": "podcasts","limit": 30}
Output
9.1 Output destination
The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs without post-processing. Each item contains a stable record envelope plus a type-specific payload when the output includes multiple entity types.
9.2 Record envelope (all items)
type(string, required): Spotify entity type for the record, such astrack,artist,album,playlist, orshow.id(string, required): Stable Spotify identifier for the entity.url(string, required): Canonical public Spotify URL for the entity.
Recommended idempotency key: type + ":" + id
Use the idempotency key for deduplication and upserts when storing results across repeated runs. This stable envelope makes records easier to merge, deduplicate, and synchronize across warehouses, CRMs, search indexes, and other downstream systems.
9.3 Examples
The examples below include each distinct record type shown in the provided sample outputs.
Example: track (type = "track")
{"record_type": "track","id": "5qes1Ub35CmN8xitZb3Y7u","name": "Almost","url": "https://open.spotify.com/track/5qes1Ub35CmN8xitZb3Y7u","uri": "spotify:track:5qes1Ub35CmN8xitZb3Y7u","href": "https://api.spotify.com/v1/tracks/5qes1Ub35CmN8xitZb3Y7u","type": "track","external_urls": {"spotify": "https://open.spotify.com/track/5qes1Ub35CmN8xitZb3Y7u"},"rank": 1,"summary": {"artist_names": ["Lewis Capaldi"],"artists": [{"external_urls": {"spotify": "https://open.spotify.com/artist/4GNC7GD6oZMSxPGyXy4MNB"},"href": "https://api.spotify.com/v1/artists/4GNC7GD6oZMSxPGyXy4MNB","id": "4GNC7GD6oZMSxPGyXy4MNB","name": "Lewis Capaldi","type": "artist","uri": "spotify:artist:4GNC7GD6oZMSxPGyXy4MNB"}],"album_name": "Almost","album": {"album_type": "single","artists": [{"external_urls": {"spotify": "https://open.spotify.com/artist/4GNC7GD6oZMSxPGyXy4MNB"},"href": "https://api.spotify.com/v1/artists/4GNC7GD6oZMSxPGyXy4MNB","id": "4GNC7GD6oZMSxPGyXy4MNB","name": "Lewis Capaldi","type": "artist","uri": "spotify:artist:4GNC7GD6oZMSxPGyXy4MNB"}],"external_urls": {"spotify": "https://open.spotify.com/album/5Z3pArkP5MFDBRsjUWd6zC"},"href": "https://api.spotify.com/v1/albums/5Z3pArkP5MFDBRsjUWd6zC","id": "5Z3pArkP5MFDBRsjUWd6zC","images": [{"height": 640,"width": 640,"url": "https://i.scdn.co/image/ab67616d0000b273e2f35f476c6a0791fca8f1cc"},{"height": 300,"width": 300,"url": "https://i.scdn.co/image/ab67616d00001e02e2f35f476c6a0791fca8f1cc"},{"height": 64,"width": 64,"url": "https://i.scdn.co/image/ab67616d00004851e2f35f476c6a0791fca8f1cc"}],"is_playable": true,"name": "Almost","release_date": "2025-10-24","release_date_precision": "day","total_tracks": 3,"type": "album","uri": "spotify:album:5Z3pArkP5MFDBRsjUWd6zC"},"release_date": "2025-10-24","release_date_precision": "day","duration_ms": 220779,"popularity": null,"explicit": false,"external_ids": {"isrc": "DEUM72505273"},"preview_url": null,"track_number": 1,"disc_number": 1,"available_markets": null,"is_playable": true,"is_local": false,"linked_from": null,"restrictions": null},"spotify_data": {"album": {"album_type": "single","artists": [{"external_urls": {"spotify": "https://open.spotify.com/artist/4GNC7GD6oZMSxPGyXy4MNB"},"href": "https://api.spotify.com/v1/artists/4GNC7GD6oZMSxPGyXy4MNB","id": "4GNC7GD6oZMSxPGyXy4MNB","name": "Lewis Capaldi","type": "artist","uri": "spotify:artist:4GNC7GD6oZMSxPGyXy4MNB"}],"external_urls": {"spotify": "https://open.spotify.com/album/5Z3pArkP5MFDBRsjUWd6zC"},"href": "https://api.spotify.com/v1/albums/5Z3pArkP5MFDBRsjUWd6zC","id": "5Z3pArkP5MFDBRsjUWd6zC","images": [{"height": 640,"width": 640,"url": "https://i.scdn.co/image/ab67616d0000b273e2f35f476c6a0791fca8f1cc"},{"height": 300,"width": 300,"url": "https://i.scdn.co/image/ab67616d00001e02e2f35f476c6a0791fca8f1cc"},{"height": 64,"width": 64,"url": "https://i.scdn.co/image/ab67616d00004851e2f35f476c6a0791fca8f1cc"}],"is_playable": true,"name": "Almost","release_date": "2025-10-24","release_date_precision": "day","total_tracks": 3,"type": "album","uri": "spotify:album:5Z3pArkP5MFDBRsjUWd6zC"},"artists": [{"external_urls": {"spotify": "https://open.spotify.com/artist/4GNC7GD6oZMSxPGyXy4MNB"},"href": "https://api.spotify.com/v1/artists/4GNC7GD6oZMSxPGyXy4MNB","id": "4GNC7GD6oZMSxPGyXy4MNB","name": "Lewis Capaldi","type": "artist","uri": "spotify:artist:4GNC7GD6oZMSxPGyXy4MNB"}],"disc_number": 1,"duration_ms": 220779,"explicit": false,"external_ids": {"isrc": "DEUM72505273"},"external_urls": {"spotify": "https://open.spotify.com/track/5qes1Ub35CmN8xitZb3Y7u"},"href": "https://api.spotify.com/v1/tracks/5qes1Ub35CmN8xitZb3Y7u","id": "5qes1Ub35CmN8xitZb3Y7u","is_local": false,"is_playable": true,"name": "Almost","track_number": 1,"type": "track","uri": "spotify:track:5qes1Ub35CmN8xitZb3Y7u"},"search_result": {"query": "almost","search_type_input": "songs","api_type": "track","page": 1,"section": {"href": "https://api.spotify.com/v1/search?offset=0&limit=10&query=almost&type=track&locale=en-US,en;q%3D0.9","limit": 10,"next": "https://api.spotify.com/v1/search?offset=10&limit=10&query=almost&type=track&locale=en-US,en;q%3D0.9","offset": 0,"previous": null,"total": 903},"item_index_on_page": 0,"item_offset": 0}}
Example: show (type = "show")
{"record_type": "show","id": "5lY4b5PGOvMuOYOjOVEcb9","name": "Science Vs","url": "https://open.spotify.com/show/5lY4b5PGOvMuOYOjOVEcb9","uri": "spotify:show:5lY4b5PGOvMuOYOjOVEcb9","href": "https://api.spotify.com/v1/shows/5lY4b5PGOvMuOYOjOVEcb9","type": "show","external_urls": {"spotify": "https://open.spotify.com/show/5lY4b5PGOvMuOYOjOVEcb9"},"rank": 1,"summary": {"publisher": null,"description": "There are a lot of fads, blogs and strong opinions, but then there’s SCIENCE. Science Vs is the show from Spotify Studios that finds out what’s fact, what’s not, and what’s somewhere in between. We do the hard work of sifting through all the science so you don't have to and cover everything from 5G and ADHD, to Fluoride and Fasting Diets.","html_description": "<p>There are a lot of fads, blogs and strong opinions, but then there’s SCIENCE. Science Vs is the show from Spotify Studios that finds out what’s fact, what’s not, and what’s somewhere in between. We do the hard work of sifting through all the science so you don't have to and cover everything from 5G and ADHD, to Fluoride and Fasting Diets.</p>","total_episodes": 327,"languages": ["en"],"media_type": "mixed","images": [{"height": 640,"url": "https://i.scdn.co/image/ab6765630000ba8a5b98e0dd85cfbba8bb930931","width": 640},{"height": 300,"url": "https://i.scdn.co/image/ab67656300005f1f5b98e0dd85cfbba8bb930931","width": 300},{"height": 64,"url": "https://i.scdn.co/image/ab6765630000f68d5b98e0dd85cfbba8bb930931","width": 64}],"copyrights": [],"explicit": false,"is_externally_hosted": false,"available_markets": null},"spotify_data": {"copyrights": [],"description": "There are a lot of fads, blogs and strong opinions, but then there’s SCIENCE. Science Vs is the show from Spotify Studios that finds out what’s fact, what’s not, and what’s somewhere in between. We do the hard work of sifting through all the science so you don't have to and cover everything from 5G and ADHD, to Fluoride and Fasting Diets.","html_description": "<p>There are a lot of fads, blogs and strong opinions, but then there’s SCIENCE. Science Vs is the show from Spotify Studios that finds out what’s fact, what’s not, and what’s somewhere in between. We do the hard work of sifting through all the science so you don't have to and cover everything from 5G and ADHD, to Fluoride and Fasting Diets.</p>","explicit": false,"external_urls": {"spotify": "https://open.spotify.com/show/5lY4b5PGOvMuOYOjOVEcb9"},"href": "https://api.spotify.com/v1/shows/5lY4b5PGOvMuOYOjOVEcb9","id": "5lY4b5PGOvMuOYOjOVEcb9","images": [{"height": 640,"url": "https://i.scdn.co/image/ab6765630000ba8a5b98e0dd85cfbba8bb930931","width": 640},{"height": 300,"url": "https://i.scdn.co/image/ab67656300005f1f5b98e0dd85cfbba8bb930931","width": 300},{"height": 64,"url": "https://i.scdn.co/image/ab6765630000f68d5b98e0dd85cfbba8bb930931","width": 64}],"is_externally_hosted": false,"languages": ["en"],"media_type": "mixed","name": "Science Vs","type": "show","uri": "spotify:show:5lY4b5PGOvMuOYOjOVEcb9","total_episodes": 327},"search_result": {"query": "science","search_type_input": "podcasts","api_type": "show","page": 1,"section": {"href": "https://api.spotify.com/v1/search?offset=0&limit=10&query=science&type=show&locale=en-US,en;q%3D0.9","limit": 10,"next": "https://api.spotify.com/v1/search?offset=10&limit=10&query=science&type=show&locale=en-US,en;q%3D0.9","offset": 0,"previous": null,"total": 19},"item_index_on_page": 0,"item_offset": 0}}
Example: playlist (type = "playlist")
{"record_type": "playlist","id": "3U7mEmGXnG3RJ1lrC2Jhvz","name": "GYM SONGS🎀 (for girlies) 2026","url": "https://open.spotify.com/playlist/3U7mEmGXnG3RJ1lrC2Jhvz","uri": "spotify:playlist:3U7mEmGXnG3RJ1lrC2Jhvz","href": "https://api.spotify.com/v1/playlists/3U7mEmGXnG3RJ1lrC2Jhvz","type": "playlist","external_urls": {"spotify": "https://open.spotify.com/playlist/3U7mEmGXnG3RJ1lrC2Jhvz"},"rank": 3,"summary": {"description": "✨updated weekly💖 the ultimate 2026 gym playlist for girlies who want to SLAY their workouts! ✨High-energy hits for lifting, cardio, HIIT, running & hot girl walks 💪🔥gym | workout | fitness | motivation | running | 2026 gym songs | pump play | summer body","owner": {"display_name": "The music enthusiast","external_urls": {"spotify": "https://open.spotify.com/user/31azrnkv26gx7xmodxkmitkxwppm"},"href": "https://api.spotify.com/v1/users/31azrnkv26gx7xmodxkmitkxwppm","id": "31azrnkv26gx7xmodxkmitkxwppm","type": "user","uri": "spotify:user:31azrnkv26gx7xmodxkmitkxwppm"},"images": [{"height": null,"url": "https://image-cdn-ak.spotifycdn.com/image/ab67706c0000d72cd76800ebc5c380025c25202b","width": null}],"collaborative": false,"public": true,"snapshot_id": "AAAMRiLgxO0tKS0HJO8eNfRjiutq8fQp","items": {"href": "https://api.spotify.com/v1/playlists/3U7mEmGXnG3RJ1lrC2Jhvz/items","total": 123},"tracks": null},"spotify_data": {"collaborative": false,"description": "✨updated weekly💖 the ultimate 2026 gym playlist for girlies who want to SLAY their workouts! ✨High-energy hits for lifting, cardio, HIIT, running & hot girl walks 💪🔥gym | workout | fitness | motivation | running | 2026 gym songs | pump play | summer body","external_urls": {"spotify": "https://open.spotify.com/playlist/3U7mEmGXnG3RJ1lrC2Jhvz"},"href": "https://api.spotify.com/v1/playlists/3U7mEmGXnG3RJ1lrC2Jhvz","id": "3U7mEmGXnG3RJ1lrC2Jhvz","images": [{"height": null,"url": "https://image-cdn-ak.spotifycdn.com/image/ab67706c0000d72cd76800ebc5c380025c25202b","width": null}],"name": "GYM SONGS🎀 (for girlies) 2026","owner": {"display_name": "The music enthusiast","external_urls": {"spotify": "https://open.spotify.com/user/31azrnkv26gx7xmodxkmitkxwppm"},"href": "https://api.spotify.com/v1/users/31azrnkv26gx7xmodxkmitkxwppm","id": "31azrnkv26gx7xmodxkmitkxwppm","type": "user","uri": "spotify:user:31azrnkv26gx7xmodxkmitkxwppm"},"primary_color": null,"public": true,"snapshot_id": "AAAMRiLgxO0tKS0HJO8eNfRjiutq8fQp","items": {"href": "https://api.spotify.com/v1/playlists/3U7mEmGXnG3RJ1lrC2Jhvz/items","total": 123},"type": "playlist","uri": "spotify:playlist:3U7mEmGXnG3RJ1lrC2Jhvz"},"search_result": {"query": "workout","search_type_input": "playlists","api_type": "playlist","page": 1,"section": {"href": "https://api.spotify.com/v1/search?offset=0&limit=10&query=workout&type=playlist&locale=en-US,en;q%3D0.9","limit": 10,"next": "https://api.spotify.com/v1/search?offset=10&limit=10&query=workout&type=playlist&locale=en-US,en;q%3D0.9","offset": 0,"previous": null,"total": 24},"item_index_on_page": 2,"item_offset": 2}}
Example: artist (type = "artist")
{"record_type": "artist","id": "12Chz98pHFMPJEknJQMWvI","name": "Muse","url": "https://open.spotify.com/artist/12Chz98pHFMPJEknJQMWvI","uri": "spotify:artist:12Chz98pHFMPJEknJQMWvI","href": "https://api.spotify.com/v1/artists/12Chz98pHFMPJEknJQMWvI","type": "artist","external_urls": {"spotify": "https://open.spotify.com/artist/12Chz98pHFMPJEknJQMWvI"},"rank": 1,"summary": {"genres": null,"followers": {},"followers_total": null,"popularity": null,"images": [{"url": "https://i.scdn.co/image/ab6761610000e5eb001bed1a54fe90023cae1d1b","height": 640,"width": 640},{"url": "https://i.scdn.co/image/ab67616100005174001bed1a54fe90023cae1d1b","height": 320,"width": 320},{"url": "https://i.scdn.co/image/ab6761610000f178001bed1a54fe90023cae1d1b","height": 160,"width": 160}]},"spotify_data": {"external_urls": {"spotify": "https://open.spotify.com/artist/12Chz98pHFMPJEknJQMWvI"},"href": "https://api.spotify.com/v1/artists/12Chz98pHFMPJEknJQMWvI","id": "12Chz98pHFMPJEknJQMWvI","images": [{"url": "https://i.scdn.co/image/ab6761610000e5eb001bed1a54fe90023cae1d1b","height": 640,"width": 640},{"url": "https://i.scdn.co/image/ab67616100005174001bed1a54fe90023cae1d1b","height": 320,"width": 320},{"url": "https://i.scdn.co/image/ab6761610000f178001bed1a54fe90023cae1d1b","height": 160,"width": 160}],"name": "Muse","type": "artist","uri": "spotify:artist:12Chz98pHFMPJEknJQMWvI"},"search_result": {"query": "muse","search_type_input": "artists","api_type": "artist","page": 1,"section": {"href": "https://api.spotify.com/v1/search?offset=0&limit=10&query=muse&type=artist&locale=en-US,en;q%3D0.9","limit": 10,"next": "https://api.spotify.com/v1/search?offset=10&limit=10&query=muse&type=artist&locale=en-US,en;q%3D0.9","offset": 0,"previous": null,"total": 18},"item_index_on_page": 0,"item_offset": 0}}
Example: album (type = "album")
{"record_type": "album","id": "2ANVost0y2y52ema1E9xAZ","name": "Thriller","url": "https://open.spotify.com/album/2ANVost0y2y52ema1E9xAZ","uri": "spotify:album:2ANVost0y2y52ema1E9xAZ","href": "https://api.spotify.com/v1/albums/2ANVost0y2y52ema1E9xAZ","type": "album","external_urls": {"spotify": "https://open.spotify.com/album/2ANVost0y2y52ema1E9xAZ"},"rank": 1,"summary": {"album_type": "album","total_tracks": 9,"release_date": "1982-11-30","release_date_precision": "day","images": [{"height": 640,"url": "https://i.scdn.co/image/ab67616d0000b27332a7d87248d1b75463483df5","width": 640},{"height": 300,"url": "https://i.scdn.co/image/ab67616d00001e0232a7d87248d1b75463483df5","width": 300},{"height": 64,"url": "https://i.scdn.co/image/ab67616d0000485132a7d87248d1b75463483df5","width": 64}],"artist_names": ["Michael Jackson"],"artists": [{"external_urls": {"spotify": "https://open.spotify.com/artist/3fMbdgg4jU18AjLCKBhRSm"},"href": "https://api.spotify.com/v1/artists/3fMbdgg4jU18AjLCKBhRSm","id": "3fMbdgg4jU18AjLCKBhRSm","name": "Michael Jackson","type": "artist","uri": "spotify:artist:3fMbdgg4jU18AjLCKBhRSm"}],"available_markets": null,"restrictions": null},"spotify_data": {"album_type": "album","total_tracks": 9,"external_urls": {"spotify": "https://open.spotify.com/album/2ANVost0y2y52ema1E9xAZ"},"href": "https://api.spotify.com/v1/albums/2ANVost0y2y52ema1E9xAZ","id": "2ANVost0y2y52ema1E9xAZ","images": [{"height": 640,"url": "https://i.scdn.co/image/ab67616d0000b27332a7d87248d1b75463483df5","width": 640},{"height": 300,"url": "https://i.scdn.co/image/ab67616d00001e0232a7d87248d1b75463483df5","width": 300},{"height": 64,"url": "https://i.scdn.co/image/ab67616d0000485132a7d87248d1b75463483df5","width": 64}],"name": "Thriller","release_date": "1982-11-30","release_date_precision": "day","type": "album","uri": "spotify:album:2ANVost0y2y52ema1E9xAZ","artists": [{"external_urls": {"spotify": "https://open.spotify.com/artist/3fMbdgg4jU18AjLCKBhRSm"},"href": "https://api.spotify.com/v1/artists/3fMbdgg4jU18AjLCKBhRSm","id": "3fMbdgg4jU18AjLCKBhRSm","name": "Michael Jackson","type": "artist","uri": "spotify:artist:3fMbdgg4jU18AjLCKBhRSm"}]},"search_result": {"query": "thriller","search_type_input": "albums","api_type": "album","page": 1,"section": {"href": "https://api.spotify.com/v1/search?offset=0&limit=10&query=thriller&type=album&locale=en-US,en;q%3D0.9","limit": 10,"next": "https://api.spotify.com/v1/search?offset=10&limit=10&query=thriller&type=album&locale=en-US,en;q%3D0.9","offset": 0,"previous": null,"total": 874},"item_index_on_page": 0,"item_offset": 0}}
Field Reference
Common Envelope
record_type(string, required): Normalized record category.id(string, required): Stable Spotify identifier.name(string, required): Display name of the entity.url(string, required): Canonical public Spotify URL.uri(string, required): Spotify URI for the entity.href(string, required): Canonical API reference URL for the entity.type(string, required): Spotify entity type.external_urls.spotify(string, required): Public Spotify URL.rank(integer, optional): Position of the item within the returned result set.search_result.query(string, required): Source query associated with the record.search_result.search_type_input(string, required): Input-facing search type used for the run.search_result.api_type(string, required): Entity type returned for the result.search_result.page(integer, required): Search results page number.search_result.item_index_on_page(integer, required): Zero-based index within the page.search_result.item_offset(integer, required): Absolute offset for the record in the result set.search_result.section.href(string, required): Source section reference URL.search_result.section.limit(integer, required): Page size used for the section.search_result.section.next(string, optional): Reference URL for the next page.search_result.section.offset(integer, required): Section offset in the result set.search_result.section.previous(string, optional): Reference URL for the previous page.search_result.section.total(integer, required): Total result count reported for the query section.
Track Records
summary.artist_names(array of strings, optional): Artist names in display order.summary.artists(array of objects, optional): Artist references associated with the track.summary.album_name(string, optional): Album name.summary.album.album_type(string, optional): Album classification.summary.album.artists(array of objects, optional): Album artist references.summary.album.external_urls.spotify(string, optional): Public album URL.summary.album.href(string, optional): Album API reference URL.summary.album.id(string, optional): Album identifier.summary.album.images(array of objects, optional): Album artwork variants.summary.album.images[].height(integer, optional): Artwork height in pixels.summary.album.images[].width(integer, optional): Artwork width in pixels.summary.album.images[].url(string, optional): Artwork URL.summary.album.is_playable(boolean, optional): Whether the album is marked playable.summary.album.name(string, optional): Album name.summary.album.release_date(string, optional): Album release date.summary.album.release_date_precision(string, optional): Release date precision.summary.album.total_tracks(integer, optional): Total track count.summary.album.type(string, optional): Album entity type.summary.album.uri(string, optional): Album Spotify URI.summary.release_date(string, optional): Track release date.summary.release_date_precision(string, optional): Track release date precision.summary.duration_ms(integer, optional): Duration in milliseconds.summary.popularity(integer, optional): Popularity value when available.summary.explicit(boolean, optional): Explicit-content flag.summary.external_ids.isrc(string, optional): ISRC code.summary.preview_url(string, optional): Preview audio URL.summary.track_number(integer, optional): Track number on the release.summary.disc_number(integer, optional): Disc number on the release.summary.available_markets(array, optional): Available market codes when provided.summary.is_playable(boolean, optional): Whether the track is playable.summary.is_local(boolean, optional): Whether the track is a local item.summary.linked_from(object, optional): Linked-track metadata when provided.summary.restrictions(object, optional): Playback or market restrictions when provided.spotify_data.album(object, optional): Full album payload for the track.spotify_data.artists(array of objects, optional): Full artist payload references.spotify_data.disc_number(integer, optional): Disc number.spotify_data.duration_ms(integer, optional): Duration in milliseconds.spotify_data.explicit(boolean, optional): Explicit-content flag.spotify_data.external_ids.isrc(string, optional): ISRC code.spotify_data.id(string, required): Spotify track identifier.spotify_data.is_local(boolean, optional): Local-track flag.spotify_data.is_playable(boolean, optional): Playable flag.spotify_data.name(string, required): Track name.spotify_data.track_number(integer, optional): Track number.spotify_data.type(string, required):track.spotify_data.uri(string, required): Track Spotify URI.
Show Records
summary.publisher(string, optional): Publisher or network name.summary.description(string, optional): Plain-text description.summary.html_description(string, optional): HTML-formatted description.summary.total_episodes(integer, optional): Total episode count.summary.languages(array of strings, optional): Content languages.summary.media_type(string, optional): Show media category.summary.images(array of objects, optional): Artwork variants.summary.images[].height(integer, optional): Artwork height in pixels.summary.images[].width(integer, optional): Artwork width in pixels.summary.images[].url(string, optional): Artwork URL.summary.copyrights(array, optional): Copyright statements when provided.summary.explicit(boolean, optional): Explicit-content flag.summary.is_externally_hosted(boolean, optional): External-hosting indicator.summary.available_markets(array, optional): Available market codes when provided.spotify_data.copyrights(array, optional): Copyright statements.spotify_data.description(string, optional): Plain-text description.spotify_data.html_description(string, optional): HTML-formatted description.spotify_data.explicit(boolean, optional): Explicit-content flag.spotify_data.id(string, required): Spotify show identifier.spotify_data.images(array of objects, optional): Artwork variants.spotify_data.is_externally_hosted(boolean, optional): External-hosting indicator.spotify_data.languages(array of strings, optional): Content languages.spotify_data.media_type(string, optional): Media category.spotify_data.name(string, required): Show name.spotify_data.type(string, required):show.spotify_data.uri(string, required): Show Spotify URI.spotify_data.total_episodes(integer, optional): Total episode count.
Playlist Records
summary.description(string, optional): Playlist description.summary.owner.display_name(string, optional): Owner display name.summary.owner.external_urls.spotify(string, optional): Owner Spotify URL.summary.owner.href(string, optional): Owner API reference URL.summary.owner.id(string, optional): Owner identifier.summary.owner.type(string, optional): Owner entity type.summary.owner.uri(string, optional): Owner Spotify URI.summary.images(array of objects, optional): Playlist artwork.summary.images[].height(integer, optional): Artwork height in pixels.summary.images[].width(integer, optional): Artwork width in pixels.summary.images[].url(string, optional): Artwork URL.summary.collaborative(boolean, optional): Collaborative flag.summary.public(boolean, optional): Public visibility flag.summary.snapshot_id(string, optional): Playlist snapshot identifier.summary.items.href(string, optional): Playlist-items reference URL.summary.items.total(integer, optional): Total item count.summary.tracks(object, optional): Expanded track data when available.spotify_data.collaborative(boolean, optional): Collaborative flag.spotify_data.description(string, optional): Playlist description.spotify_data.id(string, required): Spotify playlist identifier.spotify_data.images(array of objects, optional): Playlist artwork.spotify_data.name(string, required): Playlist name.spotify_data.owner(object, optional): Playlist owner reference.spotify_data.primary_color(string, optional): Primary display color when available.spotify_data.public(boolean, optional): Public visibility flag.spotify_data.snapshot_id(string, optional): Playlist snapshot identifier.spotify_data.items.href(string, optional): Playlist-items reference URL.spotify_data.items.total(integer, optional): Total item count.spotify_data.type(string, required):playlist.spotify_data.uri(string, required): Playlist Spotify URI.
Artist Records
summary.genres(array of strings, optional): Genre labels when available.summary.followers(object, optional): Raw followers object.summary.followers_total(integer, optional): Follower count when available.summary.popularity(integer, optional): Popularity value when available.summary.images(array of objects, optional): Artist images.summary.images[].url(string, optional): Image URL.summary.images[].height(integer, optional): Image height in pixels.summary.images[].width(integer, optional): Image width in pixels.spotify_data.id(string, required): Spotify artist identifier.spotify_data.images(array of objects, optional): Artist images.spotify_data.name(string, required): Artist name.spotify_data.type(string, required):artist.spotify_data.uri(string, required): Artist Spotify URI.
Album Records
summary.album_type(string, optional): Album classification.summary.total_tracks(integer, optional): Total track count.summary.release_date(string, optional): Release date.summary.release_date_precision(string, optional): Release date precision.summary.images(array of objects, optional): Album artwork variants.summary.images[].height(integer, optional): Artwork height in pixels.summary.images[].width(integer, optional): Artwork width in pixels.summary.images[].url(string, optional): Artwork URL.summary.artist_names(array of strings, optional): Artist names in display order.summary.artists(array of objects, optional): Artist references.summary.available_markets(array, optional): Available market codes when provided.summary.restrictions(object, optional): Restrictions object when provided.spotify_data.album_type(string, optional): Album classification.spotify_data.total_tracks(integer, optional): Total track count.spotify_data.id(string, required): Spotify album identifier.spotify_data.images(array of objects, optional): Album artwork variants.spotify_data.name(string, required): Album name.spotify_data.release_date(string, optional): Release date.spotify_data.release_date_precision(string, optional): Release date precision.spotify_data.type(string, required):album.spotify_data.uri(string, required): Album Spotify URI.spotify_data.artists(array of objects, optional): Artist references.
Data Quality, Guarantees, And Handling
- Structured records: results are normalized into predictable JSON objects for downstream use.
- Best-effort extraction: fields may vary by region, session, availability, or target-side presentation changes.
- Optional fields: null-check in downstream code.
- Deduplication: recommend
type + ":" + id. - Freshness: results reflect the publicly available data at run time.
- Repeated runs: use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.
Tips For Best Results
- Start with a small
limitto validate record shape and entity coverage before scaling up. - Use
querieswhen you want discovery-oriented collection across keywords, names, genres, or release terms. - Use
startUrlswhen you already know the Spotify search page you want to collect from. - Keep one
searchTypefocus per run when you want cleaner segmentation and simpler downstream normalization. - Broader queries improve discovery, while narrower queries usually produce more targeted result sets.
- Add or refine inputs gradually so you can see how each change affects coverage and result quality.
- Schedule recurring runs when you need monitoring, trend analysis, or periodic dataset refreshes.
How to Run on Apify
- Open the actor in Apify Console.
- Configure the available input fields for the target scope.
- Set the maximum number of outputs to collect.
- Click Start and wait for the run to finish.
- Review the dataset and download results in JSON, CSV, Excel, or other supported formats.
Scheduling & Automation
Scheduling
Automated Data Collection
You can schedule recurring runs to keep search-result datasets fresh and aligned with your reporting or monitoring cadence. This is useful for keyword tracking, catalog refreshes, and routine downstream sync jobs.
- Navigate to Schedules in Apify Console
- Create a new schedule (daily, weekly, or custom cron)
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing
Integration Options
- BI dashboards: monitor keyword coverage, rank movement, content mix, and catalog trends over time.
- Data warehouses: load normalized JSON records into historical models for reporting, benchmarking, and longitudinal analysis.
- Webhooks: trigger downstream ingestion, validation, alerting, or synchronization workflows after each run.
- API access: pull dataset items programmatically into internal services, ETL pipelines, or research applications.
- Google Sheets or Excel review workflows: export smaller validation runs for analyst review, QA, or editorial checks.
- Enrichment pipelines: join Spotify entity records with internal CRM, content, or analytics datasets using stable identifiers.
Export Formats And Downstream Use
Apify datasets can be exported or consumed directly by downstream systems depending on how you want to operationalize the results.
- JSON: for APIs, applications, and data pipelines
- CSV or Excel: for spreadsheet workflows and manual review
- API access: for automated ingestion into internal systems
- BI and warehouses: for reporting, dashboards, and historical analysis
Performance
Estimated run times:
- Small runs (< 1,000 outputs): ~3–5 minutes
- Medium runs (1,000–5,000 outputs): ~5–15 minutes
- Large runs (5,000+ outputs): ~15–30 minutes
Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broader discovery runs or more detail-rich records may take longer.
Limitations
- Result availability depends on what Spotify publicly exposes at run time.
- Some optional fields may be missing, null, or sparsely populated for certain records.
- Very broad searches can take longer and may require a higher
limitto capture a larger share of matching results. - Regional or availability differences can affect which records or fields are visible.
- Target-side changes may affect field availability, naming, or coverage over time.
- The returned dataset reflects the selected search inputs and may not represent the full Spotify catalog for a topic.
Troubleshooting
- No results returned: check the spelling and specificity of your
queries, verify thatstartUrlspoint to valid Spotify search pages, and confirm that matching public records exist. - Fewer results than expected: broaden the query terms, increase
limit, or confirm that Spotify has enough matching results for the selectedsearchType. - Some fields are empty: optional fields depend on what each record publicly provides and may vary across entities, regions, or availability conditions.
- Run takes longer than expected: reduce scope, lower
limitfor validation, or split broad collection into smaller segments. - Output changed: compare the current output with the field reference and include a small sample when reporting an issue.
FAQ
What data does this actor collect?
It collects structured Spotify search results for songs, artists, albums, playlists, podcasts, podcast episodes, and audiobooks, including stable identifiers, URLs, ranking context, and type-specific metadata.
Can I filter by location, category, date, price, or other criteria?
This actor supports queries, startUrls, searchType, limit, and proxyConfiguration. It does not expose separate location, category, date, or price filters in the current input schema.
Why did I receive fewer results than my limit?
limit is a maximum, not a guarantee. If Spotify returns fewer matching public results for your inputs and selected searchType, the dataset will contain fewer records.
Can I schedule recurring runs?
Yes. You can create schedules in Apify Console to run the actor daily, weekly, or on a custom cron interval.
How do I avoid duplicates across runs?
Use type + ":" + id as the recommended idempotency key for deduplication, upserts, and incremental synchronization.
Can I export the data to CSV, Excel, or JSON?
Yes. Apify datasets can be exported in JSON, CSV, Excel, and other supported formats.
Does this actor collect private data?
No. It is intended for collection of publicly available Spotify data only.
What should I include when reporting an issue?
Include the redacted input used, the Apify run ID, the expected behavior, the actual behavior, and a small sample of output if available.
Compliance & Ethics
Responsible Data Collection
This actor collects publicly available Spotify catalog and search-result metadata from https://spotify.com for legitimate business purposes, including:
- Music, media, and entertainment research and market analysis
- Catalog monitoring and reporting
- Content enrichment and discovery workflows
This section is informational and not legal advice. Users are responsible for ensuring their use of the actor and resulting data complies with applicable laws, regulations, and the target site's terms.
Best Practices
- Use collected data in accordance with applicable laws, regulations, and the target site’s terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable (for example GDPR or CCPA)
Support
For help, use the actor page or open an issue in the associated repository. Include the input used with sensitive values redacted, the run ID, a clear description of expected versus actual behavior, and a small output sample if relevant.