Guide

Spotify scraper on Apify: play counts, charts, lyrics and credits as a scheduled run

The same data this API serves over REST is also packaged as an Apify actor: you give it a category and a list of ids, URLs or keywords, it writes the results to a dataset you can download as JSON or CSV, and it bills per result item rather than per month. No API key, no server, and a scheduler built in. This page covers what it extracts, what a run costs, and when a key is the better tool.

By Eduardo Airaudo, maintainer of the API and the actor · Updated 21 October 2026

What a run returns

The actor's input schema lists 61 categories, one of them auto, which scrapes each link according to its type. A selection, grouped:

  • Play counts

    track_play_count · album_play_counts · artist_play_counts · artist_discography_play_counts · playlist_play_counts · isrc

    All-time streams: one track, every track on an album or a playlist, an artist's top tracks or whole discography, or a track found by its ISRC. Spotify reports 0 until a track passes 1,000 streams.

  • Tracks and albums

    track · track_credits · track_lyrics · album · album_tracks

    Metadata, writers and producers, time-synced lyrics.

  • Artists

    artist · artist_overview · artist_albums · artist_concerts

    Overview with monthly listeners and top cities, discography, upcoming concerts.

  • Charts

    chart_top_200_tracks · chart_viral_tracks · chart_top_artists

    Daily charts by country; chartDate selects a past day.

  • Search

    search_tracks · search_artists · search_multi · search_lyrics

    Keyword queries; maxResultsPerQuery caps each one.

  • Playlists and users

    playlist · user_profile · recommendations

    Playlist contents, public profiles, seeded recommendations.

Play counts over REST

A key gets the same numbers from your own code. The play-count operations, as the reference describes them:

  • GET /partner/track/countTrack play count

    Lifetime play count of one track, by Spotify id (spotify_track_id, or its alias id) or by isrc. Spotify reports 0 for tracks with fewer than 1,000 plays. Play counts are cached for 1 hour; for many tracks use /partner/tracks/count.

    Paramsspotify_track_id, id, isrc, cache

  • GET /partner/tracks/countTrack play counts (batch)

    Lifetime play counts for up to 50 tracks in one call. Entries come back in request order with status ok, not_found or error; ids without a play count are also listed in missing. Each id is cached for 1 hour.

    Paramsids, cache

What the actor adds: categories that turn an album, a playlist, an artist's top tracks or a whole discography into one dataset row per track, Apify's scheduler, and datasets you download as JSON or CSV.

The input

A run is one JSON object. category is the only required field, and it defaults to auto. queries carries the inputs: ids, full URLs and spotify: URIs for the id categories, keywords for search, country codes for charts and new releases.

category
One of the 61 categories, and the only required field. The default, auto, scrapes each link according to its type.
queries
One entry per input: open.spotify.com links, spotify: URIs or bare ids; keywords for search categories; country codes for charts and new releases; ISRCs for isrc, UPC/EAN barcodes for album_by_upc. An entity entered twice is scraped and charged once.
defaultType
auto only: how a bare 22-character id is read — track (the default), album, artist, playlist, show or episode.
maxResultsPerQuery
Rows per input for list categories, 1 to 1,000; default 50. Single-entity categories return one row.
market
ISO 3166-1 alpha-2 country code for regional results; default US.
chartDate
YYYY-MM-DD for a past chart; latest when omitted.
concurrency, delayMs
Inputs processed at once (1–20, default 5) and a pause after each one, for gentle runs.
includeRaw
Keep the full upstream object, and attach the whole response under raw for single-entity categories.
mode
Deprecated and ignored: the category decides the mode.

What a run costs

The actor charges per result item — one row written to the dataset — at a price set by the discount tier of your Apify plan. As listed on its Apify page on :

Discount tierPer resultPer 1,000
Free Apify plan$0.001$1.00
Bronze$0.0009$0.90
Silver$0.00075$0.75
Gold and above$0.0006$0.60

There is no start fee and no monthly rental, and failed inputs, invalid links and repeated entities are not charged. Apify's free plan includes $5 a month to spend in Apify Store: 5,000 results at the free-plan price.

That pricing model inverts the API's. A key is cheapest when calls are steady and interactive; a run is cheapest when the work is a batch — a weekly chart pull, a catalogue export, a one-off backfill — because you pay for the rows you get and nothing while idle.

Actor or API key?

Run the actor when

  • The job runs on a schedule: a weekly chart pull, a nightly catalogue refresh
  • The output is a file — CSV for a spreadsheet, JSON for a warehouse load
  • There is no server to hold a key; the run is the whole integration
  • Downstream steps live in Zapier, Make or another Apify actor
  • Volume is bursty and idle time should cost nothing

Get a key when

  • A user is waiting: search-as-you-type, a lookup on page load
  • The call is one of many inside your own backend
  • You need a per-second rate you can plan around (5 req/s on RapidAPI, 10 included on a direct key)
  • Endpoint-level control matters — batch lookups, every parameter of a call, cache=false for a fresh fetch
  • Requests are steady enough that a monthly quota is cheaper than per-row billing

Both read the same public catalogue, chart and lyric data. How you use the output is governed by Spotify's terms and Apify's terms, the same as for any other source.

Questions

Is this a Spotify scraper or an API?

Both exist. The Apify actor packages the same data source as a scheduled run that writes to a dataset; the REST API answers HTTP calls with a key. This site documents the API; the actor page on Apify documents the actor.

Do I need a Spotify account or API key to run it?

No. An Apify account is enough; the actor needs no Spotify credentials and no key from this site. Results are billed to your Apify account.

What does it cost?

Per result item, by the discount tier of your Apify plan, as listed on 21 October 2026: $0.001 on the free Apify plan, $0.0009 on Bronze, $0.00075 on Silver and $0.0006 on Gold and above — $1.00 to $0.60 per 1,000 results. No start fee or monthly rental, and failed inputs are not charged. The Apify listing is the authority if the numbers change.

Can it get play counts?

Yes. track_play_count, album_play_counts, artist_play_counts, artist_discography_play_counts and playlist_play_counts are actor categories, and isrc finds a track by its ISRC with its play count. The REST API serves play counts too: GET /partner/track/count — Track play count; GET /partner/tracks/count — Track play counts (batch).

How do I get the results?

Every run writes to an Apify dataset. Download it as JSON, CSV or Excel from the console, fetch it with the Apify API or SDK, or point a webhook at the run's finish event.

Can I run it on a schedule?

Yes. Apify's scheduler runs any actor on a cron expression; pair it with a webhook or a dataset export to push each run's rows wherever they go.

Is the data the same as the API's?

It comes from the same source, so a track's credits or an artist's overview match what the corresponding REST endpoint returns. The actor adds Apify's scheduler and datasets, and categories that expand an album, a playlist or a discography into one row per track; a key adds per-call control from your own code, at a fixed per-second rate.

Sources

What changed in the API and on these pages, and when: What's new.

Start a run, or get a key

The actor needs an Apify account and nothing else. The key routes give you the same data as a REST call from your own code.