Discogs Scraper - Vinyl Records, Prices & Price Stats
Pricing
from $1.20 / 1,000 records
Discogs Scraper - Vinyl Records, Prices & Price Stats
Scrape the Discogs catalogue by keyword, filter or link: releases, masters, artists and labels with tracklists, credits, matrix numbers, images and videos. Cross-pressing price statistics: lowest, median, highest and average asking price across an album's pressings, plus want/have demand.
Pricing
from $1.20 / 1,000 records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Scrape the world's largest music database and marketplace: 17M+ releases, every pressing, every label, every artist. Search by keyword or filter, or paste release / master / artist / label links, and get clean structured records with tracklists, credits, matrix numbers, images, videos and live marketplace prices.
The headline feature: price statistics across an album's pressings. One pressing's "lowest price" tells you almost nothing, because the same album exists as dozens of pressings whose prices differ by two orders of magnitude. Turn on Price statistics and every record carries the lowest, median, highest and average asking price across the album's pressings, how many copies are for sale in total, and the want-to-have demand ratio collectors use to judge scarcity.
What you get
- Price statistics across an album's pressings: lowest, median, highest and average asking price, plus how many copies are for sale in total.
- Want-to-have demand ratio, per pressing and per album, the number collectors use to judge scarcity.
- Per-condition valuation, Mint through Poor, with your own free Discogs token.
- Four record kinds: release, master, artist and label.
- Nine typed filters: artist, label, genre, style, format, country, year, catalog number and barcode. They work with a keyword, and on their own.
- Full sort control, including most wanted and most collected.
- Twelve currencies for every price.
- Incremental change tracking and resume, for scheduled monitoring.
- Every column always present,
nullwhen a run does not fill it, so repeated runs join cleanly. - A blocked run fails loudly instead of quietly returning "0 results".
Data you get
Every record carries kind (release, master, artist or label),
recordId, entityId, url, sourceMode, searchQuery, detailLoaded,
priceStatsLoaded and scrapedAt. Columns that a given run does not fill are
present as null, never dropped, so repeated runs join cleanly in a warehouse.
Release and master fields
title, artistName, artistNames, artistsSort, artists, extraArtists
(producers, engineers, writers, with their roles), year, released,
releasedFormatted, country, genres, styles, formats,
formatDescriptions, formatQuantity, labels, labelNames,
catalogNumber, barcodes, identifiers (matrix / runout, rights society,
label code), companies (pressing plant, publisher, copyright), series,
masterId, masterUrl, mainReleaseId, mostRecentReleaseId, tracklist,
trackCount, images, imageCount, coverImageUrl, thumbnailUrl,
videos, videoCount, notes, estimatedWeight, dataQuality, status,
dateAdded, dateChanged, submitterUsername, contributorUsernames,
isOffensive.
Marketplace fields
numForSale, lowestPrice, currency, blockedFromSale, marketplaceUrl,
haveCount, wantCount, wantToHaveRatio, ratingAverage, ratingCount.
Price statistics (the differentiator, with Price statistics on)
priceLowest, priceMedian, priceHighest, priceAverage, priceCurrency,
priceVersionsSampled, priceVersionsPriced, masterVersionsTotal,
totalForSaleAcrossVersions, masterHaveCount, masterWantCount,
masterWantToHaveRatio.
Pressings with nothing for sale are counted in priceVersionsSampled but never
priced as 0, so a dead pressing cannot drag the statistics down.
Per-condition valuation (only with your own Discogs token)
priceSuggestionMint, priceSuggestionNearMint, priceSuggestionVeryGoodPlus,
priceSuggestionVeryGood, priceSuggestionGoodPlus, priceSuggestionGood,
priceSuggestionFair, priceSuggestionPoor, priceSuggestionCurrency,
priceSuggestionsRaw.
Artist fields
name, realName, profile, nameVariations, aliases, members,
groups, externalUrls (official site and socials), images, releasesUrl,
contactEmails, contactPhones.
Label fields
name, profile, contactInfo, contactEmails, contactPhones,
parentLabelId, parentLabelName, subLabels, subLabelCount,
externalUrls, images, releasesUrl.
How to use
- Pick a mode.
searchruns keyword and filter searches;urlreads the exact pages you paste. - Search mode: add
searchQueries, choosesearchType, and narrow with any ofartist,label,genre,style,format,country,year,catalogNumber,barcode. Filters work on their own with no keyword, so "every Blue Note vinyl pressed in Japan in 1963" is a valid run with no search box at all. Order the results withsortByandsortOrder. - URL mode: paste links into
startUrls(or theurlsalias). Full links,/release/249504paths, ther249504/m13814/a72872/l895shorthand and plain release ids all work, and all four kinds can be mixed. - Set
maxItems(the run's cap, default 20). LeavemaxPagesempty for no page limit. - Turn on
priceStatsfor the price distribution, andmaxPriceVersionsto choose how deeply to sample. Turn onfetchDetailsfor tracklists, credits and images in search mode. Choose yourcurrency.
Input parameters
| Field | What it does |
|---|---|
mode | search or url. |
searchQueries | Search mode. Keywords, each searched separately. |
searchType | Search mode. release, master, artist, label or all. |
artist | Search mode filter. |
label | Search mode filter. |
genre | Search mode filter, for example Rock, Jazz, Electronic. |
style | Search mode filter, for example Grunge, Hard Bop. |
format | Search mode filter, for example Vinyl, LP, CD. |
country | Search mode filter, for example UK, Japan. |
year | Search mode filter, a year or a 1990-1995 range. |
catalogNumber | Search mode filter on the label catalog number. |
barcode | Search mode filter on the barcode / UPC / EAN. |
sortBy | Search mode. relevance, year, title, format, label, catno, country, have (most collected) or want (most wanted). |
sortOrder | Search mode. desc or asc. |
startUrls | URL mode. Catalogue links, paths or ids. |
urls | Alias for startUrls. |
maxItems | The run's cap. Default 20, 0 for no limit. |
maxPages | Search mode. Empty means no page limit. |
fetchDetails | Search mode: read each result's full record. URL mode always does. |
priceStats | Build the price distribution across the album's pressings. |
maxPriceVersions | How many pressings to price per album (default 5, max 25). |
currency | One of 12 currencies for every price. |
resumeFromRunId | Continue one interrupted run without re-charging for records already collected. |
incrementalMode | Return only what changed since the last run of the same setup. |
stateKey | Name a monitoring campaign, or deliberately share state. |
emitUnchanged | Also return (and bill) UNCHANGED rows. |
emitExpired | Also return (and bill) EXPIRED rows. |
mcpConnectors | Send results into your apps, see below. |
notionParentPageUrl | Parent page for the Notion export. |
maxNotifyListings | Cap on records written to each connector. |
proxyConfiguration | Apify Proxy settings. The default needs no configuration. |
discogsToken | Optional. Your own free Discogs token, see below. |
Output example
Field values below are illustrative, not a real listing.
{"kind": "release","recordId": "release:249504","entityId": 249504,"sourceMode": "search","searchQuery": "example album","title": "Example Album","artistName": "Example Artist","year": "1991","country": "UK","labelNames": ["Example Records"],"catalogNumber": "EX 1234","barcodes": ["0000000000000"],"genres": ["Rock"],"styles": ["Grunge"],"formatDescriptions": ["Vinyl", "LP", "Album"],"numForSale": 122,"lowestPrice": 10.0,"currency": "USD","priceLowest": 10.0,"priceMedian": 43.17,"priceHighest": 276.63,"priceAverage": 115.77,"priceVersionsSampled": 5,"priceVersionsPriced": 5,"masterVersionsTotal": 882,"totalForSaleAcrossVersions": 13,"priceCurrency": "USD","haveCount": 4107,"wantCount": 585,"wantToHaveRatio": 0.1424,"masterWantToHaveRatio": 0.1429,"ratingAverage": 3.86,"ratingCount": 241,"trackCount": 2,"url": "https://www.discogs.com/release/249504","marketplaceUrl": "https://www.discogs.com/sell/release/249504","detailLoaded": true,"priceStatsLoaded": true,"scrapedAt": "2026-09-04T12:00:00+00:00","changeType": "NEW"}
Recurring monitoring: track a price over time
Turn on incrementalMode and schedule the run. The first run returns everything
as NEW; later runs return only what moved. Every record carries changeType
(NEW, UPDATED, REAPPEARED, UNCHANGED or EXPIRED), changedFields,
firstSeenAt and lastSeenAt, so a price move shows up as
"changeType": "UPDATED", "changedFields": ["lowestPrice", "priceMedian"].
State is kept separately per keyword, entity kind, filter, sort and lookup
setup, so two campaigns never mix. UNCHANGED and EXPIRED rows are off by
default because returning them bills extra rows you already have. EXPIRED is
only produced after a run has fully scanned the tracked search: never when
maxItems or maxPages capped it, and never when resumeFromRunId was used,
so a partial scan can never tombstone records that are still there.
To continue ONE interrupted run instead, use resumeFromRunId with the previous
run or dataset id; records already collected there are skipped and not charged
again.
Send results into your apps (MCP connectors)
Set mcpConnectors to one or more Model Context Protocol connectors you have
authorized under Apify, Settings, API & Integrations. Notion gets a rich page
per record (set notionParentPageUrl); other connectors get a best-effort
write or digest. maxNotifyListings caps how many records each connector
receives. This never changes the dataset output, and a connector failure never
fails the run.
No account needed
Everything this actor returns is data Discogs publishes openly. No Discogs account, no login, no cookies.
Adding your own free discogsToken (Discogs, Settings, Developers) is
optional and does two things: large pulls finish faster, and it unlocks the
per-condition valuation fields (priceSuggestionMint through
priceSuggestionPoor) that Discogs shows only to a signed-in member. Without a
token those fields are present and null.
Connection and reliability
The default Apify Proxy setting works on every plan, including the free tier, and needs no configuration.
Discogs limits how fast any one client may read, and the actor stays inside that limit by design rather than by being refused and retrying. If Discogs does slow a run down, the actor waits it out instead of hammering.
A run that cannot read Discogs at all fails loudly with a connection message. It never reports a block as "0 results found", which would be indistinguishable from a genuinely empty search, and in incremental mode would wrongly mark every tracked record as gone.
Billing
You are charged one Record event per row in the dataset, plus one Detail enrichment event per record whose optional extras succeeded (the full record in search mode, or the price statistics for either mode). Both optional toggles are off by default, so a default run is charged for records only. An extra that fails still ships the record, uncharged. In URL mode the full record is the base record, not an extra, and is never charged.
Terms note
This actor returns only catalogue and marketplace data that Discogs already
publishes openly. Contact details in contactEmails and
contactPhones come from a label's or artist's own public profile block, where
they published them themselves. Please respect Discogs' terms of service and
applicable data protection law when you use the output.