TIDAL Scraper - Tracks, Albums, Artists & Playlists avatar

TIDAL Scraper - Tracks, Albums, Artists & Playlists

Pricing

from $1.00 / 1,000 catalogue records

Go to Apify Store
TIDAL Scraper - Tracks, Albums, Artists & Playlists

TIDAL Scraper - Tracks, Albums, Artists & Playlists

Scrape TIDAL tracks, albums, artists, playlists and public mixes by search phrase or URL. Extract structured catalogue metadata with optional track lists, recurring change detection and app exports for ongoing music data workflows.

Pricing

from $1.00 / 1,000 catalogue records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

TIDAL Music Catalogue Scraper

Collect structured TIDAL music catalogue records for research, discovery and catalogue monitoring. Search for tracks, albums, artists or playlists, or provide direct catalogue links. Public artist-radio mixes and Top/New music collections are supported through their links. Each result has a stable identity and a TIDAL URL, with optional track lists and recurring change detection.

Why This Scraper?

  • Four search result types: tracks, albums, artists and playlists.
  • Direct links for individual catalogue entities and public mixes.
  • Top music and New music collection records with their source section.
  • Optional artist top tracks, album tracks and playlist contents.
  • Resume interrupted collections or monitor changes across recurring runs.
  • JSON, CSV and Excel dataset exports, plus optional app summaries.

Data You Get

Fields vary by record type and country. Missing source values are returned as null or empty arrays, never invented. The examples below are fictional.

FieldExample
idtrack:00000001
entityId00000001
recordTypetrack, album, artist, playlist, mix
titleExample Song
urlhttps://tidal.com/track/00000001
countryCodeUS
artists[{"id":1,"name":"Example Artist"}]
album{"id":2,"title":"Example Album"}
duration240 seconds
releaseDate2026-01-01
explicitfalse
popularity50
audioQuality, audioModesLOSSLESS, ["STEREO"]
isrc, upcCatalogue identifiers where available
numberOfTracks12
description, copyrightPublished catalogue text
creator, mixes, mixTypePublished creator and related mix metadata
tracks, tracksTotal, tracksCompleteIncluded tracks, available total and completeness
sourceSection, sourceUrl, queryCollection/search provenance
imageUrl, rawArtwork URL and original catalogue fields
changeType, changedFieldsUPDATED, ["title"]
firstSeenAt, lastSeenAt, scrapedAtObservation timestamps

How to Use

Search for tracks

{"mode":"search","queries":["Daft Punk"],"searchType":"tracks","maxItems":3}

Search for albums in another catalogue region

{"mode":"search","queries":["Daft Punk"],"searchType":"albums","countryCode":"AU","maxItems":3,"fetchDetails":true,"maxTracks":5}
{"mode":"url","urls":["https://tidal.com/artist/8847","https://tidal.com/album/1550545","https://tidal.com/playlist/abd35446-6a67-4f2b-9f92-0636742c63cb"],"maxItems":3}

Public music collections and mixes

{"mode":"url","urls":["https://tidal.com/view/pages/explore_top_music","https://tidal.com/mix/0002737adb8d077f4591c4cdb7ba60"],"maxItems":6,"maxTracks":5}

Coverage and limits

Search uses TIDAL's relevance ordering. searchType also applies to pasted search links such as https://tidal.com/search?q=Daft%20Punk&page=2. Artist, album, track and playlist links retain their own record type. Both current links and legacy /browse/ links are accepted.

Top music and New music return the public catalogue entries exposed in those collections, with sourceSection where available. They are not a historical chart archive, and the actor does not assign invented chart ranks. Artist-radio mixes can change between runs. Personalized mixes and private collections are outside coverage.

fetchDetails adds complete entity metadata and nested track lists for artists, albums and playlists. For artists, the list is top tracks, not an exhaustive discography. maxTracks bounds nested results independently of dataset rows. Mixes already include their available list, and may expose fewer tracks than requested. Inspect tracksComplete and tracksTotal before treating a nested list as complete.

The default output cap is 20 rows. Zero removes that row limit, subject to the selected page bound and run safety limits. Larger collections can stop with partial results and be continued using Resume. Multiple phrases or links share the record allowance. No audio files, playback data or downloads are included.

Input Parameters

ParameterTypeDefaultDescription
modestring"search"Search by phrases or collect TIDAL links.
queriesarray["Daft Punk"]Search mode only. Enter up to 50 phrases. Multiple phrases share the result limit.
searchTypestring"tracks"Result type for phrase searches and pasted search links. Entity links keep their own type.
urlsarray(empty)URL mode only. Multi-URL supported. Artist, album, track, playlist, mix, search, Top music and New music links are supported. Search phrases are ignored. A search link's page parameter sets the starting page.
countryCodestring"US"Two-letter country code such as US or AU. Applies to both modes; availability differs by country.
maxItemsinteger20Total dataset record limit, including EXPIRED rows. Zero removes this limit; page and run safety limits still apply.
maxPagesinteger1000Default 1000 leaves the record limit as the primary cap. Set a smaller value for a bounded sample.
fetchDetailsbooleanfalseAdds full metadata and artist, album or playlist track lists. Successfully enriched records saved add a detail-enrichment surcharge, with one additional unit per 10 nested tracks returned. Mix links include their available track list without this surcharge.
maxTracksinteger20Maximum tracks inside an enriched artist, album or playlist, or a mix. Does not change dataset row count. tracksComplete states whether the whole available list is included.
resumeFromRunIdstring(empty)Skip IDs collected in a previous run or dataset. For local datasets use local:NAME. Use Incremental mode for recurring monitoring instead. Combining Resume with an existing incremental baseline is rejected.
incrementalModebooleanfalseFirst run emits NEW; later runs emit NEW, UPDATED and REAPPEARED records. Use Resume above to continue one run. Avoid overlapping runs of the same scope.
stateKeystring(empty)Optional incremental campaign name. Country, mode, phrases, links and detail settings always remain isolated, even with a matching label. Does not affect Resume.
emitUnchangedbooleanfalseIncremental mode only. Also return and bill extra UNCHANGED rows. Off by default; unrelated to Resume.
emitExpiredbooleanfalseIncremental mode only. Also return and bill synthetic EXPIRED rows after a complete nonempty scan. Bounded, failed or resumed scans never expire records.
proxyobject(empty)Optional connection configuration.
mcpConnectorsarray(empty)Export summaries via Model Context Protocol (MCP) connectors. Authorize under Apify Settings > API & Integrations, then select a connector. Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). Leave empty to skip. Complete dataset output is unchanged.
notionParentPageUrlstring(empty)Notion page URL or ID for new summary pages. Required for Notion; ignored by other connectors.
maxNotifyListingsinteger50Maximum summaries per connector. Does not affect the dataset.

Resume and recurring updates

resumeFromRunId continues one specific collection by skipping IDs in its previous run or dataset. A local dataset can be named as local:NAME. Saved progress also protects a resurrected run. Resume does not decide which catalogue records have changed.

incrementalMode monitors the same catalogue scope across separate runs. Its first run returns NEW; later runs normally return only NEW, UPDATED or REAPPEARED. Unchanged records are suppressed. changedFields lists changed top-level fields.

emitUnchanged returns and bills additional UNCHANGED rows. emitExpired returns and bills additional synthetic EXPIRED rows only after a complete, nonempty scan. Bounded, failed or resumed scans cannot establish expiry. Both options default to false.

stateKey names a campaign; mode, queries, links, country and detail settings remain isolated even with the same name. Avoid overlapping runs for the same scope. Combining Resume with an existing incremental baseline fails early; a first baseline may be bootstrapped with Resume.

Send results into your apps (MCP connectors)

Authorize a connector under Apify Settings > API & Integrations and select it in mcpConnectors. For Notion, set notionParentPageUrl to the parent page. maxNotifyListings limits the summaries sent to each selected connector.

The export contains a title and a condensed, human-readable summary of key fields. It does not mirror the complete nested JSON. The full record always stays in the Apify dataset. Notion receives one summary page per record; other compatible connectors receive a best-effort record write. A failed export leaves the dataset available, and an empty connector selection skips export.

Output Example

This fictional example shows an incremental track record. Non-incremental runs omit change-tracking fields. Enriched rows also include enrichmentStatus.

{
"id": "track:00000001",
"entityId": "00000001",
"recordType": "track",
"title": "Example Song",
"url": "https://tidal.com/track/00000001",
"countryCode": "US",
"artists": [
{
"id": 1,
"name": "Example Artist"
}
],
"album": {
"id": 2,
"title": "Example Album"
},
"duration": 240,
"releaseDate": null,
"explicit": false,
"popularity": 50,
"numberOfTracks": null,
"audioQuality": "LOSSLESS",
"audioModes": [
"STEREO"
],
"isrc": "XXAAA0000001",
"upc": null,
"copyright": "Example rights holder",
"description": null,
"imageUrl": null,
"creator": null,
"mixes": null,
"mixType": null,
"trackNumber": 1,
"volumeNumber": 1,
"sourceUrl": null,
"query": "Example Artist",
"sourceSection": null,
"tracks": [],
"tracksTotal": null,
"tracksComplete": null,
"raw": {
"id": 1,
"title": "Example Song",
"duration": 240
},
"scrapedAt": "2026-01-01T00:00:00+00:00",
"changeType": "NEW",
"changedFields": [],
"firstSeenAt": "2026-01-01T00:00:00+00:00",
"lastSeenAt": "2026-01-01T00:00:00+00:00"
}

Plan Requirement

An Apify account is required to run this actor on the platform. Review the displayed actor charges before starting a run.