# Whop Content Rewards Scraper for Campaigns (`maximedupre/whop-content-rewards-campaigns`) Actor

Find current public Whop Content Rewards campaigns from the directory or public campaign URLs. Filter by type, platform, category, payout, budget, competition, runway, and opportunity score, then review campaign economics, performance, insights, and optional public details.

- **URL**: https://apify.com/maximedupre/whop-content-rewards-campaigns.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Marketing, Business
- **Stats:** 3 total users, 2 monthly users, 25.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.01 / 1,000 campaigns

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🎯 Find public Whop campaigns with clear payout signals

For clippers, UGC creators, campaign researchers, and brands, this Actor finds current public Whop Content Rewards campaigns and saves structured dataset rows. Each row can include the campaign page, brand, status, type, accepted platforms, budget and payout values, performance, single-run insights, and optional public details. Use the filters to narrow the board and decide which campaign pages to review.

**Use cases**

- Start with **[Content Rewards Campaigns](https://apify.com/maximedupre/whop-content-rewards-campaigns/examples/content-rewards-campaigns)** to see the main public campaign directory.
- Find high-payout opportunities with **[High Paying Creator Campaigns](https://apify.com/maximedupre/whop-content-rewards-campaigns/examples/high-paying-creator-campaigns)**.
- Find campaigns with fewer competing creators using **[Low Competition Creator Campaigns](https://apify.com/maximedupre/whop-content-rewards-campaigns/examples/low-competition-creator-campaigns)**.
- Focus on accepted YouTube channels with **[Youtube Campaigns](https://apify.com/maximedupre/whop-content-rewards-campaigns/examples/youtube-campaigns)**.
- Focus on accepted TikTok channels with **[Tiktok Campaigns](https://apify.com/maximedupre/whop-content-rewards-campaigns/examples/tiktok-campaigns)**.
- Browse short-form clipping work with **[Clipping Campaigns](https://apify.com/maximedupre/whop-content-rewards-campaigns/examples/clipping-campaigns)**.
- Browse user-generated content work with **[Ugc Campaigns](https://apify.com/maximedupre/whop-content-rewards-campaigns/examples/ugc-campaigns)**.
- Review campaign opportunities for creators with **[Content Creator Campaigns](https://apify.com/maximedupre/whop-content-rewards-campaigns/examples/content-creator-campaigns)**.

#### 📊 Campaign economics and public details

The output schema exposes `campaignResults`, a link to the default dataset. Dataset rows include required campaign identity, status, type, campaign URL, economics, insights, and extraction time. When available, a row also includes brand, category, description, accepted platforms, funding time, public links, performance, repeated-run signals, and requested public details.

#### ▶️ Run a focused campaign search

Choose `Public directory` to scan the public campaign board, or choose `Campaign URLs` to read the public pages you provide. Set status, type, platform, category, text, threshold, and ordering options as needed. Turn on `Include public campaign details` when you need public requirements, platform payout rules, view limits, maximum payouts, or resource links. Leave `Maximum campaigns` empty to return all available results until the public source is exhausted. Set a value when you want to control the number of matching campaign rows and related campaign charges.

#### ⚙️ Input

The required field is `findCampaignsBy`. The other fields refine the public campaign search. The default status is `active`, the default type is `all`, the default order is `opportunity`, and public details are off by default.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `findCampaignsBy` | select | Required. Choose `directory` to scan the public campaign board or `campaignUrls` to read the public pages you provide. |
| `campaignUrls` | array of objects | In `campaignUrls` mode, add one or more public Whop campaign page URLs. The list is ignored in `directory` mode. |
| `campaignUrls[].url` | URL string | The public Whop campaign page URL to read. |
| `campaignStatus` | select | Choose `active`, `completed`, or `all`. The default is `active`, and some scopes may have no available records. |
| `campaignType` | select | Choose `clipping`, `ugc`, `mixed`, or `all`. The default is `all`. |
| `platforms` | array of strings | Return campaigns that accept at least one listed platform. Leave it empty to allow all platforms. |
| `categories` | array of strings | Return campaigns whose public category matches one of the listed names. Leave it empty to allow all categories. |
| `searchText` | string | Search the campaign title, brand, category, and description with a case-insensitive substring match. Use one search scope per run. |
| `minimumPayoutPerThousandViews` | number | Return campaigns with a payout rate at or above this amount per 1,000 views. Use the source currency. |
| `minimumRemainingBudget` | number | Return campaigns with at least this much public budget left. Use the source currency. |
| `maximumBudgetSpentProgress` | number | Return campaigns whose spent budget is at or below this percentage. Enter a number from 0 to 100. |
| `maximumParticipatingCreators` | integer | Return campaigns with no more than this many participating creators. |
| `minimumAveragePayoutPerCreator` | number | Return campaigns whose derived average payout per participating creator is at least this amount. Use the source currency. |
| `minimumEstimatedRunwayDays` | number | Return campaigns with at least this many estimated days of budget runway at the current pace. |
| `minimumOpportunityScore` | number | Return campaigns with an opportunity score at or above this value. Use the score scale shown in the results. |
| `orderBy` | select | Order matches by payout, remaining budget, recency, progress, competition, payout velocity, runway, or opportunity. The default is `opportunity`. |
| `includeDetails` | boolean | When `true`, request public requirements, platform payout rules, minimum views, maximum payouts, and public resource links for matching campaigns. The default is `false`. |
| `maxItems` | integer | Stop after this many matching campaigns. Leave this empty to return all available results until the public source is exhausted. |

**Default input**

This is the successful current-beta default input:

```json
{
  "findCampaignsBy": "directory",
  "campaignStatus": "active",
  "campaignType": "all",
  "orderBy": "opportunity",
  "includeDetails": false
}
```

#### 🧾 Output

The `campaignResults` output link opens the default dataset. The tables below describe the two public row shapes seen in current-beta runs. Optional fields may be absent when the source or the selected input does not provide them.

**Campaign row without requested details**

| Field | Type | What it does |
| --- | --- | --- |
| `campaignId` | string | Required. Stable public campaign ID. |
| `title` | string | Required. Public campaign title. |
| `brand` | string | Optional. Public brand or company named by the campaign. |
| `status` | string | Required. Public status, such as `active` or `completed`. |
| `type` | string | Required. Public type: `clipping`, `ugc`, or `mixed`. |
| `category` | string | Optional. Public campaign category. |
| `description` | string | Optional. Public campaign description. |
| `acceptedPlatforms` | array of strings | Optional. Social platforms accepted by the campaign. |
| `fundingTime` | date-time string | Optional. Public time when the campaign was funded. |
| `campaignUrl` | URI string | Required. Public campaign page URL. |
| `publicLinks` | array of objects | Optional. Public media or company links connected to the campaign. |
| `publicLinks[].kind` | string | Link kind, such as `media` or `company`. |
| `publicLinks[].url` | URI string | Public link URL. |
| `publicLinks[].title` | string | Optional. Public title of the linked item. |
| `economics` | object | Required. Public payout and budget values. |
| `economics.payoutPerThousandViews` | object | Required. Payout for 1,000 views. |
| `economics.payoutPerThousandViews.amount` | number | Normalized payout amount. |
| `economics.payoutPerThousandViews.currency` | string | Currency used for the payout. |
| `economics.payoutPerThousandViews.display` | string | Optional. Payout as shown by the source. |
| `economics.totalBudget` | object | Required. Total public campaign budget. |
| `economics.totalBudget.amount` | number | Normalized total budget amount. |
| `economics.totalBudget.currency` | string | Currency used for the total budget. |
| `economics.totalBudget.display` | string | Optional. Total budget as shown by the source. |
| `economics.spentBudget` | object | Required. Public budget spent so far. |
| `economics.spentBudget.amount` | number | Normalized spent budget amount. |
| `economics.spentBudget.currency` | string | Currency used for the spent budget. |
| `economics.spentBudget.display` | string | Optional. Spent budget as shown by the source. |
| `economics.remainingBudget` | object | Required. Public budget that remains. |
| `economics.remainingBudget.amount` | number | Normalized remaining budget amount. |
| `economics.remainingBudget.currency` | string | Currency used for the remaining budget. |
| `economics.budgetProgress` | number | Required. Percentage of the budget spent so far. |
| `economics.estimatedPayableViews` | integer | Required. Estimated views that can still earn a payout under the remaining budget. |
| `performance` | object | Optional. Published performance and competition data. |
| `performance.participatingCreatorCount` | integer | Number of creators taking part in the campaign. |
| `performance.totalViews` | integer | Total published views reported for the campaign. |
| `performance.successRate` | number | Public success measure reported for the campaign. |
| `performance.approvalRate` | number | Optional. Public approval rate reported for campaign submissions. |
| `performance.verificationStatus` | string | Public verification state for the performance data. |
| `insights` | object | Required. Measures derived from the campaign economics and performance data. |
| `insights.dailyBudgetBurn` | object | Estimated budget spent per day. |
| `insights.dailyBudgetBurn.amount` | number | Estimated daily budget amount. |
| `insights.dailyBudgetBurn.currency` | string | Currency used for the daily budget amount. |
| `insights.estimatedRunwayDays` | number | Optional. Estimated days before the remaining budget runs out at the current pace. |
| `insights.averagePayoutPerCreator` | object | Optional. Estimated average payout per participating creator. |
| `insights.averagePayoutPerCreator.amount` | number | Estimated average payout amount. |
| `insights.averagePayoutPerCreator.currency` | string | Currency used for the average payout. |
| `insights.viewsPerCreator` | number | Optional. Estimated average published views per creator. |
| `insights.budgetPace` | number | Estimated percentage of the total budget spent per day. |
| `insights.opportunityScore` | number | Required. Score used to rank campaigns by current opportunity. |
| `newSincePreviousRun` | boolean | Optional. Whether the campaign first appeared after the previous run when a comparison is available. |
| `spendChange` | object | Optional. Change in spent budget since the previous run when a comparison is available. |
| `spendChange.amount` | object | Required when `spendChange` is present. Normalized change in spent budget. |
| `spendChange.amount.amount` | number | Change in the spent budget amount. |
| `spendChange.amount.currency` | string | Currency used for the spend change. |
| `spendChange.amount.display` | string | Optional. Spend change as shown by the source or comparison. |
| `spendChange.percent` | number | Optional. Percentage change in spent budget. |
| `extractedAt` | date-time string | Required. Time when the public campaign data was extracted. |

This genuine standard row comes from the successful current-beta default-input run. It includes spend-change data because a comparison was available.

```json
{
  "campaignId": "5a53b5d2-35b2-42b6-a025-7654e380523e",
  "title": "Persona 4 Revival - North America Launch",
  "status": "active",
  "type": "clipping",
  "campaignUrl": "https://contentrewards.com/discover/5a53b5d2-35b2-42b6-a025-7654e380523e",
  "economics": {
    "payoutPerThousandViews": {
      "amount": 2.5,
      "currency": "USD",
      "display": "$$2.50"
    },
    "totalBudget": {
      "amount": 24000,
      "currency": "USD",
      "display": "$$24,000"
    },
    "spentBudget": {
      "amount": 655.38,
      "currency": "USD",
      "display": "$$655.38"
    },
    "remainingBudget": {
      "amount": 23344.62,
      "currency": "USD"
    },
    "budgetProgress": 3,
    "estimatedPayableViews": 9337848
  },
  "insights": {
    "opportunityScore": 100,
    "dailyBudgetBurn": {
      "amount": 222.2993534019883,
      "currency": "USD"
    },
    "estimatedRunwayDays": 105.01434054009803,
    "averagePayoutPerCreator": {
      "amount": 0.9581578947368421,
      "currency": "USD"
    },
    "viewsPerCreator": 724.1228070175439,
    "budgetPace": 0.9262473058416179
  },
  "extractedAt": "2026-08-29T18:45:16.547Z",
  "brand": "Clipping Culture",
  "category": "Entertainment",
  "description": "Post hype content for Persona 4 Revival on TikTok, Instagram, and YouTube Shorts. Build excitement around the story trailer and the upcoming Microsoft broadcast. ",
  "acceptedPlatforms": [
    "tiktok",
    "instagram",
    "youtube"
  ],
  "fundingTime": "2026-08-26T19:59:53.215Z",
  "publicLinks": [
    {
      "kind": "media",
      "url": "https://cdn.contentrewards.com/user_acK8AH1Mtmt1D/1787776076819.jpg",
      "title": "Persona 4 Revival - North America Launch"
    },
    {
      "kind": "company",
      "url": "https://whop.com/discover/biz_966dDkeVuhmgzh",
      "title": "Clipping Culture"
    }
  ],
  "performance": {
    "participatingCreatorCount": 684,
    "totalViews": 495300,
    "successRate": 78,
    "verificationStatus": "verified"
  },
  "newSincePreviousRun": false,
  "spendChange": {
    "amount": {
      "amount": 0.21000000000003638,
      "currency": "USD",
      "display": "+$0.21"
    },
    "percent": 0.03205274966803064
  }
}
```

**Campaign row with requested public details**

| Field | Type | What it does |
| --- | --- | --- |
| `campaignId` | string | Required. Stable public campaign ID. |
| `title` | string | Required. Public campaign title. |
| `brand` | string | Optional. Public brand or company named by the campaign. |
| `status` | string | Required. Public status, such as `active` or `completed`. |
| `type` | string | Required. Public type: `clipping`, `ugc`, or `mixed`. |
| `category` | string | Optional. Public campaign category. |
| `description` | string | Optional. Public campaign description. |
| `acceptedPlatforms` | array of strings | Optional. Social platforms accepted by the campaign. |
| `fundingTime` | date-time string | Optional. Public time when the campaign was funded. |
| `campaignUrl` | URI string | Required. Public campaign page URL. |
| `publicLinks` | array of objects | Optional. Public media or company links connected to the campaign. |
| `publicLinks[].kind` | string | Link kind, such as `media` or `company`. |
| `publicLinks[].url` | URI string | Public link URL. |
| `publicLinks[].title` | string | Optional. Public title of the linked item. |
| `economics` | object | Required. Public payout and budget values. |
| `economics.payoutPerThousandViews` | object | Required. Payout for 1,000 views. |
| `economics.payoutPerThousandViews.amount` | number | Normalized payout amount. |
| `economics.payoutPerThousandViews.currency` | string | Currency used for the payout. |
| `economics.payoutPerThousandViews.display` | string | Optional. Payout as shown by the source. |
| `economics.totalBudget` | object | Required. Total public campaign budget. |
| `economics.totalBudget.amount` | number | Normalized total budget amount. |
| `economics.totalBudget.currency` | string | Currency used for the total budget. |
| `economics.totalBudget.display` | string | Optional. Total budget as shown by the source. |
| `economics.spentBudget` | object | Required. Public budget spent so far. |
| `economics.spentBudget.amount` | number | Normalized spent budget amount. |
| `economics.spentBudget.currency` | string | Currency used for the spent budget. |
| `economics.spentBudget.display` | string | Optional. Spent budget as shown by the source. |
| `economics.remainingBudget` | object | Required. Public budget that remains. |
| `economics.remainingBudget.amount` | number | Normalized remaining budget amount. |
| `economics.remainingBudget.currency` | string | Currency used for the remaining budget. |
| `economics.budgetProgress` | number | Required. Percentage of the budget spent so far. |
| `economics.estimatedPayableViews` | integer | Required. Estimated views that can still earn a payout under the remaining budget. |
| `performance` | object | Optional. Published performance and competition data. |
| `performance.participatingCreatorCount` | integer | Number of creators taking part in the campaign. |
| `performance.totalViews` | integer | Total published views reported for the campaign. |
| `performance.successRate` | number | Public success measure reported for the campaign. |
| `performance.approvalRate` | number | Optional. Public approval rate reported for campaign submissions. |
| `performance.verificationStatus` | string | Public verification state for the performance data. |
| `insights` | object | Required. Measures derived from the campaign economics and performance data. |
| `insights.dailyBudgetBurn` | object | Estimated budget spent per day. |
| `insights.dailyBudgetBurn.amount` | number | Estimated daily budget amount. |
| `insights.dailyBudgetBurn.currency` | string | Currency used for the daily budget amount. |
| `insights.estimatedRunwayDays` | number | Optional. Estimated days before the remaining budget runs out at the current pace. |
| `insights.averagePayoutPerCreator` | object | Optional. Estimated average payout per participating creator. |
| `insights.averagePayoutPerCreator.amount` | number | Estimated average payout amount. |
| `insights.averagePayoutPerCreator.currency` | string | Currency used for the average payout. |
| `insights.viewsPerCreator` | number | Optional. Estimated average published views per creator. |
| `insights.budgetPace` | number | Estimated percentage of the total budget spent per day. |
| `insights.opportunityScore` | number | Required. Score used to rank campaigns by current opportunity. |
| `details` | object | Optional. Extra public campaign details requested by the input. |
| `details.requirements` | array of strings | Public requirements for creators in the campaign. |
| `details.platformPayoutRules` | array of objects | Public payout limits and view rules for each accepted platform. |
| `details.platformPayoutRules[].platform` | string | Platform covered by the payout rule. |
| `details.platformPayoutRules[].payoutPerThousandViews` | object | Payout for 1,000 views on that platform. |
| `details.platformPayoutRules[].payoutPerThousandViews.amount` | number | Normalized platform payout amount. |
| `details.platformPayoutRules[].payoutPerThousandViews.currency` | string | Currency used for the platform payout. |
| `details.platformPayoutRules[].payoutPerThousandViews.display` | string | Optional. Platform payout as shown by the source. |
| `details.platformPayoutRules[].minimumViews` | integer | Optional. Minimum views needed for the platform rule. |
| `details.platformPayoutRules[].maximumPayout` | object | Optional. Maximum payout for the platform rule. |
| `details.platformPayoutRules[].maximumPayout.amount` | number | Normalized maximum payout amount. |
| `details.platformPayoutRules[].maximumPayout.currency` | string | Currency used for the maximum payout. |
| `details.platformPayoutRules[].maximumPayout.display` | string | Optional. Maximum payout as shown by the source. |
| `details.publicResourceLinks` | array of objects | Public resource links for the campaign. |
| `details.publicResourceLinks[].url` | URI string | Public resource URL. |
| `details.publicResourceLinks[].title` | string | Optional. Public title of the resource. |
| `newSincePreviousRun` | boolean | Optional. Whether the campaign first appeared after the previous run when a comparison is available. |
| `spendChange` | object | Optional. Change in spent budget since the previous run when a comparison is available. |
| `spendChange.amount` | object | Required when `spendChange` is present. Normalized change in spent budget. |
| `spendChange.amount.amount` | number | Change in the spent budget amount. |
| `spendChange.amount.currency` | string | Currency used for the spend change. |
| `spendChange.amount.display` | string | Optional. Spend change as shown by the source or comparison. |
| `spendChange.percent` | number | Optional. Percentage change in spent budget. |
| `extractedAt` | date-time string | Required. Time when the public campaign data was extracted. |

This genuine details-enabled row comes from a successful current-beta run with `includeDetails` set to `true`.

```json
{
  "campaignId": "fc7ba8d6-8d5c-4d1b-ac4d-dca047eeecd1",
  "title": "MOTORSPORTS | LOGO CAMPAIGN",
  "status": "active",
  "type": "clipping",
  "campaignUrl": "https://contentrewards.com/discover/fc7ba8d6-8d5c-4d1b-ac4d-dca047eeecd1",
  "economics": {
    "payoutPerThousandViews": {
      "amount": 0.15,
      "currency": "USD",
      "display": "$$0.15"
    },
    "totalBudget": {
      "amount": 20000,
      "currency": "USD",
      "display": "$$20,000"
    },
    "spentBudget": {
      "amount": 2204.87,
      "currency": "USD",
      "display": "$$2,204.87"
    },
    "remainingBudget": {
      "amount": 17795.13,
      "currency": "USD"
    },
    "budgetProgress": 11,
    "estimatedPayableViews": 118634200
  },
  "insights": {
    "opportunityScore": 74.82639,
    "dailyBudgetBurn": {
      "amount": 47.13682538205226,
      "currency": "USD"
    },
    "estimatedRunwayDays": 377.52075698283335,
    "averagePayoutPerCreator": {
      "amount": 37.370677966101695,
      "currency": "USD"
    },
    "viewsPerCreator": 208474.57627118644,
    "budgetPace": 0.23568412691026128
  },
  "extractedAt": "2026-08-29T18:48:10.272Z",
  "brand": "Modo.US",
  "category": "Logo",
  "description": "Earn $150 for every 1 million views by adding the MODO.US overlay to motorsports content.\n",
  "acceptedPlatforms": [
    "youtube",
    "instagram",
    "x",
    "facebook"
  ],
  "fundingTime": "2026-07-14T00:10:47.802Z",
  "publicLinks": [
    {
      "kind": "media",
      "url": "https://cdn.contentrewards.com/user_F9OmOzVrYmRyM/1787228180110.png",
      "title": "MOTORSPORTS | LOGO CAMPAIGN"
    },
    {
      "kind": "company",
      "url": "https://whop.com/discover/biz_3db7OlQ8XwlIXE",
      "title": "Modo.US"
    }
  ],
  "performance": {
    "participatingCreatorCount": 59,
    "totalViews": 12300000,
    "successRate": 65,
    "verificationStatus": "unverified",
    "approvalRate": 78
  },
  "details": {
    "requirements": [
      "All videos must feature racing-related content (F1, NASCAR, MOTOGP)",
      "The MODO.US logo overlay must remain clearly visible throughout the video. (Header + Footer)",
      "Must go over the Logo Guidelines tab before posting.",
      "Handles: (IG) @modo_casino | (X) @modo_casino | (YT) @modocasino",
      "Required Audience: US TOP(+50%)",
      "Pages that are new/fresh are not accepted",
      "The page must have at least 1,000 followers.",
      "Page quality: please avoid posting random content and pick one niche for your page"
    ],
    "platformPayoutRules": [
      {
        "platform": "youtube",
        "payoutPerThousandViews": {
          "amount": 0.15,
          "currency": "USD",
          "display": "$$0.15"
        },
        "minimumViews": 5000,
        "maximumPayout": {
          "amount": 200,
          "currency": "USD",
          "display": "$$200.00"
        }
      },
      {
        "platform": "instagram",
        "payoutPerThousandViews": {
          "amount": 0.15,
          "currency": "USD",
          "display": "$$0.15"
        },
        "minimumViews": 5000,
        "maximumPayout": {
          "amount": 200,
          "currency": "USD",
          "display": "$$200.00"
        }
      },
      {
        "platform": "x",
        "payoutPerThousandViews": {
          "amount": 0.15,
          "currency": "USD",
          "display": "$$0.15"
        },
        "minimumViews": 5000,
        "maximumPayout": {
          "amount": 200,
          "currency": "USD",
          "display": "$$200.00"
        }
      },
      {
        "platform": "facebook",
        "payoutPerThousandViews": {
          "amount": 0.05,
          "currency": "USD",
          "display": "$$0.05"
        },
        "minimumViews": 20000,
        "maximumPayout": {
          "amount": 100,
          "currency": "USD",
          "display": "$$100.00"
        }
      }
    ],
    "publicResourceLinks": [
      {
        "url": "https://drive.google.com/drive/folders/1GiglFYXhqqrR3nmDDB09hsrYD3qzYqbg?usp=sharing",
        "title": "Assets"
      }
    ]
  },
  "newSincePreviousRun": false,
  "spendChange": {
    "amount": {
      "amount": 0,
      "currency": "USD",
      "display": "+$0.00"
    },
    "percent": 0
  }
}
```

#### 💳 Pricing

This Actor uses pay per event. The primary event charges once for each campaign row saved to the dataset. Set `maxItems` when you want to control the number of matching rows and the related campaign charges. An empty or no-result run has no campaign row for this primary event. See the Apify pricing panel for the current rate.

#### 🔌 Integrations

Use the `campaignResults` dataset link in your Apify workflow or your own tools. See the Actor workflow video here:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### How do I scan the public directory?

Choose `Public directory` in `findCampaignsBy`. Leave `campaignUrls` empty and add filters only when you want to narrow the board.

##### When should I use Campaign URLs?

Choose `Campaign URLs` when you already have one or more public Whop campaign pages. Add each page under `campaignUrls`.

##### What does Include public campaign details add?

Set `includeDetails` to `true` to request public requirements, platform payout rules, minimum views, maximum payouts, and public resource links for matching campaigns.

##### What happens when Maximum campaigns is empty?

The Actor returns all available results until the public source is exhausted. Set `maxItems` to stop after a chosen number of matching campaigns.

##### Can I use completed campaigns?

Yes. Set `campaignStatus` to `completed` or `all`. A chosen status scope may have no available records.

##### How should I read the insight fields?

The insight values are derived from the current campaign economics and performance data. Runway and opportunity score help compare campaigns at that time, but they do not guarantee approval, payout, campaign longevity, or creator earnings.

##### How do repeated runs show changes?

When a comparison is available, `newSincePreviousRun` can show that a campaign appeared after the previous run, and `spendChange` can show a change in spent budget.

##### Does this Actor apply to campaigns or pay rewards?

No. It reads and returns public campaign information. It does not apply to campaigns, submit clips, manage creator accounts, or settle rewards.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~whop-content-rewards-campaigns/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

These public Store actors cover closely related campaign research:

- [Whop Content Rewards Scraper | Clipping Campaign Finder](https://apify.com/tactful_anvil/whop-content-rewards-scraper): Compare public Whop campaign payout, budget, and clipping opportunities.
- [Whop Content Rewards Scraper (Clipping & UGC Campaigns)](https://apify.com/fayoussef/whop-clipping-campaigns-scraper): Explore clipping and UGC campaigns with platform and budget filters.
- [Whop Content Rewards Scraper](https://apify.com/automation-lab/whop-content-rewards-scraper): Review public Whop clipping and UGC campaigns with payout and requirement details.
- [Whop Campaign Intelligence & Marketplace Scraper](https://apify.com/hypebridge/whop-campaign-intelligence): Extend campaign research with the actor's public marketplace and company-profile surfaces.
- [Whop Clipping Content Rewards Scraper](https://apify.com/lurkapi/whop-clipping-content-rewards-scraper): Compare public Whop Content Rewards clipping and UGC campaigns.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `findCampaignsBy` (type: `string`):

Choose Public directory to scan the public campaign board, or Campaign URLs to read the pages you provide.

## `campaignUrls` (type: `array`):

Add one or more public Whop Content Rewards campaign page URLs. This list is used for Campaign URLs and is ignored for Public directory.

## `campaignStatus` (type: `string`):

Choose which public status scopes to include. This applies to both Public directory and Campaign URLs. Some scopes may have no available records.

## `campaignType` (type: `string`):

Choose Clipping, UGC, Mixed, or All types.

## `platforms` (type: `array`):

Add one or more social platform names. A campaign matches when it accepts at least one name. Leave this empty to allow all platforms.

## `categories` (type: `array`):

Add one or more public category names. A campaign matches when its category is one of them. Leave this empty to allow all categories.

## `searchText` (type: `string`):

Search campaign title, brand, category, and description text. Use one search scope per run.

## `minimumPayoutPerThousandViews` (type: `number`):

Return campaigns with a reward rate at or above this amount per 1,000 views. Use the source currency.

## `minimumRemainingBudget` (type: `number`):

Return campaigns with at least this much public budget left. Use the source currency.

## `maximumBudgetSpentProgress` (type: `number`):

Return campaigns whose spent budget is at or below this percentage. Enter a number from 0 to 100.

## `maximumParticipatingCreators` (type: `integer`):

Return campaigns with no more than this many participating creators.

## `minimumAveragePayoutPerCreator` (type: `number`):

Return campaigns whose derived average payout per participating creator is at least this amount. Use the source currency.

## `minimumEstimatedRunwayDays` (type: `number`):

Return campaigns with at least this many estimated days of budget runway.

## `minimumOpportunityScore` (type: `number`):

Return campaigns with an opportunity score at or above this value. Use the score scale shown in the results.

## `orderBy` (type: `string`):

Order matching campaigns by the measure you choose. Results use the most useful direction for that measure, such as newest first for recency and lower first for progress or competition.

## `includeDetails` (type: `boolean`):

Request public requirements, platform payout rules, minimum views, maximum payouts, and public resource links for matching campaigns.

## `maxItems` (type: `integer`):

Stop after this many matching campaigns. Leave this empty to return all available results until the public source is exhausted.

## Actor input object example

```json
{
  "findCampaignsBy": "directory",
  "campaignStatus": "active",
  "campaignType": "all",
  "orderBy": "opportunity",
  "includeDetails": false
}
```

# Actor output Schema

## `campaignResults` (type: `string`):

Open the campaign results in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "findCampaignsBy": "directory"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/whop-content-rewards-campaigns").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "findCampaignsBy": "directory" }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/whop-content-rewards-campaigns").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "findCampaignsBy": "directory"
}' |
apify call maximedupre/whop-content-rewards-campaigns --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/whop-content-rewards-campaigns"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/pLxdATqyqsGc1LHvT/builds/FuvVVGyPq1JJYehp2/openapi.json
