{
  "openapi": "3.0.1",
  "info": {
    "title": "🛍️ Whop Marketplace Data Scraper",
    "description": "Turn any Whop.com search, category, or listing into structured data: pricing, plans, company and owner profiles, growth metrics, affiliate terms, and reviews. Self-healing GraphQL scraper that keeps working through Whop backend changes.",
    "version": "1.0",
    "x-build-id": "YGnX5PjUE2V0dlFFT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/citrine_venus~whop-marketplace-data-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-citrine_venus-whop-marketplace-data-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/citrine_venus~whop-marketplace-data-scraper/runs": {
      "post": {
        "operationId": "runs-sync-citrine_venus-whop-marketplace-data-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/citrine_venus~whop-marketplace-data-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-citrine_venus-whop-marketplace-data-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": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "🔗 Whop URLs",
            "type": "array",
            "description": "📎 Paste Whop search, category, product, or company page URLs — one per line, or upload a file. Bulk input supported. Bare `prod_*` / `biz_*` IDs also work.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "queries": {
            "title": "🔎 Search keywords",
            "type": "array",
            "description": "🗝️ Keywords to search on Whop — for example `trading`, `ai agency`, `fitness coaching`. Each is searched separately.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "catalogBrowse": {
            "title": "🗂️ Browse the full catalog",
            "type": "boolean",
            "description": "🛍️ When no URL or keyword is given, walk the entire live Whop marketplace catalog instead of doing nothing.",
            "default": true
          },
          "scrapeCompanies": {
            "title": "🏢 Collect companies instead of products",
            "type": "boolean",
            "description": "🏢 Turn this on to get one record per business/company (with its product list) instead of one record per listing.",
            "default": false
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "trending",
              "newest_arrivals",
              "most_money_made_24_hours",
              "average_review_rating",
              "most_reviews_7_days",
              "most_reviews_24_hours",
              "highest_bounties",
              "trending_3_hours",
              "created_at",
              "global_affiliate_percentage",
              "average_time_spent_24_hours",
              "most_affiliate_earnings_24_hours",
              "last_24_hours_total_seconds",
              "id"
            ],
            "type": "string",
            "description": "📊 How the catalog is ordered before your other filters are applied.",
            "default": "trending"
          },
          "sortDirection": {
            "title": "🔃 Sort direction",
            "enum": [
              "",
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "⬆️⬇️ Ascending or descending. Leave on default for Whop's own ordering (works well with 'Date added' to reach the oldest listings).",
            "default": ""
          },
          "categories": {
            "title": "🏷️ Categories",
            "type": "array",
            "description": "🏷️ Top-level Whop categories, e.g. `ai`, `trading`, `personal-development`. Each category runs as its own pass, so 'Max results per input' applies to each.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "priceMin": {
            "title": "💵 Minimum price",
            "minimum": 0,
            "type": "number",
            "description": "💰 Lowest price to include, in the listing's own currency."
          },
          "priceMax": {
            "title": "💵 Maximum price",
            "minimum": 0,
            "type": "number",
            "description": "💰 Highest price to include, in the listing's own currency."
          },
          "affiliatePercentageMin": {
            "title": "🤝 Minimum affiliate commission %",
            "minimum": 0,
            "maximum": 10000,
            "type": "number",
            "description": "🤝 Only listings offering at least this affiliate commission."
          },
          "affiliateEnabledOnly": {
            "title": "🤝 Only listings with an affiliate program",
            "type": "boolean",
            "description": "🤝 Keep only listings that currently run an affiliate program.",
            "default": false
          },
          "discoverableOnly": {
            "title": "🔍 Only listings published to Discover",
            "type": "boolean",
            "description": "🔍 Keep only listings Whop has published to its public Discover feed.",
            "default": true
          },
          "minRating": {
            "title": "⭐ Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "⭐ Drop listings rated below this (0–5)."
          },
          "minReviews": {
            "title": "📝 Minimum review count",
            "minimum": 0,
            "type": "integer",
            "description": "📝 Drop listings with fewer published reviews than this."
          },
          "minMembers": {
            "title": "👥 Minimum active members",
            "minimum": 0,
            "type": "integer",
            "description": "👥 Drop listings with fewer active users than this."
          },
          "verifiedOnly": {
            "title": "✅ Whop-verified listings only",
            "type": "boolean",
            "description": "✅ Keep only listings that carry Whop's verified badge.",
            "default": false
          },
          "createdAfter": {
            "title": "📅 Created after",
            "type": "string",
            "description": "📅 Only listings created after this date."
          },
          "createdBefore": {
            "title": "📅 Created before",
            "type": "string",
            "description": "📅 Only listings created before this date."
          },
          "freeOnly": {
            "title": "🆓 Free listings only",
            "type": "boolean",
            "description": "🆓 Keep only listings that don't charge anything.",
            "default": false
          },
          "paidOnly": {
            "title": "💳 Paid listings only",
            "type": "boolean",
            "description": "💳 Keep only listings that charge something.",
            "default": false
          },
          "titleContains": {
            "title": "🔤 Title/description contains",
            "type": "string",
            "description": "🔤 Keep only listings whose title, headline or description contains this text."
          },
          "withSocialsOnly": {
            "title": "📧 Only listings with a contact link",
            "type": "boolean",
            "description": "📧 Lead-gen mode: drop anything with no social/contact link at all.",
            "default": false
          },
          "includeSocials": {
            "title": "📧 Contact links & socials",
            "type": "boolean",
            "description": "📧 Creator and company social handles and links.",
            "default": true
          },
          "includeOwner": {
            "title": "👤 Owner profile",
            "type": "boolean",
            "description": "👤 Name, bio, city, country, follower count of the person behind the listing.",
            "default": true
          },
          "includeCompanyDetails": {
            "title": "🏢 Company details",
            "type": "boolean",
            "description": "🏢 Company description, member count, views, review stats.",
            "default": true
          },
          "includeGrowthMetrics": {
            "title": "📈 Growth metrics",
            "type": "boolean",
            "description": "📈 3h / 24h / 30d new users, 24h GMV, impressions, clicks, likes, shares.",
            "default": true
          },
          "includeAffiliate": {
            "title": "🤝 Affiliate terms",
            "type": "boolean",
            "description": "🤝 Commission percentage and program status.",
            "default": true
          },
          "includePlans": {
            "title": "💳 All pricing plans",
            "type": "boolean",
            "description": "💳 Every visible pricing plan, not just the default one.",
            "default": true
          },
          "maxPlansPerProduct": {
            "title": "💳 Max plans per listing",
            "minimum": 1,
            "maximum": 2500,
            "type": "integer",
            "description": "💳 More plans per listing costs a bit more time per request.",
            "default": 5
          },
          "includeImages": {
            "title": "🖼️ Gallery images & videos",
            "type": "boolean",
            "description": "🖼️ Pull the listing's gallery images and videos.",
            "default": true
          },
          "includeFaq": {
            "title": "❓ FAQ entries",
            "type": "boolean",
            "description": "❓ Pull the listing's published FAQ questions and answers.",
            "default": false
          },
          "includeExperiences": {
            "title": "🧩 Bundled apps/experiences",
            "type": "boolean",
            "description": "🧩 Pull the apps/experiences bundled inside the listing.",
            "default": false
          },
          "includeReviews": {
            "title": "⭐ Full review text",
            "type": "boolean",
            "description": "⭐ Fetch the actual review text and star breakdown per listing (a little slower).",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "⭐ Max reviews per listing",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "⭐ Cap on how many reviews are fetched per listing when full review text is on.",
            "default": 5
          },
          "includeCompanyProducts": {
            "title": "📦 Nest each company's product list",
            "type": "boolean",
            "description": "📦 Nest each company's own product catalog inside its record.",
            "default": false
          },
          "getKeywordRevenueDetails": {
            "title": "💰 Daily revenue per keyword",
            "type": "boolean",
            "description": "💰 Marketplace-wide daily GMV for each search keyword.",
            "default": false
          },
          "getKeywordSearchVolume": {
            "title": "📊 Search volume per keyword",
            "type": "boolean",
            "description": "📊 How often each keyword is searched on Whop (last 30 days).",
            "default": false
          },
          "keywordRevenueDays": {
            "title": "📅 Revenue history window (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "📅 How many days of daily revenue history to fetch per keyword.",
            "default": 90
          },
          "getTopKeywords": {
            "title": "🏆 Marketplace-wide top keywords",
            "type": "boolean",
            "description": "🏆 Fetch Whop's own top-keywords-by-search-volume list.",
            "default": false
          },
          "limit": {
            "title": "💯 Max results per input",
            "minimum": 1,
            "maximum": 500000,
            "type": "integer",
            "description": "🎯 Stop after this many listings have been saved for each URL/keyword/category. Exact, not approximate.",
            "default": 10
          },
          "concurrency": {
            "title": "⚡ Parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "⚡ How many requests can be in flight at once.",
            "default": 8
          },
          "maxRetries": {
            "title": "🔁 Retries per request",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "🔁 Attempts on the current connection route before falling back or giving up on that request.",
            "default": 3
          },
          "requestDelay": {
            "title": "🐢 Delay between requests (seconds)",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "🐢 A small pause keeps the run polite and stable.",
            "default": 0
          },
          "resumeOffset": {
            "title": "⏭️ Resume offset",
            "minimum": 0,
            "type": "integer",
            "description": "⏭️ Skip the first N catalog rows to continue a previous run.",
            "default": 0
          },
          "maxScanned": {
            "title": "🧭 Max listings to scan",
            "minimum": 0,
            "type": "integer",
            "description": "🧭 Give up after examining this many listings when quality filters are very narrow. `0` = no cap.",
            "default": 50000
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "🚦 By default the run connects with no proxy at all, and automatically falls back to a datacenter route and then a residential route only if Whop pushes back — then stays on that route. Pick your own route here to override that.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}