{
  "openapi": "3.0.1",
  "info": {
    "title": "Discogs Scraper - Vinyl Records, Prices & Price Stats",
    "description": "Scrape the Discogs catalogue by keyword, filter or link: releases, masters, artists and labels with tracklists, credits, matrix numbers, images and videos. Cross-pressing price statistics: lowest, median, highest and average asking price across an album's pressings, plus want/have demand.",
    "version": "0.1",
    "x-build-id": "f9zCbeauqBfpbMOMs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~discogs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-discogs-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/abotapi~discogs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-discogs-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/abotapi~discogs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-discogs-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search runs keyword and filter searches across the Discogs catalogue. URL mode reads only the exact releases, masters, artists or labels you paste.",
            "default": "search"
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Search mode only, ignored in URL mode. One or more keywords, for example \"nirvana nevermind\" or \"blue note 1568\". Each keyword is searched separately and gets an equal share of Max records. Leave empty to run a filter only search using the filters below.",
            "items": {
              "type": "string"
            }
          },
          "searchType": {
            "title": "What to return",
            "enum": [
              "release",
              "master",
              "artist",
              "label",
              "all"
            ],
            "type": "string",
            "description": "Search mode only. Which kind of catalogue entry the search returns. Releases are individual pressings and are the only kind with marketplace prices. Masters are albums across all their pressings.",
            "default": "release"
          },
          "artist": {
            "title": "Artist filter",
            "type": "string",
            "description": "Search mode only. Restrict results to this artist, for example \"Nirvana\". Works with or without a keyword."
          },
          "label": {
            "title": "Label filter",
            "type": "string",
            "description": "Search mode only. Restrict results to this record label, for example \"Sub Pop\" or \"Blue Note\"."
          },
          "genre": {
            "title": "Genre filter",
            "type": "string",
            "description": "Search mode only. Restrict results to one Discogs genre, for example \"Rock\", \"Jazz\", \"Electronic\", \"Hip Hop\", \"Funk / Soul\", \"Classical\"."
          },
          "style": {
            "title": "Style filter",
            "type": "string",
            "description": "Search mode only. Restrict results to one Discogs style, the finer grained tag under a genre, for example \"Grunge\", \"Hard Bop\", \"Deep House\", \"Post Punk\"."
          },
          "format": {
            "title": "Format filter",
            "type": "string",
            "description": "Search mode only. Restrict results to one physical or digital format, for example \"Vinyl\", \"LP\", \"CD\", \"Cassette\", \"7\\\"\", \"Album\", \"File\"."
          },
          "country": {
            "title": "Country filter",
            "type": "string",
            "description": "Search mode only. Restrict results to the country of the pressing, for example \"UK\", \"US\", \"Japan\", \"Germany\", \"Europe\"."
          },
          "year": {
            "title": "Year filter",
            "type": "string",
            "description": "Search mode only. Restrict results to a release year, for example \"1991\". A range such as \"1990-1995\" is also accepted by Discogs."
          },
          "catalogNumber": {
            "title": "Catalog number filter",
            "type": "string",
            "description": "Search mode only. Restrict results to a label catalog number, for example \"DGC2-4425\" or \"BLP 1568\". This is the number printed on the spine and label."
          },
          "barcode": {
            "title": "Barcode filter",
            "type": "string",
            "description": "Search mode only. Restrict results to a barcode or UPC/EAN, for example \"720642442517\". The fastest way to identify an exact pressing you are holding."
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "relevance",
              "year",
              "title",
              "format",
              "label",
              "catno",
              "country",
              "have",
              "want"
            ],
            "type": "string",
            "description": "Search mode only. Discogs applies this order to the search itself, so it changes which results the record budget keeps. \"Most wanted\" and \"Most collected\" are the two orders collectors use to find the desirable pressings first.",
            "default": "relevance"
          },
          "sortOrder": {
            "title": "Sort direction",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "Search mode only. Direction for the sort above. Ignored when Sort results by is set to best match.",
            "default": "desc"
          },
          "startUrls": {
            "title": "Catalogue links or ids",
            "type": "array",
            "description": "URL mode only, ignored in search mode. Paste Discogs release, master, artist or label links (https://www.discogs.com/release/249504-... , /master/13814, /artist/72872, /label/895). Bare ids in the r249504 / m13814 / a72872 / l895 shorthand are accepted too, and a plain number is read as a release id.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Catalogue links (alias)",
            "type": "array",
            "description": "Alias for Catalogue links or ids, accepted under the name other Apify actors use for URL mode. Entries from both fields are read in order and de-duplicated.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max records",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many records across the whole run. This is the run's cap. Use 0 for no limit, the run then stops when the searches run out of results.",
            "default": 20
          },
          "maxPages": {
            "title": "Max result pages per keyword",
            "minimum": 0,
            "type": "integer",
            "description": "Search mode only. Leave empty for no page limit, the run then stops at Max records or when Discogs runs out of results. Each page holds up to 100 records."
          },
          "fetchDetails": {
            "title": "Read the full record",
            "type": "boolean",
            "description": "Search mode: off by default, because search results already carry title, artist, year, country, format, labels, genres, styles, barcode and the have/want counts. Turn on to also read every result's full catalogue entry (tracklist, credits, images, videos, identifiers, matrix numbers, notes, rating) plus its live marketplace price. Each result read this way adds one Detail enrichment event. In URL mode the full record is always read, so this toggle changes nothing there and is never charged there.",
            "default": false
          },
          "priceStats": {
            "title": "Price statistics across an album's pressings",
            "type": "boolean",
            "description": "Off by default. The headline feature: instead of one pressing's lowest asking price, this walks the album's other pressings and returns the lowest, median, highest and average asking price across them, how many copies are for sale in total, and the want to have demand ratio for the whole album. Applies to releases and masters in both modes. Costs a handful of extra lookups per record and adds one Detail enrichment event.",
            "default": false
          },
          "maxPriceVersions": {
            "title": "Pressings to price per album",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Only used when Price statistics is on. How many of an album's pressings to ask the marketplace about, taken in descending order of how many collectors own them, so the sample follows the pressings with a live market. Higher values give a better distribution and cost more lookups per record.",
            "default": 5
          },
          "currency": {
            "title": "Price currency",
            "enum": [
              "USD",
              "GBP",
              "EUR",
              "CAD",
              "AUD",
              "JPY",
              "CHF",
              "MXN",
              "BRL",
              "NZD",
              "SEK",
              "ZAR"
            ],
            "type": "string",
            "description": "Currency for every marketplace price and price statistic. Discogs converts from the seller's own currency.",
            "default": "USD"
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large pull without returning records already collected there."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring, for example to watch an album's price statistics move. The first run returns every matching record as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each keyword, entity kind, filter, sort and lookup setup; use State key to name or deliberately share a monitoring campaign.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search, filter and lookup settings."
          },
          "emitUnchanged": {
            "title": "Emit unchanged records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search: not when Max records capped it, not when Max result pages capped it, and not when Resume was used. This returns, and bills, extra rows.",
            "default": false
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page per record export; other connectors get a best effort write or digest. Leave empty to skip; never changes the dataset output.",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which record pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on records written to each connector per run. Does not affect the dataset.",
            "default": 50
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings. The default works on every plan, including the free tier, and needs no configuration.",
            "default": {
              "useApifyProxy": true
            }
          },
          "discogsToken": {
            "title": "Discogs personal access token (optional)",
            "type": "string",
            "description": "Optional and never required. Create a free token at Discogs, Settings, Developers. It lets large pulls finish faster, and it unlocks the per condition valuation fields (Mint through Poor) that Discogs shows only to a signed in member. Leave empty to run fully anonymously."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}