{
  "openapi": "3.0.1",
  "info": {
    "title": "Whatnot Scraper",
    "description": "Scrape Whatnot listings, live shows, sellers, and categories in one dataset. Track viewer and show-count stats over time, monitor only new or changed items, and add an AI Fair Value estimate for Pokémon cards. No account needed.",
    "version": "0.1",
    "x-build-id": "cO6c3gaw93cfle48v"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/phantom_coder~whatnot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-phantom_coder-whatnot-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/phantom_coder~whatnot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-phantom_coder-whatnot-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/phantom_coder~whatnot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-phantom_coder-whatnot-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": {
          "searchQueries": {
            "title": "🔍 Search terms",
            "type": "array",
            "description": "Terms to search for on Whatnot, for example \"pokemon cards\". Each search adds its top results to the run.",
            "default": [
              "pokemon cards"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchType": {
            "title": "🎯 Search type",
            "enum": [
              "products",
              "liveShows",
              "sellers",
              "all"
            ],
            "type": "string",
            "description": "What a search term should look for.",
            "default": "products"
          },
          "startUrls": {
            "title": "🔗 Whatnot URLs",
            "type": "array",
            "description": "Any Whatnot URL: a listing, a seller profile, a live show, a category/tag page, or a search results page. Each is routed automatically.",
            "items": {
              "type": "string"
            }
          },
          "sellers": {
            "title": "🧑‍💼 Sellers",
            "type": "array",
            "description": "Usernames or profile URLs to scrape directly, without a search.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "🗂️ Categories",
            "type": "array",
            "description": "Category slugs or URLs, for example \"pokemon_cards\" or https://www.whatnot.com/tag/pokemon_cards.",
            "items": {
              "type": "string"
            }
          },
          "listCategoryTree": {
            "title": "🌳 List the category tree instead of scraping",
            "type": "boolean",
            "description": "Returns the category tree as rows instead of listings or shows. Starts from the categories above, or the whole tree when none are given. Ignores every other start point and setting below.",
            "default": false
          },
          "categoryTreeDepth": {
            "title": "↕️ Category tree depth",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many levels of subcategories to include when listing the category tree.",
            "default": 2
          },
          "maxResultsPerQuery": {
            "title": "🔢 Max results per search term",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many of the top results to return for each search term.",
            "default": 30
          },
          "maxResultsPerSeller": {
            "title": "🔢 Max results per seller",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many shop listings, shows, and reviews to return for each seller.",
            "default": 30
          },
          "maxResultsPerCategory": {
            "title": "🔢 Max live shows per category",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many live shows to return for each category. Set to 0 to return only the category row itself (plus a category snapshot, when stats tracking is on) - the cheapest way to track just category-level demand.",
            "default": 30
          },
          "minPrice": {
            "title": "💵 Min price (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Only return listings at or above this price in USD."
          },
          "maxPrice": {
            "title": "💵 Max price (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Only return listings at or below this price in USD."
          },
          "listingFormat": {
            "title": "🏷️ Listing format",
            "enum": [
              "any",
              "auction",
              "buyItNow"
            ],
            "type": "string",
            "description": "Only return listings of this format.",
            "default": "any"
          },
          "condition": {
            "title": "🏷️ Condition",
            "type": "array",
            "description": "Only return listings in one of these conditions, for example \"New\", \"Used\", or \"Near Mint\". Applies only to product searches, and only when the category offers a condition attribute - otherwise it is ignored. Sellers enter this value as free text, so the exact options differ by category (trading cards and sneakers both offer dozens, e.g. \"Near Mint\", \"Light Played\", \"Brand New\"); matching against Whatnot's own current list is case-insensitive, so \"new\" also matches \"New\".",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "bestMatch",
              "priceLowToHigh",
              "priceHighToLow",
              "newest",
              "viewersHighToLow",
              "viewersLowToHigh"
            ],
            "type": "string",
            "description": "Applies to product searches (price options) and live-show searches (viewer options). Live shows from a category are always sorted by most viewers.",
            "default": "bestMatch"
          },
          "excludeSellers": {
            "title": "🚫 Exclude sellers",
            "type": "array",
            "description": "Usernames to leave out of every result.",
            "items": {
              "type": "string"
            }
          },
          "includeSellerShop": {
            "title": "🛍️ Include shop listings",
            "type": "boolean",
            "description": "For each seller, also return their current shop listings.",
            "default": true
          },
          "includeSellerShows": {
            "title": "📺 Include live and upcoming shows",
            "type": "boolean",
            "description": "For each seller, also return their live and scheduled shows.",
            "default": true
          },
          "includeSellerReviews": {
            "title": "⭐ Include reviews",
            "type": "boolean",
            "description": "For each seller, also return their buyer reviews.",
            "default": false
          },
          "trackCategoryStats": {
            "title": "📈 Track category and live-show stats over time",
            "type": "boolean",
            "description": "For each category above, add a snapshot row with the current viewer count, live-show count, and top live shows, plus the change since the last run of this Actor. Schedule the Actor (for example daily) to build a trend.",
            "default": false
          },
          "monitorMode": {
            "title": "🔁 Monitor mode: only new or changed results",
            "type": "boolean",
            "description": "Push (and charge for) only listings, shows, and sellers that are new or changed since the last run with this same input. Schedule the Actor to get an ongoing feed of changes instead of the full result every time.",
            "default": false
          },
          "trackingStoreName": {
            "title": "🗄️ Tracking store name",
            "type": "string",
            "description": "Name of the key-value store used to remember state between runs, for both monitor mode and category stats. Use letters, digits, and hyphens. Change it to keep separate tracking histories for different schedules.",
            "default": "whatnot-tracking"
          },
          "resetTracking": {
            "title": "♻️ Reset tracking state before this run",
            "type": "boolean",
            "description": "Clears the stored monitor and category-stats history before this run, as if it were the first run.",
            "default": false
          },
          "enableFairValue": {
            "title": "💎 Enable Fair Value Analysis ($)",
            "type": "boolean",
            "description": "Attach Fair Value Analysis data to covered Pokémon single-card listings. See below for details.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}