Suno Scraper at a glance
Suno Scraper is a ready-to-run Apify actor from abotapi for collecting ai data. Its documented output includes kind, id, title, link and creator handle, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.30 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- AI, Social Media
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.30 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 26 options
Collect public Suno music data: songs with lyrics, style tags, model version, play and like counts, audio, video and cover art links, plus playlist and creator records. Choose the curated Explore sections, specific playlists, or a creator's full public catalogue.
What Suno Scraper can do
- Three ways in. Read the curated Explore sections, paste playlist links or ids, or paste creator handles. No need to build URLs by hand.
- Four record kinds in one dataset. Songs, playlists, creator profiles and contests share one dataset, told apart by a recordType column, so a single run can map a whole corner of the catalogue.
- 40+ fields per song. The complete lyric sheet, the style prompt, duration, model version, remix and stem availability, and the audio, video and cover art links.
- Full depth, not just the first screen. A large playlist or a prolific creator's whole public catalogue comes back complete, up to your record cap, rather than stopping at the first batch.
- One shared cap. Max records is the only limit that stops a run, and it is split fairly across the sources you asked for, so the last playlist in your list is never starved by the first.
- Comments and lyrics are optional. Turn on includeComments to add each song's public comments, with replies nested inside, to the song record. It adds no extra records and no extra charge: you pay for the same song records, and each song then needs one more request, so the run is slower. Turn them off for a dataset that is a fraction of the size when you only need titles, styles and counts.
Choose what to collect
These inputs let you configure Suno Scraper - Songs, Playlists, Creators & Lyrics. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Where to collect from: the curated Explore sections, specific playlists, creator profiles, or any mix of Suno links. |
exploreFeedsarray | Only read when mode = explore. Leave empty to cover every curated section the discovery page currently offers. Fill it to pin specific sections, either by their section id or by a playlist id. |
playlistUrlsarray | Only read when mode = playlists. Paste playlist page links or bare playlist ids. Each playlist is read in full, up to the record cap; a link ending in ?page=N starts reading at page N. |
profileUrlsarray | Only read when mode = profiles. Paste creator profile links or bare handles such as @suno. Each creator's public catalogue is read in full, up to the record cap. |
startUrlsarray | Only read when mode = urls. Paste any mix of playlist links (with or without ?page=N), creator profile links (@handle, optional ?sort=), the /explore page, and song links. Unsupported links get a warning, never a silent zero. Left untouched, one example of each shape is scraped. |
profileSortBystring | Order in which a creator's songs and playlists are returned. |
followProfilePlaylistsboolean | After a creator's own songs, also include every public playlist listed on that creator's profile. |
Show 19 more inputs
| Input | What it controls |
|---|---|
styleTagstring | Keep only songs whose style tags contain this text (case-insensitive), for example synthwave. Songs are filtered after they are read, so a narrow filter reads more pages for the same number of rows. |
modelVersionstring | Keep only songs made with this model, for example v4 or v3.5 (matches the model version or model name). |
minPlayCountinteger | Keep only songs played at least this many times. Leave empty for no minimum. |
createdAfterstring | Keep only songs created on or after this date (YYYY-MM-DD). |
isInstrumentalstring | Keep only instrumental songs (yes), only songs with vocals (no), or all songs (any). Songs without the flag are dropped when you pick yes or no. |
includeLyricsboolean | Include the full lyric sheet on every song record. Turn off for a much smaller dataset when you only need titles, styles and counts. |
includeCommentsboolean | Add each song's public comments (with replies) to the song record as a nested comments list. No extra records are produced. Costs one extra request per song, so runs are slower. |
maxCommentsPerSonginteger | Only used when Include comments is on. Newest top-level comments first; replies come nested inside their comment. |
maxItemsinteger | Stop after this many records across the whole run (0 = no limit). Songs, playlist headers, creator profiles and contests all count as records. |
maxPagesinteger | Optional limit on how many pages are read for any single playlist, profile or section (0 = no limit). A hard cap of 200 pages per source always applies, so the record cap above is the real limit. |
resumeFromRunIdstring | Paste the run id (or dataset id) of an earlier run of this Actor to continue it. Records that run already returned are skipped, so an interrupted large collection can finish without paying for the same rows twice. Leave empty for a normal run. |
incrementalModeboolean | Turn this on for daily or weekly monitoring. The first run returns everything as NEW. Later runs return only NEW, UPDATED and REAPPEARED records, each labelled in a changeType column. Note that play, like and comment counts move constantly on an active catalogue, so a record whose only difference is a counter still counts as UPDATED. Leave off for a normal one-off run. |
stateKeystring | Optional. Name this monitoring campaign to keep its memory stable, or to deliberately share one memory across differently configured runs. Leave empty and the memory is keyed on the run setup automatically. |
emitUnchangedboolean | Off by default. Turn on to also return records that have not changed since the last run, labelled UNCHANGED. This returns, and bills, rows you already have. |
emitExpiredboolean | Off by default. Turn on to also return records that were present before and are no longer found, labelled EXPIRED. Only produced when a run covered its whole setup, so a capped or continued run never reports records as gone. This returns, and bills, extra rows. |
ignoreFieldsForChangesarray | Recurring updates only. Field names (for example playCount, upvoteCount, commentCount) whose changes should NOT make a record count as UPDATED. The fields still appear in every returned row. Run-specific fields (scrapedAt and the source keys) are always ignored. Leave empty to treat every other change as an update. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output. |
notionParentPageUrlstring | URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
recordTypeKindidIdtitleTitleurlLinkcreatorHandleCreator handlecreatorDisplayNameCreatorhandleProfile handledisplayNameProfile nameplayCountPlaysupvoteCountLikescommentCountCommentsfollowersCountFollowersShow 36 more fields
songCountSongsdurationSecondsDuration (s)styleTagsStylemodelVersionModelcreatedAtCreatedstartTimeStartsendTimeEndsimageUrlCoveraudioUrlAudiosourceTypeSource kindsourceTitleSourcesourceUrlSource linkchangeTypeChangechangedFieldsChanged fieldsfirstSeenAtFirst seenlastSeenAtLast seenisInstrumentalisInstrumentallyricslyricscommentscommentsvideoUrlvideoUrldescriptiondescriptionprofileDescriptionprofileDescriptionplaylistCountplaylistCountfollowingCountfollowingCounttotalPlaystotalPlaystotalUpvotestotalUpvotestotalDurationSecondstotalDurationSecondsavatarImageUrlavatarImageUrlslugslugcontestTypecontestTypecontestCategorycontestCategoryjudgingStartjudgingStartjudgingEndjudgingEndwinnersAnnouncedDatewinnersAnnouncedDatesubmissionsPlaylistIdsubmissionsPlaylistIdsubmissionsPlaylistUrlsubmissionsPlaylistUrlExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"recordType": "song",
"id": "00000000-0000-0000-0000-000000000001",
"url": "suno.com/song/00000000-0000-0000-0000-000000000001",
"title": "Sample Song Title",
"createdAt": "2026-01-01T00:00:00.000Z",
"status": "complete",
"creatorHandle": "samplecreator",
"creatorDisplayName": "Sample Creator",
"creatorProfileUrl": "suno.com/@samplecreator",
"creatorIsVerified": false,
"playCount": 1200,
"upvoteCount": 85,
"commentCount": 4,
"durationSeconds": 180.5,
"styleTags": "synth pop, driving bass, 120 BPM, male vocals",
"displayTags": [
"synth pop",
"dance-pop"
],
"lyrics": "[Verse 1]\nSample lyric line here\n\n[Chorus]\nSample chorus line here",
"modelName": "sample-model",
"modelVersion": "v6",
"isInstrumental": false,
"isRemix": false,
"canRemix": true,
"hasStems": false,
"isExplicit": false,
"imageUrl": "https://cdn0.example.com/image_00000000.jpeg",
"videoUrl": "https://cdn0.example.com/00000000.mp4",
"audioUrl": "https://cdn0.example.com/clip/00000000.m4a",
"sourceType": "playlist",
"sourceTitle": "Sample Playlist",
"sourceUrl": "suno.com/playlist/00000000-0000-0000-0000-000000000003",
"scrapedAt": "2026-01-01T00:00:00Z"
}Ways to use this data
- Music data researchers and ML teams: build lyric, style-tag and prompt datasets for text and audio generation research.
- Trend watchers: monitor the trending and editorial sections to see which styles, prompts and model versions are rising.
- Playlist archivists: export a whole playlist, songs and stats included, to catalogue or back it up.
- Creator analytics: track a creator's public catalogue, play and upvote counts, and follower growth over time.
- Contest followers: watch community contest windows, submission playlists and the base songs they remix.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Suno Scraper return?
The documented output for Suno Scraper includes kind, id, title, link, creator handle, creator, profile handle and profile name. Availability of each field depends on the source page and the selected mode.
How much does Suno Scraper cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.30 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed songs on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Recurring updates (incrementalMode). Each run then returns only new, updated and reappeared records, and unchanged ones are not billed unless you ask for them.
Why did my run return fewer records than a playlist or profile actually holds?
Max records caps the whole run, not each source, and the remaining budget is split across every source you asked for. Raise Max records, or set it to 0, to collect a source in full.
Why did my run fail instead of returning an empty dataset?
If every requested source refused to answer, the run stops with a clear message so "this playlist is empty" is never confused with "nothing could be read". Run it again in a few minutes. If the requested sources answered but hold no public records, the run also stops, with a different message saying so, so check the playlist links, handles or section ids. The one exception is a recurring-updates run where every record was unchanged: that is a normal, successful run with nothing new to return.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of each record into Notion, Linear or Airtable.
