# Discogs Marketplace Price Scraper (`devilscrapes/discogs-sold-price`) Actor

Scrape Discogs marketplace listings (asking prices, seller, condition, ships-from) plus public marketplace stats for any release ID or search query. Public API + HTML. No login.

- **URL**: https://apify.com/devilscrapes/discogs-sold-price.md
- **Developed by:** [DevilScrapes](https://apify.com/devilscrapes) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

<img src=".actor/icon.svg" width="160" alt="Discogs Marketplace Price Scraper" />

## Discogs Marketplace Price Scraper

_We do the dirty work so your dataset stays clean._ 😈

**$5.05 / 1,000 rows** — Scrape Discogs marketplace listings (asking prices, seller, condition, ships-from) plus the per-release marketplace stats aggregate (lowest_price, num_for_sale, blocked_from_sale) for any Discogs release ID or free-text search query. Public Discogs API + public marketplace HTML. No login. No Discogs API key. No browser automation.

Discogs is the world's largest catalog of music releases and the secondary market for vinyl, CD, cassette, and other physical formats — yet its public API exposes only `lowest_price` and `num_for_sale` aggregates for any given release. The per-listing data (who is selling, at what price, with what media + sleeve grade, shipping from where) lives on Cloudflare-protected HTML pages and is invisible to any standard REST consumer. This Actor closes that gap: it joins the Discogs release-metadata REST endpoint, the marketplace-stats REST endpoint, and the public marketplace-listings HTML (paginated, 25 listings per page) into a single flat dataset with one row per listing and one optional aggregate row per release.

### 🎯 What this scrapes
Two row flavours share one flat schema. The `row_type` discriminator selects which fields are populated — listing rows carry per-seller pricing + condition + ratings; stats rows carry the per-release marketplace aggregate.

| Field | Type | Populated for |
|---|---|---|
| `row_type` | `"listing"` \| `"stats"` | both |
| `release_id` | integer | both |
| `release_title`, `artist`, `year`, `country`, `format_name`, `format_descriptions`, `genres`, `master_id`, `release_url` | from `/releases/{id}` | both |
| `listing_id`, `listing_url` | integer / string | listing rows |
| `asking_price`, `asking_currency` | float / ISO 4217 | listing rows |
| `shipping_text` | string (seller free-form) | listing rows |
| `condition_media`, `condition_sleeve` | Discogs grade vocab | listing rows |
| `seller_username`, `seller_rating_pct`, `seller_rating_count`, `seller_country` | strings + numerics | listing rows |
| `stats_lowest_price`, `stats_lowest_currency`, `stats_num_for_sale`, `stats_blocked_from_sale` | from `/marketplace/stats/{id}` | stats rows |
| `scraped_at` | ISO 8601 UTC | both |

### 🔥 Features
- Per-listing asking prices + sellers + condition + ships-from for every release you supply — the data Discogs does not expose in its REST API.
- Per-release marketplace stats row (lowest asking price + total listings count + blocked-from-sale flag), opt-in by default.
- Input by release ID (deterministic, fast) or by free-text search query (resolves the top N matches via the public Discogs search endpoint, no auth required).
- Single flat schema with a `row_type` discriminator — easy to join, easy to aggregate downstream by release_id or master_id.
- Pydantic v2 input validation — XOR between `releaseIds` and `searchQuery` enforced before any network call.
- Cloudflare bypass via `curl-cffi` chrome131 impersonation + one-shot Discogs homepage warm-up. Verified clean pass on 2026-05-16; no JS challenge, no Camoufox needed.
- Discogs-compliant `User-Agent` (`DevilScrapes/0.1 (+https://apify.com/DevilScrapes)`) on the REST API surface — Discogs rejects default UAs with 403.
- Conservative rate-limit pacing at one request every 1.5 seconds (~40 req/min) — under Discogs' 60 req/min API limit and the unwritten 25 req/min HTML ceiling.
- Exponential backoff with `Retry-After` honoured for `408 / 429 / 503` responses; max 5 attempts.
- Apify Proxy (`BUYPROXIES94952` group) **on by default** — Cloudflare 403s un-proxied Apify datacenter IPs on the Discogs marketplace HTML surface. Turn off only when running locally from a residential ISP.
- Per-release fail isolation — one bad release ID logs a WARNING and the run continues to the next.

### 💡 Use cases
- **Vinyl / CD reseller benchmarking** — pull every listing for releases in your inventory and benchmark your asking prices against the live competing supply (median, min, max, condition mix).
- **Music-collectibles arbitrage** — monitor cross-country shipping spreads (seller_country + asking_price + currency) for the same release; spot regional under-pricing.
- **Catalog / label market intel** — for a label's catalog of release IDs, track `num_for_sale` and `lowest_price` over time to see which titles are appreciating.
- **Journalism / pricing studies** — "the cheapest copy of Nevermind on Discogs right now" generators, automated with one Actor run per article.
- **Marketplace health monitoring** — count `stats_blocked_from_sale=true` rows across a watch-list to flag releases Discogs has quietly removed from sale.
- **Seller-quality screening** — filter listings by `seller_rating_pct >= 99.0` and `seller_rating_count >= 100` for a curated high-trust subset.

### ⚙️ How to use it
1. Open the Actor input form on the Apify Console.
2. Provide **either** `releaseIds` (recommended — direct, no ambiguity) or `searchQuery` — not both. Find a release ID in any Discogs URL: `discogs.com/release/249504-Rick-Astley-...` → `249504`.
3. If using `searchQuery`, set `maxSearchResults` to cap how many top hits to fetch (default 5, max 50).
4. Set `maxPagesPerRelease` (default 4 = 100 listings) and `maxListingsPerRelease` (default 100, max 500) to cap the per-release listing volume. The lower of the two wins.
5. Leave `includeStatsRow` on (default) to also get one aggregate `row_type="stats"` row per release. Turn off if you only want per-listing rows.
6. Leave `useProxy` on (default) — Cloudflare 403s un-proxied Apify datacenter IPs on the Discogs marketplace surface. Turn off only if you're running the Actor locally from a residential ISP.
7. Click **Start**. Results stream into the default dataset as JSON / CSV / Excel / XML.

#### Single release, first page

```json
{
  "releaseIds": [249504],
  "maxPagesPerRelease": 1,
  "maxListingsPerRelease": 25,
  "includeStatsRow": true,
  "useProxy": true
}
````

#### Search-driven, top 5 results, two pages each

```json
{
  "searchQuery": "nirvana nevermind",
  "maxSearchResults": 5,
  "maxPagesPerRelease": 2,
  "maxListingsPerRelease": 50,
  "includeStatsRow": true
}
```

### 📥 Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `releaseIds` | integer\[] | XOR | — | List of Discogs release IDs (1-100). XOR with `searchQuery`. |
| `searchQuery` | string | XOR | — | Free-text Discogs search; top N results become release IDs. XOR with `releaseIds`. |
| `maxSearchResults` | integer | no | `5` | Cap on results from `searchQuery` (1-50). |
| `maxPagesPerRelease` | integer | no | `4` | Cap on listings pages per release (1-20; 25 listings per page). |
| `maxListingsPerRelease` | integer | no | `100` | Hard cap on listing rows per release (1-500). |
| `includeStatsRow` | boolean | no | `true` | Emit one extra `row_type="stats"` row per release. |
| `useProxy` | boolean | no | `true` | Route through Apify Proxy (`BUYPROXIES94952`). Default ON — Cloudflare 403s un-proxied datacenter IPs. |

Exactly one of `releaseIds` or `searchQuery` must be provided. Passing both, or neither, raises a validation error before any network call.

### 📤 Output

One row per marketplace listing (and optionally one extra stats row per release), pushed to the default dataset and available as JSON, CSV, Excel, or XML.

```json
{
  "row_type": "listing",
  "release_id": 249504,
  "release_title": "Never Gonna Give You Up",
  "artist": "Rick Astley",
  "year": 1987,
  "country": "UK",
  "format_name": "Vinyl",
  "format_descriptions": ["7\"", "45 RPM", "Single", "Stereo"],
  "genres": ["Electronic", "Pop"],
  "master_id": 96559,
  "release_url": "https://www.discogs.com/release/249504",
  "listing_id": 3761251765,
  "listing_url": "https://www.discogs.com/sell/item/3761251765",
  "asking_price": 0.5,
  "asking_currency": "GBP",
  "shipping_text": "+£15.00",
  "condition_media": "Very Good Plus (VG+)",
  "condition_sleeve": "Generic",
  "seller_username": "Ronan266",
  "seller_rating_pct": 100.0,
  "seller_rating_count": 35,
  "seller_country": "United Kingdom",
  "stats_lowest_price": null,
  "stats_lowest_currency": null,
  "stats_num_for_sale": null,
  "stats_blocked_from_sale": null,
  "scraped_at": "2026-05-16T12:00:00.000Z"
}
```

#### Export formats

- **JSON** — full fidelity, all 27 fields, newline-delimited
- **CSV** — flat, one row per listing or stats record
- **Excel** — `.xlsx` via the Apify dataset converter
- **XML** — structured per-item

All formats are available via the Apify API: `GET /datasets/{id}/items?format=csv&clean=true`.

### 💰 Pricing

Pay-Per-Event (PPE) — you pay only for what you use:

| Event | Price (USD) | When |
|---|---|---|
| `actor-start` | $0.05 | Once per run, at boot |
| `result-row` | $0.005 | Per listing OR per stats row written |

#### Example costs

| Run | Rows | Cost |
|---|---|---|
| 1 release × 25 listings + 1 stats row | 26 | $0.18 |
| 5 releases × 100 listings + 5 stats rows | 505 | $2.58 |
| 10 releases × 100 listings + 10 stats rows | 1,010 | $5.10 |
| 50 releases × 100 listings + 50 stats rows | 5,050 | $25.30 |

At scale the per-row charge dominates: ~$5.05 per 1,000 rows. Pricing reflects the high commercial value of hand-parsed marketplace data (asking price, condition grade, seller country, seller rating) versus a pure API field copy.

### 🚧 Limitations

- **No closed-sale price history.** Discogs hosts sold-price stats at `/sell/history/{release_id}` but the page is gated behind Discogs account login (Auth0). Without user OAuth credentials it is unscrapable — out of scope for this Actor. What this Actor does instead: per-listing **asking prices** (the live offer side) plus the public `lowest_price` aggregate (the floor of the ask side).
- **Public Discogs surfaces only.** No authenticated Discogs API calls, no personal-token usage, no Discogs OAuth.
- **One snapshot per run.** Schedule recurring runs via Apify Schedules for time-series tracking; nothing in this Actor persists across runs.
- **Listing pages 25 items per page** — Discogs imposes this; combined with `maxPagesPerRelease: 20` (cap) gives a 500-listing hard ceiling per release per run.
- **Currency is not normalised.** Discogs serves prices in the seller's local currency for listings and in the request IP's currency for the stats API. Downstream consumers join by the `currency` field rather than expecting a single canonical USD.
- **Pacing**: ~40 req/min throughput. A 10-release run with 4 pages each takes roughly (10 × (1 + 1 + 4)) × 1.5s ≈ 90 seconds plus warm-up.
- **7-day default storage retention** on the Apify FREE tier. Export your dataset immediately after the run or upgrade for longer retention.

### ❓ FAQ

**Why "Marketplace Price" and not "Sold Price"?**

Discogs publishes two distinct price signals: (1) **active asking prices** on the marketplace listings page (public, scrapable), and (2) **completed-sale prices** at `/sell/history/{release_id}` (login-walled, not scrapable without user OAuth). This Actor delivers (1), plus the public `lowest_price` aggregate from the marketplace-stats API. For most reseller and arbitrage workflows the active asking-price distribution is the more actionable signal — it tells you what the market is asking right now, not what it cleared at six months ago.

**Why do I need a `User-Agent` header for Discogs?**

Discogs enforces a written policy ([Discogs API Terms](https://www.discogs.com/developers/)) requiring every API request to carry an Application-Name/Version `User-Agent`. Default `curl-cffi` headers (which impersonate a browser) work for the marketplace HTML surface but get rejected with 403 on the REST API. The Actor sends `DevilScrapes/0.1 (+https://apify.com/DevilScrapes)` on every API call automatically — you don't need to configure anything.

**What does `is_unavailable` equivalence look like here?**

There is no `is_unavailable` field — the analog is `stats_blocked_from_sale=true` (Discogs has flagged the release as un-sellable, e.g. legal/ToS reason) combined with `stats_num_for_sale=0` (zero active listings). If you want to know "is this release scarce", the canonical query is: `WHERE stats_num_for_sale < 5`.

**Can I scrape my own private wantlist or collection?**

No. This Actor scrapes only public marketplace data. Private user data (wantlist, collection, friends, messages) requires Discogs OAuth, which is intentionally out of scope.

**Can I fetch more than 100 release IDs in one run?**

No. The Pydantic input model caps `releaseIds` at 100 (and `maxListingsPerRelease` at 500, `maxPagesPerRelease` at 20). A single run thus emits at most 100 × 500 + 100 = 50,100 rows. Split larger workloads across multiple runs and concatenate the datasets.

**Why `curl-cffi` for a public website?**

Discogs marketplace pages are protected by Cloudflare. Plain `httpx` / `requests` get a 403 + JS challenge instantly. `curl-cffi` chrome131 impersonation replays a real browser's TLS + HTTP/2 fingerprint and passes Cloudflare cleanly after a one-shot homepage warm-up. This is the DevilScrapes house default per ADR-0002.

### Related Actors

Part of the Devil Scrapes **Niche Marketplace Intel** suite:

- **Steam Regional Price Scraper** — multi-region Steam game prices with USD equivalent.
- **Reverb Sold Listings Scraper** (in development) — sold listings on Reverb for music-gear arbitrage.

All three Actors share consistent pricing event names (`actor-start`, `result-row`) and field-naming conventions (snake\_case) so cross-marketplace arbitrage analyses can join cleanly.

### 💬 Your feedback

Found a bug, hit a rate limit, or need a new field on the output row (median asking price? seller-country histogram? condition-grade distribution)? Open an issue on the Actor's Apify Store page or contact the Devil Scrapes team at [apify.com/DevilScrapes](https://apify.com/DevilScrapes). We ship updates within days of validated reports.

# Actor input Schema

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

List of Discogs release IDs (integers) to scrape. Either <code>releaseIds</code> OR <code>searchQuery</code> must be provided — not both. Find a release ID in the URL: <code>discogs.com/release/<b>249504</b>-Rick-Astley-...</code>.

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

Free-text Discogs search. The Actor resolves the top <code>maxSearchResults</code> hits into release IDs. Either <code>releaseIds</code> OR <code>searchQuery</code> must be provided — not both.

## `maxSearchResults` (type: `integer`):

Cap on releases resolved from <code>searchQuery</code>. Ignored when <code>releaseIds</code> is set.

## `maxPagesPerRelease` (type: `integer`):

Hard cap on listings pages fetched per release (each page = 25 listings). Combined with <code>maxListingsPerRelease</code>.

## `maxListingsPerRelease` (type: `integer`):

Hard cap on listing rows emitted per release. Lower wins when both this and <code>maxPagesPerRelease</code> are set.

## `includeStatsRow` (type: `boolean`):

When true, emit one extra <code>row\_type="stats"</code> row per release with the public marketplace aggregate (lowest\_price, num\_for\_sale, blocked\_from\_sale).

## `useProxy` (type: `boolean`):

Route requests through Apify Proxy (<code>BUYPROXIES94952</code>). Default <strong>ON</strong> — Cloudflare on the Discogs marketplace HTML surface 403s un-proxied Apify datacenter IPs. Turn off only when running locally from a residential ISP.

## Actor input object example

```json
{
  "releaseIds": [
    "249504",
    "10843"
  ],
  "searchQuery": "nirvana nevermind",
  "maxSearchResults": 5,
  "maxPagesPerRelease": 4,
  "maxListingsPerRelease": 100,
  "includeStatsRow": true,
  "useProxy": true
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All dataset items as JSON.

## `datasetItemsCsv` (type: `string`):

Same data exported to CSV.

## `datasetView` (type: `string`):

Open the run dataset in the Console.

# 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": [
        "249504"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("devilscrapes/discogs-sold-price").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": ["249504"] }

# Run the Actor and wait for it to finish
run = client.actor("devilscrapes/discogs-sold-price").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "249504"
  ]
}' |
apify call devilscrapes/discogs-sold-price --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=devilscrapes/discogs-sold-price",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Discogs Marketplace Price Scraper",
        "description": "Scrape Discogs marketplace listings (asking prices, seller, condition, ships-from) plus public marketplace stats for any release ID or search query. Public API + HTML. No login.",
        "version": "0.2",
        "x-build-id": "GScc1HFRWjWgfbZs5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/devilscrapes~discogs-sold-price/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-devilscrapes-discogs-sold-price",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/devilscrapes~discogs-sold-price/runs": {
            "post": {
                "operationId": "runs-sync-devilscrapes-discogs-sold-price",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/devilscrapes~discogs-sold-price/run-sync": {
            "post": {
                "operationId": "run-sync-devilscrapes-discogs-sold-price",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "releaseIds": {
                        "title": "Discogs release IDs",
                        "type": "array",
                        "description": "List of Discogs release IDs (integers) to scrape. Either <code>releaseIds</code> OR <code>searchQuery</code> must be provided — not both. Find a release ID in the URL: <code>discogs.com/release/<b>249504</b>-Rick-Astley-...</code>.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Discogs search query",
                        "type": "string",
                        "description": "Free-text Discogs search. The Actor resolves the top <code>maxSearchResults</code> hits into release IDs. Either <code>releaseIds</code> OR <code>searchQuery</code> must be provided — not both."
                    },
                    "maxSearchResults": {
                        "title": "Max search results",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Cap on releases resolved from <code>searchQuery</code>. Ignored when <code>releaseIds</code> is set.",
                        "default": 5
                    },
                    "maxPagesPerRelease": {
                        "title": "Max marketplace pages per release",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Hard cap on listings pages fetched per release (each page = 25 listings). Combined with <code>maxListingsPerRelease</code>.",
                        "default": 4
                    },
                    "maxListingsPerRelease": {
                        "title": "Max listing rows per release",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Hard cap on listing rows emitted per release. Lower wins when both this and <code>maxPagesPerRelease</code> are set.",
                        "default": 100
                    },
                    "includeStatsRow": {
                        "title": "Include per-release stats row",
                        "type": "boolean",
                        "description": "When true, emit one extra <code>row_type=\"stats\"</code> row per release with the public marketplace aggregate (lowest_price, num_for_sale, blocked_from_sale).",
                        "default": true
                    },
                    "useProxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Route requests through Apify Proxy (<code>BUYPROXIES94952</code>). Default <strong>ON</strong> — Cloudflare on the Discogs marketplace HTML surface 403s un-proxied Apify datacenter IPs. Turn off only when running locally from a residential ISP.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
