# Spotify Track Search API. Tracks matching your search.

Tracks by keyword, artist or ISRC. We handle the proxies, blocks and platform changes.

[Get API key](https://socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dspotify.search_tracks)

## Spotify Track Search API at a glance

Searches Spotify tracks by keyword, artist or ISRC, in any language, and returns them a page at a time in Spotify's order. Each has its title, credited artists with their IDs, album, exact length, cover, explicit flag, music video count and a preview clip. Set kind=episode to search podcast episodes instead. The Spotify Track API adds plays, release date, ISRC, label and credits.

GET `/v1/spotify/search_tracks`

[Read the API reference](https://socialtap.dev/docs/reference/spotify/search_tracks/index.md)

- **1 credit** per page, $0.75–$1.97 per 1,000 pages
- **22 typed fields** null when unknown
- **100** tracks per page, Spotify's own ranking for the query
- **`query`** is all it needs, e.g. `rick astley`

## Send one request. Get up to 100 tracks back.

Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.

`$ npm install socialtap`

`query = rick astley`

[Open in playground](https://socialtap.dev/playground/?endpoint=spotify.search_tracks)

cURL:

```shell
curl -G 'https://socialtap.dev/v1/spotify/search_tracks' \
  --data-urlencode 'kind=track' \
  --data-urlencode 'query=rick astley' \
  -H "x-api-key: $SOCIALTAP_API_KEY"
```

TypeScript SDK:

```typescript
import { SocialTap } from "socialtap";

const client = new SocialTap(); // apiKey defaults to process.env.SOCIALTAP_API_KEY

const res = await client.spotify.searchTracks.list({ query: "rick astley", kind: "track" });
console.log(res.data);
console.log(res.credits.charged, res.meta.request_id);
```

Node.js (fetch):

```javascript
const params = new URLSearchParams({
  kind: "track",
  query: "rick astley",
});
const res = await fetch(`https://socialtap.dev/v1/spotify/search_tracks?${params}`, {
  headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, page, meta } = body;
console.log(data, meta.credits_charged);
```

Python (requests):

```python
import os

import requests

res = requests.get(
    "https://socialtap.dev/v1/spotify/search_tracks",
    params={"kind": "track", "query": "rick astley"},
    headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
    raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, page, meta = body["data"], body["page"], body["meta"]
print(data, meta["credits_charged"])
```

Go (net/http):

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("kind", "track")
	q.Set("query", "rick astley")
	req, err := http.NewRequest("GET", "https://socialtap.dev/v1/spotify/search_tracks?"+q.Encode(), nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	var body struct {
		Data  json.RawMessage `json:"data"`
		Page  json.RawMessage `json:"page"`
		Meta  map[string]any  `json:"meta"`
		Error *struct {
			Code    string `json:"code"`
			Message string `json:"message"`
		} `json:"error"`
	}
	if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
		log.Fatal(err)
	}
	if body.Error != nil {
		log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
	}
	fmt.Println(string(body.Data), body.Meta["credits_charged"])
}
```

200 OK:

```json
{
  "data": [
    {
      "approximate_fields": [],
      "author": {
        "avatar_url": null,
        "display_name": "Rick Astley",
        "id": "0gxyHStUsqpMadRV0Di1Qt",
        "is_verified": null,
        "url": "https://open.spotify.com/artist/0gxyHStUsqpMadRV0Di1Qt",
        "username": null
      },
      "coauthors": [],
      "duration_ms": 213573,
      "hashtags": [],
      "id": "4PTG3Z6ehGkBFwjybzWkR8",
      "is_nsfw": null,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [
        {
          "alt_text": null,
          "duration_ms": null,
          "expires_at": null,
          "height": null,
          "thumbnail_url": "https://i.scdn.co/image/ab67616d0000b27315ebbedaacef61af244262a8",
          "type": "audio",
          "url": "https://p.scdn.co/mp3-preview/b4c682084c3fd05538726d0a126b7e14b6e92c83",
          "width": null
        }
      ],
      "mentions": [],
      "metrics": {
        "comment_count": null,
        "like_count": null,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": null
      },
      "platform": "spotify",
      "platform_specific": {
        "spotify": {
          "added_at": null,
          "added_by": null,
          "album_id": "6eUW0wxWtzkFdaEFsTJto6",
          "album_title": "Whenever You Need Somebody",
          "album_track_count": null,
          "album_type": null,
          "album_url": "https://open.spotify.com/album/6eUW0wxWtzkFdaEFsTJto6",
          "bpm": null,
          "camelot_key": null,
          "canonical_track_id": null,
          "copyrights": [],
          "credits": [],
          "disc_number": null,
          "is_explicit": false,
          "is_paywalled": null,
          "is_playable": true,
          "isrc": null,
          "label": null,
          "languages": [],
          "music_video_count": 1,
          "musical_key": null,
          "playability_reason": "playable",
          "podcast_id": null,
          "popularity": null,
          "release_date_precision": null,
          "track_number": null
        }
      },
      "platform_type": "track",
      "published_at": null,
      "text": null,
      "thumbnail_url": "https://i.scdn.co/image/ab67616d0000b27315ebbedaacef61af244262a8",
      "title": "Never Gonna Give You Up",
      "type": "audio",
      "unknown_fields": [
        "platform_specific.spotify.copyrights",
        "platform_specific.spotify.credits",
        "platform_specific.spotify.languages"
      ],
      "url": "https://open.spotify.com/track/4PTG3Z6ehGkBFwjybzWkR8"
    },
    {
      "approximate_fields": [],
      "author": {
        "avatar_url": null,
        "display_name": "Rick Astley",
        "id": "0gxyHStUsqpMadRV0Di1Qt",
        "is_verified": null,
        "url": "https://open.spotify.com/artist/0gxyHStUsqpMadRV0Di1Qt",
        "username": null
      },
      "coauthors": [],
      "duration_ms": 205533,
      "hashtags": [],
      "id": "00isIFJWVpXIQ8HkGICSQp",
      "is_nsfw": null,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [
        {
          "alt_text": null,
          "duration_ms": null,
          "expires_at": null,
          "height": null,
          "thumbnail_url": "https://i.scdn.co/image/ab67616d0000b27315ebbedaacef61af244262a8",
          "type": "audio",
          "url": "https://p.scdn.co/mp3-preview/218ce9bda2e7ad945f675c8f3cb48cd94b8718fa",
          "width": null
        }
      ],
      "mentions": [],
      "metrics": {
        "comment_count": null,
        "like_count": null,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": null
      },
      "platform": "spotify",
      "platform_specific": {
        "spotify": {
          "added_at": null,
          "added_by": null,
          "album_id": "6eUW0wxWtzkFdaEFsTJto6",
          "album_title": "Whenever You Need Somebody",
          "album_track_count": null,
          "album_type": null,
          "album_url": "https://open.spotify.com/album/6eUW0wxWtzkFdaEFsTJto6",
          "bpm": null,
          "camelot_key": null,
          "canonical_track_id": null,
          "copyrights": [],
          "credits": [],
          "disc_number": null,
          "is_explicit": false,
          "is_paywalled": null,
          "is_playable": true,
          "isrc": null,
          "label": null,
          "languages": [],
          "music_video_count": 1,
          "musical_key": null,
          "playability_reason": "playable",
          "podcast_id": null,
          "popularity": null,
          "release_date_precision": null,
          "track_number": null
        }
      },
      "platform_type": "track",
      "published_at": null,
      "text": null,
      "thumbnail_url": "https://i.scdn.co/image/ab67616d0000b27315ebbedaacef61af244262a8",
      "title": "Together Forever",
      "type": "audio",
      "unknown_fields": [
        "platform_specific.spotify.copyrights",
        "platform_specific.spotify.credits",
        "platform_specific.spotify.languages"
      ],
      "url": "https://open.spotify.com/track/00isIFJWVpXIQ8HkGICSQp"
    },
    {
      "approximate_fields": [],
      "author": {
        "avatar_url": null,
        "display_name": "Rick Astley",
        "id": "0gxyHStUsqpMadRV0Di1Qt",
        "is_verified": null,
        "url": "https://open.spotify.com/artist/0gxyHStUsqpMadRV0Di1Qt",
        "username": null
      },
      "coauthors": [],
      "duration_ms": 213560,
      "hashtags": [],
      "id": "0yNttAVwMr39qyODHNIkrY",
      "is_nsfw": null,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [
        {
          "alt_text": null,
          "duration_ms": null,
          "expires_at": null,
          "height": null,
          "thumbnail_url": "https://i.scdn.co/image/ab67616d0000b2733a67639779ccabd632e1a80e",
          "type": "audio",
          "url": "https://p.scdn.co/mp3-preview/40a780b231e5ed130483bec7917b6c9a4f8a4708",
          "width": null
        }
      ],
      "mentions": [],
      "metrics": {
        "comment_count": null,
        "like_count": null,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": null
      },
      "platform": "spotify",
      "platform_specific": {
        "spotify": {
          "added_at": null,
          "added_by": null,
          "album_id": "4C4LvbYS0pxXLW5sGD9EK5",
          "album_title": "Whenever You Need Somebody (Deluxe Edition - 2022 Remaster)",
          "album_track_count": null,
          "album_type": null,
          "album_url": "https://open.spotify.com/album/4C4LvbYS0pxXLW5sGD9EK5",
          "bpm": null,
          "camelot_key": null,
          "canonical_track_id": null,
          "copyrights": [],
          "credits": [],
          "disc_number": null,
          "is_explicit": false,
          "is_paywalled": null,
          "is_playable": true,
          "isrc": null,
          "label": null,
          "languages": [],
          "music_video_count": 1,
          "musical_key": null,
          "playability_reason": "playable",
          "podcast_id": null,
          "popularity": null,
          "release_date_precision": null,
          "track_number": null
        }
      },
      "platform_type": "track",
      "published_at": null,
      "text": null,
      "thumbnail_url": "https://i.scdn.co/image/ab67616d0000b2733a67639779ccabd632e1a80e",
      "title": "Never Gonna Give You Up - 2022 Remaster",
      "type": "audio",
      "unknown_fields": [
        "platform_specific.spotify.copyrights",
        "platform_specific.spotify.credits",
        "platform_specific.spotify.languages"
      ],
      "url": "https://open.spotify.com/track/0yNttAVwMr39qyODHNIkrY"
    }
  ],
  "page": {
    "has_more": true,
    "next_cursor": "c1.EXAMPLE_CURSOR",
    "next_cursor_expires_at": "2026-10-26T12:00:00Z",
    "end_reason": null
  },
  "meta": {
    "request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
    "platform": "spotify",
    "source": "api",
    "is_cached": false,
    "credits_charged": 1,
    "latency_ms": 816,
    "fetched_at": "2026-10-25T12:00:00Z",
    "input": null,
    "credits_remaining": 9999,
    "client_request_id": null,
    "warnings": []
  }
}
```

Long arrays and strings are shortened here. Real responses are complete.

## One schema on 21 platforms.

The [response reference](https://socialtap.dev/docs/reference/spotify/search_tracks/index.md#response) lists every field, its type and when it is `null`. [See the full schema](https://socialtap.dev/resources/post/index.md).

- ### Null means unknown

  A field Spotify doesn't show is null, never zero or an empty string, so a real zero always means zero.
- ### What it accepts

  What to search for, as in Spotify's search box: a title, an artist or both, in any language.
- ### Write one parser

  Spotify, TikTok, Instagram and 18 more platforms answer in these fields, so the code that reads one reads them all.

- **`platform`string**: Platform ID (tiktok, youtube, …).
- **`id`string**: Platform-native post ID (string; Instagram shortcode, Reddit with its t3_ prefix).
- **`url`string**: Canonical post URL.
- **`type`string**: Normalized content shape. New values may be added; treat unknown values as other.
- **`platform_type`string**: The platform's own product label, lowercase (reel, short, story, live, tweet, …).
- **`title`string**: Headline (YouTube title, Reddit title); null on caption-only platforms.
- **`text`string**: Caption, description or body as plain text.
- **`language`string**: BCP-47 language of text, when the platform states it.

Live data from 33 platforms.

[TikTok](https://socialtap.dev/apis/tiktok/index.md) · [Instagram](https://socialtap.dev/apis/instagram/index.md) · [Facebook](https://socialtap.dev/apis/facebook/index.md) · [YouTube](https://socialtap.dev/apis/youtube/index.md) · [Reddit](https://socialtap.dev/apis/reddit/index.md) · [Threads](https://socialtap.dev/apis/threads/index.md) · [Spotify](https://socialtap.dev/apis/spotify/index.md) · [Amazon](https://socialtap.dev/apis/amazon/index.md) · [Apple Music](https://socialtap.dev/apis/applemusic/index.md) · [Pinterest](https://socialtap.dev/apis/pinterest/index.md) · [Rumble](https://socialtap.dev/apis/rumble/index.md) · [X](https://socialtap.dev/apis/x/index.md) · [Bluesky](https://socialtap.dev/apis/bluesky/index.md) · [Twitch](https://socialtap.dev/apis/twitch/index.md) · [LinkedIn](https://socialtap.dev/apis/linkedin/index.md) · [Telegram](https://socialtap.dev/apis/telegram/index.md) · [TikTok Shop](https://socialtap.dev/apis/tiktokshop/index.md) · [Kwai](https://socialtap.dev/apis/kwai/index.md) · [Snapchat](https://socialtap.dev/apis/snapchat/index.md) · [SoundCloud](https://socialtap.dev/apis/soundcloud/index.md) · [Truth Social](https://socialtap.dev/apis/truthsocial/index.md) · [Kick](https://socialtap.dev/apis/kick/index.md) · [Komi](https://socialtap.dev/apis/komi/index.md) · [Lnk.Bio](https://socialtap.dev/apis/linkbio/index.md) · [Linkme](https://socialtap.dev/apis/linkme/index.md) · [Linktree](https://socialtap.dev/apis/linktree/index.md) · [Pillar](https://socialtap.dev/apis/pillar/index.md) · [TikTok Ad Library](https://socialtap.dev/apis/tiktok-ad-library/index.md) · [Facebook Ad Library](https://socialtap.dev/apis/facebook-ad-library/index.md) · [Facebook Events](https://socialtap.dev/apis/facebook-events/index.md) · [Facebook Marketplace](https://socialtap.dev/apis/facebook-marketplace/index.md) · [Google Ads Transparency Center](https://socialtap.dev/apis/google-ads-transparency/index.md) · [LinkedIn Ad Library](https://socialtap.dev/apis/linkedin-ad-library/index.md)

## What teams build with the Spotify Track Search API.

- ### Turn title and artist into a track ID
- ### Find a recording's tracks by ISRC
- ### Build a music search box with previews
- ### Find podcast episodes that mention a guest

## Good to know before you build.

- Results are one kind: tracks, or podcast episodes with kind=episode. For artists, albums, playlists and podcasts, send the same query to their search endpoints.
- An episode is a post of platform_type episode, as the Spotify Podcast Episodes API lists it, with its description, exact release time, length and preview. author is its show, by name and cover only, and platform_specific.spotify.podcast_id the show's ID.
- Search lists no play count, release date, ISRC, label or credits, so those are null or empty: the Spotify Track API returns them.
- Results are in Spotify's order, which depends on the page size, so a smaller limit isn't always the top of a larger one. A walk ends with page.end_reason platform_limit where Spotify stops serving, however many tracks it matched.
- Spotify repeats about a third of each page on the next. Repeats are dropped, so a page usually holds fewer tracks than its limit while next_cursor goes on.
- Spotify answers a weak query with its nearest guesses, so an empty page is rare and any result may be a loose match.
- is_playable says whether Spotify plays the track in the country we request from, which may not be yours.
- When Spotify's search doesn't answer, the first pages come from a web search engine's index, each track read from Spotify, with a partial_data warning, Spotify's filters are read as plain words, and a music video reads as audio. That list holds only what the index has, often a small part of Spotify's, in the engine's order. A next_cursor stays on the list it came from: if Spotify's search stops answering mid-walk, the next page fails with a retryable error instead of switching lists.
- An empty query, a Spotify URI or a link to a Spotify page returns invalid_input, naming the endpoint that takes it where there is one. For a link to Spotify's search page, send its words instead.

## 1 credit per page. Failed requests are free.

Buy credits once and spend them on any endpoint, on any platform.

[Plans and packs](https://socialtap.dev/pricing/index.md) · [How this endpoint is priced](https://socialtap.dev/docs/reference/spotify/search_tracks/index.md#pricing) · [How credits work](https://socialtap.dev/docs/credits/index.md)

| Source | Price per successful page | Per 1,000 pages |
| --- | --- | --- |
| Any source | 1 credit | $0.75–$1.97 |

- Cache hits are free.
- Credits from packs and top-ups never expire.
- A monthly plan's credits are spent first, and what is left of them ends at each renewal.
- Prices exclude tax: sales tax is added at checkout where it applies.
- Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.

## Questions about the Spotify Track Search API.

More in the [API reference](https://socialtap.dev/docs/reference/spotify/search_tracks/index.md).

**Can I search by ISRC?**

Yes. Send isrc:GBARL9300135 as the query and you get the Spotify tracks of that recording.

**How much does the Spotify Track Search API cost?**

A page of up to 100 tracks costs 1 credit. Every successful page is charged, empty pages included. SocialTap credits cost $0.75–$1.97 per 1,000, depending on the plan or pack.

**How do I get the next page?**

Repeat the same request with cursor set to page.next_cursor from the previous response, keeping the other parameters. When page.has_more is false there are no more pages. Cursors expire after 24 hours.

Other platforms

## Posts on 20 more platforms.

- [TikTok Post API](https://socialtap.dev/apis/tiktok/post/index.md) (1 credit · `GET /v1/tiktok/post`)
- [Instagram Post API](https://socialtap.dev/apis/instagram/post/index.md) (1 credit · `GET /v1/instagram/post`)
- [Facebook Post API](https://socialtap.dev/apis/facebook/post/index.md) (1 credit · `GET /v1/facebook/post`)
- [YouTube Video API](https://socialtap.dev/apis/youtube/post/index.md) (1 credit · `GET /v1/youtube/post`)
- [Reddit Post API](https://socialtap.dev/apis/reddit/post/index.md) (1 credit · `GET /v1/reddit/post`)
- [Threads Post API](https://socialtap.dev/apis/threads/post/index.md) (1 credit · `GET /v1/threads/post`)
- [Amazon Shop Posts API](https://socialtap.dev/apis/amazon/shop_posts/index.md) (1 credit / page · `GET /v1/amazon/shop_posts`)
- [Apple Music Track Search API](https://socialtap.dev/apis/applemusic/search_tracks/index.md) (1 credit / page · `GET /v1/applemusic/search_tracks`)
- [Pinterest Pin API](https://socialtap.dev/apis/pinterest/pin/index.md) (1 credit · `GET /v1/pinterest/pin`)
- [Rumble Video API](https://socialtap.dev/apis/rumble/post/index.md) (1 credit · `GET /v1/rumble/post`)
- [X (Twitter) Post API](https://socialtap.dev/apis/x/post/index.md) (1 credit · `GET /v1/x/post`)
- [Bluesky Post API](https://socialtap.dev/apis/bluesky/post/index.md) (1 credit · `GET /v1/bluesky/post`)
- [Twitch Video and Clip API](https://socialtap.dev/apis/twitch/video/index.md) (1 credit · `GET /v1/twitch/video`)
- [LinkedIn Post API](https://socialtap.dev/apis/linkedin/post/index.md) (1 credit · `GET /v1/linkedin/post`)
- [Telegram Post API](https://socialtap.dev/apis/telegram/post/index.md) (1 credit · `GET /v1/telegram/post`)
- [Kwai Post API](https://socialtap.dev/apis/kwai/post/index.md) (1 credit · `GET /v1/kwai/post`)
- [Snapchat Spotlight API](https://socialtap.dev/apis/snapchat/spotlight/index.md) (1 credit · `GET /v1/snapchat/spotlight`)
- [SoundCloud Track API](https://socialtap.dev/apis/soundcloud/track/index.md) (1 credit · `GET /v1/soundcloud/track`)
- [Truth Social Post API](https://socialtap.dev/apis/truthsocial/post/index.md) (1 credit · `GET /v1/truthsocial/post`)
- [Kick Clip API](https://socialtap.dev/apis/kick/post/index.md) (1 credit · `GET /v1/kick/post`)

More Spotify

## Spotify API. 12 endpoints, one key.

- [Spotify Track API](https://socialtap.dev/apis/spotify/track/index.md) (1 credit · `GET /v1/spotify/track`)
- [Spotify Playlist Tracks API](https://socialtap.dev/apis/spotify/playlist_tracks/index.md) (1 credit / page · `GET /v1/spotify/playlist_tracks`)
- [Spotify Podcast Episodes API](https://socialtap.dev/apis/spotify/podcast_episodes/index.md) (1 credit / page · `GET /v1/spotify/podcast_episodes`)
- [Spotify Artist API](https://socialtap.dev/apis/spotify/artist/index.md) (1 credit · `GET /v1/spotify/artist`)
- [Spotify Artist Search API](https://socialtap.dev/apis/spotify/search_artists/index.md) (1 credit / page · `GET /v1/spotify/search_artists`)
- [Spotify Playlist API](https://socialtap.dev/apis/spotify/playlist/index.md) (1 credit · `GET /v1/spotify/playlist`)
- [Spotify Playlist Search API](https://socialtap.dev/apis/spotify/search_playlists/index.md) (1 credit / page · `GET /v1/spotify/search_playlists`)
- [Spotify Album API](https://socialtap.dev/apis/spotify/album/index.md) (1 credit · `GET /v1/spotify/album`)
- [Spotify Album Search API](https://socialtap.dev/apis/spotify/search_albums/index.md) (1 credit / page · `GET /v1/spotify/search_albums`)
- [Spotify Podcast API](https://socialtap.dev/apis/spotify/podcast/index.md) (1 credit · `GET /v1/spotify/podcast`)
- [Spotify Podcast Search API](https://socialtap.dev/apis/spotify/search_podcasts/index.md) (1 credit / page · `GET /v1/spotify/search_podcasts`)

## Try it with your own search.

Type it in the playground, or copy the request into your code.

100free credits

- No credit card
- Failed requests are free
- Works on all 218 endpoints

[Start for free](https://socialtap.dev/signup/) [Read the docs](https://socialtap.dev/docs/index.md)

---

[HTML version](https://socialtap.dev/apis/spotify/search_tracks/) · [Docs index for AI agents](https://socialtap.dev/llms.txt) · [All docs in one file](https://socialtap.dev/llms-full.txt)
