YouTube Music Scraper avatar

YouTube Music Scraper

Pricing

$2.65 / 1,000 music pages

Go to Apify Store
YouTube Music Scraper

YouTube Music Scraper

Search public YouTube Music with keywords or known public URLs. Export songs, videos, albums, artists, playlists, podcasts, and profiles with source IDs, creators, metrics, thumbnails, and URLs.

Pricing

$2.65 / 1,000 music pages

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

5

Monthly active users

2 days ago

Last modified

Share

🎵 Search YouTube Music metadata by keyword or URL

YouTube Music Scraper helps music researchers, playlist planners, marketers, creators, and developers find public YouTube Music data. Search by keywords or read known public URLs, then get structured rows with titles, source IDs, creators, album and playlist context, counts, thumbnails, and source links. Missing source fields stay null or empty instead of being guessed.

Use it to:

📦 Public YouTube Music rows

Each saved row is one public song, video, album, artist, playlist, podcast, or profile found by a keyword or known URL. Rows include source IDs, creators, context, counts, thumbnails, descriptions, tags, and canonical URLs when YouTube Music shows them. Direct track and video URLs may also include source media formats and audience-interest heatmap points.

When the same source entity appears again from another keyword or URL, the Actor saves the first eligible match and ignores later repeats. The saved row describes that first match. Missing source values stay null or use an empty array. The Actor does not download or save audio or video files.

The Actor reads public data only. It does not access private, protected, removed, age-gated, or unavailable content. Source media URLs are not guaranteed to stay playable.

🚀 Search or read public music pages

  1. Add one or more search terms, public YouTube Music URLs, or both.
  2. Pick the content type for keyword searches.
  3. Set the most results to collect for each keyword, or leave that limit empty to return all available results until the source is exhausted.
  4. Start the run and open the dataset.
  5. Export the rows or read them through the Apify API.

The Actor can keep successful rows when another submitted search or URL is invalid or unavailable. Search settings apply only to keyword searches. Known URLs are read as the public item types they identify.

⚙️ Input

Input fields

FieldTypeWhat it does
keywordsarray of stringsFinds YouTube Music results for genres, artists, moods, topics, or other keywords.
youtubeMusicUrlsarray of objectsReads known public YouTube Music track, video, album, or playlist URLs. Each object has a url.
youtubeMusicUrls[].urlstringGives one public YouTube Music track, video, album, or playlist URL.
searchTypestringChooses songs, videos, albums, artists, playlists, podcasts, or profiles for keyword searches. The form pre-fills songs.
maxResultsPerQueryintegerLimits results for each keyword. Leave it empty to return all available results until the source is exhausted. The limit does not apply to submitted URLs.

Default input used in Hosted QA

The following is the public default input used in Hosted QA:

{
"searchType": "songs",
"keywords": [
"Taylor Swift"
],
"youtubeMusicUrls": [],
"maxResultsPerQuery": 10
}

Use keywords, URLs, or both in one run. Search type and maximum results apply only to keyword searches.

🧾 Output

Run output

FieldTypeWhat it does
resultsstring linkOpens the default dataset view with the public music entities saved by the run.

Every saved dataset row uses the same shape. Nested paths use dots below. A field can be null or an empty array when YouTube Music does not show it.

Dataset row fields

FieldTypeWhat it does
matchedInputstringShows the keyword or public URL that first found the row.
contentTypestringSays whether the row is a song, video, album, artist, playlist, podcast, or profile.
sourcePositioninteger or nullShows the one-based keyword-search position, or null for a submitted URL.
titlestringShows the title or name from YouTube Music.
urlstring URLLinks to the canonical YouTube Music page.
idsobjectHolds source IDs used to identify and deduplicate the entity.
ids.videoIdstring or nullShows the YouTube video ID when available.
ids.playlistIdstring or nullShows the YouTube Music playlist ID when available.
ids.browseIdstring or nullShows the YouTube Music browse ID when available.
ids.channelIdstring or nullShows the YouTube channel ID when available.
ids.profileHandlestring or nullShows the profile handle when available.
creatorsarray of objectsLists artists, uploaders, channels, or playlist creators shown by YouTube Music.
creators[].namestringShows one creator name.
creators[].channelIdstring or nullShows that creator's channel ID when available.
creators[].urlstring URL or nullLinks to that creator's public page when available.
albumobject or nullHolds source-backed album context for a track or album, or null when not found.
album.titlestringShows the album title.
album.playlistIdstring or nullShows the album playlist ID when available.
album.browseIdstring or nullShows the album browse ID when available.
album.urlstring URL or nullLinks to the album page when available.
playlistobject or nullHolds source-backed playlist or podcast context, or null when not found.
playlist.titlestringShows the playlist or podcast title.
playlist.playlistIdstring or nullShows the playlist ID when available.
playlist.urlstring URL or nullLinks to the playlist or podcast page when available.
durationSecondsinteger or nullShows the track or video length in seconds when available.
releaseDatestring or nullShows the release date or year when available.
metricsobjectHolds counts shown by YouTube Music.
metrics.playCountinteger or nullShows the song play count when available.
metrics.viewCountinteger or nullShows the video view count when available.
metrics.likeCountinteger or nullShows the like count when available.
metrics.subscriberCountinteger or nullShows the subscriber count when available.
metrics.songCountinteger or nullShows the track count for an album, playlist, or podcast when available.
thumbnailsarray of objectsLists thumbnail images shown by YouTube Music.
thumbnails[].urlstring URLLinks to one thumbnail image.
thumbnails[].widthinteger or nullShows the image width in pixels when available.
thumbnails[].heightinteger or nullShows the image height in pixels when available.
descriptionstring or nullShows the description from YouTube Music when available.
tagsarray of stringsLists source tags or categories.
mediaFormatsarray of objectsLists source media formats found for a submitted track or video URL.
mediaFormats[].urlstring URL or nullShows a source media URL when available.
mediaFormats[].mimeTypestring or nullShows the source MIME type when available.
mediaFormats[].codecstring or nullShows the media codec when available.
mediaFormats[].bitrateinteger or nullShows the bitrate in bits per second when available.
mediaFormats[].widthinteger or nullShows video width in pixels, or null for audio or missing data.
mediaFormats[].heightinteger or nullShows video height in pixels, or null for audio or missing data.
mediaFormats[].fpsnumber or nullShows video frames per second when available.
mediaFormats[].qualityLabelstring or nullShows the source quality label when available.
heatmaparray of objectsLists audience-interest timeline points for a submitted video or track URL.
heatmap[].startMillisintegerShows where a heatmap part starts in milliseconds.
heatmap[].endMillisintegerShows where a heatmap part ends in milliseconds.
heatmap[].scorenumber or nullShows the source heatmap score when available.

Genuine current-beta song row

This complete row is from successful current-beta run VituVfL0hR69bfEnp:

{
"matchedInput": "Taylor Swift",
"contentType": "song",
"sourcePosition": 1,
"title": "Patient Zero",
"url": "https://music.youtube.com/watch?v=V-uIp-WuD60",
"ids": {
"videoId": "V-uIp-WuD60",
"playlistId": null,
"browseId": null,
"channelId": "UCPC0L1d253x-KuMNwa05TpA",
"profileHandle": null
},
"creators": [
{
"name": "Taylor Swift",
"channelId": "UCPC0L1d253x-KuMNwa05TpA",
"url": "https://music.youtube.com/channel/UCPC0L1d253x-KuMNwa05TpA"
}
],
"album": {
"title": "The Life of a Showgirl: The Encore",
"playlistId": null,
"browseId": "MPREb_L64BnYDQpHZ",
"url": "https://music.youtube.com/browse/MPREb_L64BnYDQpHZ"
},
"playlist": null,
"durationSeconds": 226,
"releaseDate": null,
"metrics": {
"playCount": 4600000,
"viewCount": null,
"likeCount": null,
"subscriberCount": null,
"songCount": null
},
"thumbnails": [
{
"url": "https://yt3.googleusercontent.com/DNFuGZeuZ7vGTxa49zFs3YNAwA-TOTVXYRFqPt3RQGmq0vK2zbLyTxJHxc88dShIoQrfQUiIugawXoK_=w60-h60-l90-rj",
"width": 60,
"height": 60
},
{
"url": "https://yt3.googleusercontent.com/DNFuGZeuZ7vGTxa49zFs3YNAwA-TOTVXYRFqPt3RQGmq0vK2zbLyTxJHxc88dShIoQrfQUiIugawXoK_=w120-h120-l90-rj",
"width": 120,
"height": 120
}
],
"description": null,
"tags": [],
"mediaFormats": [],
"heatmap": []
}

You can export the dataset as JSON, CSV, Excel, XML, or RSS.

💰 Pricing

This Actor uses pay-per-event pricing. The music-result event is charged once for each saved public song, video, album, artist, playlist, podcast, or profile. A run with no saved public music entry creates no music-result event. The current price is shown in the Apify pricing panel.

🔌 Integrations

Read the dataset through the Apify API, schedules, and webhooks. You can export the rows in the formats Apify provides. This video shows how to use Apify integrations:

❓ FAQ

What happens when the source has no album context?

If YouTube Music does not show album data, album is null. The Actor does not fill it with duration text or another unrelated value.

Can a submitted album or playlist URL return every track?

No. It returns one row for that album or playlist, not every track inside it.

Can I use a YouTube Music URL and search terms together?

Yes. Add both to one run. Search type and maximum results apply to keywords, while known URLs are read as the public item types they identify.

What happens if a source response is incomplete?

If YouTube Music returns a temporary, incomplete, or unusable response, the run reports a failure instead of calling it a clean no-match. A clean no-match is used only after a valid, complete response shows no eligible result. Any rows already saved stay in the dataset.

What does leaving maximum results per query empty do?

It returns all available results until the source is exhausted. Set a positive integer when you want each keyword search to stop earlier.

What happens when the same entity appears more than once?

The Actor saves the first eligible occurrence and ignores later repeats from another keyword or URL. The saved row describes the first match only.

Why are some counts or IDs missing?

YouTube Music does not show every fact for every entity. The Actor uses null or an empty array instead of guessing.

Do I need a YouTube login, API key, or cookies?

No. The Actor reads public YouTube Music data and does not ask for source credentials.

Is this a YouTube Music downloader?

No. It exports metadata. It does not download, convert, or save audio or video files.

📝 Changelog

v0.2 (27-09-2026)

  • Leave Maximum results per query empty to collect all available results.
  • Runs resume after an Apify migration without duplicate rows or charges.

v0.1

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré