Discogs Scraper - Vinyl Records, Prices & Price Stats avatar

Discogs Scraper - Vinyl Records, Prices & Price Stats

Pricing

from $1.20 / 1,000 records

Go to Apify Store
Discogs Scraper - Vinyl Records, Prices & Price Stats

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

Abot API

Maintained by Community

Actor 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, null when 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

  1. Pick a mode. search runs keyword and filter searches; url reads the exact pages you paste.
  2. Search mode: add searchQueries, choose searchType, and narrow with any of artist, 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 with sortBy and sortOrder.
  3. URL mode: paste links into startUrls (or the urls alias). Full links, /release/249504 paths, the r249504 / m13814 / a72872 / l895 shorthand and plain release ids all work, and all four kinds can be mixed.
  4. Set maxItems (the run's cap, default 20). Leave maxPages empty for no page limit.
  5. Turn on priceStats for the price distribution, and maxPriceVersions to choose how deeply to sample. Turn on fetchDetails for tracklists, credits and images in search mode. Choose your currency.

Input parameters

FieldWhat it does
modesearch or url.
searchQueriesSearch mode. Keywords, each searched separately.
searchTypeSearch mode. release, master, artist, label or all.
artistSearch mode filter.
labelSearch mode filter.
genreSearch mode filter, for example Rock, Jazz, Electronic.
styleSearch mode filter, for example Grunge, Hard Bop.
formatSearch mode filter, for example Vinyl, LP, CD.
countrySearch mode filter, for example UK, Japan.
yearSearch mode filter, a year or a 1990-1995 range.
catalogNumberSearch mode filter on the label catalog number.
barcodeSearch mode filter on the barcode / UPC / EAN.
sortBySearch mode. relevance, year, title, format, label, catno, country, have (most collected) or want (most wanted).
sortOrderSearch mode. desc or asc.
startUrlsURL mode. Catalogue links, paths or ids.
urlsAlias for startUrls.
maxItemsThe run's cap. Default 20, 0 for no limit.
maxPagesSearch mode. Empty means no page limit.
fetchDetailsSearch mode: read each result's full record. URL mode always does.
priceStatsBuild the price distribution across the album's pressings.
maxPriceVersionsHow many pressings to price per album (default 5, max 25).
currencyOne of 12 currencies for every price.
resumeFromRunIdContinue one interrupted run without re-charging for records already collected.
incrementalModeReturn only what changed since the last run of the same setup.
stateKeyName a monitoring campaign, or deliberately share state.
emitUnchangedAlso return (and bill) UNCHANGED rows.
emitExpiredAlso return (and bill) EXPIRED rows.
mcpConnectorsSend results into your apps, see below.
notionParentPageUrlParent page for the Notion export.
maxNotifyListingsCap on records written to each connector.
proxyConfigurationApify Proxy settings. The default needs no configuration.
discogsTokenOptional. 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.