Bandcamp Downloader & Metadata Scraper avatar

Bandcamp Downloader & Metadata Scraper

Pricing

Pay per usage

Go to Apify Store
Bandcamp Downloader & Metadata Scraper

Bandcamp Downloader & Metadata Scraper

Download audio (MP3/FLAC/WAV/M4A) and scrape rich metadata for any Bandcamp artist, album, or track.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Khalil Drissi

Khalil Drissi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Turn any Bandcamp track, album, or artist page into clean audio files and structured metadata in one run. Point it at a URL and get back downloadable MP3, FLAC, WAV, or M4A audio (hosted on Apify) plus a rich JSON record for every track โ€” artist, album, track number, duration, release date, genre, tags, description, price, and cover art.


Features

  • ๐ŸŽต Downloads real audio โ€” MP3, FLAC, WAV, M4A, or the original Bandcamp stream (no re-encode).
  • ๐ŸŽš๏ธ Selectable MP3 quality โ€” 128 / 192 / 256 / 320 kbps.
  • ๐Ÿง  Rich metadata per track โ€” artist, album, track number, duration, release date, genre, tags, description, price, and free/paid flag.
  • ๐Ÿ–ผ๏ธ Cover artwork โ€” downloaded and hosted alongside the audio, or linked from Bandcamp.
  • ๐Ÿ”— Smart URL expansion โ€” give it a single track, a full album, or a whole artist/label catalog and it figures out the rest.
  • โ˜๏ธ Hosted output โ€” every file lands in the Apify Key-Value Store with a clean {artist}-{album}-{track}.{ext} filename and a public URL.
  • ๐Ÿ›ก๏ธ Resilient โ€” a failure on one URL or track is logged and skipped; the run keeps going.
  • ๐ŸŒ Proxy-ready โ€” route through Apify Proxy or connect directly.
  • ๐Ÿ’ธ Pay-per-event pricing โ€” pay only for what you actually extract or download.

Use cases

  • Music journalism โ€” pull a writer-ready table of an album's tracks, durations, and release dates while drafting a review.
  • Label & A&R research โ€” sweep an artist or label catalog into a dataset to compare release cadence, genres, and pricing.
  • AI music training datasets โ€” assemble licensed audio + structured labels (genre, tags, duration) for model training and MIR research.
  • Personal archiving โ€” back up music you've purchased into the lossless format you prefer, with artwork and metadata intact.
  • Music discovery analytics โ€” track tags, genres, and release patterns across artists to surface trends and recommendations.

Input

FieldTypeDefaultDescription
urlsarray of stringsโ€” (required)Bandcamp URLs. Each may be a track (/track/...), an album (/album/...), or an artist/label page.
downloadAudiobooleantrueDownload the audio file. If false, only metadata is scraped (cheaper).
audioFormatenum: mp3, flac, wav, m4a, bestmp3Output format. best keeps the original stream without re-encoding; the rest are transcoded via ffmpeg.
audioQualityenum: 128, 192, 256, 320320MP3 bitrate in kbps. Ignored for non-MP3 formats.
includeArtworkbooleantrueDownload the cover image and host it; artworkUrl then points at the hosted copy.
maxItemsPerArtistinteger (1โ€“500)50Cap on tracks expanded from an artist/label page. Track and album URLs are never capped.
proxyConfigurationobjectโ€” (optional)Apify Proxy settings. Leave empty to connect directly.

Example input

{
"urls": [
"https://amandapalmer.bandcamp.com/track/the-manifesto-amanda-palmer",
"https://amandapalmer.bandcamp.com/album/who-killed-amanda-palmer",
"https://tycho.bandcamp.com/music"
],
"downloadAudio": true,
"audioFormat": "mp3",
"audioQuality": "320",
"includeArtwork": true,
"maxItemsPerArtist": 50,
"proxyConfiguration": { "useApifyProxy": true }
}

Output

One record is pushed to the default Dataset per track. Audio and artwork are stored in the default Key-Value Store, and their public URLs are included in the record.

FieldTypeDescription
urlstringCanonical Bandcamp page for the track.
artiststringArtist / band name.
albumstring | nullAlbum title (null for standalone singles).
trackstringTrack title.
trackNumberinteger | nullPosition within the album.
durationinteger | nullTrack length in seconds.
releaseDatestring | nullRelease date, ISO YYYY-MM-DD.
genrestring | nullPrimary genre (falls back to the first tag).
tagsarray of stringsBandcamp tags.
descriptionstring | nullTrack/album description text.
priceUsdnumber | nullPrice in USD when exposed by Bandcamp.
isFreeboolean | nulltrue when the price is 0; null when unknown.
artworkUrlstring | nullHosted cover URL when includeArtwork is on, otherwise the Bandcamp image URL.
audioDownloadUrlstring | nullPublic Apify Key-Value Store URL of the audio file (null in metadata-only mode).
audioFormatstring | nullActual file extension of the stored audio (e.g. mp3, flac).
audioSizeBytesinteger | nullSize of the stored audio file in bytes.

Example output record

{
"url": "https://amandapalmer.bandcamp.com/track/the-manifesto-amanda-palmer",
"artist": "Amanda Palmer",
"album": "There Will Be No Intermission",
"track": "The Manifesto (Amanda Palmer)",
"trackNumber": 1,
"duration": 243,
"releaseDate": "2019-03-08",
"genre": "cabaret",
"tags": ["cabaret", "art rock", "piano", "Boston"],
"description": "Recorded live...",
"priceUsd": null,
"isFree": null,
"artworkUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/amanda-palmer-there-will-be-no-intermission-the-manifesto-amanda-palmer-cover.jpg",
"audioDownloadUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/amanda-palmer-there-will-be-no-intermission-the-manifesto-amanda-palmer.mp3",
"audioFormat": "mp3",
"audioSizeBytes": 9764352
}

Pricing

This Actor uses pay-per-event pricing โ€” you are billed for what the run actually does, not for compute time.

EventPrice (USD)Charged when
metadata-extracted$0.001 / trackA track is scraped without downloading audio (metadata-only mode).
audio-downloaded$0.01 / trackA track's audio file is downloaded and stored. Replaces the metadata charge for that track.
artwork-downloaded$0.0005 / coverA cover image is downloaded and stored (includeArtwork enabled).

A track is charged either metadata-extracted or audio-downloaded โ€” never both. artwork-downloaded is an additional per-cover charge.

Example costs

  • 100 tracks with audio = 100 ร— $0.01 = $1.00
  • 100 tracks with audio + artwork = $1.00 + 100 ร— $0.0005 = $1.05
  • 1,000 tracks, metadata only = 1,000 ร— $0.001 = $1.00
  • 500 cover images = 500 ร— $0.0005 = $0.25

This tool is intended for downloading content you have the right to access โ€” music you have purchased, your own catalog, freely/openly licensed releases, or material you have explicit permission to use. You are responsible for complying with Bandcamp's Terms of Use and all applicable copyright law. Do not use this Actor to redistribute or commercially exploit content you do not own or are not licensed to use.


FAQ

Can I scrape just the metadata without downloading audio? Yes. Set downloadAudio to false. You still get every metadata field, audioDownloadUrl is null, and you're billed at the much lower metadata-extracted rate.

Why is the audio sometimes 128 kbps even though I asked for 320? Bandcamp serves a 128 kbps MP3 stream for tracks that aren't purchased/freely downloadable. Transcoding that stream up to "320 kbps" cannot recover quality it never had โ€” for true high-fidelity or lossless files, use audio you own and Bandcamp exposes as a full download. Choosing flac/wav/best avoids an unnecessary MP3 re-encode.

What happens with an artist or label page? The Actor expands it into individual tracks (following albums), up to maxItemsPerArtist. Single track and album URLs are processed in full and are never capped.

Where do the downloaded files go? Each file is uploaded to the run's default Key-Value Store with a clean {artist}-{album}-{track}.{ext} name, and its public URL is included in the dataset record so you can download or hotlink it.

Do I need a proxy? No. By default the Actor connects directly. If you hit rate limits or geo-restrictions, enable proxyConfiguration to route through Apify Proxy.