# Discogs Marketplace Scraper ($1.50/1K) (`carabain-digital/discogs-marketplace`) Actor

Scrape the Discogs marketplace: every record copy for sale per release, master or seller. Price, shipping, converted price, media and sleeve condition, seller notes and rating, plus release have/want, last sold and low/median/high price. Reliable, no login.

- **URL**: https://apify.com/carabain-digital/discogs-marketplace.md
- **Developed by:** [Carabain Digital](https://apify.com/carabain-digital) (community)
- **Categories:** E-commerce, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 marketplace listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

#### What is Discogs Marketplace Scraper?

**Discogs Marketplace Scraper** scrapes the **Discogs marketplace ([discogs.com/sell](https://www.discogs.com/sell/list))**, the biggest online marketplace for vinyl, CDs and cassettes: every copy for sale of a release, with the **price, shipping cost, price converted to USD, media and sleeve condition, the seller's own notes, seller rating and ships-from country**. Every listing is enriched with release-level data: **have/want counts, copies for sale, lowest asking price, last sold date and low, median and high price paid**. Paste a release, master or seller URL, or search by name, and get clean, flat data as JSON, CSV, Excel, XML or HTML. Prefilled example: the 25 cheapest copies of Rick Astley's *Never Gonna Give You Up* (UK 7"), ready in seconds. Costs **$1.50 per 1,000 listings**.

- 💿 **Complete listing data**: price, shipping, converted price, media and sleeve condition, seller comments, seller rating, ships-from, label and catalog number
- 📊 **Price context on every row**: have/want, copies for sale, lowest price, last sold, low/median/high price paid
- 🔗 **Release, master or seller**: a master is expanded into its versions, a seller page gives the whole inventory, filters in your URL are kept
- 🔍 **Search by name**: the best matching releases are scraped without looking up IDs
- 🛡️ **Built for reliability**: no login, no browser, Cloudflare handled without a browser, retries on a fresh session, a blocked run fails clearly instead of returning an empty dataset
- ⚡ **Fast**: up to 250 listings per request, a release with 124 copies takes about 4 seconds
- 🔌 **Connect anywhere**: API, schedules, webhooks, Google Sheets, Make, Zapier, MCP / AI agents

#### What data can I extract from Discogs?

<table>
<tr><td>🆔 Listing ID and URL, release ID and URL</td><td>💶 Price and currency, shipping cost, price in USD</td></tr>
<tr><td>🎚️ Media and sleeve condition</td><td>📝 Seller's comments on the copy</td></tr>
<tr><td>👤 Seller name, positive rating %, number of ratings</td><td>🌍 Ships-from country, unavailable-in country, accepts offers</td></tr>
<tr><td>🏷️ Label and catalog number</td><td>🎤 Artist, release title, year, country, formats, genres, styles</td></tr>
<tr><td>❤️ Have / want, rating, copies for sale</td><td>📈 Lowest price, last sold, low / median / high price paid</td></tr>
</table>

Sold history (the list of every past sale) and Discogs' price suggestions need a Discogs login and are not included. The **last sold date and the low, median and high price** shown on each release page are included on every listing.

#### How do I scrape the Discogs marketplace?

1. [Create a free Apify account](https://console.apify.com/sign-up) and open this Actor.
2. Paste one or more **Discogs URLs** (a release, a master or a seller page) or enter a **Search**.
3. Set **Max listings** and the **Sort order** (cheapest first by default).
4. Click **Start**, then download the listings from the **Output** tab as JSON, CSV, Excel, XML or HTML.

#### How much does it cost to scrape the Discogs marketplace?

You pay per listing that ends up in your dataset: **$1.50 per 1,000 listings**, no subscription, release statistics included. The monthly credit of Apify's Free plan ($5) covers around 3,000 listings. Paid plans get volume discounts. Failed runs and empty results cost nothing, and you can cap spending with **Maximum cost per run** in the run options. See the **Pricing** tab for the current prices.

#### ⬇️ Input

| Field | Description |
|---|---|
| **Discogs URLs** (`start_urls`) | Release (`/release/249504`), master (`/master/13509`), seller (`/seller/Ronan266/profile`) or `/sell/list?release_id=249504&...` URLs. Filters in the URL (condition, ships_from) are kept |
| **Search** (`search`) | Free-text search: the best matching releases are scraped |
| **Max listings** (`limit`) | Stop after this many listings in total |
| **Sort order** (`sort`) | `price_asc` (default) or `price_desc`, by the price converted to USD |
| **Max releases** (`max_releases`) | For masters, searches and seller pages: how many releases to use / enrich |
| **Discogs API token** (`discogs_token`) | Optional, raises the release-data rate limit from 25 to 60 requests per minute |
| **Proxy** (`proxyConfiguration`) | Apify datacenter proxy, country US, preselected. Switch to Residential if runs get blocked |

```json
{
    "start_urls": [{ "url": "https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up" }],
    "sort": "price_asc",
    "limit": 25
}
```

A **master** is expanded into its main release plus its other versions (up to **Max releases**); versions with nothing for sale are skipped. A **seller** URL gives that seller's inventory, and release data is added for the first **Max releases** distinct releases. General marketplace searches without a release (for example `/sell/list?format=Vinyl`) are blocked by Discogs and not supported: search by name or use release URLs instead.

#### ⬆️ Output

Listings are stored in the default dataset. View them as a table in the **Output** tab or export JSON, CSV, Excel, XML or HTML. Every item has the same keys; fields that do not apply are `null`.

```json
{
    "id": "discogs:3528577817",
    "source": "discogs",
    "url": "https://www.discogs.com/sell/item/3528577817",
    "listing_id": "3528577817",
    "release_id": "249504",
    "release_url": "https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up",
    "title": "Rick Astley - Never Gonna Give You Up (7\", Single)",
    "label": "RCA",
    "catalog_number": "PB 41447",
    "price": 0.5,
    "currency": "GBP",
    "shipping_price": 32.0,
    "converted_price": 43.33,
    "converted_currency": "USD",
    "media_condition": "Very Good (VG)",
    "sleeve_condition": "No Cover",
    "seller_comments": "Hairline marks, small scuffs on the disk",
    "seller_name": "Horus-XVI",
    "seller_url": "https://www.discogs.com/seller/Horus-XVI/profile",
    "seller_rating_pct": 99.2,
    "seller_rating_count": 133,
    "ships_from": "United Kingdom",
    "unavailable_in": null,
    "accepts_offers": true,
    "release_have": 4161,
    "release_want": 594,
    "scraped_at": "2026-11-02T20:24:36Z",
    "artist": "Rick Astley",
    "release_title": "Never Gonna Give You Up",
    "year": 1987,
    "country": "UK",
    "master_id": 96559,
    "release_rating": 3.88,
    "release_rating_count": 249,
    "release_num_for_sale": 124,
    "release_lowest_price": 0.67,
    "release_last_sold": "2026-10-16",
    "release_price_low": 0.47,
    "release_price_median": 2.65,
    "release_price_high": 12.0,
    "release_price_currency": "USD",
    "formats": ["Vinyl (7\", 45 RPM, Single, Stereo)"],
    "genres": ["Electronic", "Pop"],
    "styles": ["Euro-Disco"]
}
```

`price` is the asking price in the seller's currency (`currency`) and does not include shipping. `shipping_price` is the cost to a buyer in the proxy's country (US by default): `0` means free, `null` means the seller does not ship there (`unavailable_in` then names the country). Compare listings on **`converted_price`**, which Discogs converts to USD.

#### What can I do with Discogs marketplace data?

- 💰 **Price tracking and arbitrage**: spot copies listed far below the median price paid, schedule a run and alert on new low prices
- 📉 **Valuation**: median, high and last sold date per release for collections, insurance, stores and estate sales
- 🏪 **Competitor monitoring**: pull a seller's whole inventory with prices and conditions
- 🔎 **Pressing comparison**: all versions of a master side by side, with have/want and copies for sale
- 🧠 **AI and analytics**: feed conditions, comments and prices into valuation models or agents

#### Tips for best results

- Discogs shows up to **250 copies per request**, so even popular releases are quick. For several releases pass several URLs or a master.
- Listings are ordered by price converted to USD, so `price` in different currencies is not monotonic. Sort on `converted_price`.
- Newest-first ordering is not available: Discogs' Cloudflare rules block that sort for automated clients. For monitoring, schedule a run and compare `listing_id`s with the previous run.
- Release statistics (`release_last_sold`, price low/median/high) are in the currency of the proxy country; with the default US proxy that is USD. They are `null` for a release that never sold.
- Release data comes from the official Discogs API (25 requests per minute without a token): a master or search with many releases takes about 2.5 seconds per release.
- Data is cached per run, so a release shared by many listings is only looked up once.

#### Frequently asked questions

#### Can I use Discogs Marketplace Scraper with the Apify API?

Yes. Every run has a dataset you can read through the [Apify API](https://docs.apify.com/api/v2). Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("carabain-digital/discogs-marketplace").call(run_input={
    "start_urls": [{"url": "https://www.discogs.com/release/249504"}],
    "sort": "price_asc",
    "limit": 100,
})
for copy in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(copy["converted_price"], copy["media_condition"], copy["seller_name"])
```

JavaScript:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('carabain-digital/discogs-marketplace').call({
    start_urls: [{ url: 'https://www.discogs.com/release/249504' }],
    sort: 'price_asc',
    limit: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'copies for sale');
```

#### Can I use Discogs Marketplace Scraper through an MCP server or with AI agents?

Yes. Add it to an AI agent through the [Apify MCP server](https://mcp.apify.com) (`https://mcp.apify.com?tools=carabain-digital/discogs-marketplace`), or let the agent find it with `search-actors` and run it with `call-actor`. A small run (`limit` 25) finishes in a few seconds, and the items are flat and small, so agents can read them with `get-dataset-items`. Example prompt: *"Use Discogs Marketplace Scraper to find the 20 cheapest copies of Discogs release 249504 in Near Mint condition and tell me the median price paid."*

#### Can I integrate Discogs marketplace data with other apps?

Yes: Google Sheets, Slack, Make, Zapier, n8n, Airtable or your own webhook, through Apify [integrations](https://apify.com/integrations) and [webhooks](https://docs.apify.com/platform/integrations/webhooks). Schedule a run every morning and send underpriced copies to your inbox or a spreadsheet.

#### Why do I need a proxy?

Discogs' marketplace pages are protected by Cloudflare. The Actor defaults to Apify's datacenter proxy in the US (Residential also works) and uses a browser-like TLS fingerprint that passes without a headless browser. If a run is blocked it retries on a fresh proxy session; if it still fails the run fails with a clear message instead of returning an empty dataset.

#### Why is `shipping_price` empty?

Discogs shows the shipping cost for a buyer in the proxy's country. When the seller does not ship there, the shipping amount is missing and `unavailable_in` names the country. Pick another proxy country in the **Proxy** field to see prices for buyers elsewhere.

#### Does it include sold prices?

It includes the **last sold date and the low, median and high price paid** for each release, as shown on the release page. The list of individual past sales (`/sell/history`) needs a Discogs login and is not available.

#### Is it legal to scrape Discogs?

The Actor only collects publicly visible marketplace listings, the same data anyone can see on discogs.com. Listings show seller usernames and notes, and rules such as GDPR may apply to how you store and use them. Check your use case and Discogs' terms with a lawyer. More background: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

#### Discogs Marketplace Scraper not working? Feedback

Open an issue on the **Issues** tab of this Actor with the run link and we will look at it. Feature ideas are welcome there too.

#### Other scrapers by us

| Actor | Covers |
|---|---|
| [Kiyoh Reviews Scraper](https://apify.com/carabain-digital/kiyoh-reviews) | Dutch customer reviews from kiyoh.com |
| [Yelp Reviews Scraper](https://apify.com/carabain-digital/yelp-reviews) | Yelp business reviews |

⭐ **Does it work well for you?** A review on the Store page helps others find this Actor and helps us keep it maintained.

# Actor input Schema

## `start_urls` (type: `array`):

Release, master or seller pages copied from discogs.com. Example: `https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up`. A master (`/master/13509`) is expanded into its versions, a seller page (`/seller/Ronan266/profile`) gives that seller's inventory, `/sell/list?release_id=249504&condition=...&ships_from=...` keeps the filters in the URL. Leave empty to use Search.

## `search` (type: `string`):

Free-text search in the Discogs database: the best matching releases are scraped. Example: `daft punk discovery vinyl`. Works together with the URLs above; set Max releases to control how many releases are used.

## `limit` (type: `integer`):

Stop after this many marketplace listings in total. Example: `200`. Discogs shows up to 250 copies per request, so large releases are fast.

## `sort` (type: `string`):

Order of the listings per release, by the price converted to the viewer's currency. Example: `price_asc` for the cheapest copies first. A `sort` in your URL wins.

## `max_releases` (type: `integer`):

For a master (its versions), a search, or a seller page: how many releases to scrape listings for or to add release data (have/want, last sold, price statistics) for. Example: `10`.

## `discogs_token` (type: `string`):

A personal access token from discogs.com/settings/developers raises the release-data rate limit from 25 to 60 requests per minute. Only useful for searches and masters with many releases. Leave empty for normal runs.

## `proxyConfiguration` (type: `object`):

Discogs sits behind Cloudflare. The default (Apify datacenter proxy, country US) passes and is the cheapest; prices are converted to USD and `unavailable_in` / shipping refer to US buyers. Another country changes the converted currency and shipping. Switch to Residential if runs get blocked.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up"
    }
  ],
  "limit": 25,
  "sort": "price_asc",
  "max_releases": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

All scraped marketplace listings, one item per record copy for sale.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "start_urls": [
        {
            "url": "https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up"
        }
    ],
    "limit": 25,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("carabain-digital/discogs-marketplace").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "start_urls": [{ "url": "https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up" }],
    "limit": 25,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("carabain-digital/discogs-marketplace").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "start_urls": [
    {
      "url": "https://www.discogs.com/release/249504-Rick-Astley-Never-Gonna-Give-You-Up"
    }
  ],
  "limit": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call carabain-digital/discogs-marketplace --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,carabain-digital/discogs-marketplace"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sdby5bIGDkDv5Xbut/builds/r3eQgaNzeChgxGn8Y/openapi.json
