Bandcamp Music Scraper
Pricing
$29.00/month + usage
Bandcamp Music Scraper
The Bandcamp scraper that doesn't make you choose. Albums, tracks, previews, videos, artist data. All in one actor. Built by developers, for developers.
Pricing
$29.00/month + usage
Rating
0.0
(0)
Developer

Marielise
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
15 days ago
Last modified
Categories
Share
Bandcamp Music Scraper - Apify Actor
An enhanced Apify actor wrapper for the Bandcamp music scraper module. This actor scrapes comprehensive album, track, artist, and video information from Bandcamp artist/label pages.
Features
- Scrapes album metadata (title, artist, URL, artwork, release date, price, download availability, tags)
- Fetches track listings with durations and track numbers
- Extracts MP3 128kbps audio preview URLs
- Collects artist/label information (bio, location, tags, social links)
- Discovers embedded videos (YouTube, Vimeo, Bandcamp)
- Handles cookie consent and modals automatically
- Extracts data from embedded JSON (TralbumData, EmbedData)
- Smart discovery of album URLs from artist/label music pages
Input
The actor supports two input formats. You can use either nested options or flat format:
Nested format:
{"url": "https://saor.bandcamp.com/","options": {"fetchAlbums": true,"fetchTracks": true,"fetchAudioPreviews": true,"fetchArtistInfo": true,"fetchVideos": true}}
Flat format:
{"url": "https://saor.bandcamp.com/","fetchAlbums": true,"fetchTracks": true,"fetchAudioPreviews": true,"fetchArtistInfo": true,"fetchVideos": true}
Input Fields
- url (required): Base URL of the Bandcamp artist or label page (e.g.,
https://saor.bandcamp.com/) - fetchAlbums (default: false): Navigate to
/musicand fetch album metadata - fetchTracks (default: false): Fetch track listings from each album (requires
fetchAlbums) - fetchAudioPreviews (default: false): Extract MP3 128kbps preview URLs for tracks (requires
fetchTracks) - fetchArtistInfo (default: false): Extract artist/label information (bio, location, tags, social links)
- fetchVideos (default: false): Extract embedded video URLs from album pages (YouTube, Vimeo, Bandcamp)
Output
The actor outputs structured data with the following format:
{"artist": {"name": "Saor","bio": "Atmospheric Celtic metal from the Highlands of Scotland...","location": "Scotland","imageUrl": "https://f4.bcbits.com/img/...","tags": ["atmospheric black metal", "folk metal", "scotland"],"socialLinks": {"website": "https://saor-music.com","facebook": "https://facebook.com/saormusic","instagram": "https://instagram.com/saor_official","twitter": null,"youtube": null}},"albums": [{"title": "Forgotten Paths","artist": "Saor","url": "https://saor.bandcamp.com/album/forgotten-paths","imageUrl": "https://f4.bcbits.com/img/a1234567_10.jpg","releaseDate": "2019-02-15","price": {"amount": 7.00,"currency": "USD"},"downloadAvailable": false,"tags": ["metal", "folk", "atmospheric"],"videos": [{"url": "https://www.youtube.com/embed/abc123","title": "Forgotten Paths - Official Video"}],"tracks": [{"title": "Forgotten Paths","duration": 678,"trackNumber": 1,"url": "https://saor.bandcamp.com/track/forgotten-paths","previewUrl": "https://t4.bcbits.com/stream/.../mp3-128/..."}]}]}
Output Fields
Artist object (if fetchArtistInfo is enabled):
name: Artist/label namebio: Biography textlocation: Geographic locationimageUrl: Profile image URLtags: Array of genre/style tagssocialLinks: Object with website and social media URLs
Album objects:
title: Album titleartist: Artist nameurl: Album page URLimageUrl: Album artwork URLreleaseDate: Release date (ISO format)price: Object withamountandcurrencydownloadAvailable: Whether the album is available for free/NYOP downloadtags: Array of genre/style tags (iffetchAlbumsis enabled)videos: Array of embedded video objects (iffetchVideosis enabled)tracks: Array of track objects (iffetchTracksis enabled)
Track objects (if fetchTracks is enabled):
title: Track titleduration: Duration in secondstrackNumber: Track position numberurl: Track page URLpreviewUrl: MP3 128kbps preview URL (iffetchAudioPreviewsis enabled)
How It Works
- Navigate to artist/label page: The actor starts with the base URL (e.g.,
https://saor.bandcamp.com/) - Extract artist info: If
fetchArtistInfois enabled, extracts artist/label details from the sidebar - Discover albums: If
fetchAlbumsis enabled, navigates to/musicand extracts album links from the grid - Process each album: For each album discovered:
- Extracts album metadata from embedded
TralbumDataJSON - Collects tags from the page
- Fetches embedded videos if
fetchVideosis enabled - Extracts track listings if
fetchTracksis enabled - Includes audio preview URLs if
fetchAudioPreviewsis enabled
- Extracts album metadata from embedded
- Output structured data: Returns complete artist and album data with all requested fields
Development
Setup
$npm install
Build
$npm run build
Run Locally
$npm run dev
Testing with Apify CLI
-
Install Apify CLI:
$npm install -g apify-cli -
Run locally:
$apify run -p -
Deploy to Apify:
$apify push
Technical Details
This actor uses Playwright browser automation to extract data from Bandcamp pages. The workflow:
- Validates the input URL (must be an artist/label subdomain)
- Extracts artist/label info from sidebar if
fetchArtistInfois enabled - Navigates to
/musicpage iffetchAlbumsis enabled - Discovers album URLs from the music grid
- For each album:
- Extracts metadata from embedded
TralbumDataJavaScript object - Collects genre/style tags from page elements
- Finds embedded video iframes (YouTube, Vimeo, Bandcamp)
- Parses track information including preview URLs
- Extracts metadata from embedded
- Returns structured data through Apify's dataset
Data Extraction Method
The scraper uses multiple extraction strategies:
Embedded JSON Data (most reliable):
TralbumData- Album and track information with audio preview URLsEmbedData- Additional album metadata
DOM Scraping (for supplementary data):
- Artist sidebar (
#band-name-location,#bio-text) - Social links (
#band-links) - Genre/style tags (
a.tag) - Embedded video iframes
- Album grid (
#music-grid)
This hybrid approach ensures comprehensive data extraction while maintaining reliability.
Dependencies
- apify (^3.2.4): Apify SDK for actor development
- playwright (^1.56.1): Browser automation library
- TypeScript (^5.9.2): Type-safe development
Notes
- The actor uses Chromium browser via Playwright in headless mode
- Cookie consent and modals are dismissed automatically
- Album URLs are discovered dynamically from the music page grid
- The actor supports both nested (
options: {...}) and flat input formats - Option dependencies:
fetchTracksrequiresfetchAlbumsto be enabledfetchAudioPreviewsrequiresfetchTracksto be enabled
- Invalid option combinations will throw an error at startup
- Audio preview URLs are MP3 128kbps format from Bandcamp's CDN
- Social links are auto-detected (website, Facebook, Instagram, Twitter/X, YouTube)