# Bandcamp Scraper: Catalog & Release Monitor (`getascraper/bandcamp-authorized-media-resolver`) Actor

Scrape authorized public Bandcamp album, track, artist catalog, and Discover metadata. Export flat JSON/CSV, monitor new releases, and optionally resolve rights-approved ephemeral previews. $0.00088 per catalog row.

- **URL**: https://apify.com/getascraper/bandcamp-authorized-media-resolver.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Social media, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.29 / 1,000 catalog records

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Bandcamp Scraper: Catalog & Release Monitor

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#F3F8F8;border:1px solid #B9D9D7;border-top:4px solid #147D78;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Public Bandcamp catalog metadata, ready for monitoring and export.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Collect authorized album, track, artist, and Discover facts. Resolve ephemeral previews only with confirmed rights.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9D9D7;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F625E">◈ Release detail</span><br>
<span style="font-size:12px;color:#57534E">Keep track facts, artwork, dates, tags, and availability in one row set.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9D9D7;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F625E">◈ Artist catalogs</span><br>
<span style="font-size:12px;color:#57534E">Expand a public artist catalog without hand-copying each release.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9D9D7;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F625E">◈ Discovery watch</span><br>
<span style="font-size:12px;color:#57534E">Turn public Discover results into a repeatable research input.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9D9D7;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F625E">◈ Honest availability</span><br>
<span style="font-size:12px;color:#57534E">See metadata, unavailable pages, and authorized previews as distinct outcomes.</span>
</td>
</tr>
</table>

Bandcamp scraper for authorized public album, track, artist catalog, and Discover metadata. Export flat JSON or CSV, monitor new releases, and optionally resolve rights-approved ephemeral previews—without credentials, purchase tokens, paywall bypasses, or media downloads.

### 🔍 What it does

Use a public release or track URL for focused research. Use artist catalog mode to collect an artist's public catalog. Use Discover mode to review public discovery results. Each run can include track rows, release dates, tags, creator-published availability flags, artwork, pricing indicators, and a clear status.

Optional preview links are limited to creator-exposed, short-lived previews. They remain off unless you attest that you have permission. This Actor never downloads, archives, converts, or redistributes audio.

### 💡 Why use it

- **I am an independent-label operations manager** checking a release catalog before a distribution review, and need dates, track counts, artwork, and pricing details in one export.
- **I am a music researcher** comparing public releases and genre discovery results, and need records that retain their source pages and collection time.
- **I am a catalog manager** monitoring an artist's public catalog, and want scheduled runs to return only items not previously seen under my chosen state key.
- **I am a rights holder** validating a public preview in an internal workflow, and need its availability stated plainly instead of receiving an implied media entitlement.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#F3F8F8;border:1px solid #B9D9D7;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#147D78;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add public pages</span><br>
<span style="font-size:12px;color:#57534E">Paste release, track, artist, or Discover URLs you are allowed to use.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F3F8F8;border:1px solid #B9D9D7;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#147D78;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Choose the outcome</span><br>
<span style="font-size:12px;color:#57534E">Select URL, artist catalog, or Discover mode and set a sensible item limit.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F3F8F8;border:1px solid #B9D9D7;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#147D78;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Review clean rows</span><br>
<span style="font-size:12px;color:#57534E">Export public metadata or schedule a monitored catalog review.</span>
</td>
</tr>
</table>

### ⚙️ Input

| Field                  | Type          | Required | Description                                                                                  |
| ---------------------- | ------------- | -------- | -------------------------------------------------------------------------------------------- |
| \`startUrls\`          | array of URLs | Yes      | Public Bandcamp release, track, artist, or Discover pages to review.                         |
| \`mode\`               | enum          | No       | Chooses direct URLs, artist catalog expansion, or Discover results. Defaults to direct URLs. |
| \`includeTracks\`      | boolean       | No       | Adds one flat row per available album track. Defaults to on.                                 |
| \`includePreviewUrls\` | boolean       | No       | Requests creator-exposed, short-lived preview links. Keep it off for metadata-only work.     |
| \`confirmMediaRights\` | boolean       | No       | Confirms you have permission before preview links can be returned.                           |
| \`maxItems\`           | integer       | No       | Caps all output rows in the run. Defaults to 10.                                             |
| \`onlyNewItems\`       | boolean       | No       | Skips records already seen under the selected state key. Defaults to off.                    |
| \`since\`              | string        | No       | Keeps records with an available release or publish date on or after this ISO date.           |
| \`stateKey\`           | string        | No       | Names the history used for monitored runs. Defaults to \`default\`.                          |
| \`maxConcurrency\`     | integer       | No       | Limits simultaneous page requests. Defaults to 3.                                            |
| \`requestDelayMs\`     | integer       | No       | Sets the minimum pause before each page request. Defaults to 250 milliseconds.               |
| \`proxyConfiguration\` | object        | No       | Optional connection settings for the run.                                                    |

### 📦 Example output

This is a real metadata-only discovery row collected from a public Bandcamp page on July 27, 2026. Fields not present in the source are omitted.

\`\`\`json
{
"platform": "bandcamp",
"resourceType": "album",
"recordId": "album:3679651887",
"id": "3679651887",
"canonicalUrl": "https://veilofvisions.bandcamp.com/album/empty-forms",
"sourceUrl": "https://bandcamp.com/discover/metal?s=new&p=digital",
"sourceMode": "discover",
"status": "metadata_only",
"scrapedAt": "2026-07-27T17:05:57.844Z",
"title": "Empty Forms",
"artist": "Veil of Visions",
"artistId": "1702017202",
"artistUrl": "https://veilofvisions.bandcamp.com/",
"artistLocation": "Ukraine",
"trackCount": 6,
"totalDurationSeconds": 2451.9559020996094,
"releaseDate": "2026-07-27T00:00:00.000Z",
"currency": "USD",
"minimumPrice": 0,
"isNameYourPrice": true,
"isFreeDownload": false,
"isStreamable": true,
"availablePreviewCount": 1
}
\`\`\`

### 📊 Data table

| Field                     | Type             | Description                                                                       |
| ------------------------- | ---------------- | --------------------------------------------------------------------------------- |
| \`platform\`              | string           | Source platform name.                                                             |
| \`resourceType\`          | string           | Kind of row, such as album, track, artist, or status.                             |
| \`recordId\`              | string           | Stable Actor record key.                                                          |
| \`id\`                    | string           | Public item identifier when published on the page.                                |
| \`canonicalUrl\`          | string           | Public page for this record.                                                      |
| \`sourceUrl\`             | string           | URL supplied or followed for this result.                                         |
| \`sourceMode\`            | string           | Run mode that produced the row.                                                   |
| \`status\`                | string           | Result state, including metadata-only, unavailable, unsupported, or error states. |
| \`title\`                 | string           | Public release, track, or artist title.                                           |
| \`artist\`                | string           | Creator or artist name shown on the source page.                                  |
| \`artistId\`              | string           | Public artist identifier when available.                                          |
| \`artistUrl\`             | string           | Public artist page.                                                               |
| \`artistLocation\`        | string           | Creator-published location when available.                                        |
| \`albumTitle\`            | string           | Parent release title for a track.                                                 |
| \`albumId\`               | string           | Parent release identifier for a track.                                            |
| \`trackNumber\`           | integer          | Track position within its release.                                                |
| \`trackCount\`            | integer          | Number of tracks shown for a release.                                             |
| \`durationSeconds\`       | number           | Duration of one track in seconds.                                                 |
| \`totalDurationSeconds\`  | number           | Total shown duration for a release in seconds.                                    |
| \`releaseDate\`           | string           | Release date published on the source page.                                        |
| \`publishedAt\`           | string           | Publication timestamp when available.                                             |
| \`modifiedAt\`            | string           | Modification timestamp when available.                                            |
| \`description\`           | string           | Public release or artist description.                                             |
| \`credits\`               | string           | Creator-published credit text.                                                    |
| \`tags\`                  | array of strings | Public tags attached to the record.                                               |
| \`imageUrl\`              | string           | Artwork or artist image URL.                                                      |
| \`currency\`              | string           | Currency shown with public price information.                                     |
| \`minimumPrice\`          | number           | Minimum public price when published.                                              |
| \`isNameYourPrice\`       | boolean          | Whether the source presents a name-your-price option.                             |
| \`isFreeDownload\`        | boolean          | Whether the creator marks a release as free to download.                          |
| \`isStreamable\`          | boolean          | Whether the page presents a streamable item.                                      |
| \`isDownloadable\`        | boolean          | Source availability flag only. It is not a permission or link.                    |
| \`availablePreviewCount\` | integer          | Number of public previews found on the page.                                      |
| \`previewUrl\`            | string           | Optional creator-exposed preview link after rights confirmation.                  |
| \`previewFormat\`         | string           | Format stated for an authorized preview.                                          |
| \`previewExpiresAt\`      | string           | Expiry time for a short-lived preview link.                                       |
| \`previewEphemeral\`      | boolean          | States whether a preview link is short-lived.                                     |
| \`previewProvenance\`     | string           | Source context for an authorized preview link.                                    |
| \`errorMessage\`          | string           | Plain explanation when a row cannot return normal metadata.                       |
| \`scrapedAt\`             | string           | Time the Actor collected this row.                                                |

### 💰 Pricing

Costs **$0.00088 per catalog row**. A row is a public album, track, artist, or Discover result written to the default dataset. Use \`maxItems\` to keep test and scheduled runs bounded; platform compute charges may also apply under your Apify plan.

### ⭐ Share feedback

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#F3F8F8;border:1px solid #B9D9D7;border-left:5px solid #147D78;border-radius:10px 10px 0 0">
<span style="font-size:17px;font-weight:800;color:#1C1917">Was this catalog monitor useful?</span><br>
<span style="font-size:14px;color:#57534E">An honest review helps us understand where the Actor is useful and what needs improvement.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#147D78;border:1px solid #B9D9D7;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/bandcamp-authorized-media-resolver/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">Leave an honest review on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- Start with metadata-only runs. They are the right fit for most catalog and research work.
- Use \`includeTracks\` when a release needs track-level review.
- Keep preview links off unless you have permission and an immediate internal need.
- Give each monitored catalog its own \`stateKey\`.
- Treat availability flags as published metadata, not as a license or a media link.

### ❓ FAQ

##### Does this Actor download Bandcamp audio?

No. It does not fetch audio files, create media files, convert formats, or access purchases.

##### Can I get preview links for a release I manage?

Yes, if the page exposes a preview and you confirm you have permission. Returned previews are short-lived and do not grant rights beyond your authorization.

##### Can it access private releases, checkout pages, or login-only content?

No. It works with public pages only and does not use credentials, purchase tokens, or private media.

##### Can I monitor a Bandcamp artist catalog?

Yes. Use artist catalog mode with \`onlyNewItems\` and a stable \`stateKey\` for scheduled catalog review.

### 🔗 Other actors

- [Mixcloud Media Monitor: Shows, Creators, Search & Genres](https://apify.com/getascraper/mixcloud-media-monitor) ↗ - collects public show and creator metadata for music research.
- [Zing MP3 Metadata Resolver: Zing MP3](https://apify.com/getascraper/zing-mp3-media-resolver) ↗ - turns public Zing MP3 pages into structured music metadata.
- [Migu Music Scraper: 咪咕音乐](https://apify.com/getascraper/migu-music-scraper) ↗ - collects public music catalog, chart, and artist rows from Migu Music.
- [Kugou Music Scraper: 酷狗音乐 Catalog, Charts & Lyrics](https://apify.com/getascraper/kugou-music-scraper) ↗ - gathers public song, chart, artist, and lyric metadata from Kugou Music.
- [QQ Music Scraper: QQ音乐 Songs, Charts & Comments](https://apify.com/getascraper/qq-music-scraper) ↗ - collects public QQ Music song, chart, and artist data.

# Actor input Schema

## `startUrls` (type: `array`):

Public HTTPS Bandcamp URLs. The selected mode determines whether each URL is resolved directly, expanded as an artist catalog, or treated as a Discover filter URL.
## `mode` (type: `string`):

Resolve the supplied pages, expand artist catalogs, or return public Bandcamp Discover results.
## `includeTracks` (type: `boolean`):

Emit flat track rows when album detail pages are available. Album and artist rows remain separate.
## `includePreviewUrls` (type: `boolean`):

Return creator-exposed MP3-128 preview URLs with expiry and provenance fields. Leave disabled for metadata-only runs.
## `confirmMediaRights` (type: `boolean`):

Required when preview URLs are enabled. Confirm that you own the media or otherwise have authorization to resolve its public preview links.
## `maxItems` (type: `integer`):

Stop accepting output after this many rows.
## `onlyNewItems` (type: `boolean`):

For scheduled runs, omit IDs already recorded under the selected state key.
## `since` (type: `string`):

Optional ISO-8601 date or date-time. Records with an available release or publish date older than this value are skipped.
## `stateKey` (type: `string`):

Separates seen-item histories for different schedules or workflows.
## `maxConcurrency` (type: `integer`):

Maximum simultaneous HTTP requests.
## `requestDelayMs` (type: `integer`):

Minimum delay applied before each HTTP request.
## `proxyConfiguration` (type: `object`):

Optional Apify Proxy configuration. Standard datacenter routing is the default; residential groups are not required by the Actor.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://bandcamp.com/discover/ambient?s=new&p=digital"
    }
  ],
  "mode": "discover",
  "includeTracks": true,
  "includePreviewUrls": false,
  "confirmMediaRights": false,
  "maxItems": 10,
  "onlyNewItems": false,
  "since": "2020-01-01",
  "stateKey": "default",
  "maxConcurrency": 3,
  "requestDelayMs": 250,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

# Actor output Schema

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

No description

## `runStats` (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 = {
    "startUrls": [
        {
            "url": "https://bandcamp.com/discover/ambient?s=new&p=digital"
        }
    ],
    "mode": "discover",
    "maxItems": 10,
    "since": "2020-01-01",
    "stateKey": "default"
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/bandcamp-authorized-media-resolver").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 = {
    "startUrls": [{ "url": "https://bandcamp.com/discover/ambient?s=new&p=digital" }],
    "mode": "discover",
    "maxItems": 10,
    "since": "2020-01-01",
    "stateKey": "default",
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/bandcamp-authorized-media-resolver").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 '{
  "startUrls": [
    {
      "url": "https://bandcamp.com/discover/ambient?s=new&p=digital"
    }
  ],
  "mode": "discover",
  "maxItems": 10,
  "since": "2020-01-01",
  "stateKey": "default"
}' |
apify call getascraper/bandcamp-authorized-media-resolver --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=getascraper/bandcamp-authorized-media-resolver",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bandcamp Scraper: Catalog & Release Monitor",
        "description": "Scrape authorized public Bandcamp album, track, artist catalog, and Discover metadata. Export flat JSON/CSV, monitor new releases, and optionally resolve rights-approved ephemeral previews. $0.00088 per catalog row.",
        "version": "0.1",
        "x-build-id": "BT4wcDjKeBfRpYNIc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~bandcamp-authorized-media-resolver/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-bandcamp-authorized-media-resolver",
                "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/getascraper~bandcamp-authorized-media-resolver/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-bandcamp-authorized-media-resolver",
                "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/getascraper~bandcamp-authorized-media-resolver/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-bandcamp-authorized-media-resolver",
                "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",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Public HTTPS Bandcamp URLs. The selected mode determines whether each URL is resolved directly, expanded as an artist catalog, or treated as a Discover filter URL.",
                        "default": [
                            {
                                "url": "https://bandcamp.com/discover/ambient?s=new&p=digital"
                            }
                        ],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "mode": {
                        "title": "Run mode",
                        "enum": [
                            "urls",
                            "artistCatalog",
                            "discover"
                        ],
                        "type": "string",
                        "description": "Resolve the supplied pages, expand artist catalogs, or return public Bandcamp Discover results.",
                        "default": "discover"
                    },
                    "includeTracks": {
                        "title": "Include tracks",
                        "type": "boolean",
                        "description": "Emit flat track rows when album detail pages are available. Album and artist rows remain separate.",
                        "default": true
                    },
                    "includePreviewUrls": {
                        "title": "Include ephemeral preview URLs",
                        "type": "boolean",
                        "description": "Return creator-exposed MP3-128 preview URLs with expiry and provenance fields. Leave disabled for metadata-only runs.",
                        "default": false
                    },
                    "confirmMediaRights": {
                        "title": "I confirm I have permission",
                        "type": "boolean",
                        "description": "Required when preview URLs are enabled. Confirm that you own the media or otherwise have authorization to resolve its public preview links.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum output items",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Stop accepting output after this many rows.",
                        "default": 10
                    },
                    "onlyNewItems": {
                        "title": "Only new items",
                        "type": "boolean",
                        "description": "For scheduled runs, omit IDs already recorded under the selected state key.",
                        "default": false
                    },
                    "since": {
                        "title": "Released since",
                        "type": "string",
                        "description": "Optional ISO-8601 date or date-time. Records with an available release or publish date older than this value are skipped.",
                        "default": "2020-01-01"
                    },
                    "stateKey": {
                        "title": "Monitoring state key",
                        "minLength": 1,
                        "maxLength": 80,
                        "type": "string",
                        "description": "Separates seen-item histories for different schedules or workflows.",
                        "default": "default"
                    },
                    "maxConcurrency": {
                        "title": "Maximum concurrency",
                        "minimum": 1,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Maximum simultaneous HTTP requests.",
                        "default": 3
                    },
                    "requestDelayMs": {
                        "title": "Delay per request (milliseconds)",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Minimum delay applied before each HTTP request.",
                        "default": 250
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy configuration. Standard datacenter routing is the default; residential groups are not required by the Actor.",
                        "default": {
                            "useApifyProxy": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
