Discogs Search Scraper
Pricing
from $0.56 / 1,000 results
Discogs Search Scraper
Searches Discogs across releases, master releases, artists and labels. Returns full tracklist, catalog number, community rating, and live marketplace price range for individual releases.
Pricing
from $0.56 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Searches Discogs, the largest music release database and marketplace — across releases (specific pressings), master releases (the canonical work), artists and labels.
For releases, returns the full tracklist with per-track credits and durations, catalog number, community rating, and the live marketplace price range.
What you get
One row per search hit, plus a SEARCH_SUMMARY row per query.
From search (always) — raw passthrough, shape varies by entityType
Discogs' own clean GraphQL object, spread verbatim, so the fields differ by
type. For entityType: "release": discogsId, title, released, country,
siteUrl, labels[], formats[], images, primaryArtists[]. Every row
carries __typename so you can tell Release/MasterRelease/Artist/Label apart
in one dataset.
From the release page (includeReleaseDetails, release only, on by default)
tracklist[] — each track's position, title, credits (remix/featuring
artist, when present) and duration — plus, from the page's Schema.org
JSON-LD: genre, catalogNumber, recordLabel, releaseOf (the master
release + primary artist), aggregateRating (community score and count), and
offers (live marketplace offerCount / lowPrice / highPrice).
Input
{"queries": ["radiohead"],"entityType": "release","genre": "Rock","format": "Vinyl","maxItems": 50,"includeReleaseDetails": true,"surface": "auto", // website first, official API fallback (default)"discogsToken": "" // optional personal access token: 60 API req/min instead of 25}
format, genre, style, country, year and decade all genuinely
narrow the result count and compose with AND (measured: genre=Rock (5,964) ×
format=Vinyl (826) → 611 together). format/genre/style need Discogs'
own exact facet text — "Trip Hop", not "triphop".
A search term is optional. Leave queries empty and set a filter to
browse by facet alone — e.g. every Reggae release in the database.
entityType: four genuinely different shapes
entityType | Returns | __typename |
|---|---|---|
release | A specific pressing | Release |
master | The canonical work across all its pressings | MasterRelease |
artist | An artist/group | Artist |
label | A record label | Label |
Verified at the same query (radiohead) these carry genuinely different
fields, not the same index re-labelled — master/artist/label results
carry no discogsId at all, only a relay id.
Two data surfaces (surface)
Discogs' website sits behind a Cloudflare challenge that, from cloud egress,
blocks a random share of requests rather than a fixed list of clients. So the
actor has two ways to read the same index and tells you which one it used in
every row's _source:
surface | What happens | Row shape |
|---|---|---|
auto (default) | Website first (fast; Discogs' own GraphQL objects, JSON-LD marketplace price range). Any query the website refuses after 3 exit-IP/fingerprint rotations is restarted from page 1 on the official API; any release page it refuses falls back to the API release endpoint on its own. | S1/S2 = website, S3/S4 = API |
api | Official API only (api.discogs.com). Deterministic, never challenged in our measurements, but rate-limited: 25 requests/min per IP without a token, 60/min with discogsToken. | S3/S4 |
web | Website only, no fallback. | S1/S2 |
The two shapes are both raw passthrough of what Discogs returns, so they
differ: website rows carry __typename, discogsId, siteUrl, labels[],
formats[], primaryArtists[]; API rows carry type, id, uri, label[],
format[], catno, genre[], style[], community.want/have. Release
detail from the website attaches musicReleaseJsonLd (with offers
low/high price) and a parsed tracklist (position, title, credits,
duration); from the API it attaches releaseApi (the full release object:
lowest_price, num_for_sale, community.rating, genres, styles,
identifiers, images, notes) and the API's own tracklist (position,
title, duration, extraartists[]). Every RESULT row declares all three
columns (musicReleaseJsonLd, releaseApi, tracklist), unused ones null.
Known limits
API mode is rate-limited. 25 requests/min per exit IP without a token —
one search page (100 results) plus one call per release detail — so 50
releases with details take about two minutes on the API; with a personal
access token (discogsToken, generated at discogs.com/settings/developers)
it is 60/min. A 429 is waited out (20 s) on a fresh exit IP, up to 4 times.
decade on the API is a year range. The API has no decade filter, so
decade: "1990" is sent as year=1990-1999 there (honest: 1,914 vs the
website's 1,899 for the same query). An explicit year wins.
A query is never half-and-half. If the website fails mid-query, the whole query restarts on the API from page 1 (the surfaces have different page sizes and shapes), so the pages already fetched are discarded, never mixed.
Detail is release-only. includeReleaseDetails fetches the tracklist and
JSON-LD only for entityType: "release". It's a no-op (logged, not an error)
for master/artist/label — those detail pages weren't built out for this
version.
Filter values are exact-match, not fuzzy. A typo doesn't silently return everything — Discogs is unusually honest here — but it does mean
format: "vinyl""Vinyl" depending on the facet's exact
casing; use the value as Discogs itself displays it.
Pagination is genuinely honest — 25 results/page, and past the real last
page it returns an empty array rather than clamping back to page 1 — so an
unlimited crawl (maxItems: 0) terminates correctly, but a broad query can
mean tens of thousands of results.
Anti-bot posture
www.discogs.com is behind a Cloudflare managed challenge (
cf-mitigated: challengeprimp safari_26firefox_148), and the official API — 24/24 clean on
every proxy option — is the floor beneath it. The Apify datacenter proxy
is the default: residential was challenged at exactly the same rate here and
is billed per GB against ~1 MB search pages. No browser, no captcha solver.
Policy
robots.txt disallows marketplace/account/user-scoped paths
(*/marketplace, */sell/*, /users/, /login, /mycollection, etc.) —
none of which this actor touches. /search itself is not disallowed for
a generic crawler (only a Sogou web spider group disallows it specifically).
No ClaudeBot/anthropic-ai group. api.discogs.com/robots.txt is the same
file, and the API is Discogs' documented public interface (unauthenticated
access allowed with a User-Agent; a token only raises the quota).