Interactive Media Services · Spotify for Developers
Spotify Web API
Datadory delivers spotify web api data covering Spotify's full streaming catalog - tracks, artists, albums, playlists, shows and audiobooks - as of August 2026. Each track carries identity, album and release dating, artist rosters, external identifiers and a measured audio-feature vector spanning danceability, energy, valence, tempo, key and loudness.
API, files, or your warehouse. Daily, weekly, or hourly.
- Where it covers
- Global catalog with market availability exposed per ISO 3166-1 alpha-2 country code, so regional slicing is a column, not a separate collection
- How far back
- Current catalog state with release dates carried at year, month or day precision per release; no historical archive, so trailing history accumulates on your cadence
- How fine
- One row per track, artist, album, playlist or show, with audio features and analysis resolving at individual track level
What is the Spotify Web API?
Spotify Web API is Spotify's own developer interface to its streaming catalog - the Interactive Media Services slice's deepest single-source body of music metadata. Its documented object model covers tracks, artists, albums, playlists, shows, episodes and audiobooks, plus search, recommendations and user-library endpoints. What turns that into a dataset is the shape: every track resolves through one stable ID, dressed with an embedded album object carrying release date at year, month or day precision, an array of artist records each holding its own ID and URI, industry identifiers including ISRC, EAN and UPC, duration in milliseconds, an explicit-lyrics flag, and market availability spelled out per ISO 3166-1 country code.
Then there is the layer nobody else measures the same way: the Audio Features object. Every track carries a vector scored by the platform's own analysis - danceability, energy, valence, acousticness, speechiness, instrumentalness, liveness, tempo, key, mode, time signature and loudness. In the published example, one track lands at 0.585 danceability, 0.842 energy, 118.211 BPM in A minor. That is a labeled, machine-readable description of how recorded music actually sounds, attached to a global catalog and joinable on the same ID that everything else uses.
One honesty note up front: the source's documentation flags several long-standing fields as deprecated - popularity, available_markets, preview_url among them. They still arrive in records, but treating them as load-bearing without a fallback is how reports break quietly.
What does a sample row look like?
Audio features first, quoted from published response examples exactly as documented:
id : 2takcwOaAZWiXQijPHIx7B type : audio_features
danceability : 0.585 energy : 0.842
valence : 0.428 tempo : 118.211 bpm
key : 9 (A) mode : 0 (minor)
loudness : -5.883 dB time_sig : 4And the identity half of the same track:
album_type : compilation released : 1981 (year precision)
total_tracks : 9 duration_ms : 237040
explicit : false external_ids : isrc / ean / upc
uri : spotify:track:<id> popularity: deprecated, retainedRead together, the design shows itself: identity fields locate the track everywhere - your ISRC joins our ID joins the URI - while the feature block turns subjective descriptors like "upbeat" or "chill" into columns you can sort, bucket and regress. Note the release precision flag: this compilation knows only its year, other releases know their day. Precision is a per-record attribute, not a promise.
What fields does the dataset include?
Nineteen fields form the verified spine of a track record, every definition traced to the source's own documented object model rather than inferred. Identity keys (id, uri, external_ids), release context (album with its precision flag, artists, duration_ms, explicit) and the twelve-surface audio-feature vector all travel on the same row, joined by one ID.
Three further surfaces are documented to exist but change shape record to record - the finer-grained audio-analysis payload, recommendation output against seed tracks, and playlist item structure - so their delivered forms sit under additional fields on request below rather than in confident prose here. The dictionary table repeats the spine in tabular form.
What does coverage look like across geography, time and granularity?
- Geography - one global catalog with regionality as a column, not a wall. Market availability travels per record as ISO 3166-1 alpha-2 country codes, so the same track can be sliced by where it lists and where it skips - useful for release-strategy work, though the source itself notes the market-listing field is among those flagged deprecated.
- Temporal - current-state only. Release dates carry year, month or day precision depending on what the release declares, and there is no historical archive behind the catalog: no past charts, no removed-track graveyard. If your study needs trailing history, scheduled collection accumulates it at whatever cadence you pick.
- Granularity - object level throughout: one row per track, artist, album, playlist or show, with audio features and the deeper analysis resolving at individual track level. Per-track resolution is precisely what recommendation models and mood-mapping need; aggregates would average away the variance they run on.
The honest caveat: no aggregate size is published for the catalog. Coverage is defined by reachability - object by object - not by a headline count, and a scoped sample settles quickly how deep any given corner goes.
How is the data delivered?
API, files, or your warehouse. Daily, weekly, or hourly.
You choose the channel and the cadence; the nineteen-field spine above travels unchanged through all three. Responses' raw nesting never reaches your pipeline - rows arrive flattened to one observation per track with the feature vector already exploded into columns and identifiers already normalized, so your ISRC keys line up against ours without a matching project. Cadence changes are a settings conversation, not a re-integration, and a sample cut to your artist or track list comes first either way.
Who uses this data, and for what?
- Data scientists and ML engineers train recommendation, mood-tagging and genre-classification models on a per-track feature corpus keyed by one stable ID - relevance 2 in their pack.
- Developers and builders power discovery, search and playlist features on documented object schemas instead of reverse-engineering pages - also relevance 2.
- Competitive-intel and product teams watch roster moves, release patterns and market availability across the streaming landscape - relevance 2, more framings on our competitive intel product teams use cases page.
- Market researchers and consultants quantify how genres, tempos and moods shift across release years for trend and industry reporting.
- Investors and quants read catalog depth and release velocity around artists and labels as engagement context ahead of reported numbers.
- Journalists and academics ground music-culture claims in measured audio features instead of anecdote - "sad girl autumn" becomes a valence series with a start date.
Which personas get the most value?
Data scientists hold this at relevance 2 in their interactive-media-services pack - the audio-feature vector is the rarest thing in the slice: measured attributes, not borrowed opinions, attached to a global catalog. Developers and builders match at relevance 2 on the strength of the documented object model; stable IDs make integration boring in the good way. Competitive-intel teams also score 2, using release footprints and roster structure as market signals. Market researchers, investors and journalists hold relevance 1 but get angles nobody else can buy: trend lines drawn from measured sound rather than chart positions alone. The constant across all six is the ID - everything compounds when joined on the same track key.
What should I know before requesting a sample?
Four things, all knowable upfront. First, this is a current-state catalog: release dates yes, historical archives no - if you need trailing history, say so and let scheduled collection build it at your chosen cadence. Second, several long-standing fields carry deprecation flags in the source's own documentation, with no removal dates announced; we deliver them as observed and flag them in the schema so nothing leans on them silently. Third, release-date precision varies record to record - some rows know the day, some only the year - so treat precision as a per-record attribute in any timeline work. Fourth, the richest surfaces (full analysis payloads, recommendation output, playlist structure) vary in shape by record, which is why they fold under additional fields on request: a sample verifies exactly which columns populate for your artists and tracks before anything is built on them.
Field dictionary
Every field below is documented against real records. The full dictionary ships with the sample.
| field | type | definition | example |
|---|---|---|---|
id | string | The Spotify ID for the track - primary key joining every object family together. | 11dFghVXANMlKmJXsNCbNl |
name | type | Track title as recorded in the catalog; full example strings quoted on request. | on request |
duration_ms | integer | Track length in milliseconds. | 237040 |
explicit | boolean | Whether the track carries explicit lyrics. | false |
album | object | Embedded album object: album type, total tracks, cover imagery, and release date with its precision flag (day, month or year). | compilation / 9 tracks / 1981 (year) |
artists | array | Performing artists as simplified objects, each with its own ID, URI, name and links. | [{id, uri, name}] |
external_ids | object | Industry identifiers known for the track, including ISRC, EAN and UPC. | isrc / ean / upc |
uri | string | Spotify URI form of the track identifier. | spotify:track:2takcwOaAZWiXQijPHIx7B |
danceability | number | Suitability for dancing derived from tempo, rhythm stability, beat strength and regularity; 0.0 to 1.0. | 0.585 |
energy | number | Perceptual intensity and activity, 0.0 to 1.0. | 0.842 |
valence | number | Musical positiveness from 0.0 (sad, angry) to 1.0 (happy, cheerful). | 0.428 |
acousticness | number | Confidence from 0.0 to 1.0 that the track is acoustic. | 0.00242 |
speechiness | number | Presence of spoken words; higher values read more speech-like. | 0.0556 |
instrumentalness | number | Prediction the track contains no vocals; nearer 1.0 means more likely instrumental. | 0.00686 |
liveness | number | Probability of an audience in the recording. | 0.0866 |
tempo | number | Overall estimated tempo in beats per minute. | 118.211 |
key | integer | Estimated key in pitch-class notation, 0 = C through 11 = B; -1 when undetected. | 9 |
mode | integer | Modality: major = 1, minor = 0. | 0 |
time_signature | integer | Estimated overall time signature, 3 to 7 for 3/4 through 7/4. | 4 |
loudness | number | Overall loudness in decibels, typically between -60 and 0 dB. | -5.883 |
additional fields on request | varies | Documented surfaces whose delivered shape varies by record, confirmed against a real extract: fine-grained audio analysis (bars, beats, segments), recommendation output per seed, and playlist item structure per snapshot. Specify what you need when you request a sample. | per-request |
Questions buyers ask
What does the spotify web api data cover?
Spotify's full streaming catalog reachable object by object - tracks, artists, albums, playlists, shows, episodes and audiobooks. Each track carries identity, album and release dating, artist rosters, external ISRC/EAN/UPC identifiers and a measured audio-feature vector; no aggregate total is published, so coverage is defined by reachability rather than a headline number.
What do the audio features fields mean?
Each track arrives scored 0.0 to 1.0 on danceability, energy, valence, acousticness, speechiness, instrumentalness and liveness, plus tempo in BPM, loudness in decibels, key in pitch-class notation with -1 for none detected, mode as major or minor, and estimated time signature from 3 to 7. The scores come from the platform's own audio analysis.
Does the dataset include historical charts or listening counts?
No. It is a current-state catalog: release dates carry year, month or day precision per release, but there is no historical archive and no play-count exposure. Trailing history is something scheduled collection builds at your chosen cadence - a delivery decision, not a property of the data.
Which fields are marked deprecated?
Several long-standing fields now carry deprecation flags in the source's own documentation - popularity, available_markets, preview_url and linked_from among them. They still appear in responses, but with no announced removal date, so anything modeled on them deserves a fallback before a model leans on one.
Can I scope the data to specific markets?
Yes. Market availability travels with each record as ISO 3166-1 alpha-2 country codes, so the same track can be sliced by where it lists versus where it skips. Treat the column as release-footprint evidence rather than a guarantee of current listenability in every listed market.
Can a sample be scoped to my artists, tracks or playlists first?
Yes. A sample can be cut against your own artist list, track ID set or playlist shortlist, so the field dictionary gets verified against the exact records you care about - including which of the folded richer surfaces populate for your rows - before anything larger is scheduled.
See the rows before you pay anything.
Name this dataset and we send real records from it — scoped to the fields you asked for.