{
  "openapi": "3.0.1",
  "info": {
    "title": "Reverb Trending Gear Scraper",
    "description": "Export Reverb demand data: sales in the last 30 and 90 days, price trend, sell-through and watchers per product. CSV, Excel, JSON or XML.",
    "version": "0.1",
    "x-build-id": "aFICm9EHvnzAoiWk0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parseforge~reverb-trending-gear-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parseforge-reverb-trending-gear-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/parseforge~reverb-trending-gear-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parseforge-reverb-trending-gear-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/parseforge~reverb-trending-gear-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parseforge-reverb-trending-gear-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": {
          "collections": {
            "title": "What to scrape",
            "type": "array",
            "description": "One or more collections. Rows from every collection land in the same dataset, tagged by the `collection` field. maxItems is the budget for the whole run: each collection gets an even share and whatever it does not use rolls over to the next one.",
            "items": {
              "type": "string",
              "enum": [
                "listings",
                "products",
                "categories",
                "curated-sets",
                "sales",
                "articles"
              ],
              "enumTitles": [
                "Listings - marketplace items for sale",
                "Products - canonical gear models with new/used low prices",
                "Categories - the full Reverb category tree",
                "Curated sets - collections Reverb is featuring",
                "Sales - live promotions and coupon codes",
                "Articles - Reverb News posts"
              ]
            },
            "default": [
              "listings"
            ]
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Total rows for the run, shared across the selected collections. Free Apify plans are capped at 10 rows as a preview. Reverb serves at most 20,000 items per marketplace query; ask for more and the query is automatically split into price bands to get past that window.",
            "default": 100
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Free-text search over listings, for example \"1959 les paul\" or \"tube screamer\". Leave empty to browse everything."
          },
          "make": {
            "title": "Brand",
            "type": "string",
            "description": "Brand name as Reverb spells it, for example Fender, Gibson, Boss, Roland. An unknown brand is ignored by Reverb rather than rejected, so check the row count if you get more than you expected."
          },
          "productType": {
            "title": "Product type",
            "type": "string",
            "description": "Top-level gear type slug, for example electric-guitars, acoustic-guitars, effects-and-pedals, amps, keyboards-and-synths, drums-and-percussion, pro-audio, bass-guitars, folk-instruments, home-audio, parts, accessories, band-and-orchestra, dj-and-lighting-gear."
          },
          "category": {
            "title": "Sub-category",
            "type": "string",
            "description": "Sub-category slug, for example solid-body or 5-string-or-more. Reverb only honours this together with a product type; run the \"categories\" collection to see every slug."
          },
          "categoryUuid": {
            "title": "Category UUID",
            "type": "string",
            "description": "Alternative to the two fields above: the category UUID from the \"categories\" collection. Works on its own."
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "all",
              "used",
              "new",
              "b-stock",
              "mint",
              "excellent",
              "very-good",
              "good",
              "fair",
              "non-functioning"
            ],
            "type": "string",
            "description": "Condition filter. \"all\" covers both new and used gear."
          },
          "priceMin": {
            "title": "Min price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest asking price to include, in US dollars."
          },
          "priceMax": {
            "title": "Max price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest asking price to include, in US dollars."
          },
          "yearMin": {
            "title": "Built after (year)",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Earliest build year to include, matched against the year Reverb has on the listing."
          },
          "yearMax": {
            "title": "Built before (year)",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Latest build year to include, matched against the year Reverb has on the listing."
          },
          "itemRegion": {
            "title": "Item located in",
            "type": "string",
            "description": "Two-letter country code of the seller's location, for example US, GB, DE, JP."
          },
          "shipsTo": {
            "title": "Ships to",
            "type": "string",
            "description": "Two-letter country code the item can be shipped to."
          },
          "handmade": {
            "title": "Handmade only",
            "type": "boolean",
            "description": "Only gear Reverb flags as handmade.",
            "default": false
          },
          "freeShipping": {
            "title": "Free shipping only",
            "type": "boolean",
            "description": "Only listings that ship free.",
            "default": false
          },
          "preferredSeller": {
            "title": "Preferred sellers only",
            "type": "boolean",
            "description": "Only listings from sellers holding the Preferred Seller badge.",
            "default": false
          },
          "curatedSetId": {
            "title": "Curated set ID",
            "type": "integer",
            "description": "Only listings inside one of Reverb's featured sets. IDs come from the \"curated-sets\" collection."
          },
          "saleId": {
            "title": "Sale ID",
            "type": "integer",
            "description": "Only listings taking part in one live sale. IDs come from the \"sales\" collection."
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "created_at|desc",
              "published_at|desc",
              "price|asc",
              "price|desc"
            ],
            "type": "string",
            "description": "Reverb accepts any string here and silently ignores the ones it does not know, so only the four orders that were measured to work are offered."
          },
          "includeListingStats": {
            "title": "Add demand signals (1 extra request per listing)",
            "type": "boolean",
            "description": "Fetches each listing's detail page to add watchers, views, offer count, exact location, videos, payment methods and return policy. This is what makes a listing set rankable by demand.",
            "default": false
          },
          "includeShopProfiles": {
            "title": "Add seller profiles (1 extra request per shop)",
            "type": "boolean",
            "description": "Adds the seller's slug, country, shop type, website, vacation status and quick-shipper/quick-responder badges. Each shop is fetched once per run even when it has many listings.",
            "default": false
          },
          "includeListingCounts": {
            "title": "Count live listings per category (1 extra request per category)",
            "type": "boolean",
            "description": "Fills listingCount on the \"categories\" collection with how many items are listed in that category right now. Curated sets always get their count; categories are opt-in because there are 320 of them.",
            "default": false
          },
          "rankBy": {
            "title": "Rank listings by demand",
            "enum": [
              "none",
              "watches",
              "views"
            ],
            "type": "string",
            "description": "Orders the listings this run collected and writes a rankPosition on each row. Needs the demand signals above and turns them on automatically.",
            "default": "none"
          },
          "productQuery": {
            "title": "Product search",
            "type": "string",
            "description": "Free-text search for the \"products\" collection, for example \"stratocaster\". Falls back to the listing search query when empty."
          },
          "useApifyProxy": {
            "title": "Allow Apify Proxy fallback",
            "type": "boolean",
            "description": "Reverb's API is reached directly, which is free and fast. Leave this on so the run can fall back to Apify Proxy (datacenter, then residential) if the container's IP gets blocked. Turning it off makes a blocked run fail instead.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}