{
  "openapi": "3.0.1",
  "info": {
    "title": "Whop Content Rewards Scraper",
    "description": "Find Whop clipping campaigns that are actually paying. Each row carries CPM, budget left, daily burn, days of runway, payout per creator, 7-day momentum, and a 0-100 opportunity score so a parked budget does not rank like a live one. Full board or one campaign URL. JSON or CSV out.",
    "version": "0.1",
    "x-build-id": "XiAs5ytPzWRAXPFXQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~whop-content-rewards-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-whop-content-rewards-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/memo23~whop-content-rewards-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-whop-content-rewards-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/memo23~whop-content-rewards-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-whop-content-rewards-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": {
          "startUrls": {
            "title": "Board or campaign links",
            "type": "array",
            "description": "Leave empty, or use https://contentrewards.com/discover, to read the whole public board. Add a campaign link from contentrewards.com or whop.com, or a bare campaign ID (the 36-character UUID inside a campaign link), to fetch just those campaigns. Board and campaign links can be mixed.",
            "items": {
              "type": "string"
            }
          },
          "searchText": {
            "title": "Contains words",
            "type": "string",
            "description": "Keep campaigns whose title, brand or description contains this text, ignoring case, e.g. poker or energy drink. Empty: no text filter."
          },
          "sortBy": {
            "title": "Put first",
            "enum": [
              "opportunity",
              "budgetLeft",
              "reward",
              "payoutPerCreator",
              "daysLeft",
              "burn",
              "fewestCreators",
              "newest",
              "progress"
            ],
            "type": "string",
            "description": "Which campaigns come first in the dataset, and so which ones survive the row limit. Biggest value first for every option except Fewest creators (smallest first) and Newest (most recently listed first). Campaigns missing the value go last. Default: Budget left.",
            "default": "budgetLeft"
          },
          "maxItems": {
            "title": "Return at most",
            "minimum": 1,
            "type": "integer",
            "description": "Rows kept after filtering and sorting, e.g. 50 for the top 50. Campaigns past the limit are not returned and not billed. Default 1000.",
            "default": 1000
          },
          "minOpportunityScore": {
            "title": "Opportunity score at least (0-100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Our 0-100 score per campaign: 35% pay per 1K views (full marks at $5), 25% budget left (full marks at $25,000), 25% how few creators compete (100 creators is half marks; a board that has paid nothing is capped at half), 15% runway (full marks for 3 to 60 days). e.g. 60. Campaigns without a score are left out when this is set."
          },
          "minRewardPerThousand": {
            "title": "Pays at least, per 1K views (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum advertised reward for 1,000 views, in whole dollars, e.g. 2. Empty: any rate."
          },
          "minPayoutPerCreatorUsd": {
            "title": "Paid per creator so far, at least (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Budget spent so far divided by the number of creators, e.g. 50. A rough answer to whether people on this campaign actually get paid. Empty: no minimum."
          },
          "minBudgetLeftUsd": {
            "title": "Budget left, at least (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Unspent budget in dollars, e.g. 5000. Empty: any amount."
          },
          "maxCreators": {
            "title": "Creators, at most",
            "minimum": 0,
            "type": "integer",
            "description": "Fewer creators means less competition for the same budget, e.g. 200. Empty: any number."
          },
          "minEstimatedDaysLeft": {
            "title": "Runway, at least (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Days until the budget runs out at the current daily spend, e.g. 7. Filters out campaigns about to close. Empty: any runway."
          },
          "maxProgressPercentage": {
            "title": "Budget used, at most (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Share of the total budget already spent, 0-100, e.g. 80 skips campaigns that are 80% or more through their money. Empty: any progress."
          },
          "platforms": {
            "title": "Platforms",
            "type": "array",
            "description": "Keep campaigns that accept at least one of these: tiktok, instagram, youtube, x, facebook. One per line. Empty: every platform.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "payoutModels": {
            "title": "How it pays",
            "type": "array",
            "description": "Keep these payout models only: cpm (per view), retainer or per-post. One per line. Empty: every model.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "contentTags": {
            "title": "Content type",
            "type": "array",
            "description": "clipping, or ugc (which covers both ugc-with-face and ugc-faceless). A campaign needs at least one of the tags you list. Empty: every type.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Category names or their slugs as the board shows them, e.g. Gaming, Music, Finance or personal-brand. A campaign needs at least one. Empty: every category.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "status": {
            "title": "Status",
            "enum": [
              "active",
              "all"
            ],
            "type": "string",
            "description": "active (default) drops anything the board marks as not active. all keeps every status. The public board mostly lists active campaigns anyway.",
            "default": "active"
          },
          "listedAfter": {
            "title": "Listed on or after",
            "type": "string",
            "description": "A date in YYYY-MM-DD form, e.g. 2026-09-01. Campaigns listed before it are dropped, and so are campaigns with no listing date. A date the actor cannot read matches nothing. Empty: no start date."
          },
          "maxAgeDays": {
            "title": "Listed within the last (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep campaigns listed at most this many days ago, e.g. 14. Empty: any age."
          },
          "trackTrends": {
            "title": "Compare with the previous run",
            "type": "boolean",
            "description": "On: each row gains budgetLeftChangeUsd, observedBurnUsdPerDay, burnAcceleration, creatorsChange, hoursSinceLastRun and trendSignal, measured against what the last run saw. The first run sets the baseline. Off (default): single-run numbers only.",
            "default": false
          },
          "onlyNew": {
            "title": "Return only campaigns not seen before",
            "type": "boolean",
            "description": "On: the first run returns the board as usual; later runs return only campaigns that no earlier run returned, so a scheduled run bills only for new ones. Campaigns cut by Return at most are not marked as seen and can come back next time. Off (default): every matching campaign, every run.",
            "default": false
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: Apify datacenter proxy, which the public board accepts. If a run comes back with no campaigns, switch to the residential group.",
            "default": {
              "useApifyProxy": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}