Beatport Scraper avatar

Beatport Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Beatport Scraper

Beatport Scraper

Scrape Beatport - the world's largest DJ & electronic music store. Search tracks, browse genres, DJ charts, labels and artists, and get full track metadata: BPM, key, duration, price, artwork, audio previews and release dates.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

22 days ago

Last modified

Share

Scrape Beatport — the world's largest DJ & electronic music store. Search tracks, browse genres and DJ charts, or pull labels, artists, releases and single URLs, and get full track metadata: title, artists & remixers, label, genre, release date, BPM, musical key, duration, price, artwork and 30–60 second audio previews. Fast HTTP access to Beatport's public catalog API; no login required.

What this actor does

  • Seven modes: search, browseByGenre, topCharts, browseByLabel, browseByArtist, browseReleases, byUrl
  • Full track metadata: BPM, key (with Camelot number), duration, price, catalog number, ISRC, release dates
  • All 46 Beatport genres browsable — from Tech House and Techno to Trance, Drum & Bass and Dubstep
  • DJ charts with rank, chart type (latest / trending / popular) and optional per-chart tracks
  • Releases: newest releases per genre/label with five sort orders and optional per-release tracks
  • Audio previews & artwork: direct MP3 preview URLs and CDN artwork URLs on every track
  • Filters: BPM range, musical key, keyword, release date, genre
  • Empty fields are omitted

Output per track

  • id, title, mixName, artists[], primaryArtist, remixers[]
  • label, releaseId, releaseName, genre (id/name/slug), subGenre
  • bpm, key (name, Camelot number/letter)
  • duration (e.g. 6:42), durationMs, trackNumber
  • price (value, currency, display), catalogNumber, isrc
  • releaseDate, newReleaseDate, encodedDate
  • previewUrl — MP3 sample, sampleStartMs, sampleEndMs
  • artworkUrl, availableWorldwide, isExplicit, preOrder, isAvailableForStreaming
  • audioFormat, desc, saleType, currentStatus, labelTrackIdentifier
  • isDjEdit, isHype, isClassic, isUgcRemix, exclusive, wasEverExclusive
  • freeDownloads, freeDownloadStartDate, freeDownloadEndDate, preOrderDate
  • apiUrl — canonical catalog API resource
  • chartRank / chartName (when fetched inside a chart)
  • sourceUrl, recordType: "track", scrapedAt

Output per chart

  • id, name, slug, description, person, artist
  • genres[], trackCount, price, publishDate, addDate, changeDate
  • rank (position in the listing), chartType
  • imageUrl, apiUrl, sourceUrl, recordType: "chart", scrapedAt

Output per release

  • id, name, slug, artists[], primaryArtist, remixers[], label
  • catalogNumber, upc, trackCount, bpmRange
  • publishDate, newReleaseDate, encodedDate, updated, desc
  • price, imageUrl, isExplicit, isDjEdit, isHype, isUgcRemix, exclusive, preOrder
  • apiUrl, sourceUrl, recordType: "release", scrapedAt

Output per artist / label

  • id, name, bio, website, djAssociation (artists)
  • imageUrl, latestActivePublishDate, created, updated
  • hasExclusiveContract, hypeActive, isAvailableForPreOrder, isAvailableForBundleSubscription, isIncludedInRightsflow (labels)
  • sourceUrl, recordType, scrapedAt

Input

FieldTypeDefaultDescription
modestringsearchsearch / browseByGenre / topCharts / browseByLabel / browseByArtist / browseReleases / byUrl
searchQuerystringtech houseFree-text query (mode=search)
searchTypestringtrackstracks / artists / labels / charts (mode=search)
genrestringtech-houseOne of 46 Beatport genres (mode=browseByGenre, also narrows topCharts / browseReleases)
chartTypestringlatestlatest / trending / popular (mode=topCharts)
releaseSortstringnewestnewest / oldest / name / trackCount / recentlyEncoded (mode=browseReleases)
labelIdintLabel ID from the label page URL (mode=browseByLabel / browseReleases)
artistIdintArtist ID from the artist page URL (mode=browseByArtist)
startUrlsarrayTrack/chart/artist/label/release/genre URLs (mode=byUrl)
minBpm / maxBpmintTempo range filter (40–200)
keystringMusical key filter (all 24 keys)
containsKeywordstringKeep only titles containing this text
releasedAfterstringYYYY-MM-DD; keep tracks released on/after this date
includeChartTracksbooleanfalseAlso emit the tracks inside each chart (mode=topCharts)
includeReleaseTracksbooleanfalseAlso emit every track inside each release (mode=browseReleases / byUrl)
proxyConfigurationproxyoffOptional — route API + token requests via Apify proxy when your IP range gets 401s (AUTO datacenter is free)
maxItemsint50Hard cap (1–1000)

Example: search Tech House tracks with filters

{
"mode": "search",
"searchQuery": "tech house",
"minBpm": 120,
"maxBpm": 130,
"key": "A Minor",
"containsKeyword": "remix",
"releasedAfter": "2024-01-01"
}

Example: browse a genre

{
"mode": "browseByGenre",
"genre": "trance-main-floor",
"maxItems": 100
}

Example: top DJ charts with tracks

{
"mode": "topCharts",
"chartType": "trending",
"includeChartTracks": true,
"maxItems": 10
}

Example: fetch by URL

{
"mode": "byUrl",
"startUrls": [
"https://www.beatport.com/track/the-kid-original-mix/3731110",
"https://www.beatport.com/chart/amy-dabbs-slightly-involved-chart/811900"
]
}

Example: newest releases in a genre with tracks

{
"mode": "browseReleases",
"genre": "tech-house",
"releaseSort": "newest",
"includeReleaseTracks": true,
"maxItems": 20
}

Data Source

Beatport's public catalog API (api.beatport.com/v4/catalog) powers the beatport.com website. It returns real store data — search results, genre listings, DJ charts, label and artist catalogues — including audio preview samples and artwork hosted on Beatport's CDN (geo-media.beatport.com, geo-samples.beatport.com). Anonymous access tokens are minted from the storefront's own visitor session (the __NEXT_DATA__ payload on the homepage) and rotated automatically when they expire; if the API answers 401, the actor invalidates the token, mints a fresh one and retries once before reporting an environment-level block (see the FAQ). This actor is a third-party tool and is not affiliated with, endorsed by, or sponsored by Beatport.

Use cases

  • DJs & producers — research tracks by BPM and key for harmonic mixing
  • Record pools — track new releases by genre or label weekly
  • Chart monitoring — watch DJ charts and their movement over time
  • Music analytics — price, BPM, key and release-date data for catalog research
  • Archiving — snapshot track metadata with previews and artwork

Limitations

  • Track search is capped by Beatport's API — track search caps at 10 results per page (any per_page value returns 10) and pages become unstable after the first one or two; the actor requests the real 10-page cap, dedupes by track id and stops once the API repeats itself. A search run therefore emits every unique track Beatport offers for the query (typically ~10–20) with no duplicates. Genre, label, artist and release endpoints are unaffected and honor full pages.
  • 401 on some IP ranges — the catalog API can reject an entire network; the actor re-mints its anonymous token and retries once, then finishes cleanly with a status message. Re-running from another network (or with Apify proxy) usually resolves it.
  • Fields are omitted when Beatport omits them — e.g. BPM or ISRC on certain tracks; only the data Beatport actually provides is output.
  • API is rate-limited — the actor pages politely and retries on throttling (429).
  • No audio downloads — only metadata and the short 30–60 second preview URLs that Beatport publishes on every track page.

FAQ

Is a Beatport account required? No. All data is read from the public catalog API used by the beatport.com website, with the same anonymous visitor access the storefront uses.

What are the limits? The catalog API is rate-limited. The actor pages politely, retries on throttling (429), and re-acquires its anonymous access token automatically when it expires.

Why do some fields disappear on some records? Beatport's catalog API omits fields (e.g. BPM or ISRC) on certain tracks. Empty fields are dropped from the record rather than emitted as nulls — only the data Beatport actually provides is output.

Why does track search return at most ~20 records even with a high maxItems? Beatport's search API caps track results at 10 per page (any per_page value returns 10) and its pages are unstable — after the first one or two pages it recycles the same result sets. The actor requests the real 10-page cap, dedupes by track id across pages, and stops once the API repeats itself, so a search run emits every unique track Beatport offers for the query (verified: tech house → 20 unique; café del mar → 10 unique) with no duplicates. Genre, label, artist and release endpoints are unaffected — they honor full pages (verified: 1000/1000 unique on a genre stress run).

How fresh is the data? Live: every run queries Beatport directly. Search, charts and genre listings reflect the storefront at scrape time.

Does this actor download the music? No. It only extracts metadata and the short audio preview URLs (30–60 second samples) that Beatport itself publishes on every track page.

How do I find an artist or label ID? Open the artist/label page on beatport.com — the ID is the trailing number in the URL, e.g. beatport.com/artist/amy-dabbs/406088406088.

Why do I sometimes get 0 records with a 401 status? Beatport's catalog API can return HTTP 401 for an entire network (e.g. some datacenter IP ranges). The actor mints an anonymous token from the beatport.com homepage and, on any 401, invalidates the token, re-mints a fresh one and retries the request once (re-mint is rate-limited with backoff to avoid hammering the visitor-session service). If the 401 persists after the re-mint retry, the network block is environment-level (the whole IP range is rejected) rather than a token problem — the run finishes cleanly with a status message instead of crashing. Re-running from a different network (or with Apify datacenter/residential proxy via the actor's proxy setting) usually resolves it; the same code path succeeds from non-blocked networks.