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.
| Input | What it controls |
|---|---|
modestring · required | Search 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. |
searchQueriesarray | Search 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. |
searchTypestring | Search 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. |
artiststring | Search mode only. Restrict results to this artist, for example "Nirvana". Works with or without a keyword. |
labelstring | Search mode only. Restrict results to this record label, for example "Sub Pop" or "Blue Note". |
genrestring | Search mode only. Restrict results to one Discogs genre, for example "Rock", "Jazz", "Electronic", "Hip Hop", "Funk / Soul", "Classical". |
stylestring | Search 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
| Input | What it controls |
|---|---|
formatstring | Search mode only. Restrict results to one physical or digital format, for example "Vinyl", "LP", "CD", "Cassette", "7\"", "Album", "File". |
countrystring | Search mode only. Restrict results to the country of the pressing, for example "UK", "US", "Japan", "Germany", "Europe". |
yearstring | Search mode only. Restrict results to a release year, for example "1991". A range such as "1990-1995" is also accepted by Discogs. |
catalogNumberstring | Search 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. |
barcodestring | Search mode only. Restrict results to a barcode or UPC/EAN, for example "720642442517". The fastest way to identify an exact pressing you are holding. |
sortBystring | Search 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. |
sortOrderstring | Search mode only. Direction for the sort above. Ignored when Sort results by is set to best match. |
startUrlsarray | URL 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. |
urlsarray | Alias 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. |
maxItemsinteger | Stop 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. |
maxPagesinteger | Search 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. |
fetchDetailsboolean | Search 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. |
priceStatsboolean | Off 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. |
maxPriceVersionsinteger | Only 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. |
currencystring | Currency for every marketplace price and price statistic. Discogs converts from the seller's own currency. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large pull without returning records already collected there. |
incrementalModeboolean | Turn 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. |
stateKeystring | Optional. 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. |
emitUnchangedboolean | Off 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. |
emitExpiredboolean | Off 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. |
ignoreFieldsForChangesarray | Optional. 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. |
mcpConnectorsarray | Optionally 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. |
notionParentPageUrlstring | URL or id of the Notion page under which record pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on records written to each connector per run. Does not affect the dataset. |
queryarray | Alias of searchQueries. Alias accepted so an input written for another Discogs scraper runs unchanged; the native field wins when both are set. |
typestring | Alias 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. |
maxResultsinteger | Alias 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. |
getDetailsboolean | Alias of fetchDetails. Alias accepted so an input written for another Discogs scraper runs unchanged; the native field wins when both are set. |
yearMininteger | Earliest 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. |
yearMaxinteger | Latest 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.
kindKindrecordIdrecordIdentityIdentityIdsourceModesourceModesearchQuerysearchQuerytitleTitlenamenameartistNameArtistartistNamesartistNamesartistsSortartistsSortyearYearreleasedreleasedShow 116 more fields
releasedFormattedreleasedFormattedcountryCountryprimaryGenreGenreprimaryStyleprimaryStyleprimaryFormatFormatprimaryLabelprimaryLabelgenresgenresstylesstylesformatDescriptionsformatDescriptionsformatsformatsformatQuantityformatQuantitylabelNameslabelNameslabelslabelscatalogNumberCat #barcodesbarcodesidentifiersidentifierscompaniescompaniesseriesseriesmasterIdmasterIdmasterUrlmasterUrlmainReleaseIdmainReleaseIdmostRecentReleaseIdmostRecentReleaseIdnumForSaleFor salelowestPriceLowest pricecurrencycurrencyblockedFromSaleblockedFromSalemarketplaceUrlMarketplace (link)priceLowestAlbum lowpriceMedianAlbum medianpriceHighestAlbum highpriceAverageAlbum averagepriceCurrencypriceCurrencypriceVersionsSampledPressings pricedpriceVersionsPricedpriceVersionsPricedmasterVersionsTotalmasterVersionsTotaltotalForSaleAcrossVersionstotalForSaleAcrossVersionshaveCountHavewantCountWantwantToHaveRatioWant per havemasterHaveCountmasterHaveCountmasterWantCountmasterWantCountmasterWantToHaveRatiomasterWantToHaveRatioratingAverageRatingratingCountratingCountpriceSuggestionMintpriceSuggestionMintpriceSuggestionNearMintpriceSuggestionNearMintpriceSuggestionVeryGoodPluspriceSuggestionVeryGoodPluspriceSuggestionVeryGoodpriceSuggestionVeryGoodpriceSuggestionGoodPluspriceSuggestionGoodPluspriceSuggestionGoodpriceSuggestionGoodpriceSuggestionFairpriceSuggestionFairpriceSuggestionPoorpriceSuggestionPoorpriceSuggestionCurrencypriceSuggestionCurrencytracklisttracklisttrackCounttrackCountartistsartistsextraArtistsextraArtistsimagesimagesimageCountimageCountcoverImageUrlCover (image)thumbnailUrlthumbnailUrlvideosvideosvideoCountvideoCountnotesnotesestimatedWeightestimatedWeightdataQualitydataQualitystatusstatusdateAddeddateAddeddateChangeddateChangedsubmitterUsernamesubmitterUsernamecontributorUsernamescontributorUsernamesisOffensiveisOffensiverealNamerealNameprofileprofilenameVariationsnameVariationsaliasesaliasesmembersmembersgroupsgroupsexternalUrlsexternalUrlsreleasesUrlreleasesUrlcontactInfocontactInfocontactEmailscontactEmailscontactPhonescontactPhonesparentLabelIdparentLabelIdparentLabelNameparentLabelNamesubLabelssubLabelssubLabelCountsubLabelCounturlDiscogs page (link)resourceUrlresourceUrldetailLoadedFull 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_indexthumbthumbcommunitycommunityartists_flatartists_flatlabels_flatlabels_flatgenres_flatgenres_flatstyles_flatstyles_flatidentifiers_flatidentifiers_flatcompanies_flatcompanies_flattracklist_flattracklist_flatvideos_flatvideos_flatextraartists_flatextraartists_flatformatformatcatnocatnobarcodebarcodereleased_formattedreleased_formattednum_for_salenum_for_salelowest_pricelowest_pricedata_qualitydata_qualityestimated_weightestimated_weightExample 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.
