Udio Scraper icon

Udio Scraper

Collect public Udio tracks with the complete generation prompt, full lyrics, style tags, like and play counts, duration, artwork and a direct audio…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Udio Scraper at a glance

Udio Scraper is a ready-to-run Apify actor from abotapi for collecting ai data. Its documented output includes track id, title, artist, prompt and lyrics, 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.00 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.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
15 options

Collect public Udio tracks with the complete generation prompt, full lyrics, style tags, like and play counts, duration, artwork and a direct audio link. Search the catalogue by keyword and ordering, read a list of track addresses, or pull a public playlist in its original order.

What Udio Scraper can do

  • Three ways to find tracks. Search the catalogue by keyword and ordering, paste track addresses you already have, or read every track in one or more public playlists.
  • Creative text kept verbatim. The full prompt, complete lyrics and style tags are carried through exactly as the creator wrote them, never trimmed or summarised.
  • Nothing hand-picked is lost. Every field the platform sends comes through in raw too, so a new upstream field reaches your dataset the day it appears.
  • True playlist order. Playlist mode reads the collection's own member list rather than the shorter preview the catalogue view shows, and restores the playlist's own order on every row.
  • Built for schedules. Incremental mode returns only new, updated, reappeared and gone tracks on recurring runs, and unchanged tracks are not billed.
  • Resume without paying twice. Finish one interrupted run by pointing at its run or dataset ID; tracks it already saved are skipped.

Choose what to collect

These inputs let you configure Udio Scraper - Prompts, Lyrics, Tags, Audio. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestringChoose how tracks are found. 'Search the catalogue' browses public tracks by keyword and ordering. 'Specific tracks' reads a list of track addresses you already have. 'Playlist' reads every track in one or more public playlists. Only the fields for the chosen mode are used; the other mode's fields are ignored.

Choices: search, songIds, playlist

searchTermstringWords to match against track titles, prompts and tags. Leave empty to browse the whole public catalogue in the chosen order. Used in 'Search the catalogue' mode.
sortBystringThe order in which matching tracks are returned.

Choices: newest, mostLiked, mostPlayed

trackIdsarrayOne track per line. Paste the full address of a track page, or just its identifier. Used in 'Specific tracks' mode.
playlistIdsarrayOne playlist per line. Paste the full address of a public playlist page, or just its identifier. Every track the playlist contains is collected, in the playlist's own order. Used in 'Playlist' mode.
maxItemsintegerStop after this many tracks. Set to 0 to collect everything available for your selection. A single catalogue search can reach at most 200 tracks; use a narrower keyword to reach different ones.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a collection that was interrupted, without returning the tracks it already saved. Use this for ONE unfinished run; for recurring updates use Incremental mode below instead.
Show 8 more inputs
More input fields
InputWhat it controls
incrementalModebooleanTurn this on for daily or recurring monitoring, for example to watch a playlist gain and lose tracks or a track's like count move. The first run returns every track as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED tracks. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). The memory is kept separately for each mode, keyword, ordering and lookup list; use State key to name or deliberately share a monitoring campaign.
emitUnchangedbooleanOff by default. Turn on to also return tracks that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.
emitExpiredbooleanOff by default. Turn on to also return tracks that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has scanned the whole selection: not when Maximum tracks capped it, not when a keyword search hit the 200-track ceiling, not when part of the selection could not be read, and not when Resume was used. This returns, and bills, extra rows.
stateKeystringOptional. Name this monitoring campaign to keep its memory stable, or deliberately share one memory across differently configured runs. Leave empty to let the actor derive a key automatically from the mode, keyword, ordering and lookup list.
ignoreFieldsForChangesarrayOptional. Field names to exclude from UPDATED change detection. The field stays in the output; it just never makes a track UPDATED or appears in changedFields. An output column such as playCount also covers its copy inside raw. Use a dotted name such as raw.someKey to ignore a key inside a nested object or inside every element of a list. Example: playCount, if you only care about metadata changes.
mcpConnectorsarrayOptionally send collected tracks 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-track export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output.
notionParentPageUrlstringURL or id of the Notion page under which track pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on tracks 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.

trackIdTrack ID (text)
titleTitle (text)
artistArtist (text)
promptPrompt (text)
lyricsLyrics (text)
tagsTags (array)
userTagsCreator tags (array)
descriptionDescription (text)
likeCountLikes (number)
playCountPlays (number)
durationSecondsDuration (s) (number)
createdAtCreated (datetime)
Show 26 more fields
publishedAtPublished (datetime)
urlTrack page (link)
audioUrlAudio (link)
videoUrlVideo (link)
artworkUrlArtwork (image)
artistImageUrlArtist image (image)
creatorIdCreator ID (text)
styleIdStyle ID (text)
styleSourceTypeStyle source (text)
styleSourceTrackIdStyle from track (text)
parentTrackIdParent track (text)
generationIdGeneration ID (text)
generationStatusGeneration status (text)
isFinishedFinished (boolean)
isPublishablePublishable (boolean)
attributionAttribution (text)
collectionIdPlaylist ID (text)
collectionNamePlaylist (text)
collectionUrlPlaylist page (link)
positionInCollectionPosition (number)
sourceModeCollected via (text)
scrapedAtCollected at (datetime)
changeTypeChange type (incremental mode) (text)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (datetime)
lastSeenAtLast seen (incremental mode) (datetime)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "trackId": "00000000-0000-4000-8000-000000000000",
  "url": "https://www.udio.com/songs/00000000-0000-4000-8000-000000000000",
  "title": "Midnight Coffee Loop",
  "artist": "Jane Doe",
  "artistImageUrl": "https://example.com/avatar/sample.png",
  "creatorId": "00000000-0000-4000-8000-000000000001",
  "prompt": "lofi, jazzy chill cafe vibes, warm tape saturation",
  "lyrics": "[Verse 1]\nRain on the window, cups going cold\n\n[Chorus]\nStay for one more song",
  "tags": [
    "chill",
    "jazz",
    "downtempo",
    "instrumental"
  ],
  "userTags": [
    "study"
  ],
  "description": "",
  "attribution": null,
  "likeCount": 128,
  "playCount": 4210,
  "durationSeconds": 131.2,
  "createdAt": "2026-01-05T09:12:44+00:00",
  "publishedAt": "2026-01-05T09:15:02+00:00",
  "audioUrl": "https://example.com/audio/sample.mp3",
  "videoUrl": null,
  "artworkUrl": "https://example.com/art/sample.png",
  "styleId": null,
  "styleSourceType": "style",
  "styleSourceTrackId": null,
  "parentTrackId": null,
  "generationId": "00000000-0000-4000-8000-000000000002",
  "generationStatus": "succeeded",
  "isFinished": true,
  "isPublishable": true,
  "sourceMode": "search",
  "collectionId": null,
  "collectionName": null,
  "positionInCollection": null,
  "scrapedAt": "2026-01-06T11:00:00+00:00",
  "raw": {}
}

Ways to use this data

  • AI music researchers and dataset builders: collect prompt-to-track pairs at scale to study how wording shapes generated music.
  • Playlist curators and fans: track a playlist's full membership, order and engagement over time.
  • Music blogs and content teams: pull lyrics, tags and artwork to write about trending AI-generated tracks.
  • Trend watchers: schedule recurring runs to see which tracks are gaining likes and plays.
  • Archivists: keep a durable copy of a track's prompt and lyrics before it is edited or removed by its creator.

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 Udio Scraper return?

The documented output for Udio Scraper includes track id, title, artist, prompt, lyrics, tags, creator tags and description. Availability of each field depends on the source page and the selected mode.

How much does Udio Scraper cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 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 tracks on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. From the second run on, each run returns only new, updated, reappeared and gone tracks for that selection, and unchanged ones are not billed unless you turn on Emit unchanged.

What is the difference between Resume and Incremental mode?

Resume finishes ONE interrupted run: paste its run or dataset ID into resumeFromRunId and already-saved tracks are skipped. Incremental mode compares each new run of the same selection against the previous one, on a schedule. They solve different problems and cannot be combined while an Incremental mode memory already exists for that selection; a run that tries fails with a message asking you to run them separately.

Why didn't a capped run mark any tracks as gone?

EXPIRED needs a complete look at the selection. A run stopped by Maximum tracks, a catalogue search that hit the 200-track ceiling, a private track or an unreadable playlist, and a resumed run all leave part of the selection unchecked, so none of them may declare anything gone that run; the log states which of these applied. For example, if 60 tracks in a 120-track playlist changed since the last run and Maximum tracks is 50, the run stops after returning 50 and emits no EXPIRED rows, even with Emit expired on. (In Incremental mode the cap counts only tracks actually returned, so a quiet day with fewer changes than the cap still counts as a full scan.) To get a real expiry sweep, periodically run the same selection with Maximum tracks set to 0 (or above the selection's size), alongside your smaller day-to-day capped runs. This works for Specific tracks, Playlist mode, and catalogue searches with fewer than 200 matches. A catalogue search with 200 or more matches always stops at the ceiling, so no setting of Maximum tracks lets it mark tracks as gone.

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 results into Notion, Linear or Airtable.

Ready to collect with Udio Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.