# Discogs Scraper (`aurenic/discogs-scraper`) Actor

Extract releases, masters, artists, labels, discographies, and marketplace pricing from Discogs — the world's largest music database. Pure API, no browser.

- **URL**: https://apify.com/aurenic/discogs-scraper.md
- **Developed by:** [Aurenic](https://apify.com/aurenic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Discogs Scraper

Extract releases, masters, artists, labels, discographies, and marketplace pricing from Discogs — the world's largest music database, covering 17M+ releases, 9M+ artists, and 2M+ labels.

### What does Discogs Scraper do?

Scrape the Discogs music database via the official public API (`api.discogs.com`). Nine input modes:

- **Search** — full-text search across releases, masters, artists, or labels with filters (genre, style, country, year, format).
- **Release by ID** — full release metadata: tracklist, formats, labels, community have/want, rating, for-sale count, lowest price.
- **Master by ID** — canonical work with tracklist and main release pointer.
- **Artist by ID** — profile, real name, name variations, aliases, band members, external URLs.
- **Label by ID** — label profile, contact info, sublabels, parent label.
- **Artist discography** — complete discography of an artist, paginated.
- **Label catalog** — complete release catalog of a label, paginated.
- **Marketplace stats** — number for sale and lowest asking price for any release.
- **Resolve Discogs URLs** — paste any Discogs URL (release, master, artist, label) and get the structured record back.

All API access is HTTP-only via `api.discogs.com`. No browser, no HTML parsing, no anti-bot wall.

### Output fields

#### Search results

| Field | Description |
|---|---|
| recordType | `search-release` / `search-master` / `search-artist` / `search-label` |
| id | Discogs ID |
| title | Release title or entity name |
| year | Release year |
| country | Country of release |
| genres / styles | Genre and style arrays |
| formats | Format array (Vinyl, CD, Digital, etc.) |
| labels | Array of label names |
| catalogNumber | Label catalog number |
| barcode | Barcode array |
| imageUrl | Cover image URL |
| discogsUrl | Direct Discogs URL |

#### Release

Adds `tracklist`, `have`, `want`, `rating`, `ratingCount`, `numForSale`, `lowestPrice`, `notes`, `dataQuality`.

#### Artist / Label

Adds `profile`, `realName`, `nameVariations`, `aliases`, `members`, `urls`, `sublabels`, `parentLabel`.

#### Marketplace stats

| Field | Description |
|---|---|
| releaseId | Discogs release ID |
| numForSale | Copies listed for sale |
| lowestPrice | Lowest asking price |
| currency | Currency code |
| discogsUrl | Marketplace sell URL |

### Who is it for?

- **Record sellers and collectors** tracking vinyl and CD market values
- **Music researchers** building label, artist, and release datasets
- **Recommendation engines** sourcing genres, styles, and release metadata
- **Catalog managers** enriching music libraries with Discogs data
- **Marketplace analytics** monitoring inventory and pricing across pressings

### Pricing

**$0.90 per 1,000 results.** No subscription.

| Results | Cost |
|---|---|
| 100 | $0.09 |
| 1,000 | $0.90 |
| 10,000 | $9.00 |

### How to use it

1. Pick a **Mode** from the dropdown.
2. Fill in the mode's required inputs (search query, IDs, or URLs).
3. Optionally add a **Discogs personal access token** to raise the rate limit from 25 to 60 requests/minute.
4. Set **Max Results** (default 100).
5. Click **Start**.

### Output example

```json
{
  "recordType": "release",
  "id": 249504,
  "title": "Nevermind",
  "year": 1991,
  "released": "1991-09-24",
  "country": "US",
  "releasedFormats": ["Vinyl", "LP", "Album"],
  "formatDescriptions": ["LP", "Album"],
  "formatQuantity": "1",
  "genres": ["Rock"],
  "styles": ["Grunge", "Alternative Rock"],
  "labels": [{ "id": 1958, "name": "DGC", "catno": "DGC-24425" }],
  "artists": [{ "id": 125246, "name": "Nirvana" }],
  "tracklist": [
    { "position": "A1", "title": "Smells Like Teen Spirit", "duration": "5:01" },
    { "position": "A2", "title": "In Bloom", "duration": "4:14" }
  ],
  "have": 45678,
  "want": 12345,
  "rating": 4.42,
  "ratingCount": 5678,
  "numForSale": 234,
  "lowestPrice": 12.5,
  "notes": "Recorded at Sound City...",
  "imageUrl": "https://i.discogs.com/...",
  "discogsUrl": "https://www.discogs.com/release/249504",
  "dataQuality": "Correct",
  "scrapedAt": "2026-09-20T18:00:00.000Z"
}
```

### Technical details

- Built on the **official Discogs public REST API** (`api.discogs.com`) — no HTML scraping, no browser
- **Anonymous reads work** at 25 requests/minute. Add an optional **personal access token** to raise the limit to 60 req/min
- Self-throttles to stay under the rate limit, with automatic backoff on 429 and `Retry-After` header support
- Descriptive `User-Agent` sent on every request (Discogs requirement)
- No proxy needed — the API accepts datacenter IPs

### Known limits

- **Anonymous rate limit is 25 req/min.** For large runs (1,000+ items), supply a free Discogs personal access token to triple the throughput. Get one at `discogs.com/settings/developers`.
- **Marketplace stats** are release-level aggregates (num for sale, lowest price). Individual listing data requires user-level OAuth, which is out of scope.
- **Search pagination** is capped by Discogs at 100 pages (10,000 results). For deeper coverage, split by year, genre, or label.
- **Search results are shallow** — returned records include basic metadata only. Chain search → release IDs for full details.

### FAQ

**Do I need a Discogs account?** No. Anonymous reads cover search, release, master, artist, label, and marketplace stats. A token is optional (raises rate limit only).

**Do I need a proxy?** No. The Discogs API accepts datacenter IPs without restriction.

**What's the fastest way to get a discography?** Mode `artistReleases` with an artist ID. For a label catalog, use `labelReleases`.

**How do I export data?** After a run, go to Storage → Export as JSON, CSV, Excel.

### Support

Open an issue on the Actor's page for bugs or feature requests.

# Actor input Schema

## `mode` (type: `string`):

What to scrape from Discogs.

## `searchQuery` (type: `string`):

Full-text search term (artist, album, track). Required for search mode.

## `searchType` (type: `string`):

Filter search results. 'All types' returns mixed releases, masters, artists, and labels.

## `searchFilters` (type: `object`):

Optional filters: genre, style, country, year, format. Example: {"genre":"Jazz","year":"1975"}.

## `releaseIds` (type: `array`):

Discogs release IDs (e.g. 249504 for Nevermind). Used for release and marketplaceStats modes.

## `masterIds` (type: `array`):

Discogs master IDs (canonical works). Used for master mode.

## `artistIds` (type: `array`):

Discogs artist IDs. Used for artist and artistReleases modes.

## `labelIds` (type: `array`):

Discogs label IDs. Used for label and labelReleases modes.

## `urls` (type: `array`):

Any Discogs release / master / artist / label URL. Used for byUrl mode.

## `maxResults` (type: `integer`):

Hard cap on items per run.

## `discogsToken` (type: `string`):

Optional. Raises rate limit from 25 req/min (anonymous) to 60 req/min. Get one at discogs.com/settings/developers.

## Actor input object example

```json
{
  "mode": "search",
  "searchType": "all",
  "searchFilters": {},
  "releaseIds": [],
  "masterIds": [],
  "artistIds": [
    "125246"
  ],
  "labelIds": [],
  "urls": [],
  "maxResults": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "releaseIds": [],
    "masterIds": [],
    "artistIds": [
        "125246"
    ],
    "labelIds": [],
    "urls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("aurenic/discogs-scraper").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 = {
    "releaseIds": [],
    "masterIds": [],
    "artistIds": ["125246"],
    "labelIds": [],
    "urls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("aurenic/discogs-scraper").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 '{
  "releaseIds": [],
  "masterIds": [],
  "artistIds": [
    "125246"
  ],
  "labelIds": [],
  "urls": []
}' |
apify call aurenic/discogs-scraper --silent --output-dataset

```

## MCP server setup

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

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/hF1Als5TIbJTKzcvp/builds/KqnNeqrFlZFHgTMST/openapi.json
