Discogs Scraper · Releases, Artists, Labels & Marketplace
Pricing
from $2.10 / 1,000 release returneds
Discogs Scraper · Releases, Artists, Labels & Marketplace
Discogs Scraper (Discogs.com scraper) to scrape vinyl records, CDs, music releases, artists, and labels. Extract marketplace prices, collector demand, formats, barcodes, and tracklists into CSV or JSON.
Pricing
from $2.10 / 1,000 release returneds
Rating
0.0
(0)
Developer
Tarek Etman
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
an hour ago
Last modified
Categories
Share

Discogs Scraper · Releases, Artists, Labels & Marketplace
Discogs Scraper (Discogs.com scraper) extracts vinyl records, CDs, music releases, artists, labels, and marketplace data from Discogs. Search Discogs by keyword, artist, label, genre, style, year, or format and export structured datasets to JSON, CSV, or Excel.
Maintained by reapX. Every row cites the Apify run that produced it — nothing is inferred, modelled or filled in, and a field absent from the source is absent from the row. The extracted archive for this source is browsable at reapx.dev/data/discogs-scraper/ and mirrored as an open dataset on Hugging Face and Kaggle. Questions: reapxdev@proton.me
Extract release titles, catalogue numbers, formats, barcodes, tracklists, plus live Discogs marketplace prices, seller stats, collector have/want counts, and ratings. Fast HTTP scraper with no login or API key required.
Discogs Scraper features
- Discogs Music Database & Vinyl Scraper: Extract release details, master releases, discographies, and catalogue numbers.
- Discogs Marketplace & Price Mining: Get live lowest price, number of items for sale, and collector demand metrics (have vs want counts).
- Zero Setup: Reads Discogs public endpoints directly over HTTP with fast execution and minimal compute cost.
What you get per release
| Field | |
|---|---|
handle · artistName · artistId · artistUrl | who made it |
releaseId · releaseTitle · year · released · country | which pressing |
labels · catalogNumbers · formats | how it was issued |
genres · styles · trackCount · masterId | what it is |
communityHave · communityWant | ownership and demand |
ratingAverage · ratingCount | how it is rated |
numForSale · lowestPriceUsd | the live marketplace |
dataQuality · releaseUrl · retrievedAt |
Price a record collection
Search by artist, label or catalogue number and read numForSale with lowestPriceUsd.
Both are read live from the Discogs marketplace during the run, so a scheduled daily run
gives you a price series per releaseId with no manual checking.
Find what collectors want and cannot get
communityWant divided by communityHave is the ratio the community reads as demand. Pull
a genre or a label's catalogue, sort on it, and the scarce pressings surface without any
invented scoring.
Pull a whole discography or label catalogue
Put numeric Discogs ids into Discogs artist ids or Discogs label ids - the number in
a discogs.com/artist/… or discogs.com/label/… URL - and the run returns every release
under them instead of searching.
Rate limiting, honestly
Discogs allows 25 requests a minute to an anonymous caller. This actor is paced under that ceiling and the setting is capped there, so a large run is slow by design rather than throttled halfway through. Turning off Include marketplace and rating data drops it to one request per hundred releases when you only need the catalogue.
Input configuration
Every field is optional. The prefilled values below are what runs if you press Start without changing anything.
What to search
Combine any of these. Leave them all empty to list Electronic releases.
| Field | Type | Accepts | What it does |
|---|---|---|---|
query | string | free text | Free text matched across artist, release title, label and catalogue number. |
genre | string | free text | A Discogs top-level genre - Electronic, Rock, Jazz, Hip Hop, Funk / Soul, Classical, Reggae, Pop, Folk, World, & Country, Latin, Blues, Non-Music, Stage & Screen, Brass & Military, Children's. Prefilled with "Electronic". |
style | string | free text | A Discogs style, which is finer than a genre - Techno, House, Ambient, Drum n Bass, Hard Bop, Shoegaze, Bossa Nova. |
label | string | free text | Restrict to one record label by name, for example Warp Records, Blue Note, Motown. |
country | string | free text | Country of release, for example UK, US, Germany, Japan. |
format | string | free text | Physical or digital format - Vinyl, CD, Cassette, File, Box Set. |
year | string | free text | A single release year, for example 1994. |
Or pull a whole discography or catalogue
Given here, these replace the search above.
| Field | Type | Accepts | What it does |
|---|---|---|---|
artistIds | list | one value per line | Pull complete discographies instead of searching. One numeric Discogs artist id per line - the number in a discogs.com/artist/ URL. |
labelIds | list | one value per line | One numeric Discogs label id per line - the number in a discogs.com/label/ URL. Returns that label's whole catalogue. |
Filters
Applied after each release is read. Both need marketplace data, below.
| Field | Type | Accepts | What it does |
|---|---|---|---|
minCommunityHave | integer | 0 to 1000000 | Keep only releases at least this many Discogs users have in their collection - the simplest measure of how widely a pressing circulated. |
minForSale | integer | 0 to 100000 | Keep only releases with at least this many copies currently listed in the Discogs marketplace. |
Output
Row depth, volume and politeness.
| Field | Type | Accepts | What it does |
|---|---|---|---|
includeMarketData | true/false | checkbox | Read each release's full record for copies for sale, lowest price, star rating, tracklist and exact release date. Turn off for a faster, shallower run - the artist, label and catalogue number still come back. Prefilled with true. |
maxReleases | integer | 1 to 2000 | Hard ceiling on the rows this run produces, and therefore on what it costs. You are charged per release returned. Prefilled with 25. |
requestsPerMinute | integer | 1 to 25 | Discogs allows 25 requests a minute to an anonymous caller and this is capped there. Lower it if you see the API refusing requests. Prefilled with 22. |
Pricing
Pay per event. The primary event is Release returned (release-returned), charged at $0.003 per event on the free plan, falling to $0.0015 on the highest tier.
One Discogs release delivered as a complete row, including artist, label, catalogue number, collector counts and live marketplace figures. Blocked sources and empty result sets are never charged.
Other charged events: apify-actor-start (Actor Start).
Minimum charge cap per run: $0.05.
Tiered discounts apply automatically on every paid Apify plan. Platform usage is absorbed by the Actor, so the per-event price is the whole price.
Usage examples
The prefilled run, which is what Start does with nothing changed
{"genre": "Electronic","includeMarketData": true,"maxReleases": 25,"requestsPerMinute": 22}
Filter by search query
{"genre": "Electronic","includeMarketData": true,"maxReleases": 25,"requestsPerMinute": 22,"query": "Aphex Twin"}
Filter by genre
{"genre": "Jazz","includeMarketData": true,"maxReleases": 25,"requestsPerMinute": 22}
Filter by style
{"genre": "Electronic","includeMarketData": true,"maxReleases": 25,"requestsPerMinute": 22,"style": "Techno"}
Filter by label name
{"genre": "Electronic","includeMarketData": true,"maxReleases": 25,"requestsPerMinute": 22,"label": "Warp Records"}
Output example
One row, exactly as the actor wrote it to the dataset:
{"handle": "Doon Kanda","artistName": "Doon Kanda","artistId": 5512216,"artistUrl": "https://www.discogs.com/artist/5512216","releaseId": "12421524","releaseTitle": "Luna EP","year": 2018,"released": "2018-08-24","country": "Europe","genres": ["Electronic"],"styles": ["Experimental","IDM"],"labels": ["Hyperdub"],"catalogNumbers": ["HDB116"],"formats": ["Vinyl"],"trackCount": 7,"masterId": "1589103","communityHave": 304,"communityWant": 146}
That row carries 25 fields in total; 18 are shown.
Fields on every row
| Field | Type | What it is |
|---|---|---|
handle | string | The release's primary artist, exactly as Discogs names them. Discogs disambiguates acts that share a name with a numeric suffix, so this addresses one act uniquely and is stable across runs. |
artistName | string | The primary credited artist on the release. |
artistId | integer | The artist's numeric id, usable to pull their whole discography. |
artistUrl | string | The artist's public page on discogs.com. |
releaseId | string | The release's permanent numeric id on Discogs. |
releaseTitle | string | The title of this particular pressing. |
year | integer | The year this pressing was released. |
released | string | The exact release date where Discogs records one. |
country | string | Where this pressing was released. |
genres | list | Discogs' top-level genres for the release. |
styles | list | Discogs' finer style tags for the release. |
labels | list | Every label credited on this pressing. |
catalogNumbers | list | The label catalogue numbers printed on this pressing. |
formats | list | The physical or digital formats this pressing came in. |
trackCount | integer | How many tracks the release's tracklist holds. |
masterId | string | The id of the master record grouping every pressing of this work, where one exists. |
communityHave | integer | How many Discogs users have this pressing in their collection. |
communityWant | integer | How many Discogs users have this pressing on their wantlist. The want-to-have ratio is the field collectors read as demand. |
ratingAverage | number | Average user rating out of 5. |
ratingCount | integer | How many users rated this pressing. |
numForSale | integer | How many copies are listed in the Discogs marketplace right now. |
lowestPriceUsd | number | The cheapest copy currently listed in the marketplace. |
dataQuality | string | Discogs' own label for how well vetted this entry is. |
releaseUrl | string | The release's public page on discogs.com. |
retrievedAt | string | When this row was read from Discogs, in UTC. |
3 named dataset views ship with it: Releases, Marketplace, Catalogue. They drive the Output tab in Console and the Output block on the Actor's .md page.
FAQ
Does it need a Discogs account or token? No. Every endpoint it uses answers an unauthenticated caller that sends a User-Agent.
Why is handle the artist and not the release? Because it is what addresses a stable
thing across runs. Discogs disambiguates two acts of the same name itself, so the artist
name identifies one act, and grouping releases under it is how a discography reads.
What is the difference between a release and a master? A master groups every pressing
of one work; a release is one pressing, with its own country, format, catalogue number and
marketplace. This returns releases, and carries masterId so you can group them yourself.
Are the marketplace figures live? Yes - numForSale and lowestPriceUsd are read from
the release record during the run and change through the day.
Unofficial - not affiliated with Discogs. Collects public data only. reapx. Contact reapxdev@proton.me.
The full published archive
- discogs scraper archive — every entity this Actor has observed
- All reapx datasets — 20 sources, tens of thousands of pages
- llms.txt · feed.json · feed.xml — the machine-readable index, for agents
Each archive page carries Dataset JSON-LD, a canonical URL and the identifiers used, so an agent can resolve an entity without running anything. Nothing on those pages is estimated or modelled.
🧪 Example input
A real, runnable configuration — this is an actual input this Actor has run with.
{"label": "Warp Records","includeMarketData": true,"requestsPerMinute": 22,"maxReleases": 200}
📄 Sample output
One real row from a real run of this Actor, unedited.
{"handle": "Prefuse 73","artistName": "Prefuse 73","artistId": 3722,"artistUrl": "https://www.discogs.com/artist/3722","releaseId": "10326565","releaseTitle": "Vocal Studies + Uprock Narratives","year": 2001,"released": "2001","country": "US","genres": ["Electronic","Hip Hop"],"styles": ["Glitch","Breaks","IDM","Downtempo","Experimental","Glitch Hop"],"labels": ["Warp Records"],"catalogNumbers": ["WARP ADVCD 83","warp advcd 83"],"formats": ["CD"],"trackCount": 16,"masterId": "51105","communityHave": 7,"communityWant": 38,"ratingAverage": 0,"ratingCount": 0,"numForSale": 3,"lowestPriceUsd": 5.5,"dataQuality": "Needs Vote","releaseUrl": "https://www.discogs.com/release/10326565","retrievedAt": "2026-08-03T12:32:06Z"}
How it works
- You set the filters below, or none at all - every field is optional.
- The Actor calls the public api.discogs.com API directly over HTTP. There is no key to obtain, no login and no headless browser, so a run is fast and cannot break on a UI change.
- It pages through the results at the rate the source asks for, honouring
Retry-Afterrather than retrying into a harder block. - Every row is pushed to the dataset as it is built - never buffered to the end. A run that hits its time limit still returns everything it collected.
- You are charged
release-returnedat $0.003 per row, and nothing for Apify platform usage. The maximum-results field is therefore your cost cap, and Apify Store discounts apply on top.
💬 Your feedback
Found a bug, or need a field this does not return yet? Open an issue on the Actor's Issues tab, or write to reapxdev@proton.me. Bugs get fixed and reasonable field requests get added.
⚠️ Run outcomes and error handling
This Actor reports what happened in the run's status message, and it always keeps whatever it collected. These are the outcomes you can get and what each one means.
| Outcome | What it means |
|---|---|
| Success | Rows were returned and you were charged release-returned at $0.003 per row. |
| No matches | The source returned nothing for your filters. Nothing is charged. Widen the date window or drop a filter. |
| Partial - time limit | The run reached its time limit. It stops collecting about 45 seconds early, pushes what it has and finishes SUCCEEDED with a status message saying how far it got. The dataset is correct as far as it went; it is never truncated silently. |
| Partial - source refused | The source rate-limited or refused some requests. The affected items are skipped and named in the log, and everything already collected is still pushed. A block never discards a run's work. |
What is guaranteed either way
- Every row is pushed as it is built, not buffered to the end of the run. Anything that buffers output loses everything to a timeout, a block or a migration; this does not.
Retry-Afteris respected. When the source asks for a pause, the Actor waits the time it asked for instead of retrying into a harder block.- Requests go through Apify's datacenter proxy group, so concurrent runs do not share a single egress IP.
- A field absent from the source is absent from the row. Nothing is inferred, modelled or filled in to make a row look complete.
🧭 Ready-made configurations
These are saved, published configurations of this exact Actor. Open one and run it as it is, or copy its input as a starting point - each link is a live page with the full input and its output schema.
There are 50 of these in total, all listed on the Actor's Examples tab.