{
  "openapi": "3.0.1",
  "info": {
    "title": "Whop Marketplace Scraper API",
    "description": "Scrape the Whop marketplace at scale. Export every public product, price, creator, category, rating, and review into one clean spreadsheet. Filter, sort, and rank the whole board without login. Search, product, company, and leaderboard inputs supported.",
    "version": "0.0",
    "x-build-id": "LfXQzTf7jKJxhC93f"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lurkapi~whop-marketplace-scraper-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lurkapi-whop-marketplace-scraper-api",
        "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/lurkapi~whop-marketplace-scraper-api/runs": {
      "post": {
        "operationId": "runs-sync-lurkapi-whop-marketplace-scraper-api",
        "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/lurkapi~whop-marketplace-scraper-api/run-sync": {
      "post": {
        "operationId": "run-sync-lurkapi-whop-marketplace-scraper-api",
        "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": {
          "queries": {
            "title": "Search queries",
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Marketplace search terms, one per line. Duplicates are merged case-insensitively. Leave empty if you only want to scrape specific URLs below.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "default": []
          },
          "startUrls": {
            "title": "Whop URLs",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Public search, product, company, leaderboard, or filtered leaderboard URLs, one per line.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            },
            "default": []
          },
          "maxProducts": {
            "title": "Maximum products",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of normalized product rows returned for the run. Product limit is 10,000 per run.",
            "default": 100
          },
          "priceMin": {
            "title": "Minimum price ($)",
            "minimum": 0,
            "type": "number",
            "description": "Keep products at or above this normalized current USD price. Setting either price bound activates one paid price filter."
          },
          "priceMax": {
            "title": "Maximum price ($)",
            "minimum": 0,
            "type": "number",
            "description": "Keep products at or below this normalized current USD price."
          },
          "category": {
            "title": "Category ($)",
            "maxLength": 100,
            "type": "string",
            "description": "Case-insensitive category name or category ID. Whitespace is trimmed on both sides."
          },
          "verified": {
            "title": "Verification ($)",
            "enum": [
              "any",
              "verified",
              "unverified"
            ],
            "type": "string",
            "description": "Keep only verified or only unverified products. Any is free.",
            "default": "any"
          },
          "pricingType": {
            "title": "Free or paid ($)",
            "enum": [
              "any",
              "free",
              "paid"
            ],
            "type": "string",
            "description": "Keep products with a free or paid available plan. Any is free.",
            "default": "any"
          },
          "minimumRating": {
            "title": "Minimum rating ($)",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Return products at or above this public average rating."
          },
          "minimumReviewCount": {
            "title": "Minimum review count ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Return products with at least this many published reviews."
          },
          "minimumActiveUsers": {
            "title": "Minimum active users ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Return products with at least this many public active users."
          },
          "revenueMin": {
            "title": "Minimum product GMV ($)",
            "minimum": 0,
            "type": "number",
            "description": "Requires revenue enrichment. Setting either GMV bound activates one paid revenue filter."
          },
          "revenueMax": {
            "title": "Maximum product GMV ($)",
            "minimum": 0,
            "type": "number",
            "description": "Requires revenue enrichment."
          },
          "createdAfter": {
            "title": "Created on or after ($)",
            "type": "string",
            "description": "Setting either date bound activates one paid creation-date filter."
          },
          "createdBefore": {
            "title": "Created on or before ($)",
            "type": "string",
            "description": "Latest product creation date, inclusive."
          },
          "planType": {
            "title": "Plan type ($)",
            "enum": [
              "any",
              "renewal",
              "one_time",
              "split_pay"
            ],
            "type": "string",
            "description": "Return products whose default public plan has this billing type.",
            "default": "any"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "source",
              "newest",
              "price",
              "rating",
              "reviewCount",
              "activeUsers",
              "revenue"
            ],
            "type": "string",
            "description": "Source/relevance order is free. Any other sort costs one sorting event per emitted product. Revenue sort requires revenue enrichment.",
            "default": "source"
          },
          "sortDirection": {
            "title": "Sort direction",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "Direction for the selected sort field. Source order ignores this setting.",
            "default": "desc"
          },
          "includeRevenue": {
            "title": "Revenue enrichment ($)",
            "type": "boolean",
            "description": "Adds product GMV and, for matched searches, a public 90-day daily keyword GMV series. Charged only for rows where enrichment succeeded.",
            "default": false
          },
          "includeReviews": {
            "title": "Reviews enrichment ($)",
            "type": "boolean",
            "description": "Adds public company-level reviews to each product. Charged only for rows where review retrieval succeeded.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Maximum reviews per product",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Used only when reviews enrichment is enabled. Run-wide safety cap is 50,000 returned reviews.",
            "default": 20
          },
          "includeDescription": {
            "title": "Output: description",
            "type": "boolean",
            "description": "Include the public shortened product description.",
            "default": true
          },
          "includeCompany": {
            "title": "Output: company",
            "type": "boolean",
            "description": "Include the nested public company profile.",
            "default": true
          },
          "includeOwner": {
            "title": "Output: owner",
            "type": "boolean",
            "description": "Include the public product creator (name, username, bio, profile picture).",
            "default": true
          },
          "includePricing": {
            "title": "Output: pricing",
            "type": "boolean",
            "description": "Include the default public plan and normalized current price.",
            "default": true
          },
          "includeMetrics": {
            "title": "Output: metrics",
            "type": "boolean",
            "description": "Include ratings, review count, active users, ranking, and product GMV.",
            "default": true
          },
          "includeImages": {
            "title": "Output: images",
            "type": "boolean",
            "description": "Include the product banner, product logo, company logo, and gallery image URLs.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}