{
  "openapi": "3.0.1",
  "info": {
    "title": "Bandcamp Music Scraper",
    "description": "[💰 from $2 / 1K] Extract Bandcamp artists, labels, albums, tracks, and fans. Scrape full discographies, track listings with audio previews, prices, tags, and supporter lists from URLs, keyword search, or genre and location discovery.",
    "version": "1.0",
    "x-build-id": "VqNZ7x8e9aPDMOHkC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~bandcamp-music-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-bandcamp-music-scraper",
        "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/solidcode~bandcamp-music-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-bandcamp-music-scraper",
        "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/solidcode~bandcamp-music-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-bandcamp-music-scraper",
        "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": {
          "startUrls": {
            "title": "Bandcamp URLs",
            "type": "array",
            "description": "Paste any Bandcamp links. The scraper auto-detects what each one is: an artist or label page (e.g. artistname.bandcamp.com), an album page (/album/...), or a single track (/track/...). For an artist or label page, every release on their discography is collected. (To collect fans, use the Include Supporters option below.)",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search Keywords",
            "type": "array",
            "description": "Words to look up on Bandcamp, such as an artist name, album title, or genre (e.g. 'lo-fi hip hop' or 'Aphex Twin'). Each keyword returns matching artists, albums, and tracks. Bandcamp returns up to 50 matches per keyword, so add several related keywords when you want a wider sweep. No need to build URLs yourself.",
            "items": {
              "type": "string"
            }
          },
          "searchType": {
            "title": "Search For",
            "enum": [
              "all",
              "artists_labels",
              "albums",
              "tracks",
              "fans"
            ],
            "type": "string",
            "description": "Which kind of result your keywords should return. Only applies to Search Keywords above.",
            "default": "all"
          },
          "discoverGenre": {
            "title": "Discover by Genre",
            "enum": [
              "none",
              "electronic",
              "rock",
              "metal",
              "alternative",
              "hip-hop-rap",
              "experimental",
              "punk",
              "folk",
              "pop",
              "ambient",
              "soundtrack",
              "world",
              "jazz",
              "acoustic",
              "funk",
              "r-b-soul",
              "devotional",
              "classical",
              "reggae",
              "podcasts",
              "country",
              "spoken-word",
              "comedy",
              "blues",
              "kids",
              "audiobooks",
              "latin"
            ],
            "type": "string",
            "description": "Browse trending and recommended releases in a music genre, the way Bandcamp's Discover page works. Leave as 'None' to skip genre discovery.",
            "default": "none"
          },
          "discoverLocation": {
            "title": "Discover by Location",
            "type": "string",
            "description": "Narrow genre discovery to releases tagged from a place, such as 'berlin', 'tokyo', or 'los angeles'. Leave empty for worldwide results. Only applies when a genre is selected above."
          },
          "sortBy": {
            "title": "Sort Discovery By",
            "enum": [
              "top",
              "new",
              "rand"
            ],
            "type": "string",
            "description": "How to order genre discovery results.",
            "default": "top"
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of results to return across all URLs, searches, and discovery. Set to 0 for unlimited. Each search keyword contributes at most 50 matches (Bandcamp's own limit), so a high number needs artist URLs, more keywords, or genre discovery to fill it. Tip: start with 10-50 to test, then increase.",
            "default": 100
          },
          "includeTracks": {
            "title": "Include Track Listings",
            "type": "boolean",
            "description": "For each release, also return its full track list with titles, durations, and track numbers, plus a 30-second audio preview link for every track Bandcamp streams. Artists choose which tracks stream, so on some releases only a few tracks carry a preview. Preview links come straight from Bandcamp and stay playable for 24 hours from the moment the run collects them, so grab the audio on run day — re-running the same input later returns fresh links to the same tracks. Track rows carry the release currency; the price and release date stay on the album row, because a Bandcamp tracklist carries no per-track price or date. Turn off for a lighter dataset with release-level data only.",
            "default": true
          },
          "includeFans": {
            "title": "Include Supporters",
            "type": "boolean",
            "description": "For each release, also return the fans who bought or wishlisted it (their username and profile link). Popular releases can have thousands of supporters, so to keep runs predictable this is capped at 500 supporters per release. Leave off unless you need supporter data.",
            "default": false
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}