Discogs Scraper icon

Discogs Scraper

Scrape the Discogs catalogue by keyword, filter or link: releases, masters, artists and labels with tracklists, credits, matrix numbers, images and…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Discogs Scraper at a glance

Discogs Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes kind, recordid, entityid, sourcemode and searchquery, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.50 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce
Pricing
$2.50 per 1,000 results (Free plan), from $1.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
37 options

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.

What Discogs Scraper can do

  • Cross-pressing price statistics. The same album can exist as dozens of pressings with prices that differ by an order of magnitude or more. Turn on Price statistics and a record carries the lowest, median, highest and average asking price sampled across the album's pressings, not just one pressing's number.
  • Four record kinds. Release (a specific pressing), master (an album across every pressing), artist and label, all sharing one flat schema.
  • Nine search filters. Artist, label, genre, style, format, country, year, catalog number and barcode. They combine with a keyword, and they also work completely on their own.
  • Full sort control. Order results by relevance, year, title, format, label, catalog number, country, most collected or most wanted, the same sort keys the catalogue itself offers.
  • No account required. Every route this actor reads is the public, anonymous catalogue API. Adding your own free Discogs token is optional and only speeds up large pulls and unlocks per-condition valuation.
  • Every column always present. Fields a run does not fill ship as null rather than being dropped, so repeated runs join cleanly in a warehouse or spreadsheet.

Choose what to collect

These inputs let you configure Discogs Scraper - Vinyl Records, Prices & Price Stats. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredSearch runs keyword and filter searches across the Discogs catalogue. URL mode reads only the links you paste: single releases, masters, artists and labels, plus version, release and search lists walked page by page.

Choices: search, url

searchQueriesarraySearch mode only, ignored in URL mode. One or more keywords, for example "nirvana nevermind" or "blue note 1568". Each keyword is searched separately and gets an equal share of Max records. Leave empty to run a filter only search using the filters below.
searchTypestringSearch mode only. Which kind of catalogue entry the search returns. Releases are individual pressings and are the only kind with marketplace prices. Masters are albums across all their pressings.

Choices: release, master, artist, label, all

artiststringSearch mode only. Restrict results to this artist, for example "Nirvana". Works with or without a keyword.
labelstringSearch mode only. Restrict results to this record label, for example "Sub Pop" or "Blue Note".
genrestringSearch mode only. Restrict results to one Discogs genre, for example "Rock", "Jazz", "Electronic", "Hip Hop", "Funk / Soul", "Classical".
stylestringSearch mode only. Restrict results to one Discogs style, the finer grained tag under a genre, for example "Grunge", "Hard Bop", "Deep House", "Post Punk".
Show 30 more inputs
More input fields
InputWhat it controls
formatstringSearch mode only. Restrict results to one physical or digital format, for example "Vinyl", "LP", "CD", "Cassette", "7\"", "Album", "File".
countrystringSearch mode only. Restrict results to the country of the pressing, for example "UK", "US", "Japan", "Germany", "Europe".
yearstringSearch mode only. Restrict results to a release year, for example "1991". A range such as "1990-1995" is also accepted by Discogs.
catalogNumberstringSearch mode only. Restrict results to a label catalog number, for example "DGC2-4425" or "BLP 1568". This is the number printed on the spine and label.
barcodestringSearch mode only. Restrict results to a barcode or UPC/EAN, for example "720642442517". The fastest way to identify an exact pressing you are holding.
sortBystringSearch mode only. Discogs applies this order to the search itself, so it changes which results the record budget keeps. "Most wanted" and "Most collected" are the two orders collectors use to find the desirable pressings first.

Choices: relevance, year, title, format, label, catno, country, have, want

sortOrderstringSearch mode only. Direction for the sort above. Ignored when Sort results by is set to best match.

Choices: desc, asc

startUrlsarrayURL mode only, ignored in search mode. Paste Discogs release, master, artist or label links (https://www.discogs.com/release/249504-... , /master/13814, /artist/72872, /label/895), api.discogs.com resource links, a master's versions list (/masters/13814/versions), an artist's or label's releases list (/artists/72872/releases, /labels/895/releases) or a keyword search link (/database/search?q=nirvana&type=release, /search/?q=nirvana). List and search links are walked page by page up to Max records. Bare ids in the r249504 / m13814 / a72872 / l895 shorthand are accepted too, and a plain number is read as a release id. Left untouched, this field scrapes one example of each link type.
urlsarrayAlias for Catalogue links or ids, accepted under the name other Apify actors use for URL mode. Entries from both fields are read in order and de-duplicated.
maxItemsintegerStop after this many records across the whole run. This is the run's cap. Use 0 for no limit, the run then stops when the searches run out of results.
maxPagesintegerSearch mode only. Leave empty for no page limit, the run then stops at Max records or when Discogs runs out of results. Each page holds up to 100 records. Whatever you enter, a hard cap of 10000 pages per keyword or list link is enforced in code.
fetchDetailsbooleanSearch mode: off by default, because search results already carry title, artist, year, country, format, labels, genres, styles, barcode and the have/want counts. Turn on to also read every result's full catalogue entry (tracklist, credits, images, videos, identifiers, matrix numbers, notes, rating) plus its live marketplace price. Each result read this way adds one Detail enrichment event. In URL mode a single release, master, artist or label link is always read in full and never charged for it, so this toggle changes nothing for those links; list links (versions or releases) and search links behave like search mode, with one Detail enrichment event per enriched row.
priceStatsbooleanOff by default. The headline feature: instead of one pressing's lowest asking price, this walks the album's other pressings and returns the lowest, median, highest and average asking price across them, how many copies are for sale in total, and the want to have demand ratio for the whole album. Applies to releases and masters in both modes. Costs a handful of extra lookups per record and adds one Detail enrichment event.
maxPriceVersionsintegerOnly used when Price statistics is on. How many of an album's pressings to ask the marketplace about, taken in descending order of how many collectors own them, so the sample follows the pressings with a live market. Higher values give a better distribution and cost more lookups per record.
currencystringCurrency for every marketplace price and price statistic. Discogs converts from the seller's own currency.

Choices: USD, GBP, EUR, CAD, AUD, JPY, CHF, MXN, BRL, NZD, SEK, ZAR

resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large pull without returning records already collected there.
incrementalModebooleanTurn this on for daily or recurring monitoring, for example to watch an album's price statistics move. The first run returns every matching record as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each keyword, entity kind, filter, sort and lookup setup; use State key to name or deliberately share a monitoring campaign.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search, filter and lookup settings.
emitUnchangedbooleanOff by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.
emitExpiredbooleanOff by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search: not when Max records capped it, not when Max result pages capped it, and not when Resume was used. This returns, and bills, extra rows.
ignoreFieldsForChangesarrayOptional. Field names to leave out when deciding whether a record changed, for example priceMedian or numForSale if you do not want a price statistic wobble to mark a record UPDATED. The fields are still returned on every row. scrapedAt and the derived alias columns (_index, thumb, community, the _flat columns, format, catno, barcode and the snake_case copies) are ignored by default. Changing this list on a campaign that already has saved state can mark records UNCHANGED or UPDATED differently on the next run.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page per record export; other connectors get a best effort write or digest. Leave empty to skip; never changes the dataset output.
notionParentPageUrlstringURL or id of the Notion page under which record pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on records written to each connector per run. Does not affect the dataset.
queryarrayAlias of searchQueries. Alias accepted so an input written for another Discogs scraper runs unchanged; the native field wins when both are set.
typestringAlias of searchType (release, master, artist, label, all). Alias accepted so an input written for another Discogs scraper runs unchanged; the native field wins when both are set.
maxResultsintegerAlias of maxItems (no minimum of 20). Alias accepted so an input written for another Discogs scraper runs unchanged; the native field wins when both are set.
getDetailsbooleanAlias of fetchDetails. Alias accepted so an input written for another Discogs scraper runs unchanged; the native field wins when both are set.
yearMinintegerEarliest release year (with yearMax builds the year range). Alias accepted so an input written for another Discogs scraper runs unchanged; the native field wins when both are set.
yearMaxintegerLatest release year (with yearMin builds the year range). Alias accepted so an input written for another Discogs scraper runs unchanged; the native field wins when both are set.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

kindKind
recordIdrecordId
entityIdentityId
sourceModesourceMode
searchQuerysearchQuery
titleTitle
namename
artistNameArtist
artistNamesartistNames
artistsSortartistsSort
yearYear
releasedreleased
Show 116 more fields
releasedFormattedreleasedFormatted
countryCountry
primaryGenreGenre
primaryStyleprimaryStyle
primaryFormatFormat
primaryLabelprimaryLabel
genresgenres
stylesstyles
formatDescriptionsformatDescriptions
formatsformats
formatQuantityformatQuantity
labelNameslabelNames
labelslabels
catalogNumberCat #
barcodesbarcodes
identifiersidentifiers
companiescompanies
seriesseries
masterIdmasterId
masterUrlmasterUrl
mainReleaseIdmainReleaseId
mostRecentReleaseIdmostRecentReleaseId
numForSaleFor sale
lowestPriceLowest price
currencycurrency
blockedFromSaleblockedFromSale
marketplaceUrlMarketplace (link)
priceLowestAlbum low
priceMedianAlbum median
priceHighestAlbum high
priceAverageAlbum average
priceCurrencypriceCurrency
priceVersionsSampledPressings priced
priceVersionsPricedpriceVersionsPriced
masterVersionsTotalmasterVersionsTotal
totalForSaleAcrossVersionstotalForSaleAcrossVersions
haveCountHave
wantCountWant
wantToHaveRatioWant per have
masterHaveCountmasterHaveCount
masterWantCountmasterWantCount
masterWantToHaveRatiomasterWantToHaveRatio
ratingAverageRating
ratingCountratingCount
priceSuggestionMintpriceSuggestionMint
priceSuggestionNearMintpriceSuggestionNearMint
priceSuggestionVeryGoodPluspriceSuggestionVeryGoodPlus
priceSuggestionVeryGoodpriceSuggestionVeryGood
priceSuggestionGoodPluspriceSuggestionGoodPlus
priceSuggestionGoodpriceSuggestionGood
priceSuggestionFairpriceSuggestionFair
priceSuggestionPoorpriceSuggestionPoor
priceSuggestionCurrencypriceSuggestionCurrency
tracklisttracklist
trackCounttrackCount
artistsartists
extraArtistsextraArtists
imagesimages
imageCountimageCount
coverImageUrlCover (image)
thumbnailUrlthumbnailUrl
videosvideos
videoCountvideoCount
notesnotes
estimatedWeightestimatedWeight
dataQualitydataQuality
statusstatus
dateAddeddateAdded
dateChangeddateChanged
submitterUsernamesubmitterUsername
contributorUsernamescontributorUsernames
isOffensiveisOffensive
realNamerealName
profileprofile
nameVariationsnameVariations
aliasesaliases
membersmembers
groupsgroups
externalUrlsexternalUrls
releasesUrlreleasesUrl
contactInfocontactInfo
contactEmailscontactEmails
contactPhonescontactPhones
parentLabelIdparentLabelId
parentLabelNameparentLabelName
subLabelssubLabels
subLabelCountsubLabelCount
urlDiscogs page (link)
resourceUrlresourceUrl
detailLoadedFull record read (boolean)
priceStatsLoadedPrice stats read (boolean)
scrapedAtScraped at (date)
changeTypeChange type (incremental mode)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
_index_index
thumbthumb
communitycommunity
artists_flatartists_flat
labels_flatlabels_flat
genres_flatgenres_flat
styles_flatstyles_flat
identifiers_flatidentifiers_flat
companies_flatcompanies_flat
tracklist_flattracklist_flat
videos_flatvideos_flat
extraartists_flatextraartists_flat
formatformat
catnocatno
barcodebarcode
released_formattedreleased_formatted
num_for_salenum_for_sale
lowest_pricelowest_price
data_qualitydata_quality
estimated_weightestimated_weight

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "kind": "release",
  "recordId": "release:1000001",
  "entityId": 1000001,
  "sourceMode": "search",
  "searchQuery": "sample album",
  "title": "Sample Album",
  "artistName": "Sample Artist",
  "artistNames": [
    "Sample Artist"
  ],
  "year": "1991",
  "country": "UK",
  "primaryGenre": "Rock",
  "primaryStyle": "Grunge",
  "primaryFormat": "Vinyl",
  "primaryLabel": "Sample Records",
  "labelNames": [
    "Sample Records"
  ],
  "catalogNumber": "SR-1234",
  "barcodes": [
    "0000000000000"
  ],
  "genres": [
    "Rock"
  ],
  "styles": [
    "Grunge"
  ],
  "formatDescriptions": [
    "Vinyl",
    "LP",
    "Album"
  ],
  "numForSale": 42,
  "lowestPrice": 12.5,
  "currency": "USD",
  "blockedFromSale": false,
  "priceLowest": 8,
  "priceMedian": 24.99,
  "priceHighest": 89,
  "priceAverage": 30.15,
  "priceCurrency": "USD",
  "priceVersionsSampled": 5,
  "priceVersionsPriced": 5,
  "masterVersionsTotal": 120,
  "totalForSaleAcrossVersions": 61,
  "haveCount": 3400,
  "wantCount": 480,
  "wantToHaveRatio": 0.1412,
  "ratingAverage": 4.1,
  "ratingCount": 210,
  "trackCount": 8,
  "url": "https://www.discogs.com/release/1000001",
  "marketplaceUrl": "https://www.discogs.com/sell/release/1000001",
  "detailLoaded": true,
  "priceStatsLoaded": true,
  "scrapedAt": "2026-09-30T12:00:00+00:00",
  "changeType": "NEW"
}

Ways to use this data

  • Collectors and sellers pricing a pressing: compare an album's own pressings by asking price, total copies for sale and demand, before buying or listing.
  • Price tracking over time: schedule the actor with incremental mode on to watch an album's price statistics or a search result move, and get only what changed.
  • Music data and analytics projects: build a catalogue dataset of releases, artists and labels with tracklists, credits and identifiers for research or cataloguing tools.
  • Marketplace and reselling tools: feed live marketplace numbers (copies for sale, lowest price, demand ratio) into your own pricing or alerting app.
  • Label and artist research: pull an artist's discography or a label's release history and sub-labels in one structured run.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Discogs Scraper return?

The documented output for Discogs Scraper includes kind, recordid, entityid, sourcemode, searchquery, title, name and artist. Availability of each field depends on the source page and the selected mode.

How much does Discogs Scraper cost?

It costs $2.50 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed records on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared records, and unchanged ones are not billed unless you turn on Emit unchanged.

Why did my run fail instead of returning an empty dataset?

If Discogs refuses every request the run stops with a clear message, so "no results matched" is never confused with "nothing could be read". Run it again in a few minutes. A search that genuinely matches nothing, or an incremental run whose records were all unchanged, still succeeds with zero new rows.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with Discogs Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.