Bandcamp Downloader & Metadata Scraper
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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
| Field | Type | Default | Description |
|---|---|---|---|
urls | array of strings | โ (required) | Bandcamp URLs. Each may be a track (/track/...), an album (/album/...), or an artist/label page. |
downloadAudio | boolean | true | Download the audio file. If false, only metadata is scraped (cheaper). |
audioFormat | enum: mp3, flac, wav, m4a, best | mp3 | Output format. best keeps the original stream without re-encoding; the rest are transcoded via ffmpeg. |
audioQuality | enum: 128, 192, 256, 320 | 320 | MP3 bitrate in kbps. Ignored for non-MP3 formats. |
includeArtwork | boolean | true | Download the cover image and host it; artworkUrl then points at the hosted copy. |
maxItemsPerArtist | integer (1โ500) | 50 | Cap on tracks expanded from an artist/label page. Track and album URLs are never capped. |
proxyConfiguration | object | โ (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.
| Field | Type | Description |
|---|---|---|
url | string | Canonical Bandcamp page for the track. |
artist | string | Artist / band name. |
album | string | null | Album title (null for standalone singles). |
track | string | Track title. |
trackNumber | integer | null | Position within the album. |
duration | integer | null | Track length in seconds. |
releaseDate | string | null | Release date, ISO YYYY-MM-DD. |
genre | string | null | Primary genre (falls back to the first tag). |
tags | array of strings | Bandcamp tags. |
description | string | null | Track/album description text. |
priceUsd | number | null | Price in USD when exposed by Bandcamp. |
isFree | boolean | null | true when the price is 0; null when unknown. |
artworkUrl | string | null | Hosted cover URL when includeArtwork is on, otherwise the Bandcamp image URL. |
audioDownloadUrl | string | null | Public Apify Key-Value Store URL of the audio file (null in metadata-only mode). |
audioFormat | string | null | Actual file extension of the stored audio (e.g. mp3, flac). |
audioSizeBytes | integer | null | Size 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.
| Event | Price (USD) | Charged when |
|---|---|---|
metadata-extracted | $0.001 / track | A track is scraped without downloading audio (metadata-only mode). |
audio-downloaded | $0.01 / track | A track's audio file is downloaded and stored. Replaces the metadata charge for that track. |
artwork-downloaded | $0.0005 / cover | A cover image is downloaded and stored (includeArtwork enabled). |
A track is charged either
metadata-extractedoraudio-downloadedโ never both.artwork-downloadedis 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
โ๏ธ Legal note
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.