Given a Discogs release/master URL, ID, or free-form release reference, return live Marketplace listings (per-listing price, media + sleeve condition, seller info, shipping, comments) plus full release-level metadata. Hybrid: public Database API for metadata + aggregate stats; Verified browser session for per-listing rows. Read-only.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionget-marketplace-priceExecute the skills CLI command in your project's root directory to begin installation:
Fetches get-marketplace-price from discogs.com/get-marketplace-price-8xouh1 and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate get-marketplace-price. Access via /get-marketplace-price in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
0
total installs
0
this week
0
upvotes
Run in your terminal
0
installs
0
this week
—
stars
| name | get-marketplace-price |
| title | Discogs Marketplace Price Lookup |
| description | >- Given a Discogs release/master URL, ID, or free-form release reference, return live Marketplace listings (per-listing price, media + sleeve condition, seller info, shipping, comments) plus full release-level metadata. Hybrid: public Database API for metadata + aggregate stats; Verified browser session for per-listing rows. Read-only. |
| website | discogs.com |
| category | music |
| tags | - music - vinyl - marketplace - discogs - pricing - read-only - hybrid |
| source | 'browserbase: agent-runtime 2026-05-15' |
| updated | '2026-05-15' |
| recommended_method | hybrid |
| alternative_methods | - method: api rationale: >- Discogs public Database API at api.discogs.com is fully open (no auth, 25 req/min) for release metadata, master metadata, marketplace aggregate stats (num_for_sale + lowest_price with curr_abbr override), database search, and per-listing detail by listing_id. No Cloudflare challenge on the API host. This handles ~80% of the task — everything except per-listing rows for a release. - method: browser rationale: >- Required for the per-listing table at www.discogs.com/sell/release/<release_id> (and /sell/list?master_id=). Cloudflare bot-management challenges every fetch (Cf-Mitigated: challenge, HTTP 403) — even browse cloud fetch --proxies. Only --verified + --proxies Browserbase session clears it. The public API exposes no equivalent endpoint for per-release listing enumeration (the legacy unauthenticated /users/{seller}/inventory?release_id silently returns 0 items unless the caller owns the inventory). |
| verified | false |
| proxies | true |
Given a Discogs release URL, master URL, release/master ID, or free-form release reference, return live Discogs Marketplace listings for that release — per-listing price, media + sleeve condition (Goldmine grades), seller info, shipping, and listing notes — plus the release-level metadata (artists, labels, catalog number, pressing year/country, format, genres, styles, tracklist, community Have/Want counts, average rating, primary cover image). Hybrid path: the public Discogs Database API delivers all release metadata + aggregate marketplace stats (num_for_sale, lowest_price) with no auth, but per-listing rows are browser-only — the marketplace HTML is Cloudflare-challenged and not exposed in the public API. Read-only — never click Buy It Now, Add to Cart, Make Offer, Add to Wantlist, Sign In, or submit any form.
The optimal path is hybrid: hit the public Discogs Database API for everything it exposes (release metadata, master metadata, aggregate marketplace stats, free-text search → release ID resolution) at ~25 req/min unauthenticated, with zero anti-bot friction. Then — and only then — open a Browserbase Verified + proxies session to scrape per-listing rows from /sell/release/<release_id>, which is Cloudflare-protected and HTML-only.
Three input shapes. Pick the branch:
a. Full release URL (https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up or just .../release/249504):
Extract the integer after /release/. That's the release_id. Skip to step 2.
b. Full master URL (.../master/96559-...):
Extract master_id, then call:
GET https://api.discogs.com/masters/<master_id>
The response includes main_release (the canonical release ID Discogs treats as the master's primary pressing) plus genres, styles, year (original release year), lowest_price and num_for_sale aggregated across all releases under the master. If the user wants "any pressing of this master", use main_release as the release_id. If the user wants a specific pressing (e.g. "original UK 1973 pressing"), use /masters/<master_id>/versions?format=Vinyl&country=UK&released=1973&per_page=50 to enumerate pressings and pick by matching the user's constraints.
c. Free-form text ("Pink Floyd Dark Side of the Moon original UK pressing"):
GET https://api.discogs.com/database/search
?q=<urlenc-text>
&type=master # use 'master' for "any pressing of this album"; 'release' for a specific pressing
&format=Vinyl|CD|Cassette
&per_page=10
Returns results[] with id, title, year, country, format[], label[], master_id. Pick the top result; if results.length > 1 and the top two have similar community.have counts, return reason: "ambiguous_reference" with a matches: [] list rather than guessing. Otherwise resolve to either a release_id (type=release) or master_id (type=master, then dereference to main_release per (b)).
GET https://api.discogs.com/releases/<release_id>
Returns the full record this skill emits as the release-context payload — id, title, artists[] (with id, resource_url, name), labels[] (with name, catno, id), formats[] (with name, qty, descriptions[] — e.g. ["7\"", "45 RPM", "Single", "Stereo"]), country, year, released / released_formatted, genres[], styles[], tracklist[] (each { position, type_, title, duration }), identifiers[] (barcodes, matrix runouts, label codes, price codes — with type + value + description), images[] (with type: primary|secondary, uri, width, height), videos[], community.have, community.want, community.rating.average, community.rating.count, master_id, master_url, num_for_sale, lowest_price (single number in caller's default currency, USD if not overridden), and uri (canonical release URL).
For aggregate marketplace stats with a specific currency:
GET https://api.discogs.com/marketplace/stats/<release_id>?curr_abbr=USD|EUR|GBP|JPY|...
Returns { num_for_sale, lowest_price: { value, currency }, blocked_from_sale }. Use curr_abbr (with underscore) on the API — NOT currabbr, which is the marketplace HTML query param. If blocked_from_sale: true, the release cannot legally be sold on Discogs in the caller's region — short-circuit and emit reason: "blocked_from_sale".
SID=$(browse cloud sessions create --keep-alive --verified --proxies | jq -r '.id')
Both --verified and --proxies are mandatory. A bare session (or browse cloud fetch --proxies from outside a session) hits Cloudflare's bot-management challenge on every www.discogs.com/sell/* URL — confirmed Cf-Mitigated: challenge, HTTP 403, with the "Just a moment..." JS-challenge HTML — across --proxies only, no proxies, and --proxies --allow-redirects. The public Database API at api.discogs.com is exempt from this; the consumer marketplace pages at www.discogs.com are not.
The marketplace listing table lives at:
https://www.discogs.com/sell/release/<release_id>?<filters>
Filter query params (combine freely; unrecognized params are silently dropped):
| Param | Values | Notes |
|---|---|---|
format | Vinyl, CD, Cassette, 8-Track, Reel-to-Reel, Box Set, All Media | Top-level media type. |
format_desc | LP, 7", 10", 12", EP, Album, Single, 45 RPM, 33 ⅓ RPM, 180g, Reissue, Remastered, Compilation, ... | Subformat / format descriptor — multi-select (format_desc=LP&format_desc=Album). |
condition | Mint%20(M), Near%20Mint%20(NM%20or%20M-), Very%20Good%20Plus%20(VG%2B), Very%20Good%20(VG), Good%20Plus%20(G%2B), Good%20(G), Fair%20(F), Poor%20(P) | Media (record) condition — Goldmine grades. URL-encode the parentheses. |
sleeve_condition | same Goldmine ladder | Sleeve / jacket condition. Multi-select. CD listings often omit sleeve grade — gracefully accept null. |
price_min, price_max | integer (in currabbr currency) | Inclusive range. |
currabbr | USD, EUR, GBP, JPY, AUD, CAD, CHF, SEK, NZD, MXN, BRL, ZAR (and more) | Display currency. Note: marketplace HTML uses currabbr (no underscore); Database API at /marketplace/stats uses curr_abbr (with underscore). They are different params on different surfaces. |
ships_from | Country name, URL-encoded (United%20States, United%20Kingdom, Germany, ...) | Seller's country. |
country | Country of original pressing, URL-encoded | Filters by release-level country (the pressing's manufactured country), not seller. |
year | YYYY or YYYY%2DYYYY (range) | Pressing year. |
label | label id (integer) | Multi-select. |
seller_rating | 99, 98, 95 (interpreted as min % positive) | Min seller feedback %. Combine with seller_feedback_min=N for min review count. |
sort | price%2Casc (default), listed%2Cdesc, condition%2Cdesc, seller_location%2Casc, artist%2Casc | Comma is %2C. price sort is "Lowest Price + Shipping". |
limit | 25 (default), 50, 100, 250 | Listings per page. 250 is the documented hard cap. |
page | integer ≥ 1 | Pagination cursor. The page header shows Showing X – Y of Z. |
Example:
https://www.discogs.com/sell/release/249504?format=Vinyl&format_desc=7%22&condition=Near%20Mint%20(NM%20or%20M-)&sleeve_condition=Near%20Mint%20(NM%20or%20M-)&price_min=5&price_max=50&ships_from=United%20Kingdom&currabbr=USD&sort=price%2Casc&limit=100
For a master-level lookup (any pressing under a master, not just one release), use:
https://www.discogs.com/sell/list?master_id=<master_id>&<same filters>
/sell/list accepts the same filter surface and additionally master_id or release_id as the scoping param.
browse --connect "$SID" open "<url-from-step-4>"
browse --connect "$SID" wait load
browse --connect "$SID" wait timeout 2500 # listing table lazy-hydrates ~1.5–2s post-load
browse --connect "$SID" get html body # full marketplace listing markup
The listing rows live under table.mpitems > tbody > tr.shortcut_navigable. Each row carries:
data-release-id on the row (matches the release_id you queried).td.item_description > a.item_description_title[href="/sell/item/<listing_id>"]. Parse <listing_id> from the href.td.item_description: <p class="item_condition"> precedes media + sleeve grades; <p class="hide_mobile"> shows the format descriptors (Vinyl, LP, Album, 180 gram, Reissue, Remastered).span.condition-label-desktop's sibling — or the data-tooltip attribute. Goldmine grade strings like "Near Mint (NM or M-)", "Very Good Plus (VG+)", etc."No Cover" or missing for CDs.<p class="item_condition_text"> — vinyl buyers rely heavily on this. Preserve newlines.td.item_price > span.price — text content with currency symbol (e.g. "€14.95").data-pricevalue attribute on the parent <span> often holds the raw decimal."about $16.12" in span.converted_price when currabbr differs from the listing's native currency.<span class="item_shipping"> — text like "+€5.00 shipping from Germany" or "+$3.50 shipping to United States" (when ships_to is geo-detected). Parse numeric + currency separately. Shipping is geo-dependent on the viewing IP — Browserbase's residential proxy region determines what shipping line is rendered. Document this in the response.td.seller_info > strong.seller_block_id > a[href="/seller/<username>"] for username + profile URL; nearby <span class="seller_rating"> for % positive; <span class="seller_info_block_rating_number"> for total feedback count; country in <span class="seller_info_block_location"> or the next sibling.<time> tag if surfaced; otherwise absent on the search-results view (open the listing detail to retrieve)./sell/item/<listing_id>), not in the table view.For full per-listing detail (payment methods, exact listed date, complete seller-notes block), drill into each listing detail page in a second pass:
browse --connect "$SID" open "https://www.discogs.com/sell/item/<listing_id>?ev=rb"
browse --connect "$SID" get html body
The ?ev=rb (event: rest-of-browse) suffix matches what Discogs's own client sends — harmless if omitted.
The pagination footer renders Pagination_pageList with <a rel="next">. Extract pages either by counting from Showing 1 – 25 of <total> or by reading the ?page=N href off the next-button. Hard cap is whatever Discogs returns (e.g. 105 listings @ limit=25 = 5 pages). Increment page= while honoring limit= from step 4.
browse cloud sessions update "$SID" --status REQUEST_RELEASE
If the user gave only a master reference and wants "any pressing", short-circuit:
GET /masters/<master_id> → main_release and num_for_sale aggregated.GET /marketplace/stats/<main_release>?curr_abbr=<currency> for the floor price./sell/list?master_id=<X> (browser path) — this aggregates listings across every release under the master, sorted by lowest price + shipping by default.Add to Cart, Buy It Now, Make Offer, Add to Wantlist, Sign In, Register, or any form submit. The marketplace skill returns prices/conditions; purchasing is a different skill (and would require an authenticated user account).www.discogs.com/sell/*. Confirmed Cf-Mitigated: challenge + HTTP 403 + __cf_bm set-cookie + "Just a moment..." HTML across (a) bare browse cloud fetch, (b) browse cloud fetch --proxies, and (c) browse cloud fetch --proxies --allow-redirects. Only a real browser session with --verified --proxies clears the challenge. Don't waste time trying to scrape www.discogs.com/sell/* with browse cloud fetch — go straight to a Verified session.api.discogs.com is fully open — no auth needed for read endpoints. browse cloud fetch https://api.discogs.com/releases/<id> returns 200 JSON immediately, no CF challenge. The API and the consumer site have completely different anti-bot postures; lead with the API for everything it exposes.?currabbr=USD (no underscore). The Database API endpoint /marketplace/stats/<release_id> uses ?curr_abbr=USD (with underscore). Mixing them up silently no-ops; the response will be in the API's default currency (USD).X-Discogs-Ratelimit: 25 and X-Discogs-Ratelimit-Remaining. Authenticated (OAuth or PAT) callers get 60 req/min. For multi-page marketplace scraping the browser session is the bottleneck anyway, not the API./marketplace/listings/{listing_id} works unauthenticated and returns full per-listing detail when the listing still exists (404 with "It may have been deleted." if removed). This is the one per-listing endpoint that doesn't require OAuth — useful if you have a listing ID from the HTML table and want clean JSON instead of HTML-parsing the detail page./marketplace/price_suggestions/{release_id} requires authentication (returns 401 unauthenticated). Don't rely on it for unauthenticated callers. The unauthenticated alternative is /marketplace/stats/<id> (floor + count only) — median and percentile suggested prices are paywalled behind OAuth./users/{username}/inventory?release_id={X} is publicly readable but returns 0 items unless you are the inventory owner. Confirmed across multiple known active sellers (jpc, musicstack, yarbo, memory) — every call returned items: 0 unauthenticated. Despite docs implying public visibility, the unauthenticated response is only the caller's own inventory (empty for an anonymous caller). Don't try to enumerate per-release listings via this endpoint without OAuth — it silently returns nothing.type=release and return individual pressings; the user likely wants type=master first, then main_release for the canonical pressing or /masters/<id>/versions to enumerate. Marketplace listings are pressing-specific (/sell/release/<release_id>) but can be aggregated across a master (/sell/list?master_id=<X>).condition and sleeve_condition query params take the full Goldmine grade string with parentheses and abbreviation: Mint (M), Near Mint (NM or M-), Very Good Plus (VG+), Very Good (VG), Good Plus (G+), Good (G), Fair (F), Poor (P). URL-encode (, ), +, and space. Common mistake: passing just NM or VG+ (no parens, no abbreviation expansion) — Discogs silently ignores and returns unfiltered.sleeve_condition is "No Cover", "Generic", or missing on non-vinyl listings."+$3.50 shipping to United States" reflects what Discogs computed for the proxy's IP-geo'd country. If the user wants shipping cost to a specific country, set the Browserbase session region to a region near that country, or scrape the shipping table on the listing detail page (some sellers publish per-country shipping tables in <table class="shipping_block">).blocked_from_sale: true on /marketplace/stats means the release is legally blocked from Discogs sale (e.g. recent label takedowns, regional restrictions). The marketplace HTML page will render but show 0 listings — short-circuit before scraping.formats[] block on a release is descriptive, not filterable verbatim. release.formats[].descriptions may contain values like ["Vinyl", "12\"", "33 ⅓ RPM", "Album", "Reissue", "Remastered", "180 gram"] — for the marketplace filter, the format_desc param accepts these as multi-select, but exact-match is required (case-sensitive in the URL). When constructing filters from a free-text query, normalize: "180g" → 180 gram, "12 inch" → 12", etc.Lowest Price + Shipping is the default sort. Discogs computes total-to-buyer (price + shipping to viewing IP) for ranking. Without overriding sort=, the first page is the cheapest delivered offers, which is what most callers want.?ev=rb. Append ?ev=rb to mimic the Discogs JS client's referral query and avoid certain logged-out gating; not strictly required but reduces 302-redirect churn.limit > 250. Discogs caps the per-page result count at 250; values above that silently fall back to 250 (or sometimes return an empty page).api.discogs.com requires no User-Agent for read endpoints when called via browse cloud fetch. Discogs's docs technically demand a custom UA, but Browserbase's Fetch API supplies a default UA that Discogs accepts. If hitting the API outside Browserbase, set a User-Agent: YourApp/1.0 +https://yourapp.example header to avoid intermittent 403s from Discogs's UA filter.Top-level shape — one of three outcome variants:
// 1. SUCCESS — listings returned
{
"success": true,
"release": {
"release_id": 249504,
"master_id": 96559,
"title": "Never Gonna Give You Up",
"artists": [
{ "name": "Rick Astley", "id": 72872, "url": "https://www.discogs.com/artist/72872" }
],
"labels": [
{ "name": "RCA", "catno": "PB 41447", "id": 895 }
],
"format": { "name": "Vinyl", "qty": 1, "descriptions": ["7\"", "45 RPM", "Single", "Stereo"] },
"country": "UK",
"released": "1987-07-00",
"released_formatted": "Jul 1987",
"year": 1987,
"genres": ["Electronic", "Pop"],
"styles": ["Euro-Disco"],
"tracklist": [
{ "position": "A", "title": "Never Gonna Give You Up", "duration": "3:32" },
{ "position": "B", "title": "Never Gonna Give You Up (Instrumental)", "duration": "3:30" }
],
"identifiers": [
{ "type": "Barcode", "value": "5012394144777" },
{ "type": "Matrix / Runout", "value": "PB 41447 A2 UTOPIA MS", "description": "A side runout, variant 1" }
],
"community": { "have": 4028, "want": 579, "rating_average": 3.83, "rating_count": 229 },
"marketplace_stats": {
"num_for_sale": 105,
"lowest_price": { "value": 0.68, "currency": "USD" }
},
"primary_image_url": "https://i.discogs.com/...jpeg",
"additional_images": ["https://i.discogs.com/...jpeg", "..."],
"discogs_url": "https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up"
},
"filters_applied": {
"format": "Vinyl",
"format_desc": ["7\""],
"condition": ["Near Mint (NM or M-)", "Very Good Plus (VG+)"],
"sleeve_condition": ["Near Mint (NM or M-)"],
"price_min": null,
"price_max": null,
"currabbr": "USD",
"ships_from": null,
"country_of_release": null,
"year": null,
"label": null,
"seller_rating_min_pct": 99,
"seller_feedback_min": null,
"sort": "price,asc",
"limit": 100,
"page": 1
},
"listings_total": 47,
"listings_returned": 25,
"listings": [
{
"listing_id": 2520253500,
"listing_url": "https://www.discogs.com/sell/item/2520253500",
"release_id": 249504,
"format_details": ["Vinyl", "7\"", "45 RPM", "Single", "Stereo"],
"media_condition": "Near Mint (NM or M-)",
"sleeve_condition": "Very Good Plus (VG+)",
"comments_from_seller": "Plays beautifully. Light marks on B-side. Original PWL inner.",
"price": { "value": 4.50, "currency": "GBP" },
"price_converted": { "value": 5.71, "currency": "USD" },
"shipping": { "value": 6.00, "currency": "GBP", "from_country": "United Kingdom", "to_country": "United States" },
"seller": {
"username": "vinyl_dreams_uk",
"profile_url": "https://www.discogs.com/seller/vinyl_dreams_uk",
"country": "United Kingdom",
"feedback_count": 8412,
"positive_pct": 99.7
},
"listed_date": null,
"payment_methods": null
}
],
"pagination": { "page": 1, "pages": 2, "per_page": 25, "total": 47, "next_url": "...?page=2" }
}
// 2. RESOLVED-AMBIGUOUS — free-text resolved to multiple candidate releases / masters
{
"success": false,
"reason": "ambiguous_reference",
"query": "Pink Floyd Dark Side of the Moon original UK pressing",
Prerequisites
Time Estimate
15-45 minutes depending on use case complexity
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
nav.com/get-smb-funding-2s1rpm
shopee.com.my/search-products-5epzg0
amazon.com/search-products-5170mf
schwepps/skills
booking.com/search-hotels-asq6cc
aliexpress.com/search-product-p0h8a7
get-marketplace-price has been reliable in day-to-day use. Documentation quality is above average for community skills.
get-marketplace-price is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Solid pick for teams standardizing on skills: get-marketplace-price is focused, and the summary matches what you get after install.
We added get-marketplace-price from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
Keeps context tight: get-marketplace-price is the kind of skill you can hand to a new teammate without a long onboarding doc.
Solid pick for teams standardizing on skills: get-marketplace-price is focused, and the summary matches what you get after install.
Registry listing for get-marketplace-price matched our evaluation — installs cleanly and behaves as described in the markdown.
get-marketplace-price fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
get-marketplace-price is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Useful defaults in get-marketplace-price — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
showing 1-10 of 50