Udio Scraper - Prompts, Lyrics, Tags, Audio avatar

Udio Scraper - Prompts, Lyrics, Tags, Audio

Pricing

from $1.00 / 1,000 track results

Go to Apify Store
Udio Scraper - Prompts, Lyrics, Tags, Audio

Udio Scraper - Prompts, Lyrics, Tags, Audio

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.

Pricing

from $1.00 / 1,000 track results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Udio Scraper

Collect public tracks from Udio together with the text that made them: the complete generation prompt, the full lyrics, and the style tags. Those three fields are kept exactly as the creator wrote them, because they are usually the whole point of collecting Udio tracks and they are the first thing a lossy export drops.

Every row also carries the artwork, a direct audio link, like and play counts, duration, timestamps and the creator handle.

What you can collect

ModeWhat it doesWhat you supply
Search the catalogueFinds public tracks by keyword, in the order you chooseA keyword (optional) and an ordering
Specific tracksReads a list of tracks you already knowTrack page addresses, or bare identifiers
PlaylistReads every track in one or more public playlists, in playlist orderPlaylist page addresses, or bare identifiers

Input

FieldTypeDefaultNotes
modeselectsearchsearch, songIds or playlist
searchTermtextemptyMatched against titles, prompts and tags. Empty browses everything
sortByselectnewestnewest, mostLiked or mostPlayed
trackIdslistemptyOne track per line, address or identifier
playlistIdslistemptyOne playlist per line, address or identifier
maxItemsnumber20Stop after this many tracks. 0 collects everything available
resumeFromRunIdtextemptyContinue one interrupted run without returning what it already saved
incrementalModecheckboxoffReturn only what changed since the last run of the same selection
emitUnchangedcheckboxoffAlso return unchanged tracks, marked UNCHANGED (billed)
emitExpiredcheckboxoffAlso return tracks that are gone, marked EXPIRED (billed)
stateKeytextemptyName a monitoring campaign, or share one across runs
mcpConnectorslistemptyOptional MCP connectors to also send the results to. Empty skips the export
notionParentPageUrltextemptyNotion connector only: the page under which track pages are created
maxNotifyListingsnumber50How many tracks each connector receives. Does not affect the dataset
proxyConfigurationproxyApify ProxyThe default works on every plan

Both list fields accept either shape, so you can paste addresses straight from your browser or feed in bare identifiers from an earlier run.

Resume and recurring updates

These are two different things.

Resume finishes ONE interrupted collection. Paste that run's ID (or its dataset ID) into resumeFromRunId and the tracks it already saved are skipped.

Incremental mode is for running the same selection again and again, daily say, to watch a playlist gain and lose tracks. The actor remembers the previous run of that selection and, from the second run on, returns only what changed. Each row then carries changeType, changedFields, firstSeenAt and lastSeenAt. Memory is kept per selection (mode, keyword, ordering and lookup list); set stateKey to name a campaign or to deliberately share one.

EXPIRED rows are only produced when a run scanned the whole selection. A run stopped by maxItems, a keyword search that hit the 200-track ceiling, a collection that could not be read, and a resumed run all skip that step and say so in the log: a partial scan must never report a live track as gone.

Output

FieldDescription
trackIdStable identifier for the track
urlTrack page address
titleTrack title
artistCreator handle shown on the track
artistImageUrlCreator avatar image
creatorIdStable identifier for the creator
promptThe full generation prompt, kept verbatim
lyricsThe complete lyrics, kept verbatim, with section markers intact
tagsStyle tags attached to the track
userTagsTags added by the creator
descriptionFree text description
attributionAttribution text, when the creator set one
likeCountNumber of likes
playCountNumber of plays
durationSecondsLength in seconds
createdAtWhen the track was generated
publishedAtWhen the track was made public
audioUrlDirect link to the audio file
videoUrlDirect link to the video, when one exists
artworkUrlCover artwork image
styleIdIdentifier of the style used
styleSourceTypeWhere the style came from
styleSourceTrackIdTrack the style was taken from, when applicable
parentTrackIdTrack this one extends or remixes, when applicable
generationIdIdentifier of the generation batch
generationStatusStatus reported for the generation
isFinishedWhether generation completed
isPublishableWhether the track may be shared
collectionIdPlaylist identifier, in playlist mode
collectionNamePlaylist name, in playlist mode
collectionUrlPlaylist page address, in playlist mode
positionInCollectionPlace in the playlist, in playlist mode
sourceModeWhich mode produced the row
scrapedAtWhen the row was collected
rawEvery field exactly as the site supplied it, so nothing is lost
changeTypeIncremental mode only: NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED
changedFieldsIncremental mode only: which columns moved since the last run
firstSeenAtIncremental mode only: when this track was first collected
lastSeenAtIncremental mode only: when it was last collected

Sample output

{
"trackId": "00000000-0000-4000-8000-000000000000",
"url": "https://www.udio.com/songs/00000000-0000-4000-8000-000000000000",
"title": "Midnight Coffee Loop",
"artist": "Jane Doe",
"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": "",
"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",
"artworkUrl": "https://example.com/art/sample.png",
"isFinished": true,
"isPublishable": true,
"sourceMode": "search",
"scrapedAt": "2026-01-06T11:00:00+00:00"
}

Send results into your apps (MCP connectors)

Results can optionally be piped into apps you already use, through Model Context Protocol connectors, as a delivery step after the collection. Authorize a connector under Apify, Settings, API and Integrations, then select it in the mcpConnectors field of the input. For Notion, also set notionParentPageUrl to the page under which track pages should be created; maxNotifyListings caps how many tracks are written to each connector.

What arrives in the connector is a condensed, human readable summary per track: a title plus the key fields flattened to plain text. Nested objects collapse to their main value and long lists are trimmed to a few entries, so the prompt and lyrics may be shortened there. The complete record always stays in the Apify dataset, which this step never changes. Leaving mcpConnectors empty skips the export entirely.

Good to know

  • A single catalogue search reaches at most 200 tracks, because that is as far as the site's own search view goes. To collect more, run several searches with narrower keywords instead of raising maxItems.
  • Playlist mode uses the playlist's own track list, so it returns every member of the playlist rather than the shorter preview the site shows elsewhere.
  • Tracks that have been removed or made private are reported in the run log and simply skipped, so a short result is never silent.
  • A very rare or very long keyword can make the site's own search time out rather than answer. The run stops with a clear message when that happens, so it is never reported as a successful empty result. Try a broader keyword.
  • maxItems defaults to 20 to keep a first run quick and cheap. Set it to 0 when you want everything.

Support

Found a track that does not come back correctly, or a field you need that is missing? Open an issue from the Actor page and include the input you used.