# Connect Adskeeper
Source: https://docs.theoptimizer.io/ad-networks/adskeeper/integration/connect
Connect your Adskeeper account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
Adskeeper is a native advertising network with a broad publisher base across Europe and international markets. It is used by performance marketers running native campaigns for e-commerce, finance, and health verticals who want access to traffic sources outside the major tier-one networks.
Adskeeper connects via API credentials — you copy an API Key from your Adskeeper account settings and paste it into TheOptimizer.
***
## Where to Find Your API Credentials
Log in to the **Adskeeper platform** → go to **Account settings** → **API** → copy your **API Key**.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **Adskeeper** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "Adskeeper – Main Account").
* **API Key** — paste the API Key from your Adskeeper account settings.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/adskeeper/integration/manage-accounts
Enable, disable, and archive Adskeeper ad accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your Adskeeper integration is connected, you can manage the individual ad accounts and API credential profiles associated with it from **Integrations → Adskeeper**.
***
## Ad Accounts
Click on the Adskeeper integration to see the full list of ad accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your Adskeeper ad accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → Adskeeper → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple Adskeeper accounts** — if you manage ad accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new ad accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → Adskeeper → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries Adskeeper's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your Adskeeper API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → Adskeeper → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in Adskeeper.
# Adskeeper on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/adskeeper/overview
Connect Adskeeper to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to Adskeeper so you can monitor performance, automate optimization, and manage everything from one dashboard. You connect it using API credentials generated from the network's own settings.
## Set up Adskeeper
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the Adskeeper ad accounts you sync.
## Automate & launch
Automation patterns that work across native networks like Adskeeper.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Connect BigoAds
Source: https://docs.theoptimizer.io/ad-networks/bigoads/integration/connect
Connect your BigoAds account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
BigoAds is the advertising platform of Bigo Technology, offering access to large audiences across Bigo Live, Likee, and other apps in their portfolio. It is used by performance marketers targeting mobile-first audiences in Southeast Asia, the Middle East, and other emerging markets.
BigoAds connects via API credentials — you copy an App ID and App Secret from your BigoAds business platform settings and paste them into TheOptimizer. These function as your Client ID and Client Secret for the API.
***
## Where to Find Your API Credentials
Log in to the **BigoAds business platform** → go to **Settings** → **API** → copy your **App ID** and **App Secret**.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **BigoAds** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "BigoAds – Main Account").
* **App ID** — paste the App ID from your BigoAds settings (this is your Client ID).
* **App Secret** — paste the App Secret from your BigoAds settings (this is your Client Secret).
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/bigoads/integration/manage-accounts
Enable, disable, and archive BigoAds ad accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your BigoAds integration is connected, you can manage the individual ad accounts and API credential profiles associated with it from **Integrations → BigoAds**.
***
## Ad Accounts
Click on the BigoAds integration to see the full list of ad accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your BigoAds ad accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → BigoAds → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple BigoAds accounts** — if you manage ad accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new ad accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → BigoAds → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries BigoAds's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your BigoAds API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → BigoAds → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in BigoAds.
# BigoAds on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/bigoads/overview
Connect BigoAds to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to BigoAds so you can monitor performance, automate optimization, and manage everything from one dashboard. You connect it using API credentials generated from the network's own settings.
## Set up BigoAds
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the BigoAds ad accounts you sync.
## Automate & launch
Automation patterns that work across native networks like BigoAds.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Facebook Automation — All Available Rules
Source: https://docs.theoptimizer.io/ad-networks/facebook/automation/overview
All automation rule types available for Facebook campaigns in TheOptimizer — what actions you can automate, at which levels, and how they interact.
TheOptimizer's automation engine runs against your Facebook campaigns on a schedule you define. Each rule evaluates a set of conditions and fires a specific action — or sends an alert — when those conditions are met. This page covers all the action types available for Facebook and how they work.
## Rule Levels
Facebook rules can operate at three levels of your campaign hierarchy:
| Level | What it acts on | Common use |
| ---------------- | ------------------------------------------ | ---------------------------------------------------------- |
| **Campaign** | The entire campaign | Pause on sustained losses, scale budget across all ad sets |
| **Ad Set** | Individual ad sets (the most common level) | Real-time pausing, budget scaling, bid adjustments |
| **Ad (Content)** | Individual ads/creatives | Pause underperforming variants, reactivate recovered ones |
Most rules are written at the **ad set** level. Ad sets are the most actionable unit on Facebook — they control audience, budget, and delivery, and they can be independently paused or scaled without touching the rest of the campaign.
***
## Available Actions
### Pause / Start
| Action | Level | Description |
| -------------- | -------- | ---------------------------------------- |
| Pause Campaign | Campaign | Stops delivery on the entire campaign |
| Start Campaign | Campaign | Resumes a paused campaign |
| Pause Ad Set | Ad Set | Stops delivery on a specific ad set |
| Start Ad Set | Ad Set | Resumes a paused ad set |
| Pause Content | Ad | Stops delivery on a specific ad/creative |
| Start Content | Ad | Resumes a paused ad/creative |
Pause rules are the most common in the dataset — 1,025 of 2,940 analysed rules pause ad sets. They are typically combined with spend thresholds or CPA conditions to stop losses before they compound.
### Budget Changes
| Action | Level | Description |
| --------------- | ------------------ | ----------------------------------------------- |
| Increase Budget | Campaign or Ad Set | Increase budget by a fixed amount or percentage |
| Decrease Budget | Campaign or Ad Set | Decrease budget by a fixed amount or percentage |
| Set Budget | Campaign or Ad Set | Set budget to a specific value |
Budget rules are typically triggered by ROI or CPA thresholds. Use percentage increases for proportional scaling; use fixed amounts for large-budget campaigns where percentage increases would be too aggressive.
### Bid Changes
| Action | Level | Description |
| ------------ | ------ | ------------------------------------------------------- |
| Increase Bid | Ad Set | Increase the ad set bid by a fixed amount or percentage |
| Decrease Bid | Ad Set | Decrease the ad set bid by a fixed amount or percentage |
| Set Bid | Ad Set | Set the bid to a specific value |
Bid adjustments are less common than budget changes (133 of 2,940 analysed rules). They are most effective when combined with strict ROI gates and Facebook pixel confirmation — bid up only when the algorithm has enough data to use the increased bid effectively.
### Clone (Duplicate)
| Action | Level | Description |
| ------------- | -------- | ------------------------------------------ |
| Copy Ad Set | Ad Set | Duplicates a winning ad set into a new one |
| Copy Campaign | Campaign | Duplicates a winning campaign |
Cloning rules are intentional scaling tools, not accident triggers. They are typically scheduled to run every few days to avoid fragmenting budgets across too many copies at once.
### Alert Only
| Action | Level | Description |
| ------ | ----- | -------------------------------------------------------------- |
| Alert | Any | Sends a notification without taking any action on the campaign |
Alert-only rules are useful for monitoring conditions you want to review manually before acting — for example, detecting a tracking discrepancy between Facebook Results and tracker conversions.
***
## Available Condition Metrics
### Spend & Budget
* **Amount Spent** — total spend in the selected time window
* **Daily Budget** — the current daily budget allocation (supports dynamic comparisons like "80% of Daily Budget")
* **Traffic Source CPA** — cost per acquisition as reported by Facebook
### Tracker Metrics (from your connected tracking platform)
* **Tracker Conversions** — conversions reported by your tracker
* **Tracker CPA** — cost per acquisition from your tracker
* **Tracker ROI** — return on investment from your tracker
* **Tracker Revenue** — revenue reported by your tracker
* **Tracker EPC** — earnings per click from your tracker
### Facebook-Native Metrics
* **Facebook Results** — conversions recorded by the Facebook pixel
* **Avg. CPC** — average cost per click
* **CPM** — cost per thousand impressions
* **CTR** — click-through rate
* **Frequency** — average number of times each person has seen your ad
* **Video Average Play Time** — average seconds of video watched (for video ads)
### Campaign Properties
* **Campaign Created At** — the date the campaign was created (useful for protecting new campaigns from premature pausing)
* **Campaign Status** — current status (Active, Paused)
* **Ad Set Status** — current status of the ad set
* **Campaign.payout** — your configured payout for the campaign (enables rules like "CPA > 140% of Campaign.payout")
### Time Conditions
* **Hour of Day** — trigger rules only during specific hours (e.g., pause at 22:00, resume at 08:00)
* **Day of Week** — trigger rules only on specific days
***
## Data Intervals
Rules evaluate conditions over a time window you choose:
| Interval | Best for |
| ---------------- | --------------------------------------------------------------------------- |
| **Today** | Real-time guardrails — stop a bad ad set before it bleeds your daily budget |
| **Last 2 days** | Short-term trend detection without single-day noise |
| **Last 3 days** | The standard scaling window — enough data, responsive enough to act |
| **Last 7 days** | Weekly performance assessment — cut or scale on proven patterns |
| **Last 14 days** | Sustained performance analysis |
| **Last 30 days** | Long-term campaign health checks |
53% of Facebook rules analysed use **Today** as the data interval — real-time monitoring is the dominant pattern on this platform.
***
## Scheduling
Rules can be scheduled to run:
* **Immediately** (as soon as conditions are met, evaluated every few minutes)
* **Every N hours** (e.g., every 2 hours)
* **Once daily** at a specified time
* **On specific days** of the week
Immediate execution is typical for loss-protection rules. Daily scheduling is typical for budget scaling. Cloning rules typically run every 3 days.
***
## Popular Rule Patterns
For ready-to-use rule templates with specific conditions and thresholds, see [Popular Rules — Facebook](/ad-networks/facebook/automation/popular-rules). That page covers 23 proven patterns across same-day guardrails, budget scaling, CPA optimisation, reactivation, bid adjustments, and creative rotation.
# Facebook Automation Rules: Popular Patterns
Source: https://docs.theoptimizer.io/ad-networks/facebook/automation/popular-rules
Facebook rule patterns from 2,940 real rules — same-day guardrails, budget protection, CPA scaling, bid control, reactivation, and creative optimization.
These patterns come from analyzing 2,940 real Facebook automation rules deployed by top media buyers. They reveal how professionals protect budgets, scale winners, and outsmart campaign fatigue. What follows are the conditions, thresholds, and sequences that separate profitable campaigns from budget bleed. Start with the same-day guardrails, then layer in scaling rules once performance stabilizes.
***
## Same-Day Guardrails — Stop Underperformers Before They Bleed
53% of all Facebook rules in the dataset fire on today's data. Real-time reaction is essential on Facebook — a bad ad set discovered at 8 AM can cost you thousands by 5 PM.
### Rule 1: Pause Ad Sets Over 80% of Daily Budget
The single most common rule pattern across 1,025 analyzed pause actions. This fires when a single ad set is burning through your daily allocation — a sign of either success (good) or audience inflation (bad). Either way, pause and investigate.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------ | --------------------------- | ------------------- |
| Amount Spent | is Greater than | 80% of Daily Budget |
| Amount Spent | is Greater than or Equal to | 25 |
**Action:** Pause Facebook Ad Set
For a $100 daily budget, this pauses at $80 — enough data to see performance, not enough to crater your day. The \$25 floor prevents noise on low-budget accounts.
***
### Rule 2: Pause Ad Set When CPA Exceeds Campaign Target
This pairs cost data with your actual payout. Simple rule, massive impact.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------ | --------------- | --------------------- |
| Amount Spent | is Greater than | 20 |
| Tracker CPA | is Greater than | Campaign.payout × 1.4 |
**Action:** Pause Facebook Ad Set
You're comparing actual profitability, not arbitrary thresholds. An ad set with CPA at 140% of payout is burning 40 cents on every dollar earned. For a $10 payout offer, this triggers at $14 CPA.
***
### Rule 3: Pause Ad Set with Zero Conversions After \$50 Spend
This catches broken creatives and mismatched audiences in a single day.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------------- | --------------- | ----- |
| Amount Spent | is Greater than | 50 |
| Tracker Conversions | Equals | 0 |
**Action:** Pause Facebook Ad Set
\$50 without a conversion means something is fundamentally wrong — bad landing page, wrong audience, or creative fatigue. Pause now; don't wait for more data to bleed.
***
### Rule 4: Pause Ad Set with Negative ROI and High Spend
A belt-and-suspenders approach for same-day losses.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------ | --------------------------- | ----- |
| Amount Spent | is Greater than or Equal to | 75 |
| Tracker ROI | is Less than | -10% |
**Action:** Pause Facebook Ad Set
If you've spent \$75+ and ROI is negative, you're losing money now. The -10% threshold is conservative — it catches minor losses to protect cash flow before they compound.
***
## Campaign Age Filters — Protect New Launches
This pattern appears in hundreds of sophisticated rules: gate optimizations by campaign age. Never fully optimize campaigns younger than 2–3 days. You need baseline data first.
### Rule 5: Only Optimize Campaigns Older Than 3 Days
This is the framework rule — combine it with aggressive pausing and scaling rules to protect fresh launches from being killed prematurely.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------------- | --------------- | ------------ |
| Campaign Created At | is Less than | now - 3 days |
| Amount Spent | is Greater than | 50 |
| Tracker ROI | is Less than | -20% |
**Action:** Pause Facebook Ad Set
New campaigns need 48–72 hours to stabilize. This rule says "only pause if negative ROI, but only for campaigns running 3+ days." You avoid panicking and killing promising fresh campaigns before they find their footing.
***
### Rule 6: Monitor New Campaigns for Early Red Flags
A gentler version for new launches — trigger on zero conversions, not ROI.
**Platform:** Facebook | **Data Interval:** Last 2 days | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------------- | --------------------------- | ------------ |
| Campaign Created At | is Greater than or Equal to | now - 2 days |
| Amount Spent | is Greater than | 25 |
| Tracker Conversions | Equals | 0 |
**Action:** Pause Facebook Ad Set
New campaigns get gentler treatment — pause on zero conversions (a hard stop), but not on soft ROI misses. This catches broken setups without killing early winners that simply haven't converted yet.
***
## Dynamic Budget Protection — Cost vs. Daily Budget
53% of rules use dynamic comparisons. Instead of hardcoded dollar thresholds, you compare spend to available budget. This scales automatically as your budgets grow.
### Rule 7: Pause at 80% Daily Budget (Safe Mid-Day Check)
Check whether you're burning too fast relative to your daily allocation.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------ | --------------------------- | ------------------- |
| Amount Spent | is Greater than or Equal to | Daily Budget × 0.80 |
**Action:** Pause Facebook Ad Set
Scales automatically. A $50 daily budget pauses at $40. A $500 daily budget pauses at $400. Same protective ratio, no manual threshold tuning required.
***
### Rule 8: Overspend Protection at 250% Daily Budget
Rare, but it happens. Pause if you're massively overshooting in a single day.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------ | --------------------------- | ------------------ |
| Amount Spent | is Greater than or Equal to | Daily Budget × 2.5 |
**Action:** Pause Facebook Campaign
This is your "oh no" level. If an ad set has burned 2.5× its daily allocation in one day, something catastrophic happened — pixel fired offline, audience targeting exploded, etc. Kill the whole campaign immediately and investigate.
***
### Rule 9: Mid-Day Budget Check at 50% Daily Budget
Early warning before things spiral. Fire at the halfway point.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------ | --------------------------- | ------------------- |
| Amount Spent | is Greater than or Equal to | Daily Budget × 0.50 |
| Tracker ROI | is Less than | -5% |
**Action:** Pause Facebook Ad Set
You're at 50% spend with negative ROI. If the pattern holds, you'll hit -10% or worse by day's end. Pause now and save the second half of your daily budget.
***
## CPA vs. Payout Comparisons — Scale Profitably
The second-most common condition signature across all analyzed rules: pair CPA with campaign payout. This is how you identify which campaigns to scale and which to kill — using your actual economics, not arbitrary numbers.
### Rule 10: Scale Ad Set — CPA Under 99% of Payout
A profitable scale trigger. CPA at 99% or lower means healthy margin.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------ | --------------------------- | ---------------------- |
| Amount Spent | is Greater than or Equal to | 50 |
| Tracker CPA | is Less than | Campaign.payout × 0.99 |
| Tracker ROI | is Greater than or Equal to | 5% |
**Action:** Change Budget (+20%)
You're tracking profitably — CPA below payout and positive ROI. Scale aggressively. For a $10 payout, this triggers when CPA stays under $9.90.
***
### Rule 11: Super-Profitable Scaling — CPA Under 70% of Payout
When CPA is dramatically low relative to payout, you're printing money. Scale hard.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------ | --------------------------- | ---------------------- |
| Amount Spent | is Greater than or Equal to | 75 |
| Tracker CPA | is Less than | Campaign.payout × 0.70 |
**Action:** Change Budget (+40%)
CPA at 70% of payout leaves 30% margin — that's premium profitability. Increase 40%, then monitor CPM and CPC the next day. If metrics hold, increase again.
***
### Rule 12: Pause When CPA Exceeds 140% of Payout
You're losing 40 cents per dollar earned. Pause immediately.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------ | --------------- | ---------------------- |
| Amount Spent | is Greater than | 30 |
| Tracker CPA | is Greater than | Campaign.payout × 1.40 |
**Action:** Pause Facebook Ad Set
This is the loss threshold. Anything above 140% of payout and you're underwater. For $15 payouts, pause at $21 CPA.
***
## Tiered Budget Scaling — ROI-Based Growth
Sophisticated media buyers don't scale uniformly. They tier increases based on ROI ranges. This creates rapid growth on best performers while protecting budgets on marginal ones.
### Rule 13: Moderate ROI — 20% to 50% ROI
ROI in the 20–50% range is solid. Increase budget moderately and cap at a ceiling to avoid overcommitting on marginal performers.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------ | --------------------------- | ----- |
| Amount Spent | is Greater than or Equal to | 50 |
| Tracker ROI | is Greater than or Equal to | 20% |
| Tracker ROI | is Less than | 50% |
**Action:** Change Budget (+20%, max \$200)
+20% increase with a total budget cap of \$200. This scales solid performers without overcommitting to unproven winners. You get growth but with guardrails.
***
### Rule 14: Strong ROI — 50% to 80% ROI
This is the sweet spot. Scale more aggressively.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------ | --------------------------- | ----- |
| Amount Spent | is Greater than or Equal to | 50 |
| Tracker ROI | is Greater than or Equal to | 50% |
| Tracker ROI | is Less than | 80% |
**Action:** Change Budget (+40%, max \$250)
+40% increase on proven winners, capped at \$250. By tomorrow, you'll know whether higher spend maintains efficiency.
***
### Rule 15: Exceptional ROI — 80%+ ROI
This is your best performer. Scale hard, but use static amounts for budgets over \$200 to limit risk.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------ | --------------------------- | ----- |
| Amount Spent | is Greater than or Equal to | 50 |
| Tracker ROI | is Greater than or Equal to | 80% |
**Action:** Change Budget (+$50 flat) or (+50% if budget is under $200)
For budgets $50–$200, use +50%. For budgets over $200, use +$50 flat — static increases scale proportionally slower, reducing algorithm fragility. This lets runaway winners accelerate without blowing up delivery.
***
## Facebook-Native Conversions — Optimize for Pixel Data
Sophisticated rules use Facebook Results (Facebook pixel conversions) to gate scaling. You want to scale campaigns that Facebook's own algorithm is recognizing — not just ones your tracker sees.
### Rule 16: Scale Only When Facebook Pixel Fires
Don't aggressively scale until Facebook sees conversions directly.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| ---------------- | --------------------------- | ----- |
| Amount Spent | is Greater than or Equal to | 50 |
| Facebook Results | is Greater than or Equal to | 3 |
| Tracker ROI | is Greater than or Equal to | 15% |
**Action:** Change Budget (+20%)
Facebook Results >= 3 means Facebook's algorithm has seen conversions and can optimize delivery. This gates scaling behind actual pixel data, not just tracker conversions — resulting in better ongoing campaign performance.
***
### Rule 17: Pause When Facebook Pixel Sees No Results
If you've spent \$40 with zero Facebook conversions, something is wrong.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ---------------- | --------------- | ----- |
| Amount Spent | is Greater than | 40 |
| Facebook Results | Equals | 0 |
**Action:** Pause Facebook Ad Set
Your pixel isn't firing. Either your conversion event is misconfigured, your landing page is missing the pixel, or your audience is fundamentally mismatched. Pause and debug before spending more.
***
## Reactivation — Give Paused Winners a Second Chance
You paused things that were underperforming. But campaigns improve — audiences shift, competition changes, and landing pages get updated. These rules reactivate winners when the data warrants it.
### Rule 18: Restart When CPA Returns to Profitability
Ad set status is Paused and CPA now looks good. Start it back up.
**Platform:** Facebook | **Data Interval:** Last 3 days | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------- | --------------- | ---------------------- |
| Ad Set Status | Equals | PAUSED |
| Amount Spent | is Greater than | 25 |
| Tracker CPA | is Less than | Campaign.payout × 0.95 |
**Action:** Start Facebook Ad Set
Campaigns recover. If you paused an ad set and it's now profitably close to payout, give it another shot. The 3-day window gives you recent data without waiting forever.
***
### Rule 19: Restart Campaigns at Positive ROI
Pause campaigns when negative. Restart when they recover.
**Platform:** Facebook | **Data Interval:** Last 7 days | **Scheduling:** Daily
| Metric | Condition | Value |
| --------------- | --------------------------- | ------ |
| Campaign Status | Equals | PAUSED |
| Amount Spent | is Greater than | 50 |
| Tracker ROI | is Greater than or Equal to | 5% |
**Action:** Start Campaign
A campaign spending \$50+ at positive ROI — even weak positive — deserves another chance. You'll generate meaningful data for scaling decisions. Monitor closely for the first 24 hours after reactivation.
***
## Ad-Level Pausing — Creative Optimization
248 rules in the dataset pause individual content (ads and creatives). This is how you kill underperforming variants without nuking entire ad sets. Surgical approach beats blunt-force pausing.
### Rule 20: Pause Losing Creative — High CPA + Negative ROI
This fires on individual content. CPA is up and ROI is negative.
**Platform:** Facebook | **Data Interval:** Today | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------ | --------------- | ---------------------- |
| Amount Spent | is Greater than | 30 |
| Tracker CPA | is Greater than | Campaign.payout × 1.40 |
| Tracker ROI | is Less than | -5% |
**Action:** Pause Facebook Content
You're pausing specific creative variants, not entire ad sets. This lets winning creatives stay live while killing underperformers. Run multiple creatives per ad set to make this pattern effective.
***
## Bid Adjustments — Squeeze More Volume
Only 133 rules in the dataset use bid adjustments — they're rare but potent when deployed correctly. Always pair bid changes with strict ROI and CPC gates.
### Rule 21: Aggressive Bid Increase on High ROI
ROI >= 30% and meaningful spend? Bid up to capture more impressions.
**Platform:** Facebook | **Data Interval:** Last 2 days | **Scheduling:** Daily
| Metric | Condition | Value |
| ---------------- | --------------------------- | ----- |
| Amount Spent | is Greater than | 100 |
| Tracker ROI | is Greater than or Equal to | 30% |
| Facebook Results | is Greater than or Equal to | 5 |
**Action:** Change Bid Facebook Ad Set (+15%)
A +15% bid increase typically lifts volume 20–40%. You're gating it behind high ROI and actual pixel conversions, so you know Facebook's algorithm is working in your favor.
***
### Rule 22: Bid Reduction for Underperformers
CPC is creeping up and ROI is declining. Lower bids to rebalance.
**Platform:** Facebook | **Data Interval:** Last 2 days | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------ | --------------- | ----- |
| Amount Spent | is Greater than | 50 |
| Tracker ROI | is Less than | 10% |
| Avg. CPC | is Greater than | 1.50 |
**Action:** Change Bid Facebook Ad Set (-15%)
High CPC combined with low ROI signals audience fatigue or audience expansion gone wrong. Lower bids to throttle volume and refocus on higher-intent audiences before you pause entirely.
***
## Duplication & Scaling — Clone Winners
Only 57 rules copy ad sets and 34 copy budgets across the entire dataset. These rules are about intentional creative scaling, not accident. Clone after you have proof, not hope.
### Rule 23: Duplicate High-Profit Creative
Clone creatives that are profitable and spending well.
**Platform:** Facebook | **Data Interval:** Last 3 days | **Scheduling:** Every 3 days
| Metric | Condition | Value |
| ------------ | --------------- | ---------------------- |
| Amount Spent | is Greater than | 75 |
| Tracker ROI | is Greater than | 50% |
| Tracker CPA | is Less than | Campaign.payout × 0.80 |
**Action:** Copy Facebook Ad Set
Duplicates fight ad fatigue by creating fresh variants with independent budgets and bid history. You're cloning proven winners, not guessing. The 3-day interval lets the original accumulate spend before spinning up the clone — this reduces budget fragmentation and algorithm disruption.
***
## Summary — The Real Patterns
The 2,940 rules analyzed reveal a clear hierarchy:
1. **Real-time is king.** 53% of rules fire on today's data. Facebook moves fast; your rules need to move faster.
2. **Dynamic thresholds scale with you.** Use percentages of daily budget and payout, not hardcoded dollar amounts.
3. **Protect new campaigns.** Gate optimizations by campaign age (3+ days) to avoid killing fresh winners before they stabilize.
4. **Compare CPA to payout.** The most common condition pairing — it tells you profitability, not just cost.
5. **Tier your scaling.** ROI bands of 20–50%, 50–80%, and 80%+ deserve different scaling strategies.
6. **Use Facebook pixel data.** Gate scaling behind actual Facebook Results, not just tracker conversions.
7. **Reactivate winners.** Paused campaigns recover. Check weekly for redemption opportunities.
8. **Pause creatives, not campaigns.** Kill underperforming ads without nuking ad sets — 248 rules do this.
9. **Bid adjustments are surgical.** Only when ROI is high and pixel is firing; rarely used correctly by beginners.
10. **Duplicate on proof, not hope.** Clone after 75+ spent with strong ROI, every 3 days.
Monitor CPM and CPC daily — they'll tell you when audience quality is degrading and when it's time to pull back before losses accumulate.
# Attach Automation & Publish
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/automation-review
The final step before launch — attach automation rules to your campaigns, review the full list, and publish.
The final step before publishing is **Add Automation & Publish**.
***
## Attach Automation Rules
At the top of this step you can attach any existing TheOptimizer automation rules to the campaigns you are about to launch. Select rules from the dropdown or search by name. Multiple rules can be attached at once.
Attached rules start evaluating immediately once the campaigns go live. If you skip this step, you will need to go to the **Rules** section afterward and manually apply your automation logic to the new campaigns — and in the meantime, campaigns may overspend or underperform without the safety nets your rules provide.
***
## General Information
A summary card shows the following for everything you are about to publish:
* Number of campaigns to be created
* Total allocated daily budget
* Number of ad sets
* Number of ad set variations
* Audience targeting variations
* Number of ads
***
## Preview Campaign List
A list of every campaign that will be created, showing the campaign name and the structure within it (for example, "Campaign with (1) Ad Sets and (1) Ads"). Review this list carefully — it is your final check before campaigns are pushed to Facebook.
***
## Publish
Once everything looks correct, click **Publish**. All campaigns are submitted to the **Campaign Creation Queue**, where you can monitor their progress. You will also receive email notifications for the status of the operation.
If any single item within a campaign fails to be created — even one ad out of many — the entire operation is marked as failed. TheOptimizer does not create partial campaigns. Use the Queue's **Retry** button if the failure was caused by a transient error, or check **Details** to see which specific item caused the issue.
# Upload to an Existing Campaign
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/existing-campaign
Add new ad sets or ads to a live or paused Facebook campaign without touching what is already running.
You can use the Facebook Campaign Launcher to bulk upload new ad sets or ads to an existing campaign — without touching anything that is already live. Use this when you want to expand an active or paused campaign — add fresh creatives to an existing ad set, or launch a new ad set into a campaign that is already running — without rebuilding from scratch or going through Facebook Ads Manager.
***
## Loading an Existing Campaign
Open the Facebook Campaign Launcher and select your **Ad Account**.
Below the ad account selector, two options appear: **+ Create new campaign** (default) and **Use existing campaign**. Click **Use existing campaign**.
A search box appears. Search for the campaign by name or ID, then click on it from the list.
Once loaded, the campaign and all its existing ad sets and ads are visible in the left panel tree.
Everything that already exists in the campaign is **read-only** — you cannot edit existing ad sets or ads. The lock icon on existing items in the tree makes this clear. You can only add new items.
***
## Working with Existing Ad Sets
Once an existing campaign is loaded, clicking the three-dot menu (⋯) on any existing ad set in the left panel tree reveals several actions:
| Option | What it does |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Create Ad** | Adds a new ad inside this existing ad set. You can upload creatives and generate variations from it. |
| **Clone Ad Set** | Creates a full copy of this ad set (including its ads) as a new, editable ad set within the same campaign. |
| **Copy Ad Set** | Copies the ad set settings to the clipboard so you can paste them into another campaign loaded in the launcher. |
| **Copy All Ads** | Copies all ads from this ad set so you can paste them into a new ad set in another campaign. |
| **FB ID** | Displays the Facebook ID of this ad set and provides a one-click copy button. Useful for referencing the ad set in scripts, rules, or external tools. |
***
## Adding a New Ad Set
In the left panel, click the three-dot menu (⋯) on the campaign and select **Create Ad Set**. A new ad set is added to the tree. Configure it as you would when creating a fresh campaign — targeting, budget, placements — then go to the ad level to upload creatives and generate variations.
***
## Adding New Ads to an Existing Ad Set
Click on the existing ad set in the left panel, open its three-dot menu (⋯), and select **Create Ad**. From this single ad entity, you can upload multiple creatives and generate variations exactly as you would when creating a new campaign.
***
## Cloning Instead of Creating from Scratch
If the new ad set or ad you want to add is similar to an existing one, use **Clone Ad Set** instead of **Create Ad Set**. Cloning copies all the settings — targeting, placements, ad copy, creatives — which you can then adjust as needed. This is faster than configuring everything from scratch when only a few things are changing.
# Create Ads Using Existing Posts
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/existing-posts
Use previously published Facebook posts as ad creatives to preserve accumulated social proof — likes, comments, and shares — across your campaigns.
When you create a new ad in the Campaign Launcher, the default flow is to upload images or videos and let the system create new ad posts. But if the content you want to run has already been published as a Facebook post — and has accumulated social proof (likes, comments, shares) — you can use that existing post as the ad creative instead of creating a new one.
Using existing post IDs preserves social proof. An ad running from a post that already has hundreds of comments and reactions performs differently — and often better — than a brand-new post with zero engagement.
***
## How to Use an Existing Post
At the **Ad level**, after selecting your Facebook Page and Instagram Account, you will see a selector with two options: **Create an ad** (the default) and **Use an existing post**. Select **Use an existing post**.
Two ways to find and add posts:
* **Browse posts** — opens a searchable panel showing all posts available to the selected ad account. You can search by post ID, message text, or other post elements. The list shows post type (image, video, etc.), whether it is a published or ads post, share count, and creation date.
* **Paste a Post ID** — if you already know the post ID, paste it into the field and click **Add**.
Select one or more posts. Each post selected creates a separate ad — the same way each uploaded image or video creates a separate ad in the standard flow. Set the **Call to Action** for these ads.
***
## Using Groups with Post IDs
The group mechanism is available in the existing post section as well. This lets you create batches of post-based ads with different settings — for example, one group using "Learn More" as the CTA and another group using "Shop Now". Each group generates its own set of ad variations from the same posts, letting you test CTA performance while preserving the social proof on each post.
# Getting Started — Overview
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/getting-started
The Facebook Mass Campaign Uploader interface — the three panels, the campaign tree, and the three-step launch flow.
To open the Facebook Mass Campaign Uploader, go to **Campaign Creator** in the left-hand navigation menu and click the **Facebook** card. This opens the launcher in a full-screen dialog.
***
## The Three Panels
**Left panel — Campaign tree.** A tree structure showing your campaign hierarchy: Campaign → Ad Set → Ad. Click any level to navigate to its settings. Use the three-dot menu (⋯) on any item to duplicate, create new, or rename.
**Centre panel — Settings.** This is where you configure everything for the currently selected level. The options mirror what you see in Facebook Ads Manager — campaign objective, budget, audience targeting, placements, creatives, and so on.
**Right panel — My Space & Variation Preview.** Two tabs:
* **My Space** — contextual helpers that change based on which level you are on. At the campaign level you see saved templates. At the ad set level you see recently used targeting configurations you can apply with one click. At the ad level you see your most recently active ads that you can reuse.
* **Variation Preview** — a live counter showing how many campaigns, ad sets, and ads will be created based on your current configuration, including any groups and restructuring settings you have applied.
***
## The Three-Step Launch Flow
At the bottom of the screen, a progress bar shows the three main steps:
**1. Create Campaign** — configure the campaign, ad set, and ad settings. Upload your creatives and define any groups (multiple audiences, budgets, placements, etc.). At the very beginning of this step, you also define your **campaign structure** and **ad set structure** — deciding upfront how variations will be distributed across campaigns and ad sets.
**2. Review Variations** — a full-screen summary of everything that will be created. A header row of information cards shows totals (campaigns, ad sets, budgets, ads, headlines, descriptions). Below is the complete campaign tree — Campaign → Ad Set → Ad — with toggle switches to enable or disable individual variations and naming templates visible throughout. No restructuring is done here; that has been moved to Step 1.
**3. Add Automation & Publish** — attach automation rules to your campaigns before they go live, review the full campaign list, and click Publish.
***
## Starting From a Template
If you have previously saved a campaign template, you do not need to configure everything from scratch. At the campaign level, open the **My Space** tab on the right panel and click **Apply Template** next to the template you want to load. The entire structure — campaign settings, ad sets, ads, groups, restructuring settings, and automation assignments — loads instantly.
From there, you typically only need to swap in new creatives, adjust a budget, or update the ad account.
See [Save Your Work as a Template & Reuse](/ad-networks/facebook/campaign-uploader/templates) for details on creating and managing templates.
***
## Next Steps
* [Creating a Simple Campaign](/ad-networks/facebook/campaign-uploader/simple-campaign) — configure a campaign with one ad set and multiple ads
* [Generating Variations](/ad-networks/facebook/campaign-uploader/variations) — use groups, restructuring, and duplication to generate dozens or hundreds of variations
* [Multi-Ad Account Launch](/ad-networks/facebook/campaign-uploader/multi-account) — launch the same structure across multiple ad accounts
# Multi-Ad Account Upload
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/multi-account
Upload the same campaign structure across multiple Facebook ad accounts in a single publish operation.
If your strategy involves testing the same campaigns across multiple Facebook ad accounts — to diversify delivery, take advantage of the learning phase independently per account, or reduce Facebook's initial randomness — the Campaign Creator supports this natively.
Complete your campaign configuration, including any groups, Restructuring settings, and other options.
In the left panel, click the three-dot menu (⋯) on the top-level campaign and click **Duplicate**. This creates an exact copy of the entire structure — campaign, ad sets, ads, all variation groups, and Restructuring settings.
Click the duplicated campaign and change the **Ad Account** to the new account you want to launch in.
If the new account uses different Facebook Pages, Instagram Accounts, or Pixels, navigate to the ad set and ad levels to update those fields.
Repeat the duplication and account-change steps for as many ad accounts as needed.
Click **Publish**. All copies are launched together. Each campaign structure is pushed to its respective ad account, and all operations appear separately in the Campaign Creation Queue.
If your Facebook Pages, Instagram Accounts, and Pixels are shared across ad accounts, you typically only need to change the ad account selection — everything else carries over automatically.
# Dynamic Naming Templates
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/naming-templates
Auto-generate campaign, ad set, and ad names from placeholders — keeping naming consistent and meaningful across hundreds of variations.
When you are generating dozens or hundreds of variations, naming becomes critical. Dynamic naming templates auto-generate meaningful campaign, ad set, and ad names based on your actual settings — so you never end up with fifty identically named items.
***
## How to Create a Naming Template
Click **+ Create Naming Template** next to the name field at any level (campaign, ad set, or ad). The template builder opens.
In the template dialog:
1. **Quick Suggestions** — the top of the dialog shows one or more pre-built combinations of placeholders based on common naming conventions. Click any suggestion to instantly apply it as your starting template. You can then add, remove, or reorder placeholders from there.
2. **Add placeholders** — click **+ Add placeholder** to insert any dynamic value into the name. Placeholders appear as draggable tiles in the template grid — drag them to reorder.
3. **Mix in static text** — any tile you type free text into becomes a fixed string that appears in every name. Use this for prefixes, brand codes, or any text you always want in the name.
4. **Set separators** — the **Field Separator** controls what appears between placeholders (e.g., `_`, `-`, `|`, or a space). The **Item Separator** controls what appears between multiple values within a single placeholder (e.g., when a placeholder resolves to a list).
5. **Save** the template.
The name field at that level will now auto-populate with the resolved values when variations are generated. Names are live — they update as you add groups or change settings.
***
## Available Placeholders
Available placeholders include Targeting, Placement, Budget, Bid Amount, Bid Strategy, Account Value, Objective Value, Buying Type, and many more. A few worth calling out:
**Group names** — inserts the name you gave each variation group (e.g., "Budget \$25" or "US Audience"). This is one of the most useful placeholders because group names are under your control — meaningful group names produce meaningful campaign names automatically.
**Nested names** — lets you include the ad set name inside the campaign name, or the ad name inside the ad set name. The system resolves these at generation time, so each campaign's name can include the ad set it contains.
**Cross-level placeholders** — you can reference group names from a different level in a template. For example, when building the **Ad Set naming template**, you can insert the **Ad (Creative) group name** as a placeholder. This means an ad set that contains ads from the "EN" creative group will include "EN" in its name automatically, even though the creative group belongs to a lower level. This is useful for keeping all levels of your campaign structure consistently named when groups span levels.
**Incremental index** — adds an auto-incrementing number (1, 2, 3, ...) to each variation. The simplest guarantee of unique names across all generated items.
At minimum, add an **index placeholder** to your naming template. This guarantees unique names even if all other settings are identical across variations.
Use the **Quick Suggestions** at the top of the template builder as a starting point. They combine the most commonly useful placeholders and save time compared to building a template from scratch.
***
## Transformation Functions
Each placeholder tile in the naming template can have a **transformation function** applied to it. Click the **F** button on any placeholder tile to open the transformation menu. Transformations modify the resolved value of a placeholder before it appears in the name.
Available transformations:
| Function | What it does | Example |
| ------------------ | ----------------------------------------------------- | -------------------------------------------- |
| **Upcase** | Converts the value to ALL CAPS | `en-lp01` → `EN-LP01` |
| **Downcase** | Converts the value to all lowercase | `EN-LP01` → `en-lp01` |
| **Capitalize** | Capitalises the first letter | `united states` → `United states` |
| **Trim** | Removes leading and trailing whitespace | `US` → `US` |
| **Split** | Splits the value by a delimiter and returns all parts | `EN-LP01` split by `-` → `EN`, `LP01` |
| **First** | Returns the first element after splitting | `EN-LP01` split by `-`, first → `EN` |
| **Last** | Returns the last element after splitting | `EN-LP01` split by `-`, last → `LP01` |
| **Index N** | Returns the Nth element after splitting (zero-based) | `EN-LP01` split by `-`, index 1 → `LP01` |
| **Join** | Joins multiple values with a delimiter | `["EN", "LP01"]` join by `_` → `EN_LP01` |
| **Find / Replace** | Replaces a substring within the value | `EN-LP01`, find `-`, replace `_` → `EN_LP01` |
| **Prepend** | Adds a string before the value | `EN` prepend `lang_` → `lang_EN` |
| **Append** | Adds a string after the value | `EN` append `_ads` → `EN_ads` |
| **Slugify** | Converts the value to a URL-safe lowercase slug | `United States` → `united-states` |
Transformations are especially useful with group names and cross-level placeholders. For example: apply **First** (split by `-`) to a Destination group named `EN-LP01` to extract just `EN` for the campaign name — keeping names short and consistent without creating separate groups.
# Creating a Simple Campaign
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/simple-campaign
An overview of the Facebook Campaign Creator interface — the three panels and the launch flow — plus a complete walkthrough for launching a campaign with one ad set and multiple ads.
To open the Facebook Campaign Creator, go to **Campaign Creator** in the left-hand navigation menu and click the **Facebook** card. This opens the launcher in a full-screen dialog.
***
## The Three Panels
**Left panel — Campaign tree.** A tree structure showing your campaign hierarchy: Campaign → Ad Set → Ad. Click any level to navigate to its settings. Use the three-dot menu (⋯) on any item to duplicate, create new, or rename.
**Centre panel — Settings.** This is where you configure everything for the currently selected level. The options mirror what you see in Facebook Ads Manager — campaign objective, budget, audience targeting, placements, creatives, and so on.
**Right panel — My Space & Variation Preview.** Two tabs:
* **My Space** — contextual helpers that change based on which level you are on. At the campaign level you see saved templates. At the ad set level you see recently used targeting configurations you can apply with one click. At the ad level you see your most recently active ads that you can reuse.
* **Variation Preview** — a live counter showing how many campaigns, ad sets, and ads will be created based on your current configuration, including any groups and restructuring settings you have applied.
***
## The Three-Step Launch Flow
At the bottom of the screen, a progress bar shows the three main steps:
**1. Create Campaign** — configure the campaign, ad set, and ad settings. Upload your creatives and define any groups (multiple audiences, budgets, placements, etc.). At the very beginning of this step, you also define your **campaign structure** and **ad set structure** — deciding upfront how variations will be distributed across campaigns and ad sets.
**2. Review Variations** — a full-screen summary of everything that will be created. A header row of information cards shows totals (campaigns, ad sets, budgets, ads, headlines, descriptions). Below is the complete campaign tree — Campaign → Ad Set → Ad — with toggle switches to enable or disable individual variations and naming templates visible throughout. No restructuring is done here; that has been moved to Step 1.
**3. Add Automation & Publish** — attach automation rules to your campaigns before they go live, review the full campaign list, and click Publish.
***
## Starting From a Template
If you have previously saved a campaign template, you do not need to configure everything from scratch. At the campaign level, open the **My Space** tab on the right panel and click **Apply Template** next to the template you want to load. The entire structure — campaign settings, ad sets, ads, groups, restructuring settings, and automation assignments — loads instantly.
From there, you typically only need to swap in new creatives, adjust a budget, or update the ad account.
See [Save Your Work as a Template & Reuse](/ad-networks/facebook/campaign-uploader/templates) for details on creating and managing templates.
***
The walkthrough below covers a straightforward campaign with one ad set and multiple ads — no groups, no restructuring. This is the foundation. All advanced features build on top of this base.
***
## Campaign Level
Click on the campaign in the left panel tree and configure the following:
| Field | Description |
| ------------------------- | --------------------------------------------------------- |
| **Ad Account** | The Facebook ad account to create the campaign in |
| **Campaign Name** | A name for the campaign, or use a dynamic naming template |
| **Status** | Whether the campaign is uploaded as Active or Paused |
| **Special Ad Categories** | Select if applicable (Housing, Credit, Employment, etc.) |
| **Buying Type** | Auction (the only type currently supported) |
| **Campaign Objective** | Sales, Traffic, Leads, or Engagement |
Upload campaigns as **Paused** if your team uses a two-step workflow where one person prepares campaigns and a reviewer activates them after QA.
***
### Campaign Budget
The **Budget** section at the campaign level has two modes:
**Budget Strategy — choose one:**
* **Campaign budget** (Advantage+ Campaign Budget) — Facebook automatically distributes the total budget across your ad sets, allocating more to the best-performing ones. This is the recommended option for most use cases.
* **Ad set budget** — each ad set gets its own independent budget, which you configure individually at the ad set level. Use this when you need strict budget control per ad set.
**Budget Variants** — if Campaign budget is selected, the budget amount is set here via Budget Variants. Each group card represents a separate budget variation. Click **+ Add Budget** within a group to add multiple budget amounts to the same group if needed. When you add more Budget groups (by clicking **+** next to the group cards), each group generates a separate campaign variation — one campaign per budget.
**Campaign Bid Strategy** — controls how Facebook bids for your ads:
| Strategy | How it works |
| ------------------------ | ------------------------------------------------------------------------------ |
| **Highest Volume** | Spends the full budget to get as many results as possible |
| **Cost Per Result Goal** | Targets a specific average cost per result (soft cap — Facebook may exceed it) |
| **Bid Cap** | Sets a maximum bid per auction (hard cap — stricter delivery constraints) |
| **ROAS Goal** | Targets a minimum return on ad spend |
***
## Ad Set Level
Click on the Ad Set in the left panel tree and configure the following:
| Field | Description |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| **Ad Set Name** | A name for the ad set, or use a naming template |
| **Conversions Location** | Website, App, Website and App, or Calls |
| **Performance Goal** | For example, Maximize Number of Conversions or Maximize Value of Conversions |
| **Pixel** | The Facebook pixel to use for optimisation |
| **Conversion Event** | The conversion event to optimise toward |
| **Beneficiary** | Enter the beneficiary for ad transparency. If left blank, TheOptimizer uses the default from your ad account settings |
***
### Budget & Schedule
**Budget** — if you selected **Ad set budget** at the campaign level, the per-ad-set budget is configured here. If you selected Campaign budget (Advantage+), the budget section at the ad set level shows an informational note and is not editable — return to the campaign level to change it.
**Schedule:**
| Option | Description |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Start Date** | Choose **Specific Date** to set an exact date and time for the ad set to go live, or leave it to start immediately upon publish |
| **Set an end Date** | Optionally tick this checkbox to define when the ad set should stop running |
**Ad Set spending limits** — tick this checkbox to set a maximum and/or minimum amount Facebook can spend on this ad set over its lifetime, regardless of the campaign budget. Useful when using Advantage Campaign Budget and you want to protect or guarantee spend for specific ad sets.
Under the **My Space** tab on the right panel, you will see a list of your most frequently used targeting configurations with an **Apply** button next to each. One click applies a previous targeting setup — no need to reconfigure locations, age, gender, and placements from scratch.
***
### Audience Controls
The Audience Controls section defines who sees your ads. Each audience group card at the top represents a separate audience variation — add more groups by clicking **+**.
**Locations:**
* **Include** — add countries, regions, cities, or postal codes. Use the **Location Variant** field to apply a location preset (e.g., "Worldwide, country\_group" to target all countries at once) or search and select specific locations.
* **Exclude** — remove specific locations from your targeting. Useful for blocking countries where you are not set up to take orders, or removing existing customer locations from a prospecting campaign.
**Age** — drag the Age Variant slider to set your minimum and maximum target age (18–65+).
**Gender** — select Male, Female, or All.
**Language** — optionally restrict delivery to users whose Facebook language matches a specific language. Leave empty to target all languages.
**Target Custom Audiences** — select previously created Custom Audiences from Facebook to include or exclude. Typical uses: retargeting website visitors, targeting existing customer lists, or excluding current customers from prospecting campaigns.
TheOptimizer does not currently support creating Custom Audiences. If you work with custom or lookalike audiences, create them in Facebook Ads Manager first — they will then appear in the audience selector here.
***
### Placements
Each placement group card represents a separate placement variation — add more groups with **+** to test different placement configurations against each other.
| Option | Description |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Advantage+ placements** (recommended) | Facebook's delivery system automatically allocates your budget across all eligible placements — Feed, Stories, Reels, Audience Network, Messenger, etc. — based on where your ads are likely to perform best. Typically delivers the best cost efficiency. |
| **Manual placements** | You choose exactly which platforms (Facebook, Instagram, Audience Network, Messenger) and positions (Feed, Stories, Reels, In-stream, etc.) to run on. Use this when you have a specific reason to exclude certain placements or want to isolate placement performance. |
***
## Ad Level
Click on the ad in the left panel tree and configure the following:
***
### Identity
| Field | Description |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Facebook page** | The Facebook Page your ad will appear to come from. Required for all ads. |
| **Instagram account** | The Instagram account your ad will be associated with when running on Instagram placements. If you do not have an Instagram account, select your Facebook Page — Facebook will use it to represent your business on Instagram. |
Each identity group card represents a separate Identity variation — add more groups with **+** to test running the same ads from different Pages or Instagram accounts. This is useful for agencies managing multiple brands, or for testing how audience perception varies by Page identity.
***
### Ad Creative
**Ad Name and Format:**
| Field | Description |
| ------------- | --------------------------------------------------- |
| **Ad Name** | A name for the ad, or use a naming template |
| **Status** | Active or Paused |
| **Ad Format** | Single Image or Video, Catalog Ads, or Flexible Ads |
**Media** — click **+ Add Media** to open the media browser where you can:
* **Browse existing creatives** — TheOptimizer displays all images and videos from your active campaigns across all connected Facebook accounts. Sort by newest, oldest, highest spend, highest EPC, most used, or least used. Filter by Creative Library tags.
* **Upload new media** — click **Upload** to add new images or videos directly.
* **Generate with AI** — click **✨ Generate with AI** to create new image variations using an AI prompt or example images. Useful for quickly producing creative variants without leaving the launcher.
Each uploaded image or video generates one ad. If you upload five images, five ads are created — the count updates immediately in the **Variation Preview** panel.
**Per-creative options:**
* **Enhance with AI** — generate a new version of any image by providing a prompt or example images.
* **Customize by Placement** — assign a different image for specific placements (for example, a different crop for Instagram Stories). You can do this per image, or use **Bulk Placement Customization** at the bottom of the media section to apply placement overrides across all ads at once.
**Ad copy:**
| Field | Notes |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| **Primary Text** | The main body copy. Click **+ Add Text** to add one or more variations, or **✨ Generate with AI** to generate copy based on a prompt. |
| **Headline** | Short headline below the media. Click **+ Add Headline** to add variations, or **✨ Generate with AI** to generate options. |
| **Description** | Optional additional text. Add one or more variations. |
| **Call to Action** | Select from available options (Learn More, Shop Now, etc.) |
**Destination:**
| Field | Notes |
| ------------------- | ------------------------------------------------ |
| **Destination URL** | The landing page for the ad |
| **Pixel** | The tracking pixel for this ad |
| **URL Parameters** | Add tracking parameters for third-party trackers |
For the best workflow, upload and tag your creatives in the **Creative Library** first, then come back to the Campaign Creator and filter by tag. This is especially useful when your creative team and media buying team are separate — creatives upload and tag assets, media buyers pull them in by tag.
***
### Apply to All Groups
When you are working with multiple Creative groups, you can push the content of any media, primary text, headline, or description field to every other group in one click. Click the **three-dot menu (⋯)** on any media item, text field, headline, or description and select **Apply to All Groups**. This copies that value into the same field across all other Creative groups — useful when you want all groups to start from the same base creative or copy and then make minor tweaks per group.
***
### Auto-Match Images by Filename to Placements
When you need different image crops for different placements (e.g., square for Feed, vertical for Stories, landscape for Right Column), you can have TheOptimizer assign them automatically based on the image filenames.
Include the aspect ratio in each image's filename before uploading:
| Filename pattern | Placement it maps to |
| ---------------------------------------- | -------------------------------------------- |
| `image_1x1.jpg` or `image_1×1.jpg` | Feeds, In-stream, Search results (square) |
| `image_9x16.jpg` or `image_9×16.jpg` | Stories and Reels, Apps and sites (vertical) |
| `image_1.91x1.jpg` or `image_1.91×1.jpg` | Right column, Search results (landscape) |
In the **Select Images** dialog, enable the **Auto-match by filename** toggle at the bottom. When you click **Next**, TheOptimizer automatically assigns each image to the matching placement column based on the ratio in its filename.
The next screen (**Edit Placements**) shows the result: each placement column already has the matching image pre-assigned, with the matched filename shown under the placement name.
Prepare your image set with consistent naming before upload — for example, `creative1_1x1.jpg`, `creative1_9x16.jpg`, `creative1_1.91x1.jpg` — and the entire placement assignment across all creatives is done automatically in one step.
***
### Tagging Images from the Campaign Creator
You can tag uploaded images directly from the media browser inside the Campaign Creator — no need to go to the Creative Library first.
After selecting the **Uploaded Media** tab in the **Select Images** dialog, click the **# Add Tags** button at the top right. Select the images you want to tag (or use "Select All"), choose your tags, and confirm. Tags are applied to the images in your Creative Library and will be available for filtering in future sessions.
***
### New Ad Formats: Catalog Ads and Flexible Ads
Two new ad format options are now available in the **Ad Format** selector.
**Catalog Ads** — connects the ad directly to a Facebook Product Catalog. When selected, the media section is replaced with a catalog and segment selector — choose the catalog and the product set to use. The ad dynamically pulls images, names, and prices from your catalog.
**Flexible Ads** — allows you to organise images into groups within a single ad creative. Each Creative group can contain a different set of images, and you can drag and drop images to reorder them within each group. This is useful when you want to test different image batches while keeping the same ad set structure.
***
## What Happens When You Upload Multiple Images
Every image or video you upload becomes a separate ad. If you upload 10 images, you get 10 ads. This is the simplest way to test multiple creatives — one ad per creative, all in the same ad set, sharing the same targeting and budget.
The **Variation Preview** panel on the right updates in real time as you add media. Always check the totals before moving to the next step.
***
## Next: Generate Campaign Variations
Once your base campaign is configured, you can move to [Generate Campaign Variations](/ad-networks/facebook/campaign-uploader/variations) to multiply this structure into dozens or hundreds of campaigns using Groups, Restructuring, and Duplication.
**Structure your campaigns and ad sets before you configure them.** The restructuring options — which decide how your ad sets and ads are distributed across campaigns — appear at the very top of Step 1, immediately after selecting your ad account and campaign name. It is worth reading the [Generate Campaign Variations](/ad-networks/facebook/campaign-uploader/variations) page before you start, so you can plan your structure upfront rather than needing to come back and adjust it later.
# Save as Template & Reuse
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/templates
Save your full campaign configuration — including groups, restructuring settings, and automation assignments — as a reusable template for future launches.
After building a campaign structure — including all groups, Restructuring settings, multi-account copies, naming templates, and automation assignments — you can save the entire configuration as a reusable template.
***
## Saving a Template
When you are ready to save, click the **Save** dropdown in the top-right corner of the launcher. Two options appear:
* **Save** — saves the current state over the existing template name (if you loaded one and want to update it), or prompts you to name a new template.
* **Save As** — always creates a new template with a new name, leaving the original unchanged. Use this when you want to create a variant of an existing template without overwriting it.
Give the template a name, confirm, and it is stored to your account.
***
## Applying a Saved Template
The next time you open the Facebook Campaign Launcher, go to the campaign level and open the **My Space** tab on the right panel. Your saved templates are listed there, each showing a summary of what the template will create:
* **Number of Campaigns** — how many campaigns will be generated
* **Campaign Daily Budget** — the total daily budget across campaigns
* **Number of Ad Sets** — total ad sets that will be created
* **Ad Set Variations** — number of ad set variations
Click **Apply Template** next to any template to instantly load the entire structure — campaign settings, ad set configuration, ad setup, groups, Restructuring rules, and automation assignments. The **Variation Preview** panel on the right also updates immediately to reflect the template's totals, so you can confirm you are loading the right structure before making any changes.
***
## Making Changes After Loading
Once a template is loaded, everything is fully editable. Typically you only need to:
* Swap in new creatives at the ad level
* Adjust a budget amount
* Update a destination URL or pixel
* Change the ad account (for multi-account launches)
The rest — targeting, placements, groups, restructuring rules, naming templates, automation — is already in place from the previous build.
Open the Facebook Campaign Launcher, go to the campaign level, open the **My Space** tab, and click **Apply Template** next to the template you want to use.
Update creatives, budget, URL, or any other setting that differs from the previous launch.
If your changes represent a new reusable configuration (e.g., a different product or market), use **Save As** to save it as a new template before publishing.
Proceed through Review Variations and Add Automation & Publish as normal.
Most media buying teams repeat similar campaign structures daily. Save your first build as a template and every subsequent launch becomes a matter of minutes — even for complex multi-variation, multi-account structures.
# Main Use Cases
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/use-cases
The most common bulk campaign launch scenarios the Facebook Mass Campaign Uploader is built to handle.
The Facebook Mass Campaign Uploader is designed for teams who launch campaigns at scale — dozens or hundreds at a time. Here are the scenarios it is built to handle. Each one below has a short video walkthrough; the scenarios without a video yet are listed at the end.
### 50 Creatives → 50 Campaigns (1-1-1 Campaign Structure)
**What it does?** Uploads your creatives and generates a separate campaign and ad set for each one — one ad per campaign — so every creative is fully isolated and Facebook cannot bias delivery toward a single ad.
**When to use it?** When you want a clean, fair creative test with budget isolation. Each creative gets its own budget and its own learning phase, so the winner earns it instead of delivery bias picking it.
### 50 Creatives → 50 Ad Sets (1-N-1 Campaign Structure)
**What it does?** Generates a separate ad set for each uploaded creative while sharing a single campaign-level budget. One input controls the ads per ad set — set it to 1 for one ad per ad set (the 1-N-1 structure), or higher to group several ads per ad set.
**When to use it?** When you want per-creative separation for cleaner reads but prefer to manage one shared campaign budget instead of dozens.
### Add new creatives as new ad sets into an existing campaign
**What it does?** Feeds a running campaign a fresh batch of creatives and turns each one into its own ad set (or groups several creatives per ad set with a single option) inside the campaign you already have live — no new campaign required.
**When to use it?** When your testing lives in one running campaign and you just want to keep adding challengers. The first launch builds the structure in a few minutes; save it as a template and every future batch becomes upload-and-publish in under a minute, because the template already knows how many ad sets to create and where to publish them.
### Launch one offer across many markets, localized (match by group name)
**What it does?** Runs the same offer in every state, country, or region — each with its own copy, landing page URL, and page — from one reusable template. Create one group per market on the audience, creative, and destination sections, then turn on match by group name so each market only pairs with its own copy and its own URL, with no crossed markets.
**When to use it?** When localization is your bottleneck and you relaunch the same markets often. On the next launch you upload new creatives once and click **Apply To All Groups** to populate every market at once.
### Upload localized ad sets — one per state or market — into an existing campaign
**What it does?** The advanced, multi-market version of adding ad sets to a live campaign. Each state (or country/region) gets its own ad set with its own copy, its own landing page URL, and its own per-placement image crops, matched by group-name pattern so markets never cross.
**When to use it?** When you are scaling a localized offer market by market and want everything wired correctly on every batch — auto-matched placement crops, Advantage+ Creative Enhancement off, and dynamic naming, all saved in a template. Every future batch (new images, same markets) becomes upload-and-publish in about a minute.
### Auto-match image crops to placements by filename
**What it does?** You prepare a square, vertical, and landscape version of each creative and include the aspect ratio in the filename (`1x1`, `9x16`, `1.91x1`); the uploader then assigns each crop to its matching placement automatically across every ad.
**When to use it?** When you build a proper creative for every placement but do not want to edit placements ad by ad in Meta. Even when launching hundreds of ads, every crop is placed in a single step.
### Turn Off Creative Enhancement for all creatives in bulk
**What it does?** Disables Facebook's Advantage+ Creative Enhancement across every ad in a campaign in one action, instead of turning it off manually ad by ad — and keeps it off for future launches when saved in a template.
**When to use it?** When you do not want Meta cropping, filtering, or restyling your creatives, and you want clean creative tests where the win is your ad, not Meta's version of it.
### Launch the same campaign structure across multiple ad accounts at once
**What it does?** Builds your campaign once, replicates it into as many ad accounts as you want, and publishes to all of them in a single launch. Adjust the page or pixel per account where they differ. One campaign with 30 ad sets across three accounts publishes as 3 campaigns, 90 ad sets, and 90 ads at once.
**When to use it?** When you diversify across accounts to spread risk, take advantage of separate learning phases per account, or reduce Facebook's initial randomness. Save it as a template and every future multi-account launch becomes upload-and-publish in minutes.
***
## More scenarios (video walkthroughs coming soon)
### Test the same creatives across multiple audiences and budgets
**What it does?** Generates every combination from a single base ad set — for example, three audiences × three budgets = nine ad set variations — automatically.
**When to use it?** When you want to find the right audience and budget mix for a creative set without building each permutation by hand.
### Group creatives into batches
**What it does?** Puts several creatives per ad set (for example, five per ad set) instead of one.
**When to use it?** When you want grouped rotation testing under shared ad sets rather than full per-creative isolation.
### Launch a full campaign structure from a saved template
**What it does?** Swaps fresh creatives into a saved structure and publishes in minutes instead of rebuilding from scratch every time.
**When to use it?** When you relaunch a proven structure regularly — same setup, new creatives or new accounts.
### Attach automation rules at launch time
**What it does?** Campaigns go live with stop-loss, budget scaling, and other automation rules already active from the first impression.
**When to use it?** When you want protection and scaling logic running immediately, not set up hours after launch.
***
## Is the Mass Campaign Uploader right for you?
The Mass Campaign Uploader is the right tool when:
* You are launching **more than 5–10 campaigns** at once and doing it manually in Ads Manager would take hours
* You want **budget isolation per creative** — one campaign per creative so Facebook's algorithm cannot favour one creative over others
* You need to **test many variables simultaneously** — multiple audiences, budgets, placements, or creative sets — and want all permutations generated automatically
* You are **reusing a proven structure** — same campaign setup, new creatives or new accounts
* You want **automation rules active from the first impression**, not set up hours after launch
For one-off campaigns with a single ad set and a few ads, Facebook Ads Manager is equally fast. The Uploader's value scales with volume and complexity.
# Generate Campaign Variations
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/variations
Use Groups, Campaign Restructuring, and Duplication to turn a simple base campaign into dozens or hundreds of targeted variations.
The variation generation system is what makes the Facebook Campaign Launcher fundamentally different from Facebook Ads Manager. Instead of manually creating every campaign, ad set, and ad, you use one — or a combination — of three mechanisms to generate your full structure from a simple starting point.
***
## Using Groups
Groups let you define multiple values for a targeting section, and the system generates a variation for each group automatically.
In several sections across the campaign, ad set, and ad levels, you will see a **Group Card** — a row starting with one default group and a **+** button to add more. Each group you create represents a separate variation of the entity you are working on. Click on each group tab to customise its settings independently.
For example, if you create two audience groups at the ad set level — one targeting the US and one targeting the UK — TheOptimizer produces two ad set variations, identical in every way except their audience targeting.
**Managing groups.** Click the three-dot menu (⋯) on any group to:
* **Rename** — give the group a meaningful name (e.g., "US Audience" or "Budget \$50"). Group names can be referenced in dynamic naming templates.
* **Clone** — duplicate this group's settings into a new group.
* **Clone Bulk** — duplicate the group multiple times at once.
* **Delete** — remove the group.
* **Manage combinations** — open the combinations manager scoped to this group only, so you can toggle which combinations involving this specific group are active. See [Manage Combinations](#manage-combinations) below.
**Bulk group actions.** Click the **hamburger icon (≡)** to the left of the group tabs to open the group management panel. You can select multiple groups simultaneously using the checkboxes, then apply **Clone**, **Rename**, or **Delete** to all selected groups at once — useful when you have many groups and need to reorganise or bulk-remove them.
**Where groups are available:**
| Level | Section | Group name in UI | What varies between groups |
| ------------ | ----------------- | ---------------- | --------------------------------------------------------------------- |
| **Campaign** | Budget | Budget Group | Daily budget amount, bid strategy |
| **Ad Set** | Budget & Schedule | Budget Group | Per-ad-set daily/lifetime budget, schedule |
| **Ad Set** | Audience Controls | Audience Group | Locations (include/exclude), age, gender, languages, custom audiences |
| **Ad Set** | Placements | Placement Group | Advantage+ vs manual placements, platform/position selections |
| **Ad** | Identity | Identity Group | Facebook Page, Instagram Account |
| **Ad** | Ad Creative | Creative Group | Media (images/videos), primary text, headlines, descriptions |
**How permutations are calculated.** Groups at the same level multiply with each other. If you create three budget groups and three audience groups at the ad set level, the system generates 3 × 3 = 9 ad set variations. Add two placement groups and you get 3 × 3 × 2 = 18 ad set variations.
The **Variation Preview** panel on the right updates in real time as you add groups. Always check this counter before proceeding.
Permutations can grow quickly. Three groups in three different sections produces 27 variations. Make sure the total in the **Variation Preview** is intentional before moving forward.
***
## Using Campaign Restructuring
Campaign Restructuring lets you take the variations you have built and distribute them across separate campaigns and ad sets exactly the way your testing strategy requires. Unlike older versions of the launcher where restructuring was a late step, **restructuring is now defined at the very beginning of the campaign creation flow**, immediately after selecting an ad account and naming your campaign.
This means you can plan your final structure upfront — before you even configure audiences or upload creatives — which prevents surprises at the end and makes the whole process faster.
Restructuring is split into two independent sections: one at the **campaign level** and one at the **ad set level**. Both sections have a **Preview** button that shows the complete campaign tree — with naming templates applied — based on your current settings and any groups you have already defined.
***
### Structure Your Campaigns
The **Structure your campaigns** section sits at the top of the **Create Campaign** step (Step 1). It controls how your total set of ad sets and ads gets distributed across campaigns.
There are two options, each independently toggleable. You can enable one, the other, or both simultaneously.
**Option 1 — Generate campaigns based on Ad Set groups**
This option lets you specify which ad set groups each generate a separate campaign. For example, if you have defined Audience groups and Placement groups at the ad set level, you can tell the system: "Give each unique combination of audience and placement its own campaign."
Selecting a group here moves that dimension of variation from the ad set level up to the campaign level. The result: each campaign contains ad sets that share the same audience/placement combination, and different campaigns are used to isolate different targeting setups.
Multiple groups can be combined. The number of campaigns created equals the number of unique combinations across all selected groups. For example:
* 5 Audience groups × 3 Placement groups = **15 campaigns**, each containing ad sets for one specific audience + placement pair
* Any other groups you defined but did not include here (e.g., Budget groups) remain as ad set-level variation inside each campaign
This option did not exist in the previous version of the launcher. Previously, you could only separate campaigns by the number of ad sets — you had no way to say "I want a separate campaign for each audience I'm testing."
Use group-based campaign separation when your testing strategy is audience-first or placement-first. It gives you clean, isolated campaign budgets per targeting dimension without having to manually create each campaign.
**Option 2 — Generate campaigns based on the number of Ad Sets per campaign**
This is the same option that existed in the previous version, now surfaced earlier in the flow.
Toggle it on and set a number — for example, 1. The system will create as many campaigns as needed to give each ad set its own campaign. Set it to 2 and each campaign gets two ad sets, and so on.
Example: you have generated 20 ad set variations total. Setting this to "1 Ad Set per campaign" creates 20 campaigns, each with 1 ad set. Setting it to "2 Ad Sets per campaign" creates 10 campaigns, each with 2 ad sets.
**Combining both options**
If both options are enabled at the same time, their results are multiplied together.
Example: you have 5 Audience groups and 3 Placement groups selected in Option 1, generating 15 base campaigns. You also have 20 total ad sets and have enabled Option 2 with "1 Ad Set per campaign". The final campaign count becomes 15 × 20 = **300 campaigns**.
The **Preview** button at the bottom of this section shows the full resulting structure — including naming templates — so you can verify the outcome before you've finished building the campaign.
***
### Structure Your Ad Sets
The **Structure your ad sets** section works at the ad level — controlling how your ads get distributed across ad sets.
It has the same two-option layout as the campaign-level section, and also has a **Preview** button.
**Option 1 — Generate ad sets based on Ad groups**
This option lets you specify which ad-level groups each generate a separate ad set. For example:
* Select **Identity group** → each Facebook Page / Instagram Account combination gets its own ad set
* Select **Creative group** → each creative group (images, videos, copy variations) gets its own ad set
* Select both → each combination of identity and creative gets its own ad set
This is particularly useful for:
* **Testing images vs. videos in separate ad sets** — create one Creative group with images and one with videos, select it here, and each gets its own ad set
* **Running ads under different Pages in separate ad sets** — identity isolation per ad set without manual duplication
* **Testing different copy groups on separate ad sets** — group ads by copy variation and isolate each group
This option did not exist previously. In the old version, groups were only used at the ad level to generate ad variations — there was no way to say "I want a separate ad set for each creative group." Now you can.
**Option 2 — Generate ad sets based on the number of Ads per ad set**
Toggle this on and set the number of ads per ad set. The system generates the necessary number of ad sets to accommodate all your ads at that count.
Example: you have uploaded 30 images (30 ads). Setting this to "5 Ads per Ad Set" creates 6 ad sets, each containing 5 ads. Setting it to "1 Ad per Ad Set" creates 30 ad sets.
**How ad set restructuring affects campaign restructuring**
The total number of ad sets generated by the ad set-level restructuring feeds directly into the campaign-level restructuring calculation. If the ad set structure produces 30 ad sets and you have "1 Ad Set per campaign" enabled at the campaign level, you will end up with 30 campaigns — regardless of how many you started with.
Always use the **Preview** button after configuring both sections to see the final campaign count and structure.
***
### Manage Combinations
By default, when you define multiple groups across levels, the system generates every possible combination of those groups. **Manage Combinations** gives you precise control over which specific combinations actually get created — letting you remove nonsensical pairings without deleting any groups.
The **Manage combinations** option appears at the top of both the **Structure your campaigns** and **Structure your ad sets** sections — above the two generate/restructure toggles. Click the **Manage** button to open the combinations manager.
#### The Manage Combinations Dialog
The dialog lists every possible combination of your current groups. Each row shows the groups involved (e.g., CREATIVE **EN** + DESTINATION **EN-LP01**) and a toggle to include or exclude that combination.
At the top of the dialog, a counter shows how many combinations are **Active** vs. **Excluded** in total. A search field lets you find a specific combination by name. Use the **Filter by** dropdowns to narrow the list by group type (e.g., show only combinations involving a specific Destination or Creative group).
At the bottom, three bulk action buttons let you act on the filtered list:
* **Enable shown** — activate all combinations currently visible in the filtered list
* **Disable shown** — exclude all combinations currently visible
* **Disable everything** — exclude every combination at once (useful for starting from zero and enabling only what you want)
#### Auto-Match by Name
Instead of toggling combinations manually, use **Auto-match by name** to automatically pair groups that share a name across levels. This is the fastest way to set up localisation-style structures where each creative group should only run with the matching destination group.
**Match by full name** — pairs groups whose names are identical. For example, a Creative group named "EN" is automatically enabled only with Destination groups also named "EN", while all cross-language pairings are excluded.
**Match by pattern** — pairs groups that share a common prefix when you split the name by a delimiter. Set the delimiter (e.g., `-`) and the part to match on (e.g., "First part"), then click **Match**. For example, with delimiter `-` and match on "First part": a Creative group named "EN" matches Destination groups named "EN-LP01" and "EN-LP02" (both start with "EN-"), while "KO-LP01" and "MR-LP01" are excluded.
Auto-match by name is especially powerful for localisation campaigns: name your Creative groups by language code (EN, KO, MR, …) and your Destination groups as - (EN-LP01, KO-LP01, …). One click of Match by pattern wires up all the correct creative-to-lander pairs and excludes every cross-language mismatch automatically.
***
### Restructuring Examples
**Example 1 — Isolate each creative in its own campaign (full budget isolation)**
Goal: 20 image ads, one campaign per creative, each with its own budget.
Setup:
* Ad set level → Option 2 → 1 Ad per Ad Set → generates 20 ad sets
* Campaign level → Option 2 → 1 Ad Set per campaign → generates 20 campaigns
Result: 20 campaigns, each with 1 ad set and 1 ad. Every creative has a completely isolated budget.
***
**Example 2 — Test audiences in separate campaigns, creatives in separate ad sets**
Goal: 3 audiences each tested in their own campaign; within each campaign, each creative gets its own ad set.
Setup:
* Ad Set level → Audience groups (3 groups) → selected in Campaign level Option 1 → 3 campaigns
* Creative group (5 creatives) → selected in Ad Set level Option 1 → 5 ad sets per campaign
Result: 3 campaigns × 5 ad sets = 15 ad sets total. Each campaign targets one audience; within each campaign, each creative has its own ad set.
***
**Example 3 — Test pages in separate ad sets, audiences in separate campaigns**
Goal: Run ads under 2 different Facebook Pages; test 4 different audiences, each in a separate campaign.
Setup:
* Ad level → Identity group (2 groups, one per Page) → selected in Ad Set level Option 1 → 2 ad sets per campaign
* Ad Set level → Audience group (4 groups) → selected in Campaign level Option 1 → 4 campaigns
Result: 4 campaigns × 2 ad sets = 8 ad sets total. Each campaign targets one audience; within each campaign, there is one ad set per Facebook Page identity.
***
## Reviewing the Preview
Both the campaign-level and ad-set-level restructuring sections include a **Preview** button. Clicking it generates a complete, expandable campaign tree showing:
* Every campaign that will be created, with its name (using your naming template)
* Every ad set inside each campaign, with its name
* Every ad inside each ad set
The preview updates dynamically as you add groups and change restructuring settings throughout the campaign creation process. Use it frequently — especially before moving to the Review Variations step — to catch misconfigurations early.
***
## Reviewing Variations (Step 2)
Once you complete the Create Campaign step (Step 1), clicking **Review Variations** takes you to a full read-only summary of the structure you are about to launch.
The Review Variations step is now purely a review screen. Restructuring is no longer done here — it was moved to Step 1 in the latest version of the launcher.
**What you see in Step 2:**
At the top, a row of summary cards shows:
* Number of Campaigns
* Number of Ad Sets
* Total Daily Budget (for ad set-level budgets)
* Number of Ad Set Variations
* Number of Audiences
* Number of Ads
* Number of Headlines
* Number of Descriptions
* Number of Ad Variations
Below the summary cards is the full campaign tree — Campaign → Ad Set → Ad — with each item showing its final name (naming templates applied). Every item in the tree has a **toggle switch** you can use to enable or disable that specific variation. Disabling a campaign disables everything inside it; disabling an individual ad set or ad removes just that item from the launch.
This is where you make any final adjustments — for example, removing a specific ad from one ad set, or disabling a campaign variation you no longer want — without going back and re-configuring the whole structure.
***
## Using Duplication
The third way to generate variations is by manually duplicating items in the left panel tree. Click the three-dot menu (⋯) on any campaign, ad set, or ad and select **Duplicate** (to copy with all settings) or **Create New** (to start a fresh one).
Duplication creates an exact copy of the selected item and everything inside it. You can then click on the copy and modify its settings — different creatives, different destination URLs, different structure.
This is the most manual approach, but it gives you full control over exactly what goes inside each campaign, ad set, or ad.
***
## Groups vs. Restructuring vs. Duplication — When to Use Which
| Method | Best for | Control level |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- |
| **Groups** | Testing combinations of variables (budgets × audiences × placements) — you want all permutations generated automatically | You control the variables; the system generates all combinations |
| **Restructuring** | Deciding how ad sets and ads are distributed across campaigns — audience isolation, creative isolation, budget isolation | You control the distribution rule; the system does the splitting |
| **Duplication** | When you need specific creatives in specific ad sets, or different destination URLs per ad — full manual control | You control everything; no automation |
In practice, most workflows use a combination: Groups define what varies, Restructuring decides how variations are distributed across campaigns and ad sets, and Duplication handles the parts that need manual precision.
***
## Next Steps
* [Multi-Ad Account Launch](/ad-networks/facebook/campaign-uploader/multi-account) — launch the same structure across multiple ad accounts simultaneously
* [Dynamic Naming Templates](/ad-networks/facebook/campaign-uploader/naming-templates) — auto-generate meaningful names across all your variations
# Campaign Creator vs. Facebook Ad Manager
Source: https://docs.theoptimizer.io/ad-networks/facebook/campaign-uploader/vs-ads-manager
What the TheOptimizer Facebook Campaign Creator can do that native Facebook Ads Manager cannot.
The Facebook Mass Campaign Uploader follows the same campaign → ad set → ad flow you already know from Facebook Ads Manager. The difference is in what you can do on top of that flow.
The following features are available in the Campaign Launcher and are **not** available in native Ads Manager:
Define multiple values for any targeting section (budgets, audiences, placements, pages, creatives) and the system automatically generates a separate variation for all group permutations. Three budget groups × three audience groups = nine ad set variations, created instantly — no manual duplication.
Build a simple campaign with all your creatives, then with a single toggle "explode" it into one campaign per creative, one ad set per creative, or any distribution you need. Upload once, reshape the structure in seconds.
Duplicate your entire campaign structure (including all variations and settings), assign a different ad account to each copy, and publish everything together in one go. No need to rebuild the same campaigns from scratch in each account.
Save your full configuration as a template: campaign settings, ad set setup, ads, variation groups, restructuring settings, multi-account copies, naming templates, and automation assignments. Load it next time and launch with minimal changes.
Browse all images and videos from your active campaigns across all connected accounts, sorted by performance metrics (spend, EPC, usage). Filter by Creative Library tags to pull in pre-organised asset collections instead of uploading from scratch.
Attach your existing TheOptimizer automation rules to campaigns before they go live. Rules start evaluating from the first impression — no gap between launch and automation.
Auto-generate campaign, ad set, and ad names using placeholders for targeting settings, budgets, group names, nested names from lower levels, and incremental indexes. Keep naming clean across hundreds of variations.
Generate new image variations directly inside the launcher using built-in AI image enhancement, powered by prompts or example images.
Assign different creatives to specific placements (for example, a different crop for Stories) across all ads at once, instead of customising one ad at a time.
Load any live or paused campaign and add new ad sets or ads to it without touching what is already running — no need to recreate the campaign structure.
Use any previously published Facebook post as an ad creative, preserving its accumulated social proof (likes, comments, shares) across campaigns.
***
## What Stays the Same
The campaign settings themselves are identical to Ads Manager. You will find the same options for:
* Campaign objectives (Sales, Traffic, Leads, Engagement)
* Advantage Campaign Budget vs. ad set level budgets
* Audience targeting (locations, age, gender, languages, custom audiences)
* Placements (Advantage+ or manual)
* Ad formats (Single Image, Video — Carousel and Flexible Ads coming soon)
* Pixel selection and conversion events
* Ad copy fields (primary text, headline, description, CTA)
If you know how to set up a campaign in Ads Manager, you already know how to use the launcher for the core configuration. The advanced features on top of it are additive — you learn them as you need them.
# Cloning Campaigns, Ad Sets & Ads
Source: https://docs.theoptimizer.io/ad-networks/facebook/cloning/overview
Clone Facebook campaigns, ad sets, and ads — individually or in bulk — to scale winning creatives, move campaigns between ad accounts, or test new setups without rebuilding from scratch.
Cloning lets you duplicate Facebook campaigns, ad sets, and ads with full control over the destination and key settings. You can clone a single item or select dozens at once and clone them all in one operation — across ad accounts, across campaigns, or within the same campaign.
Cloning is available at all three levels: **Campaign**, **Ad Set**, and **Ad**.
***
## When to Use Cloning
**Scale winning campaigns and ads**
When a campaign, ad set, or ad is performing well, cloning lets you deploy it to additional ad accounts or create multiple copies on the same account to increase spend capacity. You can also filter ads in the Campaign Manager by performance metrics (spend, ROI, ROAS, net profit) and bulk-clone only the winners into a destination scaling campaign — without touching ads that aren't performing.
**Reduce downtime when switching ad accounts**
When you need to move your campaigns to a different ad account — whether you're migrating a business to a new account, replicating a setup for a new client, consolidating accounts, or simply starting fresh — cloning lets you do it in minutes rather than rebuilding from scratch. Select all campaigns in the source account, choose the destination account, update any pages, pixels, or identity settings that differ between the two accounts, and clone. What would otherwise take days of manual work becomes a single operation.
**Test variations without rebuilding**
Clone a set of ads into a different ad set to test a new destination URL, a different Facebook Page, or a different pixel — without recreating the ad creative. All identity and tracking settings can be overridden at clone time.
***
## Single vs. Bulk Cloning
**Single clone** — hover over any campaign, ad set, or ad row in the Campaign Manager to reveal the inline **Clone** button below the item name. Click it to open the clone modal for that one item.
**Bulk clone** — check the boxes on multiple campaigns, ad sets, or ads (even from different ad accounts or campaigns), then click **Clone** in the bulk action bar at the bottom of the screen. All selected items are cloned together in one operation.
***
## Cloning a Campaign
Click **Clone** on a campaign to open the Clone Campaign modal.
### Name
The cloned campaign inherits the original name by default. Click **+ Add suffix** to append additional identifiers:
| Option | Example output |
| ---------------- | ----------------------------- |
| **Timestamp** | `2026-06-24T08:54:46.735Z` |
| **Date** | `2026-06-24` |
| **Account Name** | The ad account's display name |
| **Account ID** | The numeric account ID |
| **Custom text** | Any text you type |
You can combine multiple suffixes and edit the name field directly.
### Destination Account
Choose which ad account the cloned campaign should be created in. Defaults to the same account as the original.
### Number of Copies
How many copies to create for each selected campaign. Setting this to 3 with 2 campaigns selected creates 6 cloned campaigns total.
### Campaign Status
Whether the cloned campaigns start as **Active** (go live immediately) or **Paused** (held for review before activation).
### Campaign Settings
**Set Schedule** — optionally set a start date, end date, and time for the cloned campaign. Unlike Facebook's native scheduling, TheOptimizer lets you choose a **timezone** independent of the ad account's timezone. If your ad account is in UTC but you work in Eastern or Pacific time, you can schedule in your own timezone and the platform converts it automatically.
**Adjust Budget** — override the original campaign budget for all cloned copies. Options:
* Increase or decrease by a fixed amount or percentage
* Set the budget to a specific value
### Ad Set Settings
**Promoted Object** — override the **Pixel** and **Optimized Event** for all ad sets inside the cloned campaigns. Useful when cloning to a different ad account that uses a different pixel.
### Ad Settings
**Overwrite Website & Display URL** — replace the destination URL on every ad in the cloned campaigns. Enter a new URL and optionally a separate display link. Leave this off to keep each ad's original URL.
**Identity** — override the **Facebook Page** and **Instagram account** used for all cloned ads. This is essential when cloning to a new ad account after a restriction, where the original page may also be restricted.
**Tracking** — override the **tracking pixel** for all cloned ads.
***
## Cloning an Ad Set
Click **Clone** on an ad set to open the Clone Ad Set modal.
Ad set cloning includes the same name customisation as campaigns. Additional fields:
| Field | Description |
| ------------------------ | ------------------------------------------------------------------------- |
| **Destination Account** | The ad account to create the cloned ad set in |
| **Destination Campaign** | The campaign within that account to place the cloned ad set |
| **Number of Copies** | How many copies to create for each selected ad set |
| **Ad Set Settings** | Override the Promoted Object (Pixel, Optimized Event) |
| **Ad Settings** | Override Identity (Facebook Page, Instagram account) and Tracking (pixel) |
Ad sets can be cloned across campaigns and across ad accounts. You can select ad sets from multiple campaigns at once and clone them all to a single destination campaign in one operation.
***
## Cloning an Ad
Click **Clone** on an ad to open the Clone Ad modal.
Ad cloning requires selecting three destinations: the account, the campaign within it, and the ad set within that campaign. Fields:
| Field | Description |
| ------------------------ | ------------------------------------------------------------------------- |
| **Destination Account** | The ad account to create the cloned ad in |
| **Destination Campaign** | The campaign to place the cloned ad in |
| **Destination Ad Set** | The ad set within that campaign |
| **Number of Copies** | How many copies to create for each selected ad |
| **Ad Settings** | Override Identity (Facebook Page, Instagram account) and Tracking (pixel) |
This is the most granular cloning operation. A common use is filtering ads in the Campaign Manager by performance, selecting winners, and cloning them all directly into a destination ad set inside your scaling campaign.
# Connect Facebook
Source: https://docs.theoptimizer.io/ad-networks/facebook/integration/connect
Authorise TheOptimizer to access your Facebook ad accounts using a Business profile, Personal profile, or Access Token.
TheOptimizer supports three ways to connect Facebook. Choose the one that matches your setup:
| Method | Best for |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Business profile** (recommended) | Agencies and teams using Meta Business Suite with a System User. Provides the most stable, long-lived connection. |
| **Personal profile** | Individual users managing a limited set of ad accounts and Pages personally. Subject to standard OAuth token expiry. |
| **Access Token** | Advanced users who want to connect via a manually generated System User access token from Meta Business Suite. Full control over token scope and lifetime. |
***
## Connect with a Business or Personal Profile
From the left-hand navigation menu, go to **Integrations**. Find the **Facebook** card and click **Connect →**.
A dialog appears asking how you want to connect. Select **Business profile** (recommended) or **Personal profile**, then click **Continue with Facebook**. You will be redirected to Facebook to complete the authorisation.
Facebook will ask which Pages you want TheOptimizer to access.
Select **"Opt in to all current and future Pages."** This grants access to any Pages you create in the future, so you won't need to re-authorise every time you launch a new campaign under a new Page.
Facebook will ask which Business Managers to include. Select the Business Manager that contains the ad accounts you want to manage in TheOptimizer, then click **Continue**.
If you manage multiple Business Managers, you can connect them all at once — select each one that contains ad accounts you want TheOptimizer to access.
Facebook will show a summary of the permissions being granted. These permissions allow TheOptimizer to read campaign performance data and make changes (pause campaigns, adjust budgets, etc.) on your behalf. Review them and click **Confirm** to complete the authorisation.
TheOptimizer shows a confirmation screen with the number of ad accounts added and the integration name.
Initial sync takes **up to 20–30 minutes**. After connection, TheOptimizer starts pulling your campaign data. Campaigns and ads may not appear immediately — this is expected. Give it up to half an hour before troubleshooting.
From this screen, you can also click **Connect Tracker** to link a tracking platform to your Facebook integration right away. You can also do this later from the Integrations page.
***
## Connect with an Access Token
Use this option when you want to connect using a System User access token generated directly from Meta Business Suite. This gives you full control over which permissions are included and is not subject to standard OAuth token expiry tied to a personal login.
In Meta Business Suite, go to **Business Settings → System Users**. Select or create a System User with admin access, assign the ad accounts you want TheOptimizer to manage, then generate an access token with the following permissions:
* `pages_show_list`
* `ads_management`
* `ads_read`
* `business_management`
* `pages_read_engagement`
* `public_profile`
Copy the generated token — it will only be shown once.
In TheOptimizer, go to **Integrations → Facebook → Connect →**. In the profile type dialog, click **Advanced — Use Access Token**.
Give the connection a recognisable name (e.g., "Production Token" or "Agency Token"), paste your access token, and click **Save**.
TheOptimizer validates the token and pulls in the ad accounts the System User has access to. Initial sync takes up to 20–30 minutes.
System User tokens generated in Meta Business Suite do not expire on password changes and are not tied to any individual's personal Facebook account, making them significantly more stable for long-running integrations.
***
## What Permissions Are Granted
TheOptimizer requests the following Facebook permissions regardless of connection method:
| Permission | Purpose |
| ----------------------- | ------------------------------------------------- |
| `pages_show_list` | List Pages available to the authenticated account |
| `ads_management` | Read and update campaigns, ad sets, and ads |
| `ads_read` | Read campaign performance metrics |
| `business_management` | Access ad accounts within Business Managers |
| `pages_read_engagement` | Read Pages (required for ad identity setup) |
| `public_profile` | Basic profile identification |
TheOptimizer does not request permission to post to your Pages, access your personal messages, or take any actions outside of ad account management.
***
## Connecting Multiple Facebook Profiles
You can connect multiple Facebook profiles to the same Facebook integration — whether Business profiles, Personal profiles, or Access Tokens. This supports teams where each member manages their own set of accounts, and provides backup access if a primary profile gets restricted.
To add a second profile, go to **Integrations → Facebook** and click **Add Profile** (or the **Connect new profile** card in the profiles panel). Complete the same connection flow with the additional login or token.
See [Manage Ad Accounts & Profiles](/ad-networks/facebook/integration/manage-accounts) for how to assign ad accounts to profiles and manage the relationship between them.
***
## Custom Events
Beyond the standard Facebook events, TheOptimizer can import **any custom event** — and its revenue — from your Facebook integration. Sync them from the **Custom Events** tab inside the integration, and use them in reporting, as conditions in rules, and in custom metrics.
See [Custom Events](/integrations/custom-events) for the full setup.
***
## Next Steps
* [Manage Ad Accounts & Profiles](/ad-networks/facebook/integration/manage-accounts) — enable/disable/archive accounts, manage profile assignments, add tags
* [Custom Events](/integrations/custom-events) — import any custom event and its revenue into reporting, rules, and custom metrics
* [Troubleshoot a Connection](/ad-networks/facebook/integration/troubleshoot) — fix token expiry, missing accounts, sync issues
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/facebook/integration/manage-accounts
Enable, disable, and archive Facebook ad accounts — plus manage profile assignments, add tags, and configure tracker connections per account.
Once your Facebook integration is connected, you can manage the individual ad accounts and authentication profiles associated with it from **Integrations → Facebook**.
***
## Ad Accounts
Click on the Facebook integration to see the full list of ad accounts pulled from your connected profiles.
### Account Details: Budget, Spending & Status
Each connected ad account surfaces key budget, spending, and status information directly in TheOptimizer, so you can understand account health at a glance without switching back to Ads Manager:
* **Account Issues** — the reason an ad account is restricted or banned, so you can act on the real cause instead of guessing why delivery dropped.
* **Spending Cap** — the account's spending limit. This is **editable directly from TheOptimizer** — raise it inline when you need to give a winning campaign more room to scale.
* **Amount Spent** — the total amount spent from the account.
* **Balance** — the account's current balance.
* **Min Budget** — the account-level minimum budget you can use in campaigns.
These details are especially valuable when you run many accounts at once: catch a restricted or banned account the moment it happens rather than discovering it when spend flatlines. To adjust a limit, edit the **Spending Cap** field directly from the account row.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: hover the ad account row and click **Edit**, or use the tag controls directly in the Tags column.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are the Facebook logins or access tokens that TheOptimizer uses to access your ad accounts. Each profile appears as a card in the Profiles panel, showing the profile name, how many ad accounts are assigned to it, and quick-action buttons.
Each profile card shows:
* **Account count** — number of ad accounts currently assigned to this profile
* **Sync** — re-queries Facebook to pull in any new ad accounts accessible to this profile
* **Re-Authenticate** — refreshes the OAuth token or replaces a token that has expired
* **Manage Ad Accounts** — opens the assignment dialog to control which ad accounts use this profile
### Add New Profiles
Go to **Integrations → Facebook → Profiles** and click the **Connect new profile** card. Choose your connection method (Business profile, Personal profile, or Access Token) and complete the flow.
Reasons to add multiple profiles:
* **Team access** — each team member manages their own set of accounts under their own login.
* **Backup access** — if a primary profile is restricted, a backup profile can take over the affected accounts immediately.
* **Multiple Business Managers** — different Business Managers often have different admin logins.
* **Access Token isolation** — keep system user tokens separate from personal logins for more stable long-running integrations.
### Assign Ad Accounts to a Profile
Each ad account must be assigned to exactly one profile — the profile TheOptimizer uses to access it. To change which profile an account uses, click **Manage Ad Accounts** on the profile you want to assign accounts to.
The dialog shows two sections:
* **Accounts assigned to another profile** — ad accounts that this profile has access to but which are currently using a different profile. Select any you want to reassign to this profile.
* **Accounts already assigned to this profile** — ad accounts currently using this profile, listed for reference.
Select the accounts you want to add, then click **Save**. The selected accounts immediately switch to using this profile for all data sync and automation.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
### Sync New Ad Accounts
When you add a new ad account to a Business Manager you've already connected, it won't appear automatically. To pull in the new account, click **Sync** on the relevant profile card. This re-queries Facebook for that profile and pulls in any newly accessible accounts.
### Grant Access to New Pages
If you create a new Facebook Page after connecting TheOptimizer, it won't automatically be available for use in the Campaign Creator. You need to re-authenticate the relevant profile and explicitly grant access to the new Page during the OAuth flow.
1. Go to **Integrations → Facebook → Profiles**.
2. Find the profile that should have access to the new Page and click **Re-Authenticate**.
3. On the first step of the Facebook dialog, click **Edit settings** instead of Continue.
4. On the Pages selection screen, select the new Pages you want to grant TheOptimizer access to.
5. Complete the rest of the OAuth flow as normal.
Select **"Opt in to all current and future Pages"** on the Pages screen. This grants access to any Pages you create in the future, so you won't need to go through this process again the next time you launch a campaign under a new Page.
### Re-authenticate a Profile
Facebook OAuth tokens expire or become invalid when you:
* Change your Facebook account password
* The ad network detects suspicious activity on your account
* Security settings change (e.g., two-factor authentication changes)
* The token is manually revoked from Facebook's security settings
When a token expires, TheOptimizer can no longer sync data or run automation for the accounts under that profile. Click **Re-Authenticate** on the profile card and complete the OAuth flow again to refresh the token.
Re-authenticating refreshes the token without losing any account history, automation settings, or tags.
You will receive email notifications when a profile needs re-authentication. Do not ignore them. If a profile becomes invalid and is not refreshed, all automation and data sync for its accounts will silently stop.
# Troubleshoot a Facebook Connection
Source: https://docs.theoptimizer.io/ad-networks/facebook/integration/troubleshoot
Fix common Facebook integration issues — token expiry, missing ad accounts, missing Pages, sync delays, and automation not firing.
## Token Expired / Re-authentication Required
**Symptom:** You receive an email saying a profile needs re-authentication, or you see a warning banner on the Facebook integration page. Campaigns may stop updating or automation rules stop firing.
**Cause:** Facebook OAuth tokens expire when you change your Facebook password, when Facebook detects suspicious activity, or when security settings change.
**Fix:**
1. Go to **Integrations → Facebook → Profiles**.
2. Find the profile showing the error.
3. Click **Re-authenticate** and complete the OAuth flow with the same Facebook login.
Re-authenticating refreshes the token without losing any history or settings. After completing the flow, data sync and automation resume within a few minutes.
Do not ignore re-authentication notifications. All automation and data sync for accounts under the affected profile silently stops until the token is refreshed.
***
## Ad Accounts Not Appearing After Connection
**Symptom:** You connected Facebook but some (or all) of your ad accounts are not showing up in TheOptimizer.
**Possible causes and fixes:**
**Wrong Business Manager selected during OAuth** — during the Facebook authorisation flow, you select which Business Manager to include. If you selected the wrong one or skipped one, the ad accounts in the missed Business Manager won't appear. Fix: go to **Integrations → Facebook → Profiles**, click **Re-authenticate** on the profile, and during the flow make sure to select the correct Business Manager.
**New ad account added after the initial sync** — ad accounts added to a Business Manager after you first connected won't appear automatically. Fix: go to **Integrations → Facebook → Profiles**, find the relevant profile, and click **Sync** to pull in new accounts.
**Ad account belongs to a different login** — each profile only pulls accounts accessible by that specific Facebook login. If an account is managed by a different login, connect that login as an additional profile. See [Manage Ad Accounts & Profiles](/ad-networks/facebook/integration/manage-accounts).
***
## Pages Not Available in the Campaign Creator
**Symptom:** When building a campaign in the Campaign Creator, you can't find a Facebook Page you want to use.
**Cause:** The Page wasn't included during the Facebook authorisation flow.
**Fix:** Go to **Integrations → Facebook → Profiles**, click **Re-authenticate**, and during the OAuth flow select **"Opt in to all current and future Pages"**. This ensures all your Pages are accessible going forward.
***
## Data Not Updating / Sync Delay
**Symptom:** Campaign data in TheOptimizer is hours behind or not updating at all.
**Expected behaviour:** TheOptimizer syncs data from Facebook multiple times per day. There is a natural lag of up to 1–2 hours between a change on Facebook and it appearing in TheOptimizer. Initial sync after first connecting can take up to 30 minutes.
**If the delay is longer than a few hours:**
1. Check if the profile for the affected ad accounts shows a re-authentication warning (see above).
2. Go to the ad account in TheOptimizer and verify it is enabled (ON/OFF toggle is ON).
3. Check if the ad account has the correct profile assigned.
4. If none of the above resolves it, contact support with the ad account ID.
***
## Automation Rules Not Firing
**Symptom:** Rules are configured and enabled but don't appear to be taking action on Facebook campaigns.
**Check these in order:**
1. **Profile health** — verify the Facebook profile for the affected accounts is not showing a re-authentication error.
2. **Account enabled** — confirm the ad account is enabled (ON toggle) in the integration settings.
3. **Rule scope** — open the rule and verify the scope includes the affected campaigns or ad accounts.
4. **Rule conditions** — check the data interval. If the rule looks at "Today" data, it won't fire until enough data has accumulated in that session. Check the Activity Log on the rule to see when it last evaluated.
5. **Tracker data** — if the rule uses tracker metrics (Tracker Conversions, Tracker ROI, etc.), confirm the tracker is correctly connected and producing data for the affected campaigns.
***
## Pixel or Tracking Issues
**Symptom:** Tracker conversions are showing zero, or Facebook Results in rules always return zero.
**For Facebook pixel (Facebook Results metric):**
* Verify the pixel is installed and firing on your landing page or conversion event.
* In Facebook Events Manager, check that the conversion event you're using is active and receiving data.
* Make sure the correct pixel is selected at the ad level in TheOptimizer's Campaign Creator.
**For tracker conversions:**
* Confirm the tracking URL parameters are appended to your campaign destination URLs.
* Check your tracker's reporting to verify clicks are being recorded for the affected campaigns.
* Verify the tracking template selected in TheOptimizer matches the traffic source setup in your tracker.
***
## Contact Support
If none of the above resolves your issue, contact TheOptimizer support with:
* The ad account ID (found in Facebook Ads Manager under the account name)
* The integration profile name in TheOptimizer
* A description of what you expected to happen and what happened instead
* The approximate time the issue started
# Facebook (Meta) on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/facebook/overview
Everything you need to run Facebook and Instagram ads in TheOptimizer — connect your accounts, automate optimization, and launch campaigns at scale from one place.
If you use TheOptimizer for Facebook (Meta), this is your home base. Everything Facebook-specific — connecting accounts, automation rules, and the Mass Campaign Launcher — lives in this section. Connect once with a single OAuth login and TheOptimizer pulls in your campaigns, ad sets, and ads automatically.
## Step 1 — Connect your accounts
Authorize TheOptimizer with a Business profile, Personal profile, or Access Token.
Enable, disable, tag, and assign profiles to the accounts you sync.
Fix sync gaps, permission errors, and disconnected accounts.
## Step 2 — Automate your optimization
What you can automate on Facebook and how rules run around the clock.
Ready-to-copy rules from thousands of real Facebook campaigns.
## Step 3 — Launch campaigns at scale
Build and publish Facebook campaigns in bulk — variations, multi-account, and more.
Duplicate existing structures with new budgets, audiences, or creatives.
## Shared tools you'll use
These work the same for Facebook as for every other network:
Monitor and act on all your Facebook campaigns, ad sets, and ads from one table.
The rules engine, rule chains, templates, and Smart Lists in depth.
Track creative performance and reuse winning assets in the launcher.
See every automated action TheOptimizer takes on your account.
# Connect Google Ads
Source: https://docs.theoptimizer.io/ad-networks/google-ads/integration/connect
Authorise TheOptimizer to access your Google Ads accounts using OAuth so it can read campaign data and manage bids and budgets on your behalf.
Google Ads uses OAuth for authentication — you log in with your Google account directly and grant TheOptimizer the permissions it needs. No API keys to copy and paste.
For best results, log in with the Google account that has **Manager Account (MCC)** access. This allows TheOptimizer to access all child ad accounts under that MCC in a single connection.
From the left-hand menu, go to **Integrations**. Find the **Google Ads** card and click **Connect →**.
You will be redirected to Google's authorisation screen. Sign in with the Google account that has access to your Google Ads Manager Account (MCC). If you manage multiple MCCs, connect with the account that has the broadest access.
Google will display a summary of the permissions being requested. These allow TheOptimizer to read your campaigns, ad groups, and ads, and to manage bids and budgets via the Google Ads API. Review the permissions and click **Allow** to complete the authorisation.
TheOptimizer shows a confirmation screen once the connection is established. Initial sync takes **up to 20–30 minutes**. Your campaigns and ads may not appear immediately — this is expected. Give it up to half an hour before troubleshooting.
If your MCC contains multiple child accounts, all of them will be pulled in and listed under this integration after the initial sync.
***
## What Permissions Are Granted
TheOptimizer requests the following Google Ads permissions:
* **Read campaigns, ad groups, and ads** — retrieve your campaign structure and creative data
* **Read performance statistics** — access impressions, clicks, spend, and conversion metrics
* **Manage bids and budgets** — update keyword bids, campaign budgets, and ad group CPC/CPM values via the Google Ads API
TheOptimizer does not request access to your Google account profile, Gmail, or any other Google product outside of Google Ads.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/google-ads/integration/manage-accounts
Enable, disable, and archive Google Ads accounts — plus reassign profiles, add tags, and manage tracker connections per account.
Once your Google Ads integration is connected, you can manage the individual ad accounts and authentication profiles associated with it from **Integrations → Google Ads**.
***
## Ad Accounts
Click on the Google Ads integration to see the full list of ad accounts pulled from your connected Google account or Manager Account (MCC).
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the Google login TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are the Google logins (OAuth tokens) that TheOptimizer uses to access your Google Ads accounts. After connecting Google Ads via OAuth, each authenticated login becomes a profile.
### Add New Profiles
Go to **Integrations → Google Ads → Profiles** and click **Add Profile**. Complete the OAuth flow with the additional Google login.
Reasons to add multiple profiles:
* **Team access** — each team member manages their own set of accounts under their own login.
* **Backup access** — if a primary profile is restricted or token becomes invalid, a backup profile can take over the affected accounts immediately.
* **Multiple Manager Accounts (MCCs)** — different MCCs often have different admin logins.
### Sync New Ad Accounts
When you add a new ad account to a Google Ads Manager Account you've already connected, it won't appear automatically. To pull in the new account:
1. Go to **Integrations → Google Ads → Profiles**.
2. Find the profile that has access to the new account.
3. Click **Sync** (or **Refresh Accounts**).
This triggers a re-sync for that profile and pulls in any new accounts without requiring a full re-authorisation.
### Re-authenticate a Profile
Google OAuth tokens expire or become invalid when you:
* Change your Google account password
* The ad network detects suspicious activity on your account
* Security settings change (e.g., two-factor authentication changes)
* The token is manually revoked from Google's security settings
When a token expires, TheOptimizer can no longer sync data or run automation for the accounts under that profile.
To re-authenticate:
1. Go to **Integrations → Google Ads → Profiles**.
2. Find the profile showing an error or "Re-authentication required" warning.
3. Click **Re-authenticate** and complete the OAuth flow again.
Re-authenticating refreshes the token without losing any account history, automation settings, or tags.
You will receive email notifications when a profile needs re-authentication. Do not ignore them. If a profile becomes invalid and is not refreshed, all automation and data sync for its accounts will silently stop.
# Google Ads on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/google-ads/overview
Connect Google Ads to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to Google Ads so you can monitor performance, automate optimization, and manage everything from one dashboard. You connect it with a single OAuth login — no API keys to copy.
## Set up Google Ads
You connect it with a single OAuth login — no API keys to copy.
Enable, disable, tag, and configure the Google Ads ad accounts you sync.
## Automate & launch
Build rules that watch Google Ads campaigns and act 24/7.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Connect MediaGo
Source: https://docs.theoptimizer.io/ad-networks/mediago/integration/connect
Connect your MediaGo account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
MediaGo is a programmatic native advertising platform operated by Baidu, with strong reach across premium Japanese and Asian publisher networks. It is used by performance marketers targeting audiences in Japan and broader Asia-Pacific markets with native display campaigns.
MediaGo connects via API credentials — you copy an API Key from your MediaGo account settings and paste it into TheOptimizer.
***
## Where to Find Your API Credentials
Log in to the **MediaGo platform** → go to **Account settings** → **API** → copy your **API Key**.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **MediaGo** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "MediaGo – Main Account").
* **API Key** — paste the API Key from your MediaGo account settings.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/mediago/integration/manage-accounts
Enable, disable, and archive MediaGo ad accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your MediaGo integration is connected, you can manage the individual ad accounts and API credential profiles associated with it from **Integrations → MediaGo**.
***
## Ad Accounts
Click on the MediaGo integration to see the full list of ad accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your MediaGo ad accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → MediaGo → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple MediaGo accounts** — if you manage ad accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new ad accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → MediaGo → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries MediaGo's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your MediaGo API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → MediaGo → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in MediaGo.
# MediaGo on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/mediago/overview
Connect MediaGo to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to MediaGo so you can monitor performance, automate optimization, and manage everything from one dashboard. You connect it using API credentials generated from the network's own settings.
## Set up MediaGo
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the MediaGo ad accounts you sync.
## Automate & launch
Automation patterns that work across native networks like MediaGo.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Bulk Upload Campaigns via Excel
Source: https://docs.theoptimizer.io/ad-networks/mgid/campaign-uploader/excel-upload
Upload multiple MGID campaigns at once using a pre-built Google Sheets template, then submit the exported Excel file through TheOptimizer's Campaign Creator.
The MGID Excel Uploader lets you prepare and launch multiple campaigns at once without going through the UI one by one. You define everything — targeting, budget, bidding, and creatives — in an Excel file and submit it through TheOptimizer. You can start from a blank Google Sheets template, or download a pre-filled Excel directly from any existing campaign — ideal when you're launching variations of setups you already run.
***
## How It Works
Open [**Campaign Creator**](https://native.theoptimizer.io/#/campaign-creator-queue) in TheOptimizer and click the **MGID** card. Choose **Bulk Upload (Excel)** from the options shown.
You then have two ways to get your template:
**Option A — Download pre-filled from an existing campaign (recommended)**
In the **Reference campaign** dropdown, select an existing campaign. TheOptimizer will pre-fill the template columns and settings from that campaign. Download the pre-filled Excel file and use it as your base — duplicate rows, update creatives and headlines, and adjust settings as needed.
This is the fastest approach when you're launching campaigns similar to setups you already run.
**Option B — Start from the empty Google Sheets template**
If you're setting up a new campaign type from scratch, click **Copy template** to clone the empty template into your Google account:
[**Clone the MGID Google Sheets Template →**](https://docs.google.com/spreadsheets/d/1FU0IIrWXHpjt6VBZgtzZT4MVBcN7mXJQTMWc7SPd5ZU/copy)
The template contains:
* A **main sheet** with one row per ad (campaign settings + creative in each row)
* **Auxiliary sheets** with reference data: Languages, Countries, Regions, Operating Systems, and more
* **Column notes** on every column header — hover over the column name to see the accepted values and format
Each row in the main sheet represents one ad. To create a campaign with multiple ads, add one row per ad keeping all campaign-level columns identical, and vary only the ad-level columns (image URL, headline, etc.).
**Key things to note:**
* Columns marked 🚩 **REQUIRED** must be filled in — the upload will fail if they're missing
* Columns marked 🟡 are conditionally required (e.g. Countries is only needed if Geo Targeting is set to INCLUDE or EXCLUDE)
* Use the auxiliary sheets to look up valid values for countries, regions, languages, operating systems, etc.
If you used **Option B** (Google Sheets template), first export your sheet: in Google Sheets, go to **File → Download → Microsoft Excel (.xlsx)**.
Back in the modal, drag and drop your **.xlsx file** into the upload area or click to browse for it. Then click **Upload Campaigns** to submit.
After submitting, TheOptimizer processes the file and sends you an email:
* ✅ **Successful upload** — your campaigns are queued and being created on MGID. Track progress from the [Campaign Creator](https://native.theoptimizer.io/#/campaign-creator-queue) page.
* ⚠️ **Upload failed** — the email will include a new Excel file with all error cells highlighted. Download it, fix the issues, and re-upload.
***
## Column Reference
The table below describes every column in the MGID Excel template.
| Column | Description |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| **Traffic Source Account ID** | 🚩 REQUIRED. The MGID account ID from TheOptimizer where campaigns will be uploaded. |
| **Campaign Name** | 🚩 REQUIRED. The name of the campaign. Must be unique within your account. |
| **Campaign Type** | 🚩 REQUIRED. Double-click the cell to select a campaign type from the list. |
| **Campaign Category** | 🚩 REQUIRED. Type of website being promoted. `Product promotions` for products/services. `Content promotions` for article-based sites. |
| **Campaign Keyword** | Required only if Campaign Type is `SEARCH_FEED`. |
| **Campaign Language** | 🚩 REQUIRED. Language for the campaign creatives. Creatives in other languages will be rejected. See Languages sheet. |
| **Start Date** | Campaign start date. If not specified, the campaign starts once approved. Format: `2023-10-10 19:00:00`. |
| **Geo Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Countries** | 🟡 Required if Geo Targeting is INCLUDE or EXCLUDE. Comma-separated country codes (e.g. `US, IT`). See Countries sheet. |
| **Regions** | Specific regions within targeted countries. Comma-separated. See Regions sheet. |
| **Browser Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Browsers** | 🟡 Required if Browser Targeting is INCLUDE or EXCLUDE. Comma-separated list of browsers. |
| **OS Targeting** | `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **OS** | 🟡 Required if OS Targeting is INCLUDE or EXCLUDE. Comma-separated OS names. See Operating Systems sheet. |
| **Limit Type** | 🚩 REQUIRED. `BUDGET_LIMIT` — campaign runs until budget is spent. `CLICK_LIMIT` — campaign runs until click count is reached. |
| **Daily Limit** | Daily spend or click limit. Minimum \$50 for BUDGET\_LIMIT; minimum 500 for CLICK\_LIMIT. |
| **Overall Limit** | Total campaign limit. Must be greater than Daily Limit. |
| **Split Budget** | Splits budget evenly throughout the day. Only for `CLICK_LIMIT`. Values: `0` (off) or `1` (on). |
| **UTM Source** | Value passed via `utm_source` for Google Analytics tracking. |
| **UTM Medium** | Value passed via `utm_medium` for Google Analytics tracking. |
| **UTM Campaign** | Value passed via `utm_campaign` for Google Analytics tracking. |
| **UTM Custom** | Custom tracking code appended to content URLs for third-party trackers. |
| **Target URL** | 🚩 REQUIRED (unless using Media Manager Ads). Landing page URL for the teaser. |
| **Image URL** | 🚩 REQUIRED (unless using Media Manager Ads). Ad image URL. |
| **Headline** | 🚩 REQUIRED (unless using Media Manager Ads). Ad headline. For content/product campaigns: up to 75 characters. |
| **Cost Per Click** | 🚩 REQUIRED. CPC in US cents. Example: `20` means \$0.20. |
| **Advert Text** | Ad description text. For content/product: up to 75 characters (optional). For push: up to 40 characters (required). |
| **Content Category** | Available for Content, Push, and Product campaign types. |
| **Media Manager Ads** | Reference a saved Ad group from MGID's Media Manager instead of providing individual image/headline/URL fields. |
| **Rules** | Comma-separated Rule IDs from TheOptimizer to attach to the campaign after creation. |
| **Rule Groups** | Comma-separated rule group names from TheOptimizer to attach after creation. |
# Connect MGID
Source: https://docs.theoptimizer.io/ad-networks/mgid/integration/connect
Connect your MGID account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
MGID is a global native advertising platform with a large publisher network, particularly strong in Europe, Latin America, and Southeast Asia. It is used by performance marketers running native campaigns for e-commerce, health and wellness, and content monetisation across international markets.
MGID connects via API credentials — you copy a Client ID and API Token from your MGID account settings and paste them into TheOptimizer.
***
## Where to Find Your API Credentials
Log in to the **MGID platform** → go to **Account settings** → open the **API** tab → copy your **Client ID** and **API Token**.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **MGID** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "MGID – Main Account").
* **Client ID** — paste the Client ID from your MGID account settings.
* **API Token** — paste the API Token from your MGID account settings.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/mgid/integration/manage-accounts
Enable, disable, and archive MGID ad accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your MGID integration is connected, you can manage the individual ad accounts and API credential profiles associated with it from **Integrations → MGID**.
***
## Ad Accounts
Click on the MGID integration to see the full list of ad accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your MGID ad accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → MGID → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple MGID accounts** — if you manage ad accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new ad accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → MGID → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries MGID's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your MGID API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → MGID → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in MGID.
# MGID on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/mgid/overview
Connect MGID to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to MGID so you can monitor performance, automate optimization, and launch campaigns in bulk from one dashboard. You connect it using API credentials generated from the network's own settings.
## Set up MGID
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the MGID ad accounts you sync.
## Automate & launch
Automation patterns that work across native networks like MGID.
Create and launch MGID campaigns in bulk from TheOptimizer.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Native Network Rules: MGID, RevContent, NewsBreak
Source: https://docs.theoptimizer.io/ad-networks/native-networks/automation/popular-rules
Proven automation rule patterns for MGID, RevContent, and NewsBreak — covering widget blocking, bid tiering, fraud detection, and budget scaling.
MGID, RevContent, and NewsBreak each have distinct optimization mechanics, but share a common DNA: aggressive widget-level blocking, ROI-tiered bid adjustments, and rapid reactivation loops. This page covers the proven rule patterns for all three platforms, drawn from analysis of thousands of real active rules. Use the tabs to navigate to your platform — or read all three to spot the patterns that carry across networks.
RevContent automation centers on two core strategies: systematically pausing unprofitable widgets through spend and conversion thresholds, and dynamically adjusting bids using ROI-tiered increments. Analysis of 1,516 active RevContent rules shows 855 widget pause rules and 325 ROI-based bid adjustments — RevContent's signature bid-tiering system is the foundation of performance optimization here.
***
## Widget pausing — zero-conversion blocks
These rules form the first line of defense against unprofitable widgets. The pattern is consistent: identify widgets that spend money without converting, then pause them aggressively across different timeframes.
### Quick kill: \$25 spend, zero conversions (3-day window)
Pause widgets within 3 days of reaching \$25 spend with zero traffic source conversions. This quick-reaction rule prevents early testing spend from accumulating into larger losses.
**Data Interval:** Last 3 days | **Scheduling:** Every 6 hours
| Metric | Operator | Value |
| ------------------- | ------------ | ----- |
| Amount Spent | Greater than | \$25 |
| Tracker Conversions | Less than | 1 |
**Action:** Pause Widget
Use alongside longer-lookback rules to catch widgets going cold mid-campaign. Pair with reactivation rules to retry proven performers after brief rest periods.
***
### Medium-term spend cap: \$55+ spend, zero conversions (10-day window)
Pause widgets after \$55 spend over 10 days without any tracker conversions. This extended lookback catches sustained non-performers that slip through daily monitoring.
**Data Interval:** Last 10 days | **Scheduling:** Every 8 hours
| Metric | Operator | Value |
| ------------------- | ------------------- | ----- |
| Amount Spent | Greater or Equal to | \$55 |
| Tracker Conversions | Less than | 1 |
**Action:** Pause Widget
Adjust thresholds by vertical: lower to $35–40 for high-frequency testing, raise to $80–100 for slower conversion paths (nutra, VSL, subscription offers).
***
### Long-term loss limit: \$120+ spend, single conversion or less (30-day window)
Pause widgets exceeding \$120 spend over 30 days with one or fewer tracker conversions. This rule targets high spend-to-conversion ratios that systematically drag down campaign profitability.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 8 AM
| Metric | Operator | Value |
| ------------------- | ------------------- | ----- |
| Amount Spent | Greater or Equal to | \$120 |
| Tracker Conversions | Less or Equal to | 1 |
**Action:** Pause Widget
***
### High spend, zero landing page visits (high clicks, no LP clicks)
Pause widgets generating 100+ traffic source clicks but zero landing page clicks over 14 days, indicating a traffic-source-to-landing-page conversion failure.
**Data Interval:** Last 14 days | **Scheduling:** Daily at 8 AM
| Metric | Operator | Value |
| --------------------- | ------------------- | ----- |
| Traffic Source Clicks | Greater or Equal to | 100 |
| LP Clicks | Less than | 1 |
| Impressions | Greater or Equal to | 15 |
**Action:** Pause Widget
This pattern reveals broken landing pages, domain issues, or traffic that never reaches your funnel. Diagnose LP redirect settings and domain accessibility before re-enabling.
***
## Fraud & quality detection
### Suspicious conversion rate: publisher conversions > 15% of clicks (7-day window)
Pause widgets where tracker conversions exceed 15% of traffic source clicks over 7 days — an unusually high rate indicating potential fraud or misattribution.
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Operator | Value |
| --------------------- | ------------------- | ---------------------------- |
| Publisher Conversions | Greater than | 15% of Traffic Source Clicks |
| Traffic Source Clicks | Greater or Equal to | 50 |
**Action:** Pause Widget
High conversion rates (>15%) are rare in affiliate marketing and suggest either pixel flooding, publisher fraud, or misconfigurations.
***
### High clicks on landing page, zero conversions (14-day funnel check)
Pause widgets with 50+ traffic source clicks, 10+ LP clicks, but zero tracker conversions over 14 days. This signals either a broken post-LP funnel or landing page quality issues.
**Data Interval:** Last 14 days | **Scheduling:** Daily at 8 AM
| Metric | Operator | Value |
| --------------------- | ------------------- | ----- |
| Traffic Source Clicks | Greater or Equal to | 50 |
| LP Clicks | Greater or Equal to | 10 |
| Tracker Conversions | Less than | 1 |
**Action:** Pause Widget
***
### Extremely low CTR: 20,000+ impressions below 0.1% CTR (30-day window)
Pause widgets reaching 20,000 impressions with a CTR under 0.1% over 30 days. This indicates severely poor publisher inventory or traffic source quality.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 8 AM
| Metric | Operator | Value |
| ------------ | ------------------- | ------ |
| Impressions | Greater or Equal to | 20,000 |
| CTR | Less than | 0.1% |
| Amount Spent | Greater or Equal to | \$40 |
**Action:** Pause Widget
***
## ROI-tiered bid management
The RevContent bid-adjustment system is the signature automation pattern: six distinct ROI tiers control bid increases and decreases in 10%, 20%, or 30% increments. These rules operate in parallel on a 12-hour cycle, creating a self-balancing system where widgets naturally trend toward profitability.
### Tier 1 — critical loss: ROI below −35% (bid down 20%)
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Operator | Value |
| -------------------------- | ------------------- | ----- |
| Amount Spent | Greater than | \$20 |
| Tracker ROI | Less than | −35% |
| Traffic Source Conversions | Greater or Equal to | 1 |
**Action:** Decrease Widget Bid by 20%
***
### Tier 2 — moderate loss: ROI −35% to −13% (bid down 15%)
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Operator | Value |
| -------------------------- | ------------------- | ----- |
| Amount Spent | Greater than | \$20 |
| Tracker ROI | Greater or Equal to | −35% |
| Tracker ROI | Less than | −13% |
| Traffic Source Conversions | Greater or Equal to | 1 |
**Action:** Decrease Widget Bid by 15%
***
### Tier 3 — slight loss: ROI −13% to 0% (bid down 10%)
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Operator | Value |
| -------------------------- | ------------------- | ----- |
| Amount Spent | Greater than | \$20 |
| Tracker ROI | Greater or Equal to | −13% |
| Tracker ROI | Less than | 0% |
| Traffic Source Conversions | Greater or Equal to | 1 |
**Action:** Decrease Widget Bid by 10%
***
### Tier 4 — moderate profit: ROI 35% to 85% (bid up 10%)
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Operator | Value |
| -------------------------- | ------------------- | ----- |
| Amount Spent | Greater than | \$20 |
| Tracker ROI | Greater or Equal to | 35% |
| Tracker ROI | Less than | 85% |
| Traffic Source Conversions | Greater or Equal to | 1 |
**Action:** Increase Widget Bid by 10%
***
### Tier 5 — strong profit: ROI 85% to 160% (bid up 20%)
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Operator | Value |
| -------------------------- | ------------------- | ----- |
| Amount Spent | Greater than | \$20 |
| Tracker ROI | Greater or Equal to | 85% |
| Tracker ROI | Less than | 160% |
| Traffic Source Conversions | Greater or Equal to | 1 |
**Action:** Increase Widget Bid by 20%
***
### Tier 6 — exceptional profit: ROI > 160% (bid up 30%)
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Operator | Value |
| -------------------------- | ------------------- | ----- |
| Amount Spent | Greater than | \$20 |
| Tracker ROI | Greater than | 160% |
| Traffic Source Conversions | Greater or Equal to | 1 |
**Action:** Increase Widget Bid by 30% (capped at maximum bid)
Always set a maximum bid cap (e.g., \$2.50) to prevent runaway costs. These six tiers running in parallel create a self-balancing feedback loop where widgets naturally migrate toward the profitable ROI bands.
***
## Reactivating profitable widgets
### Restart positive ROI widgets (7-day window)
Reactivate widgets showing positive tracker ROI (>0%) over the last 7 days, regardless of spend. This catches widgets that recovered quickly and deserve another chance.
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Operator | Value |
| -------------------------- | ------------------- | ----- |
| Tracker ROI | Greater than | 0% |
| Traffic Source Conversions | Greater or Equal to | 1 |
**Action:** Start Widget
***
### Restart high-volume profitable widgets (30-day proven performer)
Reactivate widgets that spent \$300+ over 30 days with tracker ROI above −30% and at least 1 conversion. These widgets have genuine historical profitability and deserve scaling.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 10 AM
| Metric | Operator | Value |
| ------------------- | ------------------- | ----- |
| Amount Spent | Greater than | \$300 |
| Tracker ROI | Greater than | −30% |
| Tracker Conversions | Greater or Equal to | 1 |
**Action:** Start Widget
***
### Positive net revenue activation (14-day baseline)
Reactivate widgets with tracker net revenue above \$0 over the last 14 days, using absolute profit rather than ROI percentage.
**Data Interval:** Last 14 days | **Scheduling:** Daily
| Metric | Operator | Value |
| ------------------- | ------------ | ----- |
| Tracker Net Revenue | Greater than | \$0 |
**Action:** Start Widget
***
## Campaign-level safety & scaling
### Daily spend cap — \$20 (testing phase)
Pause the entire campaign if daily spend exceeds \$20 today. Use this as a safety valve during high-volume testing periods.
**Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Operator | Value |
| ------------ | ------------------- | ----- |
| Amount Spent | Greater or Equal to | \$20 |
**Action:** Pause Campaign
***
### Daily spend cap — \$15 (conservative brand testing)
Pause campaign after spending \$15 today to limit exposure during initial publisher testing or A/B tests.
**Data Interval:** Today | **Scheduling:** Every hour
| Metric | Operator | Value |
| ------------ | ------------------- | ----- |
| Amount Spent | Greater or Equal to | \$15 |
**Action:** Pause Campaign
***
### Emergency spend stop: cost >= 300% of campaign payout (15+ days)
Pause campaign if cumulative cost over 15 days hits 300% of campaign payout — an emergency valve for sustained unprofitability.
**Data Interval:** Last 15 days | **Scheduling:** Every 8 hours
| Metric | Operator | Value |
| ------ | ------------------- | ----------------------- |
| Cost | Greater or Equal to | 300% of Campaign.payout |
**Action:** Pause Campaign
***
### Budget scale-up: spend at threshold + conversions > 4
Increase campaign budget by 20% if daily spend is at 85–90% of budget AND tracker conversions exceed 4 in the same day.
**Data Interval:** Today | **Scheduling:** Every 4 hours
| Metric | Operator | Value |
| ------------------- | ------------------- | ------------- |
| Amount Spent | Greater or Equal to | 85% of Budget |
| Tracker Conversions | Greater or Equal to | 4 |
| Tracker ROI | Greater than | 0% |
**Action:** Increase Campaign Budget by 20%
***
## Creative performance management
### Pause dead creatives: \$300+ spend, zero conversions (30-day window)
**Data Interval:** Last 30 days | **Scheduling:** Daily at 7 AM
| Metric | Operator | Value |
| ------------------- | ------------ | ----- |
| Amount Spent | Greater than | \$300 |
| Tracker Conversions | Less than | 1 |
**Action:** Pause Ad
***
### Reactivate marginally viable creatives (90-day profitability test)
**Data Interval:** Last 90 days | **Scheduling:** Daily at 9 AM
| Metric | Operator | Value |
| ------------------- | ------------ | ----- |
| Amount Spent | Greater than | \$300 |
| Tracker ROI | Greater than | −25% |
| Tracker Conversions | Greater than | 1 |
**Action:** Start Ad
Use 90-day lookback to avoid re-testing creatives too frequently. This creates a "seasonal rotation" where creatives cycle in and out as their performance drifts.
***
## Implementation priority
**Week 1 — blocking only.** Start with the three widget pause rules plus the suspicious conversion rate fraud rule. Establish your zero-conversion floor before optimizing bids.
**Week 2 — introduce bid tiering.** Add all six ROI-tier bid rules once widget baseline is clear. Let the tiering system run for 7 days to establish patterns.
**Week 3 — add campaign safety.** Implement daily spend caps and emergency brakes. Monitor campaign-level metrics for 3–5 days before enabling budget scaling.
**Week 4+ — optimization & refinement.** After 2–3 weeks of data, adjust spend thresholds and ROI tier bands based on your specific vertical. Reactivation rules work best on mature campaigns with 100+ historical conversions.
Based on analysis of 1,392 active MGID rules, media buyers prioritize widget-level pausing (632 rules), MGID's unique Widget Coefficient system (231 rules), and sophisticated fraud detection. The Widget Coefficient — MGID's native bid multiplier — is what makes this platform distinct: instead of pausing underperforming publishers outright, you reduce their coefficient to keep them in rotation at a lower cost, then escalate or retire based on results.
***
## Widget pausing — core blocking rules
### Zero conversions + high spend (30-day window)
Pause widgets that have spent \$25+ in the last 30 days without a single tracker conversion. This is your baseline rule for removing non-performing publishers early.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 8 AM
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Amount Spent | >= | \$25 |
| Tracker Conversions | \< | 1 |
**Action:** Pause Widget
Start with $25. For campaigns under $500/day, lower to $15. For high-volume campaigns ($5k+/day), increase to \$50–75 to gather more performance data before killing a publisher.
***
### Bot traffic detection (high clicks, no conversions)
Pause widgets with 50+ traffic source clicks AND 30+ tracker clicks over 30 days but zero tracker conversions. High engagement with zero conversions indicates bot traffic or misaligned audience.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 9 AM
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| Traffic Source Clicks | >= | 50 |
| Tracker Clicks | >= | 30 |
| Tracker Conversions | \< | 1 |
**Action:** Pause Widget
Verify these clicks are hitting your landing page (check LP Clicks metric). If LP Clicks = 0, the traffic is fake at MGID's level — pause immediately. If LP Clicks is high but conversions are zero, the landing page or offer is misaligned with the traffic source.
***
### Suspicious landing page CTR (potential fraud)
Pause widgets with high LP CTR (>90%) AND 20+ traffic source clicks AND zero conversions over 7 days. This is a classic fraud pattern.
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| LP CTR | > | 90% |
| Traffic Source Clicks | >= | 20 |
| Tracker Conversions | \< | 1 |
**Action:** Pause Widget
LP CTR over 80% is unnatural. Legitimate publishers run 3–10% LP CTR depending on vertical. This rule catches click farms or misaligned traffic.
***
### Very high LP CTR + spend (anomaly detection)
Pause widgets where LP CTR exceeds 5% AND amount spent is \$500+ AND conversions are >= 1 BUT ROI is \<= −60% over 14 days. Despite high CTR suggesting quality traffic, the ROI is severely negative.
**Data Interval:** Last 14 days | **Scheduling:** Daily at 10 AM
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| LP CTR | > | 5% |
| Amount Spent | >= | \$500 |
| Tracker Conversions | >= | 1 |
| Tracker ROI | \<= | −60% |
**Action:** Pause Widget
***
### Large spend, single conversion (cost explosion)
Pause widgets where cost exceeds 150% of your Campaign.payout in the last 14 days. You're spending $1.50 for every $1 in payout.
**Data Interval:** Last 14 days | **Scheduling:** Every 12 hours
| Metric | Condition | Value |
| ------ | --------- | ----------------------- |
| Cost | > | 150% of Campaign.payout |
**Action:** Pause Widget
This rule adapts to your payout model automatically. If your Campaign.payout is $100, this triggers at $150 spend. Set it once and let it run across all campaigns.
***
### Long-tail spend blocker (all-time protection)
Pause widgets that have spent \$10+ all-time without any tracker conversions. This catches widgets that aren't immediately profitable and prevents them from lingering unprofitably indefinitely.
**Data Interval:** All-time | **Scheduling:** Daily at 6 AM
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Amount Spent | > | \$10 |
| Tracker Conversions | \< | 1 |
**Action:** Pause Widget
***
## Fraud detection & cost control
### Publisher conversion rate too high (fake conversions)
Pause widgets where publisher conversions exceed 15% of traffic source clicks over 14 days. A 15% conversion rate at the publisher level indicates fake conversion attribution.
**Data Interval:** Last 14 days | **Scheduling:** Daily at 11 AM
| Metric | Condition | Value |
| --------------------- | --------- | ---------------------------- |
| Publisher Conversions | > | 15% of Traffic Source Clicks |
**Action:** Pause Widget
***
### Publisher conversion rate too low (misattribution)
Pause widgets where publisher conversions are \<= 10% of traffic source clicks over 14 days despite having tracker conversions. The publisher is under-attributing conversions.
**Data Interval:** Last 14 days | **Scheduling:** Daily at 11 AM
| Metric | Condition | Value |
| --------------------- | --------- | ---------------------------- |
| Publisher Conversions | \<= | 10% of Traffic Source Clicks |
| Tracker Conversions | >= | 1 |
**Action:** Pause Widget
***
### Low CTR after high volume (dead publisher)
Pause ad when impressions exceed 20,000 over 30 days, CTR is below 0.12%, AND ROI is negative. This publisher had its chance.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 8 AM
| Metric | Condition | Value |
| ----------- | --------- | ------ |
| Impressions | > | 20,000 |
| CTR | \< | 0.12% |
| Tracker ROI | \< | 0% |
**Action:** Pause Widget
***
## Widget Coefficient — MGID's bid multiplier system
The **Widget Coefficient** is MGID's unique bid multiplier. Instead of pausing underperforming publishers, you adjust their coefficient to control spend granularly:
* **1.0** = baseline bid (e.g., \$0.05)
* **0.5** = half the bid (\$0.025)
* **0.1** = 10% of bid (\$0.005)
* **1.5** = 50% higher bid (\$0.075)
* **2.0** = double the bid (\$0.10)
This creates a performance tier system without pausing widgets entirely. Use coefficients to fine-tune before committing to a full pause.
### Tier 1: deep reduction (Coefficient 0.1 — test mode)
Set coefficient to 0.1 when tracker conversions >= 1 AND CPA >= \$700 over the last 30 days. The widget converts, but at very high CPA. Reduce bid drastically to test if lower cost attracts better conversions.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 7 AM
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| Tracker Conversions | >= | 1 |
| Custom Metric 2 (CPA) | >= | \$700 |
**Action:** Set Widget Coefficient to 0.1
***
### Tier 2: moderate reduction (Coefficient 0.3 — watchlist)
Set coefficient to 0.3 when tracker conversions >= 1 AND CPA is between $350–$500. These publishers convert at acceptable-but-high CPA.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 7 AM
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| Tracker Conversions | >= | 1 |
| Custom Metric 2 (CPA) | >= | \$350 |
| Custom Metric 2 (CPA) | \< | \$500 |
**Action:** Set Widget Coefficient to 0.3
***
### Tier 3: slight reduction (Coefficient 0.5 — marginal performers)
Set coefficient to 0.5 when tracker conversions >= 1 AND CPA is between $500–$700. These are borderline profitable.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 7 AM
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| Tracker Conversions | >= | 1 |
| Custom Metric 2 (CPA) | >= | \$500 |
| Custom Metric 2 (CPA) | \< | \$700 |
**Action:** Set Widget Coefficient to 0.5
***
### Tier 4: baseline (Coefficient 1.0 — good performers)
Set coefficient to 1.0 when tracker conversions >= 1 AND CPA is below \$350. These are your proven profitable publishers.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 7 AM
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| Tracker Conversions | >= | 1 |
| Custom Metric 2 (CPA) | \< | \$350 |
**Action:** Set Widget Coefficient to 1.0
***
### Tier 5: increased bid (Coefficient 1.5 — strong winners)
Set coefficient to 1.5 when tracker conversions >= 1 AND tracker ROI > 50% AND traffic source clicks >= 50 over the last 7 days.
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| Tracker Conversions | >= | 1 |
| Tracker ROI | > | 50% |
| Traffic Source Clicks | >= | 50 |
**Action:** Set Widget Coefficient to 1.5
***
### Tier 6: aggressive scaling (Coefficient 2.0 — top tier)
Set coefficient to 2.0 when tracker conversions >= 2 AND tracker ROI > 100% AND traffic source clicks >= 75 over the last 7 days. Elite performers with proven volume and profitability.
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| Tracker Conversions | >= | 2 |
| Tracker ROI | > | 100% |
| Traffic Source Clicks | >= | 75 |
**Action:** Set Widget Coefficient to 2.0
Coefficient 2.0 doubles your bid on elite publishers. Set a max bid cap in MGID (\$0.20–0.50) to prevent runaway costs.
***
### ROI throttling (Coefficient 0.5 — negative ROI recovery)
Set coefficient to 0.5 when tracker ROI is between −25% and 0% AND traffic source clicks >= 50 over the last 7 days. Rather than pausing a recently profitable widget, reduce bid to see if lower competition helps recovery.
**Data Interval:** Last 7 days | **Scheduling:** Every 12 hours
| Metric | Condition | Value |
| --------------------- | --------- | ----- |
| Tracker ROI | >= | −25% |
| Tracker ROI | \< | 0% |
| Traffic Source Clicks | >= | 50 |
**Action:** Set Widget Coefficient to 0.5
***
## Campaign spend & budget scaling
### Daily spend cap — conservative (\$10 limit)
Pause the entire campaign when daily spend reaches \$10. Use for the first 3–7 days of a new MGID campaign to control risk during publisher onboarding.
**Data Interval:** Today | **Scheduling:** Every hour
| Metric | Condition | Value |
| ------------ | --------- | ----- |
| Amount Spent | >= | \$10 |
**Action:** Pause Campaign
***
### Daily spend cap — standard (\$20 limit)
Pause the campaign at \$20 daily spend. Standard safeguard during testing phases.
**Data Interval:** Today | **Scheduling:** Every hour
| Metric | Condition | Value |
| ------------ | --------- | ----- |
| Amount Spent | >= | \$20 |
**Action:** Pause Campaign
***
### Budget scaling on ROI + high spend
Increase campaign budget by 20% when daily spend is at 70–80% of the daily budget AND all-time tracker ROI > 10% over last 14 days.
**Data Interval:** Today (spend) + Last 14 days (ROI) | **Scheduling:** Daily at 11 AM
| Metric | Condition | Value |
| ------------ | --------- | ------------------- |
| Amount Spent | >= | 70% of Daily Budget |
| Tracker ROI | >= | 10% |
**Action:** Increase Campaign Budget by 20%
***
### Budget scaling on yesterday's data
Increase campaign budget by 20% when yesterday's spend hit 80%+ of daily budget AND tracker ROI > 10% over the last 14 days. Using yesterday's data is safer because you have complete information.
**Data Interval:** Yesterday (spend) + Last 14 days (ROI) | **Scheduling:** Daily at 9 AM
| Metric | Condition | Value |
| ------------ | --------- | ------------------- |
| Amount Spent | >= | 80% of Daily Budget |
| Tracker ROI | >= | 10% |
**Action:** Increase Campaign Budget by 20%
***
## Ad (teaser) management
### Pause underperforming creatives
Pause ads with \$12+ spend over 30 days AND zero tracker conversions.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 8 AM
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Amount Spent | >= | \$12 |
| Tracker Conversions | \< | 1 |
**Action:** Pause Ad
***
### Pause high-click creatives with zero conversions
Pause ads with 30+ tracker clicks all-time but zero tracker conversions. The creative drives engagement without intent.
**Data Interval:** All-time | **Scheduling:** Daily at 9 AM
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Tracker Clicks | >= | 30 |
| Tracker Conversions | \< | 1 |
**Action:** Pause Ad
***
### Reactivate profitable creatives
Reactivate ads with tracker conversions >= 1 AND tracker net revenue > \$0 over the last 30 days. Prevent profitable creatives from staying paused indefinitely.
**Data Interval:** Last 30 days | **Scheduling:** Daily at 10 AM
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Tracker Conversions | >= | 1 |
| Tracker Net Revenue | > | \$0 |
**Action:** Start Ad
NewsBreak automation is real-time and dynamic. This guide covers the most impactful rule patterns from analysis of 157 active NewsBreak rules. The defining characteristic: 116 of 157 rules use today's data interval, making NewsBreak the most aggressively real-time platform in the optimization suite. Rules use Tracker Clicks + Tracker CPA (not traffic source metrics) to filter for meaningful conversions. CPA thresholds vary by offer type: home value ($0.20–$0.30), bank accounts ($0.95), and disability benefits ($0.25–\$0.30).
***
## Real-time Tracker CPA control
NewsBreak's core pattern: stack Tracker Clicks + Tracker CPA to pause ad groups in real-time. Tracker Clicks are meaningful — clicks that reached your conversion funnel — which filters out bot traffic automatically.
### Rule 1a: generic high-CPA pause
Pause ad groups when Tracker Clicks exceed 8 with Tracker CPA above \$1.00. This is the baseline threshold.
**Data Interval:** Today | **Scheduling:** Every 1 hour
| Metric | Condition | Value |
| -------------- | --------- | ------ |
| Tracker Clicks | > | 8 |
| Tracker CPA | > | \$1.00 |
**Action:** Pause Ad Group
***
### Rule 1b: home value offer (tight margins)
Home valuation leads have tight economics. Pause at 8 Tracker Clicks with CPA above \$0.20.
**Data Interval:** Today | **Scheduling:** Every 1 hour
| Metric | Condition | Value |
| -------------- | --------- | ------ |
| Tracker Clicks | > | 8 |
| Tracker CPA | > | \$0.20 |
**Action:** Pause Ad Group
***
### Rule 1c: debt relief offer (moderate CPA)
Debt consolidation leads allow slightly higher CPA ($0.25–$0.30).
**Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Condition | Value |
| -------------- | --------- | ------ |
| Tracker Clicks | > | 8 |
| Tracker CPA | > | \$0.25 |
**Action:** Pause Ad Group
***
### Rule 1d: disability benefits (higher value)
Disability benefit leads are high-value. Allow Tracker CPA up to \$0.30.
**Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Condition | Value |
| -------------- | --------- | ------ |
| Tracker Clicks | > | 8 |
| Tracker CPA | > | \$0.30 |
**Action:** Pause Ad Group
***
## Today-focused zero-conversion pauses
46 of 57 NewsBreak rules use today's data. Zero-conversion pauses must be hyper-responsive.
### Rule 2a: ad group zero Tracker Conversions
Pause ad groups generating 6+ Tracker Clicks today with zero conversions.
**Data Interval:** Today | **Scheduling:** Every 3 hours
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Tracker Clicks | > | 6 |
| Tracker Conversions | = | 0 |
**Action:** Pause Ad Group
***
### Rule 2b: campaign zero-conversion emergency
Pause campaigns that spent \$50+ today with zero Tracker Conversions.
**Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Cost | >= | \$50 |
| Tracker Conversions | = | 0 |
**Action:** Pause Campaign
***
### Rule 2c: ad-level zero conversions
Pause individual ads hitting \$10 today with zero conversions.
**Data Interval:** Today | **Scheduling:** Every 4 hours
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Cost | >= | \$10 |
| Tracker Conversions | = | 0 |
**Action:** Pause Ad
***
## Cost escalation rules
Dynamic cost thresholds prevent runaway spend when traffic quality shifts.
### Rule 3a: campaign cost cap at daily budget
Pause campaigns when cost reaches 90% of daily budget to prevent overspend.
**Data Interval:** Today | **Scheduling:** Every 4 hours
| Metric | Condition | Value |
| ------ | --------- | ------------------- |
| Cost | >= | 90% of Daily Budget |
**Action:** Pause Campaign
***
### Rule 3b: cost-to-campaign-payout comparison
When cost exceeds 150% of campaign's typical CPA times conversions and Tracker CTR is below 1%, pause.
**Data Interval:** Today | **Scheduling:** Every 3 hours
| Metric | Condition | Value |
| ----------- | --------- | ------------------------ |
| Cost | > | 150% of Campaign.ts\_cpa |
| Tracker CTR | \< | 1% |
**Action:** Pause Campaign
***
## Offer-specific CPA thresholds
Different offers have different economics. Never use one CPA threshold across all offers.
### Rule 4a: home value offers (aggressive)
Home value leads are high-volume, low-margin. Pause when CPA exceeds \$0.20.
**Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Condition | Value |
| -------------- | --------- | -------- |
| Campaign Name | contains | `_HOME_` |
| Tracker CPA | > | \$0.20 |
| Tracker Clicks | > | 8 |
**Action:** Pause Ad Group
***
### Rule 4b: disability benefits (higher value)
Disability leads are high-value. Allow CPA up to \$0.30.
**Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Condition | Value |
| -------------- | --------- | -------------- |
| Campaign Name | contains | `_DISABILITY_` |
| Tracker CPA | > | \$0.30 |
| Tracker Clicks | > | 8 |
**Action:** Pause Ad Group
***
## Budget adjustments & scaling
Instead of binary pause/start, adjust ad group budgets dynamically based on today's ROI.
### Rule 5a: increase budget for profitable days
If an ad group generates conversions today with ROI >= 10%, increase budget by 15%.
**Data Interval:** Today | **Scheduling:** Every 4 hours
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Tracker Conversions | > | 0 |
| Tracker ROI | >= | 10% |
**Action:** Increase Ad Group Budget (15%)
***
### Rule 5b: decrease budget for negative ROI days
When ad group ROI turns negative today, reduce budget to conserve spend.
**Data Interval:** Today | **Scheduling:** Every 3 hours
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Tracker Conversions | \<= | 0 |
| Tracker ROI | \< | 0% |
**Action:** Decrease Ad Group Budget (20%)
Budget adjustments before hard pauses. When Tracker ROI turns negative, reduce budget first. Only pause if ROI stays negative after 2 hours. This allows recovery while capping losses.
***
## Rapid recovery reactivation
NewsBreak allows fast reactivation because today-focused rules catch problems quickly.
### Rule 6a: reactivate on 3-day positive ROI
If a paused ad group shows 10%+ ROI over 3 days with conversions, restart it.
**Data Interval:** Last 3 days | **Scheduling:** Daily at 8 AM
| Metric | Condition | Value |
| ------------------- | --------- | ------ |
| Status | = | PAUSED |
| Tracker ROI | >= | 10% |
| Tracker Conversions | > | 1 |
**Action:** Start Ad Group
***
### Rule 6b: reactivate Tier 2 (faster)
If a paused ad group hits positive ROI in just 2 days, restart immediately.
**Data Interval:** Last 2 days | **Scheduling:** Every 12 hours
| Metric | Condition | Value |
| ------------------- | --------- | ------ |
| Status | = | PAUSED |
| Tracker ROI | >= | 5% |
| Tracker Conversions | >= | 1 |
**Action:** Start Ad Group
***
## Best practices for NewsBreak
1. **Stack Tracker Clicks + Tracker CPA as your core filter.** Never pause on Tracker Clicks alone. The CPA check prevents false positives on high-click, low-value traffic.
2. **Go hyper-aggressive on today's data.** 116 of 157 rules use today because NewsBreak traffic is fast-moving. Check rules every 2–4 hours, not daily. Real-time pauses stop bleeding before it compounds.
3. **Calibrate CPA thresholds per offer vertical.** Home value offers: $0.20–$0.25. Debt relief: $0.25–$0.30. Disability benefits: $0.30–$0.35. Bank accounts: \$0.95.
4. **Reactivate fast because you pause fast.** If a paused ad group hits positive ROI in 2–3 days, restart it immediately. Your aggressive pause rules mean false positives recover quickly.
5. **Monitor across all three hierarchy levels.** Deploy rules at Ad, Ad Group, and Campaign levels. Don't rely solely on campaign-level rules — ad groups fail before campaigns do.
# Bulk Upload AI Skill
Source: https://docs.theoptimizer.io/ad-networks/newsbreak/campaign-uploader/ai-campaign-builder
A ready-made AI skill that turns a NewsBreak campaign template plus your images and copy into a complete, upload-ready Excel file — in Claude, ChatGPT, or Gemini.
The **Bulk Upload AI Skill** is a ready-made AI skill we provide so you can generate a complete
bulk-upload file from an existing campaign in seconds instead of filling the template by
hand. You give the AI a campaign template, your images, and your headlines/descriptions;
it produces a ready-to-upload Excel/CSV — correct column values, valid dropdowns, geo
targeting by Location ID, naming conventions carried forward, and copy checked against
NewsBreak's limits.
It works best in **Claude** (where it installs as a proper Skill), and we also provide a
portable version for **ChatGPT** and **Gemini**.
This skill only *builds the file*. You still upload it through TheOptimizer's
[NewsBreak Excel uploader](/ad-networks/newsbreak/campaign-uploader/excel-upload) to
create the campaigns.
## What you'll need
* A NewsBreak campaign template — export one from an existing campaign in
**Campaign Creator → NewsBreak → Reference campaign → download**, or start from the blank template.
* Your **images** — as public URLs (recommended). If you only have image files, host them
somewhere public first (e.g. Google Drive) and use the links.
* Your **headlines and descriptions** (Title ≤ 90 chars, Description ≤ 90 chars,
Brand Name ≤ 25 chars, media ≤ 5 MB).
***
## Option A — Claude (recommended)
Download the skill file for your Claude platform:
* **Claude desktop app (Cowork):** [**newsbreak-campaign-builder.skill**](/downloads/newsbreak-campaign-builder.skill)
* **Claude Code / claude.ai:** [**newsbreak-campaign-builder.zip**](/downloads/newsbreak-campaign-builder.zip)
* **Claude desktop app (Cowork)**: open the `.skill` file you downloaded and click **Save skill**.
* **claude.ai** (Pro, Max, Team, or Enterprise): go to **Settings → Capabilities** and upload the `.zip`. The skill is added to your account.
* **Claude Code**: unzip into `~/.claude/skills/`.
Custom skills are **per user** — each team member installs it on their own account.
There is currently no org-wide push.
Start a chat, attach your template, and describe what you want. Claude detects the
skill automatically. Example prompt:
```
Here's my NewsBreak campaign template (attached). Create 6 campaigns for Texas,
Florida, and California — one English and one Spanish each. Each campaign has 2 ad sets
with 3 ads. Here are 2 image links and 3 title+description pairs [paste them]. Make all
combinations, translate the Spanish versions, and keep every other setting the same.
```
Claude will confirm the math, ask about anything missing, generate the file, and
validate it before handing it back.
Take the generated `.xlsx` and upload it through the
[NewsBreak Excel uploader](/ad-networks/newsbreak/campaign-uploader/excel-upload).
***
## Option B — ChatGPT or Gemini
ChatGPT and Gemini can't install the skill file, but the same logic works as a custom
assistant.
* **ChatGPT:** create a **Custom GPT** (or a Project).
* **Gemini:** create a **Gem**.
Download [**newsbreak-campaign-builder-PORTABLE-chatgpt-gemini.md**](/downloads/newsbreak-campaign-builder-PORTABLE-chatgpt-gemini.md)
and paste its contents into the assistant's **Instructions** field.
Upload the **NewsBreak template** and the **column reference** as knowledge/reference
files so the assistant always uses valid column values.
Attach your template and use the same kind of prompt shown in Option A.
On ChatGPT/Gemini the assistant can't upload your image files or automatically check that
links are live — provide **public image URLs** and double-check the generated file before
uploading.
***
## What the AI checks for you
* Required columns are filled on every row.
* Dropdown columns use valid values (Objective, Platform, Bid Type, etc.).
* Geo targeting uses numeric **Location IDs**, not place names.
* URLs are well-formed.
* Copy is within limits: Title ≤ 90, Description ≤ 90, Brand Name ≤ 25.
* Dates use the `YYYY-MM-DD HH:MM` format.
* Your existing **naming convention** is detected and carried into the new campaigns.
Start from an existing campaign export rather than the blank template — the AI inherits
all your real settings (account, budget, bid, targeting, tracking) and you only change
what's different (geo, creatives, copy).
# Bulk Upload Campaigns via Excel
Source: https://docs.theoptimizer.io/ad-networks/newsbreak/campaign-uploader/excel-upload
Launch multiple NewsBreak campaigns at once using an Excel file prepared from an existing campaign or the provided template, then submit it through TheOptimizer's Campaign Creator.
The NewsBreak Excel Uploader lets you prepare and launch multiple campaigns at once without going through the UI one by one. You define everything — targeting, budget, bidding, and creatives — in an Excel file and submit it through TheOptimizer. You can start from a blank template, or download a pre-filled Excel directly from any existing NewsBreak campaign — ideal when you're launching variations of setups you already run.
***
## How It Works
Open [**Campaign Creator**](https://native.theoptimizer.io/#/campaign-creator-queue) in TheOptimizer and click the **NewsBreak** card. The bulk upload modal opens directly.
You have two ways to get your template:
**Option A — Download pre-filled from an existing campaign (recommended)**
In the **Reference campaign** dropdown, select an existing campaign. TheOptimizer will pre-fill the template columns and settings from that campaign. Download the pre-filled Excel file and use it as your base — duplicate rows, update creatives and headlines, and adjust settings as needed.
This is the fastest approach when you're launching campaigns similar to setups you already run.
**Option B — Start from the empty template**
If you're setting up a new campaign type from scratch, click **Copy template** to clone the empty NewsBreak template into your Google account. Fill in your campaign settings from scratch using the column notes as a guide.
Each row in the main sheet represents one ad. To create a campaign with multiple ads, add one row per ad — keep all campaign-level columns identical and vary only the ad-level columns (image URL, headline, etc.).
**Key things to note:**
* Columns marked 🚩 **REQUIRED** must be filled in — the upload will fail if they're missing
* Columns marked 🟡 are conditionally required (e.g. Countries is only needed if Geo Targeting is set to INCLUDE or EXCLUDE)
* Hover over any column header to see the accepted values and format
If you started from a reference campaign (Option A), most columns are already filled in. You typically only need to update the ad-level columns (image URL, headline, target URL) and duplicate rows for additional campaigns.
If you used **Option B** (Google Sheets template), first export your sheet: in Google Sheets, go to **File → Download → Microsoft Excel (.xlsx)**.
Back in the modal, drag and drop your **.xlsx file** into the upload area or click to browse for it. Then click **Upload Campaigns** to submit.
After submitting, TheOptimizer processes the file and sends you an email:
* ✅ **Successful upload** — your campaigns are queued and being created on NewsBreak. Track progress from the [Campaign Creator](https://native.theoptimizer.io/#/campaign-creator-queue) page.
* ⚠️ **Upload failed** — the email will include a new Excel file with all error cells highlighted. Download it, fix the issues, and re-upload.
***
## Column Reference
The table below describes the key columns in the NewsBreak Excel template. Hover over any column header in the template for the full accepted values and format notes.
| Column | Description |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Traffic Source Account ID** | 🚩 REQUIRED. The NewsBreak account ID from TheOptimizer where campaigns will be uploaded. Find it under Traffic Sources in the left menu. |
| **Campaign Name** | 🚩 REQUIRED. The name of the campaign. |
| **Campaign Status** | 🚩 REQUIRED. `ACTIVE` — starts running once approved. `PAUSED` — created paused; you start it manually. |
| **Start Date** | Campaign start date. Leave empty to start immediately. |
| **End Date** | Campaign end date. Leave empty to run until budget is depleted. |
| **Country Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Countries** | 🟡 Required if Country Targeting is INCLUDE or EXCLUDE. Comma-separated country codes (e.g. `US, CA`). |
| **Device Targeting** | 🚩 REQUIRED. Target platforms. Values: `DESKTOP`, `MOBILE`, `TABLET`. Comma-separated for multiple. |
| **OS Targeting** | OS to target. Comma-separated OS names. |
| **Budget Type** | 🚩 REQUIRED. `DAILY` or `TOTAL`. |
| **Budget** | 🚩 REQUIRED. Daily or total campaign budget. |
| **Bid** | 🚩 REQUIRED. Cost per click. |
| **Tracking Code** | URL parameters appended to landing page URLs for external tracking. |
| **Target URL** | 🚩 REQUIRED. Landing page URL for the ad. |
| **Image URL** | 🚩 REQUIRED. Ad image URL. |
| **Headline** | 🚩 REQUIRED. Ad headline text. |
| **Rules** | Comma-separated Rule IDs from TheOptimizer to attach to the campaign after creation. |
| **Rule Groups** | Comma-separated rule group names from TheOptimizer to attach after creation. |
# Connect NewsBreak
Source: https://docs.theoptimizer.io/ad-networks/newsbreak/integration/connect
Connect your NewsBreak account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
NewsBreak is a local news and content platform with a large audience across the United States. Its advertising platform allows marketers to reach highly engaged, geographically targeted audiences through native ad placements within the NewsBreak app and website. It is well suited for campaigns targeting US audiences at a local or regional level.
NewsBreak connects via API credentials — you copy an API Key and Account ID from your NewsBreak Ads platform settings and paste them into TheOptimizer.
***
## Where to Find Your API Credentials
Log in to the **NewsBreak Ads platform** → go to **Account settings** → **API Settings** → copy your **API Key** and **Account ID**.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **NewsBreak** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "NewsBreak – Main Account").
* **API Key** — paste the API Key from your NewsBreak Ads settings.
* **Account ID** — paste your NewsBreak Account ID.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/newsbreak/integration/manage-accounts
Enable, disable, and archive NewsBreak ad accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your NewsBreak integration is connected, you can manage the individual ad accounts and API credential profiles associated with it from **Integrations → NewsBreak**.
***
## Ad Accounts
Click on the NewsBreak integration to see the full list of ad accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your NewsBreak ad accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → NewsBreak → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple NewsBreak accounts** — if you manage ad accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new ad accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → NewsBreak → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries NewsBreak's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your NewsBreak API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → NewsBreak → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in NewsBreak.
# NewsBreak on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/newsbreak/overview
Connect NewsBreak to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to NewsBreak so you can monitor performance, automate optimization, and launch campaigns in bulk from one dashboard. You connect it using API credentials generated from the network's own settings.
## Set up NewsBreak
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the NewsBreak ad accounts you sync.
## Automate & launch
Automation patterns that work across native networks like NewsBreak.
Create and launch NewsBreak campaigns in bulk from TheOptimizer.
Create and launch NewsBreak campaigns in bulk from TheOptimizer.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Outbrain Automation Rules: Popular Patterns
Source: https://docs.theoptimizer.io/ad-networks/outbrain/automation/popular-rules
Proven Outbrain automation rules from 1,867 real deployments — covering section-level control, publisher blocking, fraud detection, and budget scaling.
This page covers 15+ critical automation rules for Outbrain based on analysis of 1,867 real-world rules deployed by high-performing media buyers. On Outbrain, section-level management is what separates profitable campaigns from average ones — 415 pause rules and 80 bid adjustments operate at the section level, making it the engine that high-volume buyers use to scale. Publisher-level blocking and campaign safety nets round out the stack, but the section is where your profit margin lives. Adjust thresholds to match your payout structures.
***
## Section-level control & bid optimization
Sections are placements within publishers — think of them as publisher subsites or contexts. Section-level control is unique to Outbrain and is how buyers scale profitably at high volume.
### Rule 1: pause sections — high spend, crushing payout (3× spend rule)
Kill sections spending 3× your payout with zero conversions. This is aggressive but critical.
**Data Interval:** Last 14 days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------- | --------- | ---------------------- |
| Amount Spent | > | 300% of Current Payout |
| Tracker Conversions | = | 0 |
**Action:** Pause Section
If your payout is $30 and a section has spent $90+ with zero conversions, it's a drain. This rule fires automatically to prevent waste.
***
### Rule 2: pause sections — high LP CTR but zero conversions (landing page mismatch)
Sections with abnormally high LP CTR (75%+) but zero conversions indicate audience misalignment — your headline attracts clicks but the offer fails. Kill it and move budget.
**Data Interval:** Last 7 days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Amount Spent | > | \$5 |
| LP CTR | > | 75% |
| Tracker Conversions | = | 0 |
**Action:** Pause Section
***
### Rule 3: pause sections — abnormally high CTR (1%+ on native)
Native CTR above 1% is rare and usually indicates bot activity, poisoned data, or fraud. Outbrain native typically runs 0.2–0.5% CTR. Use this as a fraud red flag.
**Data Interval:** Last 7 days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Amount Spent | > | \$2 |
| CTR | > | 1% |
| Tracker Conversions | \< | 1 |
**Action:** Pause Section
***
### Rule 4: optimize section bid — sophisticated bid ranges (advanced multi-condition)
Set bids based on a combination of CPC, EPC, conversion volume, and cost. This rule applies a tiered bid strategy that high-volume buyers use consistently.
**Data Interval:** Last 14 days | **Scheduling:** Every 2 days
| Metric | Condition | Value |
| ------------------- | --------- | ----------------- |
| Avg CPC | >= | 0.15 AND \<= 0.25 |
| EPC | >= | 2 AND \<= 4 |
| Tracker Conversions | > | 1 |
| Amount Spent | > | \$200 |
**Action:** Set Section Bid to 30% above current bid
This rule targets sections with balanced metrics — decent click costs, good earnings potential, proven conversions, and adequate spend. Adjust thresholds to your vertical's norms.
***
### Rule 5: reduce section bid — high cost per acquisition
When section CPA exceeds 100% of your campaign's target CPA, reduce bid to bring costs in line. This prevents overweight sections from eating margins.
**Data Interval:** Last 14 days | **Scheduling:** Every 2 days
| Metric | Condition | Value |
| ------------ | --------- | -------------------- |
| Tracker CPA | > | 100% of Campaign.CPA |
| Amount Spent | > | \$100 |
**Action:** Reduce Section Bid by 15–20%
***
### Rule 6: reactivate sections — positive ROI after pause
If a paused section recovers to positive ROI over 7 days, resume it. This captures sections that had temporary dips but have stabilized.
**Data Interval:** Last 7 days | **Scheduling:** Every 2 days
| Metric | Condition | Value |
| -------------- | --------- | ----- |
| Tracker ROI | > | 5% |
| Tracker Clicks | > | 15 |
**Action:** Start Section
***
## Sophisticated publisher blocking
While publisher-level blocking accounts for a large share of rules in the dataset, it's less critical than section-level control for high-volume buyers. However, blocking patterns at the publisher level remain important for brand safety and quality gates.
### Rule 7: pause publishers — high spend, zero conversions
If a publisher has spent meaningful money with zero conversions, stop it. This fires across all sections of that publisher.
**Data Interval:** Last 7 days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Amount Spent | >= | \$20 |
| Tracker Conversions | = | 0 |
**Action:** Pause Publisher
***
### Rule 8: pause publishers — extreme spend velocity with negative ROI
Some publishers spend fast but burn money. If they're burning 80% of your daily budget with poor ROI, pause to prevent runaway losses.
**Data Interval:** Today | **Scheduling:** Every 4 hours
| Metric | Condition | Value |
| ------------ | --------- | ------------------- |
| Amount Spent | >= | 80% of Daily Budget |
| Tracker ROI | \<= | −50% |
**Action:** Pause Publisher
***
### Rule 9: block publishers by name — brand safety tier
Use name matching to block known low-quality publishers. This is foundational quality control.
**Data Interval:** Last 7 days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ----------- | --------- | ----------------------- |
| Name | contains | \[your blacklist terms] |
| Impressions | >= | 10 |
**Action:** Pause Publisher
***
## Fraud detection & bot prevention
Sophisticated buyers use 3+ condition rules (448 out of 1,867 rules in the dataset). Fraud detection is a key use case — don't skip it.
### Rule 10: detect publisher click vs. traffic source click mismatch (bot detection)
When publisher clicks are 10% or less of traffic source clicks, it's a massive red flag for bot activity. Real users follow the click path; bots don't.
**Data Interval:** Last 7 days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ---------------- | --------- | ---------------- |
| Publisher Clicks | \<= | 10% of TS Clicks |
| Amount Spent | >= | \$10 |
**Action:** Pause Section
Publisher clicks reflect actual user engagement. TS (traffic source) clicks are Outbrain's record. A large gap between the two signals fraudulent inventory.
***
### Rule 11: bot detection — high impressions, near-zero engagement
Sections with 20k+ impressions but CTR below 0.1% with zero conversions are likely bot-filled or low-quality content blocks.
**Data Interval:** Last 7 days | **Scheduling:** Every 2 days
| Metric | Condition | Value |
| ------------------- | --------- | ------ |
| Impressions | >= | 20,000 |
| CTR | \< | 0.1% |
| Tracker Conversions | \< | 1 |
**Action:** Pause Section
***
### Rule 12: fraud detection — high cost per click with no payout
If you're paying high CPCs relative to your payout but earning nothing, demand-side fraud or bad inventory is likely.
**Data Interval:** Last 14 days | **Scheduling:** Every 2 days
| Metric | Condition | Value |
| ------------------- | --------- | --------------------- |
| Tracker CPA | > | 95% of Current Payout |
| Amount Spent | >= | \$50 |
| Tracker Conversions | \< | 1 |
**Action:** Pause Section
***
## Campaign budget & ROI management
These are the safety nets that prevent catastrophic losses.
### Rule 13: scale profitable campaigns — high spend velocity + positive ROI
When a campaign is hitting 80% of daily budget AND showing positive ROI, increase budget to capture more volume before hitting the cap.
**Data Interval:** Last 7 days | **Scheduling:** Every 4 hours
| Metric | Condition | Value |
| ------------ | --------- | ------------------- |
| Amount Spent | >= | 80% of Daily Budget |
| Tracker ROI | > | 0% |
**Action:** Increase Campaign Budget by 25–30%
***
### Rule 14: pause campaigns — severe sustained losses
If a campaign is bleeding money over 2 weeks (\$300+ spend at −70% ROI or worse), emergency stop it before compounding losses.
**Data Interval:** Last 14 days | **Scheduling:** Every 6 hours
| Metric | Condition | Value |
| ------------ | --------- | ----- |
| Amount Spent | >= | \$300 |
| Tracker ROI | \<= | −70% |
**Action:** Pause Campaign
***
### Rule 15: kill campaigns — spent budget without ROI
A campaign that's spent 70% of daily budget yet shows CPA 130% above campaign average is not scaling — it's hemorrhaging.
**Data Interval:** Last 7 days | **Scheduling:** Every 6 hours
| Metric | Condition | Value |
| ------------ | --------- | -------------------- |
| Amount Spent | >= | 70% of Daily Budget |
| Tracker CPA | > | 130% of Campaign.CPA |
**Action:** Pause Campaign
This fires on campaigns that can't optimize through section or publisher control — they're systemically broken. Pause and investigate the offer or audience targeting before reactivating.
***
## Creative performance & scaling
Ad-level rules are less frequent because section-level control dominates, but creative scaling is still crucial.
### Rule 16: pause creatives — high spend, zero conversions
Individual creatives that accumulate cost without conversions should be paused to redirect budget to winners.
**Data Interval:** All time | **Scheduling:** Every 3 days
| Metric | Condition | Value |
| ------------------- | --------- | ----- |
| Amount Spent | >= | \$100 |
| Tracker Conversions | = | 0 |
**Action:** Pause Ads
***
## Where to start
The framework above represents real patterns from 1,867 deployed rules. Focus first on section-level control and fraud detection — that's where your profit margin lives. Adjust thresholds based on your payout and risk tolerance, but the logic stays consistent: move fast on winners, kill losers aggressively, and watch for fraud signals constantly.
# Bulk Upload Campaigns via Excel
Source: https://docs.theoptimizer.io/ad-networks/outbrain/campaign-uploader/excel-upload
Upload multiple Outbrain campaigns at once using a pre-built Google Sheets template, then submit the exported Excel file through TheOptimizer's Campaign Creator.
The Outbrain Excel Uploader lets you prepare and launch multiple campaigns at once without going through the UI one by one. You define everything — targeting, budget, bidding, and creatives — in an Excel file and submit it through TheOptimizer. You can start from a blank Google Sheets template, or download a pre-filled Excel directly from any existing campaign — ideal when you're launching variations of setups you already run.
***
## How It Works
Open [**Campaign Creator**](https://native.theoptimizer.io/#/campaign-creator-queue) in TheOptimizer and click the **Outbrain** card. Choose **Bulk Upload (Excel)** from the options shown.
You then have two ways to get your template:
**Option A — Download pre-filled from an existing campaign (recommended)**
In the **Reference campaign** dropdown, select an existing campaign. TheOptimizer will pre-fill the template columns and settings from that campaign. Download the pre-filled Excel file and use it as your base — duplicate rows, update creatives and headlines, and adjust settings as needed.
This is the fastest approach when you're launching campaigns similar to setups you already run.
**Option B — Start from the empty Google Sheets template**
If you're setting up a new campaign type from scratch, click **Copy template** to clone the empty template into your Google account:
[**Clone the Outbrain Google Sheets Template →**](https://docs.google.com/spreadsheets/d/14Z3lSobmqQxY83I-XK6foWtLTxy3qGP7_2yrIsBBAAw/copy)
The template contains:
* A **main sheet** with one row per ad (campaign settings + creative in each row)
* **Auxiliary sheets** with reference data: Countries, Locations, Browsers, IAB Categories, and more
* **Column notes** on every column header — hover over the column name to see the accepted values and format
Each row in the main sheet represents one ad. To create a campaign with multiple ads, add one row per ad keeping all campaign-level columns identical, and vary only the ad-level columns (image URL, headline, CTA, etc.).
**Key things to note:**
* Columns marked 🚩 **REQUIRED** must be filled in — the upload will fail if they're missing
* Columns marked 🟡 are conditionally required (e.g. End Date is only needed if Run Forever is set to FALSE)
* Use the auxiliary sheets to look up valid values for locations, languages, IAB categories, etc.
If you used **Option B** (Google Sheets template), first export your sheet: in Google Sheets, go to **File → Download → Microsoft Excel (.xlsx)**.
Back in the modal, drag and drop your **.xlsx file** into the upload area or click to browse for it. Then click **Upload Campaigns** to submit.
After submitting, TheOptimizer processes the file and sends you an email:
* ✅ **Successful upload** — your campaigns are queued and being created on Outbrain. Track progress from the [Campaign Creator](https://native.theoptimizer.io/#/campaign-creator-queue) page.
* ⚠️ **Upload failed** — the email will include a new Excel file with all error cells highlighted. Download it, fix the issues, and re-upload.
***
## Column Reference
The table below describes every column in the Outbrain Excel template.
| Column | Description |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Traffic Source Account ID** | 🚩 REQUIRED. The Outbrain account ID from TheOptimizer where campaigns will be uploaded. Find it under Traffic Sources in the left menu. |
| **Campaign Name** | 🚩 REQUIRED. The name of the campaign. |
| **Objective** | 🚩 REQUIRED. `Awareness`, `Traffic`, `AppInstall`, or `Conversions`. |
| **Budget** | 🚩 REQUIRED. Minimum budget is \$20. The maximum you want to spend per day, month, or campaign. |
| **Budget Type** | 🚩 REQUIRED. `DAILY`, `MONTHLY`, or `CAMPAIGN`. |
| **Budget Pacing** | 🚩 REQUIRED. `AUTOMATIC` — even pacing. `SPEND_ASAP` — spend as fast as possible. `DAILY_TARGET` — fixed daily amount from monthly/campaign budget. |
| **Budget Daily Target** | 🟡 Required if Budget Pacing is `DAILY_TARGET`. Daily spend target. |
| **Start Date** | 🚩 REQUIRED. Campaign start date in `YYYY-MM-DD` format. |
| **Start Hour** | 🚩 REQUIRED. Campaign start hour (e.g., `7` or `22`). |
| **Run Forever** | 🚩 REQUIRED. Whether the campaign runs continuously (`TRUE` or `FALSE`). |
| **End Date** | 🟡 Required if Run Forever is `FALSE`. |
| **Selected Locations** | Comma-separated locations to target (e.g. `Italy, France, United States`). See Locations sheet. |
| **Excluded Locations** | Locations to exclude from targeting. Comma-separated. See Locations sheet. |
| **Platform** | 🚩 REQUIRED. Platforms to target. Values: `DESKTOP`, `MOBILE`, `TABLET`. Comma-separated for multiple. |
| **Operating System** | 🚩 REQUIRED. OS to target. Values: `Android`, `Ios`, `MacOs`, `Windows`. Comma-separated for multiple. |
| **Browsers** | Browser targeting. Leave empty to target all browsers. |
| **Exclude Ad Block Users** | 🚩 REQUIRED. Whether to exclude adblock users. Values: `TRUE` or `FALSE`. |
| **Msn Exclusive** | 🚩 REQUIRED. Run on Microsoft News (MSN) only. `TRUE` or `FALSE`. |
| **High Impact Placements** | 🚩 REQUIRED. Whether to include high-impact MSN placements. Values: `TRUE`, `FALSE`. |
| **Optimization Type** | 🚩 REQUIRED. `TARGET_CPA_FULLY_AUTOMATED` or `TARGET_ROAS_FULLY_AUTOMATED`. |
| **Creative Format** | 🚩 REQUIRED. `Standard`, `Clip`, or `Carousel`. |
| **Scheduling on air days** | Day/hour schedule if you want the campaign to run only at specific times. Example: `FRI-0-23,SAT-0-23`. |
| **Target CPA** | 🟡 Required if Optimization Type is `TARGET_CPA_FULLY_AUTOMATED`. |
| **Target ROAS** | 🟡 Required if Optimization Type is `TARGET_ROAS_FULLY_AUTOMATED`. |
| **Conversions** | 🟡 Required if Objective is `Conversions` or `AppInstalls`, or if Optimization Type is CPA/ROAS automated. Enter conversion name as shown in Outbrain. |
| **Audience Targeting** | 🚩 REQUIRED. `ALL`, `IAB`, or `INTERESTS`. |
| **IAB or Interests Categories** | 🟡 Required if Audience Targeting is `IAB` or `INTERESTS`. See IAB Categories sheet. |
| **IAB or Interests Operation** | 🟡 Required if Audience Targeting is `IAB` or `INTERESTS`. `include` or `exclude`. |
| **Suffix Tracking Code** | URL parameters appended to landing page URLs for external tracking. |
| **CPC** | 🚩 REQUIRED. Default cost per click at campaign level. |
| **Language** | 🚩 REQUIRED. Language targeting. |
| **Target URL** | Target URL of the ad (leave empty if using Media Manager Ads). |
| **Image URL** | 🚩 REQUIRED (unless using Media Manager Ads). Ad image URL. |
| **Headline** | 🚩 REQUIRED (unless using Media Manager Ads). Max 100 characters (90 recommended). |
| **Description** | Optional ad description. Max 150 characters. |
| **Site Name** | 🚩 REQUIRED. Your brand or website name displayed below the ad. |
| **Call to Action** | 🚩 REQUIRED. Call-to-action for the ad. |
| **Media Manager Ads** | Reference a saved Ad group from Outbrain's Media Manager instead of providing individual image/headline/URL fields. |
| **Rules** | Comma-separated Rule IDs from TheOptimizer to attach to the campaign after creation. |
| **Rule Groups** | Comma-separated rule group names from TheOptimizer to attach after creation. |
# Connect Outbrain
Source: https://docs.theoptimizer.io/ad-networks/outbrain/integration/connect
Connect your Outbrain account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
Outbrain is a leading native advertising platform that places sponsored content across a network of premium publishers worldwide. It is popular with performance marketers running native campaigns focused on content discovery, lead generation, and e-commerce.
Outbrain connects via API credentials — you generate an API key from the Outbrain Amplify settings and paste it into TheOptimizer.
***
## Where to Find Your API Credentials
Log in to **Outbrain Amplify** → go to **Account settings** → **API Settings** → generate your API credentials. Copy the API key provided.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **Outbrain** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "Outbrain – Main Account").
* **API Key** — paste the API key from Outbrain Amplify.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Custom Events
TheOptimizer can now import **any custom event** — and its revenue — from Outbrain, not just the single main conversion event. Sync them from the **Custom Events** tab inside the integration, then use them in reporting, as conditions in rules, and in custom metrics.
See [Custom Events](/integrations/custom-events) for the full setup.
***
## Next Steps
* [Custom Events](/integrations/custom-events) — import any custom event and its revenue into reporting, rules, and custom metrics
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/outbrain/integration/manage-accounts
Enable, disable, and archive Outbrain advertiser accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your Outbrain integration is connected, you can manage the individual advertiser accounts and API credential profiles associated with it from **Integrations → Outbrain**.
***
## Ad Accounts
Click on the Outbrain integration to see the full list of advertiser accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your Outbrain advertiser accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → Outbrain → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple Outbrain accounts** — if you manage advertiser accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new advertiser accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → Outbrain → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries Outbrain's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your Outbrain API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → Outbrain → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in Outbrain.
# Outbrain on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/outbrain/overview
Connect Outbrain to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to Outbrain so you can monitor performance, automate optimization, and launch campaigns in bulk from one dashboard. You connect it using API credentials generated from the network's own settings.
## Set up Outbrain
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the Outbrain ad accounts you sync.
## Automate & launch
Ready-to-copy automation rules proven on real Outbrain campaigns.
Create and launch Outbrain campaigns in bulk from TheOptimizer.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Bulk Upload Campaigns via Excel
Source: https://docs.theoptimizer.io/ad-networks/revcontent/campaign-uploader/excel-upload
Upload multiple RevContent campaigns at once using a pre-built Google Sheets template, then submit the exported Excel file through TheOptimizer's Campaign Creator.
The RevContent Excel Uploader lets you prepare and launch multiple campaigns at once without going through the UI one by one. You define everything — targeting, budget, bidding, and creatives — in an Excel file and submit it through TheOptimizer. You can start from a blank Google Sheets template, or download a pre-filled Excel directly from any existing campaign — ideal when you're launching variations of setups you already run.
***
## How It Works
Open [**Campaign Creator**](https://native.theoptimizer.io/#/campaign-creator-queue) in TheOptimizer and click the **RevContent** card. Choose **Bulk Upload (Excel)** from the options shown.
You then have two ways to get your template:
**Option A — Download pre-filled from an existing campaign (recommended)**
In the **Reference campaign** dropdown, select an existing campaign. TheOptimizer will pre-fill the template columns and settings from that campaign. Download the pre-filled Excel file and use it as your base — duplicate rows, update creatives and headlines, and adjust settings as needed.
This is the fastest approach when you're launching campaigns similar to setups you already run.
**Option B — Start from the empty Google Sheets template**
If you're setting up a new campaign type from scratch, click **Copy template** to clone the empty template into your Google account:
[**Clone the RevContent Google Sheets Template →**](https://docs.google.com/spreadsheets/d/1Y-xH7rw8H20tzVxQXcp3tLi-dhJuBb_RLcHHt2pAqWM/copy)
The template contains:
* A **main sheet** with one row per ad (campaign settings + creative in each row)
* **Auxiliary sheets** with reference data: Languages, Countries, Regions, Traffic Types, and more
* **Column notes** on every column header — hover over the column name to see the accepted values and format
Each row in the main sheet represents one ad. To create a campaign with multiple ads, add one row per ad keeping all campaign-level columns identical, and vary only the ad-level columns (image URL, headline, etc.).
**Key things to note:**
* Columns marked 🚩 **REQUIRED** must be filled in — the upload will fail if they're missing
* Columns marked 🟡 are conditionally required (e.g. Country Codes only needed if Country Targeting is INCLUDE or EXCLUDE)
* Use the auxiliary sheets to look up valid values for countries, regions, languages, etc.
If you used **Option B** (Google Sheets template), first export your sheet: in Google Sheets, go to **File → Download → Microsoft Excel (.xlsx)**.
Back in the modal, drag and drop your **.xlsx file** into the upload area or click to browse for it. Then click **Upload Campaigns** to submit.
After submitting, TheOptimizer processes the file and sends you an email:
* ✅ **Successful upload** — your campaigns are queued and being created on RevContent. Track progress from the [Campaign Creator](https://native.theoptimizer.io/#/campaign-creator-queue) page.
* ⚠️ **Upload failed** — the email will include a new Excel file with all error cells highlighted. Download it, fix the issues, and re-upload.
***
## Column Reference
The table below describes every column in the RevContent Excel template.
| Column | Description |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| **Traffic Source Account ID** | 🚩 REQUIRED. The RevContent account ID from TheOptimizer where campaigns will be uploaded. Find it under Traffic Sources in the left menu. |
| **Campaign Name** | 🚩 REQUIRED. The name of the campaign. |
| **Bid Type** | 🚩 REQUIRED. `cpc` — pay per click. `vcpm` — pay per 1,000 views. |
| **Bid Amount** | 🚩 REQUIRED. Amount per click (e.g. `0.15`) if Bid Type is `cpc`, or per 1,000 views (e.g. `1.5`) if `vcpm`. |
| **Budget Type** | 🚩 REQUIRED. `Unlimited` or `Daily`. |
| **Pacing** | Spreads budget evenly throughout the day (available for limited-budget campaigns). |
| **Budget** | 🚩 REQUIRED. Minimum allowed budget is \$100. |
| **Conversion Tracking** | Comma-separated list of conversion names from your RevContent dashboard to use with this campaign. |
| **Start date** | 🚩 REQUIRED. `immediately` to start right away, or a date in `yyyy-mm-dd hh:mm:ss` format. |
| **End date** | 🚩 REQUIRED. `never` to run indefinitely, or a date in `yyyy-mm-dd hh:mm:ss` format. |
| **Traffic Types** | 🚩 REQUIRED. Comma-separated list. Values: `Adblock`, `Native`, `PushNotifications`. |
| **Country Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Country Codes** | 🟡 Required if Country Targeting is INCLUDE or EXCLUDE. Comma-separated country codes. See Countries sheet. |
| **Region Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **ZIP Code Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Region Names** | 🟡 Required if Region Targeting is INCLUDE or EXCLUDE. Comma-separated region names. See Regions sheet. |
| **Zip Codes** | 🟡 Required if ZIP Code Targeting is INCLUDE or EXCLUDE. Comma-separated zip codes. |
| **Device Targeting** | 🚩 REQUIRED. Comma-separated list. Values: `Desktop`, `Mobile`, `Tablet`. |
| **Browser Targeting** | 🚩 REQUIRED. Comma-separated list. Values: `Chrome`, `Firefox`, `Safari`, `Edge`. |
| **OS Targeting** | 🚩 REQUIRED. Comma-separated list of operating systems to target. |
| **Language Targeting** | 🚩 REQUIRED. Comma-separated list of languages (e.g. `English,French,Italian`). See Languages sheet. |
| **Tracking Code** | URL parameters appended to landing page URLs for third-party tracker attribution. |
| **Target URL** | 🚩 REQUIRED (unless using Media Manager Ads). Landing page URL. |
| **Image URL** | 🚩 REQUIRED (unless using Media Manager Ads). Ad image URL. |
| **Headline** | 🚩 REQUIRED (unless using Media Manager Ads). Ad headline. Max 80 characters. |
| **Brand name** | 🚩 REQUIRED. Brand name displayed below the ad. Max 30 characters. |
| **Media Manager Ads** | Reference a saved Ad group from RevContent's Media Manager instead of providing individual image/headline/URL fields. |
| **Rules** | Comma-separated Rule IDs from TheOptimizer to attach to the campaign after creation. |
| **Rule Groups** | Comma-separated rule group names from TheOptimizer to attach after creation. |
# Connect RevContent
Source: https://docs.theoptimizer.io/ad-networks/revcontent/integration/connect
Connect your RevContent account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
RevContent is a native advertising network with a focus on premium publisher placements across news, media, and entertainment sites. It is used by performance marketers in verticals such as health, finance, and e-commerce who value quality publisher inventory and engagement-based targeting.
RevContent connects via OAuth2 client credentials — you copy a Client ID and Client Secret from your RevContent account settings and paste them into TheOptimizer.
***
## Where to Find Your API Credentials
Log in to the **RevContent platform** → go to **Account settings** → **API Access** → copy your **Client ID** and **Client Secret**.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **RevContent** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "RevContent – Main Account").
* **Client ID** — paste the Client ID from your RevContent API Access settings.
* **Client Secret** — paste the Client Secret from your RevContent API Access settings.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/revcontent/integration/manage-accounts
Enable, disable, and archive RevContent ad accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your RevContent integration is connected, you can manage the individual ad accounts and API credential profiles associated with it from **Integrations → RevContent**.
***
## Ad Accounts
Click on the RevContent integration to see the full list of ad accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your RevContent ad accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → RevContent → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple RevContent accounts** — if you manage ad accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new ad accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → RevContent → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries RevContent's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your RevContent API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → RevContent → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in RevContent.
# RevContent on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/revcontent/overview
Connect RevContent to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to RevContent so you can monitor performance, automate optimization, and launch campaigns in bulk from one dashboard. You connect it using API credentials generated from the network's own settings.
## Set up RevContent
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the RevContent ad accounts you sync.
## Automate & launch
Automation patterns that work across native networks like RevContent.
Create and launch RevContent campaigns in bulk from TheOptimizer.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Taboola Automation Rules: Popular Patterns
Source: https://docs.theoptimizer.io/ad-networks/taboola/automation/popular-rules
Proven Taboola automation rules drawn from 4,066 real deployments — covering site blocking, fraud detection, bid optimization, and creative rotation.
Based on analysis of 4,066 real Taboola automation rules, this guide reveals the patterns that separate profitable campaigns from money-losing ones. The data shows 53% of all Taboola rules target site-level pausing — publishers range from premium sites to low-quality placements, and smart blocking before spend accumulates is the single highest-leverage automation you can build. Once your blocking foundation is solid, layer in bid optimization and creative rotation to compound your winners.
***
## Site-level blocking: the Taboola foundation
### Rule 1: block publishers by name (brand protection)
Pause sites from known junk publishers — the fastest way to protect brand safety and cut losses.
**Data Interval:** Last 14 days | **Scheduling:** Immediate
| Metric | Condition | Value |
| --------- | --------- | ------------------------- |
| Site Name | Contains | `push\|notification\|pop` |
**Action:** Pause Site
Customize the keyword list based on your blocked publisher reports. One rule catches an entire category of low-quality publishers instead of pausing them one by one.
***
### Rule 2: block sites generating clicks but no landing page activity
Click fraud is rampant in native. Sites that drive clicks but zero landing page visits are likely bot farms or mismatched traffic.
**Data Interval:** Last 14 days | **Scheduling:** Immediate
| Metric | Condition | Value |
| --------------------- | ------------------- | ----- |
| Traffic Source Clicks | Greater or Equal to | 100 |
| Landing Page Clicks | Equals | 0 |
| Tracker Conversions | Equals | 0 |
**Action:** Pause Site
Real users click your ad, land on the page, and engage. Bots click but never arrive. This three-metric combo catches bot farms with 99%+ accuracy.
***
### Rule 3: block high-volume placements with terrible CTR
Volume without quality is a money sink. High-impression placements with CTR below 0.1% are jamming traffic that won't convert.
**Data Interval:** Last 14 days | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------------- | ------------------- | ------ |
| Impressions | Greater or Equal to | 20,000 |
| CTR (%) | Less than | 0.1 |
| Tracker Conversions | Less than | 1 |
**Action:** Pause Site
***
### Rule 4: block sites with suspiciously high landing page CTR
Landing page CTR above 90% combined with clicks is a fraud signal. Real users don't all click your CTA.
**Data Interval:** Last 14 days | **Scheduling:** Immediate
| Metric | Condition | Value |
| --------------------- | ------------------- | ----- |
| Landing Page CTR (%) | Greater than | 90 |
| Traffic Source Clicks | Greater or Equal to | 20 |
| Tracker Conversions | Equals | 0 |
**Action:** Pause Site
Legitimate sites see LP CTR of 5–15%. Higher rates indicate automated clicks or test traffic from that publisher.
***
## Detect and block fraudulent traffic
Native ads attract sophisticated fraud. The data shows 1,121 rules use 3+ conditions to catch subtle patterns that simple rules miss. Pair conditions — don't rely on single metrics.
### Rule 5: high spend + high CPA + negative ROI (the classic fraud combo)
When a site burns \$50+ with terrible CPA and negative ROI in just one week, it's usually fraud or mismatched traffic.
**Data Interval:** Last 7 days | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------------ | ------------ | ----- |
| Amount Spent | Greater than | 50 |
| Traffic Source CPA | Greater than | 20 |
| Tracker ROI (%) | Less than | 0 |
**Action:** Pause Site
These three metrics together signal either click fraud, bot traffic, or a publisher demographic mismatch. Don't wait — pause immediately and investigate.
***
### Rule 6: dynamic bid efficiency — CPC vs. EPC comparison
Compare your average CPC to the publisher's estimated earnings per click (EPC). If you're paying more than 70% of EPC, the site isn't worth the bid.
**Data Interval:** Last 14 days | **Scheduling:** Daily
| Metric | Condition | Value |
| ----------- | ------------ | ---------- |
| Average CPC | Greater than | 70% of EPC |
**Action:** Decrease Bid (−20%)
This rule lets publishers' own data tell you when you're overpaying. EPC reflects publisher quality. If your CPC approaches or exceeds it, reduce spend aggressively.
***
### Rule 7: safe bid growth — increase when CPC \< EPC
The inverse: if your average CPC is less than 70% of EPC, you have room to grow. Increase the bid to capture more volume at a good price.
**Data Interval:** Last 14 days | **Scheduling:** Daily
| Metric | Condition | Value |
| ----------- | --------- | ---------- |
| Average CPC | Less than | 70% of EPC |
**Action:** Increase Bid (+10%)
***
## Bid optimization: grow profitable channels
Bid optimization rules (8% of all rules) multiply your winners. Use ROI tiers to grow systematically without overspending.
### Rule 8: Tier 1 — high performers (ROI > 35%), scale aggressively
When a site delivers strong ROI, push it. Increase bids on your best-performing placements.
**Data Interval:** Last 14 days | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------------ | ------------------- | ---------- |
| Tracker ROI (%) | Greater or Equal to | 35 |
| Amount Spent | Greater or Equal to | 100 |
| Traffic Source CPA | Less than | Target CPA |
**Action:** Increase Bid (+15%)
High ROI + solid spend history = safe to scale. 15% bid increases are aggressive enough to grow volume without destabilizing quality.
***
### Rule 9: Tier 2 — moderate performers (ROI 10–35%), steady growth
Sites in the middle tier are cash generators. Increase bids modestly to grow while protecting profitability.
**Data Interval:** Last 14 days | **Scheduling:** Daily
| Metric | Condition | Value |
| -------------------------- | --------------------- | ----- |
| Tracker ROI (%) | Greater than | 10 |
| Tracker ROI (%) | Less than or Equal to | 35 |
| Traffic Source Conversions | Greater or Equal to | 2 |
**Action:** Increase Bid (+8%)
***
### Rule 10: Tier 3 — breakeven bids (CPC vs. daily budget ratio)
When daily spend hits 70% of your campaign daily budget and ROI is positive, increase the budget to sustain the winner.
**Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| --------------- | ------------------- | ------------------- |
| Amount Spent | Greater or Equal to | 70% of Daily Budget |
| Tracker ROI (%) | Greater than | 5 |
**Action:** Increase Budget (+25%)
This prevents artificial capping. If you're spending 70%+ of budget before EOD, the campaign would spend more if allowed. Budget increases let winners grow.
***
## Campaign-level safety & scaling
Campaign pauses (4.4% of rules) and budget changes (4% of rules) protect capital while scaling works at site level.
### Rule 11: kill catastrophic campaigns (last 30 days)
Pause entire campaigns that have spent \$150+ with negative ROI. This is your emergency brake.
**Data Interval:** Last 30 days | **Scheduling:** Immediate
| Metric | Condition | Value |
| --------------- | ------------ | ----- |
| Amount Spent | Greater than | 150 |
| Tracker ROI (%) | Less than | −50 |
**Action:** Pause Campaign
A −50% ROI on \$150+ spend is catastrophic. One losing campaign can erase two winners. Pause fast and investigate offline.
***
### Rule 12: scale winners (dynamic daily budget)
When a campaign spends efficiently and hits profitability targets, increase its daily budget dynamically.
**Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| ------------------ | ------------------- | ----- |
| Amount Spent | Greater or Equal to | 100 |
| Tracker ROI (%) | Greater or Equal to | 35 |
| Traffic Source CPA | Less than | 15 |
**Action:** Change Budget (+20%)
***
### Rule 13: cost control — lock budgets on losing campaigns
Set a daily budget ceiling (\$100) on campaigns with negative ROI to prevent them from bleeding overnight.
**Data Interval:** Today | **Scheduling:** Daily
| Metric | Condition | Value |
| --------------- | ------------ | ----- |
| Tracker ROI (%) | Less than | 0 |
| Amount Spent | Greater than | 50 |
**Action:** Change Budget (set to \$100)
Negative ROI campaigns will spend unlimited budget if you let them. Cap them at \$100 to preserve cash while you diagnose the problem.
***
## Creative rotation & reactivation
Content pausing (8.4% of rules) and reactivation (5.4% of rules combined) optimize creative mix without eliminating potential winners.
### Rule 14: pause low-performing content (spend threshold)
Stop content that has spent \$45+ without hitting your target CPA. Don't let bad creatives drain budget.
**Data Interval:** Last 14 days | **Scheduling:** Immediate
| Metric | Condition | Value |
| ------------------- | ------------------- | ---------- |
| Amount Spent | Greater or Equal to | 45 |
| Tracker Conversions | Greater or Equal to | 1 |
| Traffic Source CPA | Greater than | Target CPA |
**Action:** Pause Content
***
### Rule 15: reactivate profitable content (comeback rule)
Restart content pieces that were previously paused but have recovered to positive ROI. These are second-chance winners.
**Data Interval:** Last 7 days | **Scheduling:** Daily
| Metric | Condition | Value |
| --------------- | ------------------- | ------ |
| Tracker ROI (%) | Greater or Equal to | 10 |
| Status | Equals | Paused |
**Action:** Start Content
A creative that worked, failed, then recovered likely discovered a new audience or improved targeting. Reactivate automatically to capitalize on the second wave.
***
### Rule 16: reactivate winning sites (ROI recovery)
Automatically restart sites that were paused for being unprofitable but have now recovered to positive ROI.
**Data Interval:** Last 14 days | **Scheduling:** Daily
| Metric | Condition | Value |
| --------------- | ------------ | ------ |
| Tracker ROI (%) | Greater than | 5 |
| Status | Equals | Paused |
**Action:** Start Sites
***
### Rule 17: smart reactivation — spend minimum
Avoid restarting marginal performers. Only restart sites that show profit potential AND have enough recent data (minimum 25 clicks).
**Data Interval:** Last 7 days | **Scheduling:** Daily
| Metric | Condition | Value |
| --------------------- | ------------------- | ------ |
| Tracker ROI (%) | Greater than | 8 |
| Traffic Source Clicks | Greater or Equal to | 25 |
| Status | Equals | Paused |
**Action:** Start Sites
This prevents reactivating under-scaled sites that have only 2–3 recent clicks. The 25-click minimum ensures statistical confidence before you restart.
***
### Rule 18: copy top content (scale through duplication)
When a content piece hits high ROI with solid spend, duplicate it across more placements.
**Data Interval:** Last 14 days | **Scheduling:** Weekly
| Metric | Condition | Value |
| --------------- | ------------------- | ----- |
| Tracker ROI (%) | Greater or Equal to | 40 |
| Amount Spent | Greater or Equal to | 100 |
**Action:** Copy Content
***
## Implementation notes
**Start with site blocking.** The data shows 53% of all rules pause sites. Build your foundation first:
* Name-based blocking (brand safety)
* Bot detection (click-to-LP ratio)
* High-spend fraud detection
**Then add bid optimization.** Once blockers are in place, dynamic bid rules based on EPC comparison and ROI tiers multiply your winners without adding operational overhead.
**Use recent data windows.** Most rules use Last 14 Days for site rules or Today for campaign rules. This balances sample size with responsiveness.
**Pair conditions — don't rely on single metrics.** Rules with 3+ conditions catch fraud that single-metric rules miss.
**Scale gradually.** 20% budget increases and 15% bid increases are standard because they're aggressive enough to compound growth while preserving ROI. Start there and tighten once you've proven the pattern.
# Bulk Upload Campaigns via Excel
Source: https://docs.theoptimizer.io/ad-networks/taboola/campaign-uploader/excel-upload
Upload multiple Taboola campaigns at once using a pre-built Google Sheets template, then submit the exported Excel file through TheOptimizer's Campaign Creator.
The Taboola Excel Uploader lets you prepare and launch multiple campaigns at once without going through the UI one by one. You define everything — targeting, budget, bidding, and creatives — in an Excel file and submit it through TheOptimizer. You can start from a blank Google Sheets template, or download a pre-filled Excel directly from any existing campaign — ideal when you're launching variations of setups you already run.
***
## How It Works
Open [**Campaign Creator**](https://native.theoptimizer.io/#/campaign-creator-queue) in TheOptimizer and click the **Taboola** card. Choose **Bulk Upload (Excel)** from the options shown.
You then have two ways to get your template:
**Option A — Download pre-filled from an existing campaign (recommended)**
In the **Reference campaign** dropdown, select an existing campaign. TheOptimizer will pre-fill the template columns and settings from that campaign. Download the pre-filled Excel file and use it as your base — duplicate rows, update creatives and headlines, and adjust settings as needed.
This is the fastest approach when you're launching campaigns similar to setups you already run.
**Option B — Start from the empty Google Sheets template**
If you're setting up a new campaign type from scratch, click **Copy template** to clone the empty template into your Google account:
[**Clone the Taboola Google Sheets Template →**](https://docs.google.com/spreadsheets/d/14Z3lSobmqQxY83I-XK6foWtLTxy3qGP7_2yrIsBBAAw/copy)
The template contains:
* A **main sheet** with one row per ad (campaign settings + creative in each row)
* **Auxiliary sheets** with reference data: Countries, Regions, Browsers, OS Versions, Timezones, and more
* **Column notes** on every column header — hover over the column name to see the accepted values and format
Each row in the main sheet represents one ad. To create a campaign with multiple ads, add one row per ad keeping all campaign-level columns identical, and vary only the ad-level columns (image URL, headline, CTA, etc.).
**Key things to note:**
* Columns marked 🚩 **REQUIRED** must be filled in — the upload will fail if they're missing
* Columns marked 🟡 are conditionally required (e.g. Countries is only needed if Country Targeting is set to INCLUDE or EXCLUDE)
* Use the auxiliary sheets to look up valid values for countries, regions, browsers, OS versions, etc.
If you used **Option B** (Google Sheets template), first export your sheet: in Google Sheets, go to **File → Download → Microsoft Excel (.xlsx)**.
Back in the modal, drag and drop your **.xlsx file** into the upload area or click to browse for it. Then click **Upload Campaigns** to submit.
After submitting, TheOptimizer processes the file and sends you an email:
* ✅ **Successful upload** — your campaigns are queued and being created on Taboola. Track progress from the [Campaign Creator](https://native.theoptimizer.io/#/campaign-creator-queue) page.
* ⚠️ **Upload failed** — the email will include a new Excel file with all error cells highlighted. Download it, fix the issues, and re-upload.
***
## Column Reference
The table below describes every column in the Taboola Excel template.
| Column | Description |
| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Traffic Source Account ID** | 🚩 REQUIRED. The Taboola account ID from TheOptimizer where campaigns will be uploaded. Find it under Traffic Sources in the left menu. |
| **Campaign Name** | 🚩 REQUIRED. The name of the campaign. |
| **Marketing Objective** | 🚩 REQUIRED. Taboola optimization goal. Values: `LEADS_GENERATION`, `ONLINE_PURCHASES`, `DRIVE_WEBSITE_TRAFFIC`, `BRAND_AWARENESS`. |
| **Brand Name** | REQUIRED. Your brand or website name (no "www" or "http"). Appears below the ad title. |
| **Start Date** | Leave empty to start immediately, or specify a date. |
| **End Date** | Leave empty to run until budget depleted, or specify an end date. |
| **Campaign Status** | 🚩 REQUIRED. `ACTIVE` — starts running once approved. `PAUSED` — created paused; you start it manually. |
| **Campaign Schedule Days** | Days the campaign runs. Leave empty for 24/7. Example: `Monday, Tuesday, Wednesday, Thursday, Friday`. |
| **Campaign Schedule Start Hour** | Start hour per scheduled day (e.g. `11, 8, 23` for Mon/Tue/Thu). |
| **Campaign Schedule End Hour** | End hour per scheduled day. |
| **Campaign Schedule Timezone** | Timezone for scheduling. Defaults to your Taboola account timezone. |
| **Country Targeting** | `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Countries** | 🟡 Required if Country Targeting is INCLUDE or EXCLUDE. Comma-separated country names. See Countries sheet. |
| **Regions** | Comma-separated regions to target (only available when Country Targeting is INCLUDE). See Regions sheet. |
| **Platforms Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Platforms** | 🟡 Required if Platforms Targeting is INCLUDE or EXCLUDE. Values: `PHON`, `DESK`, `TBLT`. |
| **Operating System Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Operating Systems** | 🟡 Required if OS Targeting is INCLUDE or EXCLUDE. Values: `Mac OS X`, `Linux`, `Windows`, `iOS`, `Android`. |
| **Operating System Versions** | Narrow OS targeting by specific versions. See OS Versions sheet. |
| **Browsers Targeting** | 🚩 REQUIRED. `ALL`, `INCLUDE`, or `EXCLUDE`. |
| **Browsers** | 🟡 Required if Browser Targeting is INCLUDE or EXCLUDE. See Browsers sheet. |
| **Connection Type** | 🚩 REQUIRED. `ALL` or `WIFI`. |
| **Block Sites** | Comma-separated list of sites to block at campaign level. |
| **Brand Safety Type** | 🚩 REQUIRED. Brand safety partner setting (DoubleVerify / IAS). |
| **Brand Safety Segments** | List of brand safety segments where ads should not appear. |
| **Brand Safety Risk Level** | Risk level tolerance for certain content categories. |
| **Bid Strategy** | 🚩 REQUIRED. `MAX_CONVERSIONS`, `TARGET_CPA`, or `FIXED`. |
| **Cost Per Click** | 🟡 Required if Bid Strategy is `SMART` or `FIXED`. Minimum: 0.01. |
| **CPA Goal** | 🟡 Required if Bid Strategy is `TARGET_CPA`. |
| **Daily Cap** | Average daily spend. Actual spend may vary up to 2×. |
| **Spending Limit Model** | 🚩 REQUIRED. `MONTHLY` — resets each month. `ENTIRE` — one-time campaign budget. |
| **Spending Limit** | Maximum spend within the selected timeframe. |
| **Daily Ad Delivery Model** | 🚩 REQUIRED. `BALANCED` — even pacing. `STRICT` — hard daily cap. `ACCELERATED` — spends as fast as possible. |
| **Traffic Allocation Mode** | 🚩 REQUIRED. `OPTIMIZED` — algorithm-driven distribution (recommended). `EVEN` — equal distribution across ads. |
| **Traffic Allocation AB Test End Date** | End date for A/B test when using `EVEN` allocation mode. |
| **Tracking Code** | URL parameters appended to landing page URLs for external tracking. |
| **Comments** | Internal notes for this campaign. |
| **Target URL** | 🚩 REQUIRED (unless using Media Manager Ads). Landing page URL. |
| **Image URL** | 🚩 REQUIRED (unless using Media Manager Ads). Ad image URL. Max 1MB, JPEG preferred. |
| **Headline** | 🚩 REQUIRED (unless using Media Manager Ads). Max 100 characters (60 recommended). |
| **CTA** | 🚩 REQUIRED. Call-to-action for the ad. |
| **Description** | Optional ad description. Max 250 characters. |
| **Media Manager Ads** | Reference a saved Ad group from Taboola's Media Manager instead of providing individual image/headline/URL fields. |
| **Rules** | Comma-separated Rule IDs from TheOptimizer to attach to the campaign after creation. |
| **Rule Groups** | Comma-separated rule group names from TheOptimizer to attach after creation. |
# Connect Taboola
Source: https://docs.theoptimizer.io/ad-networks/taboola/integration/connect
Connect your Taboola account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
Taboola is one of the largest native advertising platforms, delivering content recommendations across a global network of premium publishers. It is widely used by performance marketers running native campaigns for lead generation, e-commerce, and content monetisation.
Taboola connects via API credentials — you generate a Client ID and Client Secret from the Taboola Backstage settings and paste them into TheOptimizer.
***
## Where to Find Your API Credentials
Log in to **Taboola Backstage** → click your account name → **My Account** → go to **API Management** → generate your **Client ID** and **Client Secret**. Copy both values before closing the page.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **Taboola** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "Taboola – Main Account").
* **Client ID** — paste the Client ID from Taboola Backstage.
* **Client Secret** — paste the Client Secret from Taboola Backstage.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Custom Events
TheOptimizer can now import **any custom event** — and its revenue — from Taboola, not just the single main conversion event. Sync them from the **Custom Events** tab inside the integration, then use them in reporting, as conditions in rules, and in custom metrics.
See [Custom Events](/integrations/custom-events) for the full setup.
***
## Next Steps
* [Custom Events](/integrations/custom-events) — import any custom event and its revenue into reporting, rules, and custom metrics
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/taboola/integration/manage-accounts
Enable, disable, and archive Taboola advertiser accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your Taboola integration is connected, you can manage the individual advertiser accounts and API credential profiles associated with it from **Integrations → Taboola**.
***
## Ad Accounts
Click on the Taboola integration to see the full list of advertiser accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your Taboola advertiser accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → Taboola → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple Taboola accounts** — if you manage advertiser accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new advertiser accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → Taboola → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries Taboola's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your Taboola API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → Taboola → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in Taboola.
# Taboola on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/taboola/overview
Connect Taboola to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to Taboola so you can monitor performance, automate optimization, and launch campaigns in bulk from one dashboard. You connect it using API credentials generated from the network's own settings.
## Set up Taboola
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the Taboola ad accounts you sync.
## Automate & launch
Ready-to-copy automation rules proven on real Taboola campaigns.
Create and launch Taboola campaigns in bulk from TheOptimizer.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# TikTok Automation Rules: Popular Patterns
Source: https://docs.theoptimizer.io/ad-networks/tiktok/automation/popular-rules
TikTok automation rule patterns covering real-time pausing, tiered ROI scaling, ad group cloning, bid control, and creative fatigue detection for media buyers.
These patterns come from analyzing 2,113 real TikTok automation rules deployed across high-performing media buyer accounts. TikTok moves faster than any other platform — a losing ad group discovered at 8 AM can cost you thousands by 5 PM. The rules below are organized by layer: protective pauses first, then scaling, then cloning, then bid and creative refinement. Start with the protective layer and add the rest once your guardrails are solid.
***
## Real-Time Performance Control
Ad group pausing dominates TikTok automation — 973 of 2,113 rules use pause/AdGroup. This reflects the harsh economics of the platform: fast spend, fast fatigue, and no tolerance for wasted budget. All rules in this section fire on today's data only.
### Rule 1: Pause Ad Groups — Cost Exceeds Performance Threshold
The core TikTok pause pattern. Pause when spend exceeds a minimum baseline but conversions or ROI fail to justify it.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 1–2 hours
| Metric | Condition | Value |
| ------------------- | --------- | ----------- |
| Amount Spent | >= | $1.00–$3.00 |
| Tracker Conversions | \< | 1–2 |
| Tracker ROI | \< | 5% |
**Action:** Pause Ad Group
Adjust the spend threshold based on your account size. Media buyers with $20k daily budgets set this to $5–10 per ad group. Smaller accounts set it to \$0.50–2. Running this hourly is common because catching a loser early saves substantial budget.
***
### Rule 2: Pause Ad Groups — Traffic Source CPA Exceeds Payout Threshold
Use this when TikTok's native conversion attribution is more reliable than your third-party tracker. This sets a hard ceiling on acceptable cost per acquisition.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Condition | Value |
| -------------------------- | --------- | ------------------------- |
| Amount Spent | > | $3.00–$5.00 |
| Traffic Source Conversions | >= | 1 |
| Traffic Source CPA | > | 1.5–2× your target payout |
**Action:** Pause Ad Group
If your payout is $8, set the CPA threshold to $12–15. This gives room for variance while preventing catastrophic loss. Requiring at least 1 Traffic Source Conversion prevents firing on noise.
***
### Rule 3: Pause Ad Groups — Multi-Condition Safety Rule
When one metric lies, three rarely do. Combine spend, profitability, and net profit to reduce false positives and avoid pausing winners with early variance.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 2–3 hours
| Metric | Condition | Value |
| ------------------ | --------- | ------ |
| Amount Spent | > | \$2.00 |
| Tracker ROI | \< | -20% |
| Tracker Net Profit | \< | -\$1 |
| Impressions | > | 100 |
**Action:** Pause Ad Group
Waiting for three signals before pausing prevents knee-jerk reactions. New ad groups with early variance won't trigger, but genuine losers will. The impressions condition ensures there's enough delivery to make a judgment.
***
## Dynamic Profitability Scaling
Instead of scaling all winners equally, use tiered budget increases that calibrate to ROI ranges. The data shows sophisticated buyers segment into four tiers: $20/$30/$40/$50 increases at 24%/34%/44%/60%+ ROI respectively. Higher ROI ad groups can absorb larger budget increases without saturation.
All scaling rules in this section operate on a **3-day window** to smooth out daily variance while staying responsive enough to capitalize on trends.
### Rule 4: Scale Tier 1 — 24–34% ROI (Solid Performers)
Entry-level winners that have proven traction. A 20% increase compounds steadily without overexposure risk.
**Platform:** TikTok | **Data Interval:** Last 3 Days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------ | --------- | ------ |
| Amount Spent (L3D) | > | \$5–10 |
| Tracker ROI (L3D) | >= | 24% |
| Tracker ROI (L3D) | \< | 34% |
**Action:** Increase Ad Group Budget by 20%
***
### Rule 5: Scale Tier 2 — 34–44% ROI (Strong Performers)
Proven winners with meaningful profit velocity. A 30% increase is justified by the risk-reward profile at this tier.
**Platform:** TikTok | **Data Interval:** Last 3 Days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------ | --------- | ------ |
| Amount Spent (L3D) | > | \$5–10 |
| Tracker ROI (L3D) | >= | 34% |
| Tracker ROI (L3D) | \< | 44% |
**Action:** Increase Ad Group Budget by 30%
***
### Rule 6: Scale Tier 3 — 44–59% ROI (Excellent Performers)
Exceptional performers generating serious profit. A 40% increase reflects the reduced saturation risk at this ROI tier.
**Platform:** TikTok | **Data Interval:** Last 3 Days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------ | --------- | ------ |
| Amount Spent (L3D) | > | \$5–10 |
| Tracker ROI (L3D) | >= | 44% |
| Tracker ROI (L3D) | \< | 59% |
**Action:** Increase Ad Group Budget by 40%
***
### Rule 7: Scale Tier 4 — 60%+ ROI (Elite Performers)
Rare air. If an ad group hits 60% ROI, you've found a goldmine.
**Platform:** TikTok | **Data Interval:** Last 3 Days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------ | --------- | ------ |
| Amount Spent (L3D) | > | \$5–10 |
| Tracker ROI (L3D) | >= | 60% |
**Action:** Increase Ad Group Budget by 50%
A 50% increase is conservative relative to the profit opportunity at 60%+ ROI. Pair this with a max budget cap rule to prevent any single ad group from consuming your entire daily budget. Most buyers cap at \$300–500/day per ad group.
***
### Rule 8: Scale by CPA Efficiency (Advanced Pattern)
The most sophisticated scaling approach in the dataset. Compare your tracker CPA directly to your campaign payout. This is TikTok-specific because media buyers here obsess over unit economics.
**Platform:** TikTok | **Data Interval:** Last 3 Days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------------- | --------- | ---------------------- |
| Tracker CPA (L3D) | \< | 70% of Campaign payout |
| Tracker Conversions (L3D) | > | 5 |
**Action:** Increase Ad Group Budget by 35%
If your campaign payout is $10 and CPA drops below $7, increase budget. If CPA drops below \$5 (50% of payout), consider increasing by 50% instead of 35%. Requiring 5+ conversions ensures statistical confidence before scaling.
***
## Campaign-Level Safety Nets
Ad group rules are surgical. Campaign rules are blunt-force protection. Use these to prevent entire campaigns from running sideways while you're focused elsewhere.
### Rule 9: Pause Campaigns — Zero Conversions at Scale
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 3 hours
| Metric | Condition | Value |
| -------------------------- | --------- | ------- |
| Amount Spent | > | \$20–50 |
| Traffic Source Conversions | = | 0 |
**Action:** Pause Campaign
If you've spent \$30+ with zero conversions, something fundamental is broken. Pause immediately and investigate — wrong pixel event, broken landing page, or mismatched audience are the most common culprits.
***
### Rule 10: Pause Campaigns — Spend Ceiling
A hard stop at your daily budget limit, accounting for platform delivery variance.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 1 hour
| Metric | Condition | Value |
| ------------ | --------- | ------------------------------ |
| Amount Spent | >= | Your daily budget limit × 1.05 |
**Action:** Pause Campaign
Set the threshold to 105–110% of your daily target, not 100%. TikTok's spend delivery can overshoot the nominal daily cap by 5–10% due to auction timing. Setting the threshold at 100% causes false positives.
***
## Cloning Winning Ad Groups
This is the TikTok-exclusive advantage. While Facebook buyers manually pause and restart audiences, TikTok buyers clone winners. The data is stark: 190 rules use copy/AdGroup, 78 use copy\_budget/Campaign, and 41 use copy/Content — 309 cloning rules out of 2,113 total (15%). Cloning works because TikTok's audience targeting makes duplication effective: if an audience performs at 40% ROI, a cloned version on the same audience usually performs similarly.
Run cloning rules every 4–6 hours, not hourly. Let winning ad groups stabilize first before spinning up clones.
### Rule 11: Clone Ad Groups — Profitability + Volume
The core cloning pattern. Clone when you have both meaningful conversions (proof of concept) and strong ROI (proof of profit).
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 4 hours
| Metric | Condition | Value |
| --------------------------- | --------- | ----- |
| Tracker Conversions (Today) | > | 2–3 |
| Tracker ROI (Today) | > | 20% |
**Action:** Copy Ad Group
Three conversions at 20% ROI is a pattern, not luck. Cloning at this point captures the audience while it's hot. Most clones inherit audience targeting and creative, starting at equal efficiency to the original.
***
### Rule 12: Clone Ad Groups — High-Efficiency, Low-Cost Winners
When CPA is exceptionally low relative to conversions, you've found an audience inefficiency on TikTok. Clone to saturate that inefficiency before competition or audience drift stales it.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 4 hours
| Metric | Condition | Value |
| ---------------------------------- | --------- | ----------------------- |
| Traffic Source Conversions (Today) | > | 3–5 |
| Traffic Source CPA (Today) | \<= | 40–50% of target payout |
**Action:** Copy Ad Group
If your target payout is $10 and CPA is $4–5 per conversion, clone it immediately. This signals you've found something the algorithm hasn't priced efficiently yet.
***
### Rule 13: Clone Campaigns — Proven Profitability at Scale
The most popular TikTok cloning pattern: clone entire campaigns. This copies targeting, creative, and budget configuration in one action. Use when a campaign has demonstrated stable, repeatable profitability.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Once daily
| Metric | Condition | Value |
| ---------------------------------- | --------- | -------------------- |
| Campaign Status | = | Running |
| Traffic Source Conversions (Today) | >= | 8–10 |
| Traffic Source CPA (Today) | \<= | 60% of target payout |
**Action:** Clone Campaign with Budget
The cloned campaign starts paused. Review settings, then manually or auto-start. This is safer than cloning ad groups alone because you capture the entire performance context — targeting, creative mix, and budget structure all intact.
***
### Rule 14: Clone Content — Winning Creative
Clone individual ads outperforming within their ad group. The data shows 41 copy/Content rules — some sophisticated buyers are tracking creative-level efficiency explicitly.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 6 hours
| Metric | Condition | Value |
| --------------------------- | --------- | -------------------- |
| Amount Spent (Today) | > | \$1–2 |
| Tracker Conversions (Today) | > | 1 |
| Tracker CPA (Today) | \< | 50% of target payout |
**Action:** Copy Content
Duplicating a winning creative serves two purposes: it increases impression share for the best-performing ad, and it creates a control version in case the original ad group pauses later. Think of it as insurance for your best creative.
***
## Bid & Budget Management
Bid management on TikTok is subtle — bid caps constrain delivery but don't guarantee it. Use these rules conservatively, paired with budget rules for best results.
### Rule 15: Decrease Bids — Unprofitable Ranges
When ROI turns negative but isn't catastrophic yet, decrease bids before pausing. This buys you another test cycle at lower cost.
**Platform:** TikTok | **Data Interval:** Last 7 Days | **Scheduling:** Once daily
| Metric | Condition | Value |
| ------------------------ | --------- | ----- |
| Tracker ROI (L7D) | \< | -10% |
| Tracker Net Profit (L7D) | \< | -\$1 |
| Tracker ROI (L7D) | > | -50% |
**Action:** Decrease Ad Group Bid by 10–15%
If an ad group is at -5% ROI on \$20 spend, decrease bid first — see if cost-per-click drops enough to restore profitability before you pause. The lower bound (-50%) prevents this rule from firing on catastrophically bad ad groups, which should be paused outright.
***
### Rule 16: Increase Bids — High-Efficiency Winners
When CPA is exceptionally low, increase bids to capture more inventory. TikTok's auction is sophisticated — higher bids often return proportional increases in conversions.
**Platform:** TikTok | **Data Interval:** Last 3 Days | **Scheduling:** Once daily
| Metric | Condition | Value |
| -------------------------------- | --------- | -------------------- |
| Traffic Source CPA (L3D) | \< | 40% of target payout |
| Traffic Source Conversions (L3D) | > | 5 |
**Action:** Increase Ad Group Bid by 10–15%
***
### Rule 17: Budget Ceiling Protection
Prevent runaway spend by pausing when cumulative spend approaches your daily limit.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 1 hour
| Metric | Condition | Value |
| -------------------- | --------- | ------------------- |
| Amount Spent (Today) | > | Daily budget × 1.08 |
**Action:** Pause Campaign
Set to 108% instead of 100% to account for TikTok's platform variance in spend delivery. Campaigns can overshoot the daily cap by 5–10% due to auction timing — using 100% as the threshold will create constant false positives.
***
## Creative Performance Optimization
Ad-level rules catch the creative duds your audience doesn't want to see. These run on today's data only, enabling rapid creative refresh.
### Rule 18: Pause Underperforming Ads — Cost Without Conversions
Pause ads that spend without delivering. This signals either poor creative appeal or wrong audience.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Condition | Value |
| ---------------------------------- | --------- | ----- |
| Amount Spent (Today) | > | \$2–3 |
| Traffic Source Conversions (Today) | = | 0 |
**Action:** Pause Content
Removing a non-converting ad from the ad group improves overall performance — TikTok reallocates budget and impressions to the remaining creatives. Pair this with regular creative uploads to keep rotation fresh.
***
### Rule 19: Pause Underperforming Ads — High Cost, Low Tracker Conversions
Similar to Rule 18 but using tracker conversions. Use this if third-party tracking is more reliable than TikTok's native conversion signals for your offer type.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 2 hours
| Metric | Condition | Value |
| --------------------------- | --------- | ----- |
| Amount Spent (Today) | > | \$2 |
| Tracker Conversions (Today) | \< | 1 |
**Action:** Pause Content
***
### Rule 20: Reactivate High-Efficiency Ads
Resume previously paused ads that prove themselves with low CPA and conversions. Use this sparingly — only reactivate ads that clearly exceed your profitability threshold.
**Platform:** TikTok | **Data Interval:** Today | **Scheduling:** Every 4 hours
| Metric | Condition | Value |
| --------------------------- | --------- | ----------------------- |
| Tracker CPA (Today) | \< | 40–50% of target payout |
| Tracker Conversions (Today) | > | 0 |
**Action:** Start Content
Only reactivate ads when CPA is genuinely excellent — 40–50% of target payout, not just positive. You have limited creative slots in each ad group. Use them for your best performers.
***
## How Pro Media Buyers Layer These Rules
The rules above work best in combination:
1. **Protective layer (runs hourly):** Real-time pauses catch disasters before they cost you thousands. Deploy these first and treat them as your safety net.
2. **Scaling layer (runs daily):** Tiered ROI scaling feeds winners more budget without manual oversight. Set once and let it run.
3. **Cloning layer (runs every 4 hours):** Clone winners before they saturate. TikTok audiences move fast — the first person to clone a profitable audience has an advantage over latecomers.
4. **Optimization layer (runs daily):** Bid and content pauses refine performance. These are refinements; focus on layers 1–3 first.
## Key Insights from 2,113 Rules
* **Pause dominates:** 973 rules pause ad groups because fast response is critical. The first person to pause a loser avoids the bulk of wasted spend.
* **Cloning is TikTok-specific:** 309 cloning rules out of 2,113 (15%) — not coincidence. TikTok's audience targeting makes duplication unusually effective.
* **CPA vs. payout comparisons are where profit lives:** Rules comparing tracker CPA to Campaign.payout show sophisticated buyers calibrating to their own economics. A $10 payout with $3 CPA is a 3:1 ratio — worth scaling aggressively.
* **Real-time rules dominate:** 60%+ of rules use today's data interval. 24-hour-old data is stale on TikTok.
* **Complex rules (3+ conditions) are common:** 845 of 2,113 rules use 3+ conditions, reducing false positives. Pros use multi-condition rules; beginners use single-condition rules and wonder why their winners get paused.
## Customization by Campaign Type
* \*\*High-payout campaigns ($5–20 per conversion):** Use higher spend thresholds before pausing ($5–10). Budget increases can be more aggressive (50%+ for top tier).
* **Low-payout, high-volume campaigns ($0.50–$2 per conversion):** Use lower spend thresholds (\$0.50–2) and clone more aggressively. Saturation happens faster.
* **Brand/awareness campaigns:** Reduce reliance on conversion metrics. Add impression-share, reach, and engagement rules instead.
* **Affiliate/e-commerce:** These rules are built for you. Adjust thresholds to match your payout structure and cost of goods.
## Troubleshooting Common Issues
* **Rules firing too often:** Increase the cost threshold or require multi-condition confirmation (add Impressions > 50 as an additional condition).
* **Winners getting paused:** Use ROI + profit conditions together, never ROI alone. A -10% ROI at \$0.50 spend is noise, not signal.
* **Clones underperforming:** This is normal — first clones match original performance roughly 70% of the time. Monitor separately and pause underperformers within 24 hours.
* **Budget caps not working:** Set threshold to 108–110%, not 100%. Platform variance in delivery makes 100% unreliable as a ceiling.
# Connect TikTok
Source: https://docs.theoptimizer.io/ad-networks/tiktok/integration/connect
Authorise TheOptimizer to access your TikTok for Business ad accounts using OAuth so it can read campaign data and manage your ads on your behalf.
TikTok Ads uses OAuth for authentication — you log in with your TikTok for Business account directly and grant TheOptimizer the permissions it needs. No API keys to copy and paste.
From the left-hand menu, go to **Integrations**. Find the **TikTok** card and click **Connect →**.
You will be redirected to TikTok for Business's authorisation screen. Sign in with the TikTok for Business account that has access to the ad accounts you want to manage in TheOptimizer.
TikTok will display a summary of the permissions being requested. These allow TheOptimizer to read and manage your ad campaigns via the TikTok Marketing API. Review the permissions and click **Confirm** to complete the authorisation.
TheOptimizer shows a confirmation screen once the connection is established. Initial sync takes **up to 20–30 minutes**. Your campaigns and ads may not appear immediately — this is expected. Give it up to half an hour before troubleshooting.
If your TikTok for Business account manages multiple ad accounts, all of them will be pulled in and listed under this integration after the initial sync.
***
## What Permissions Are Granted
TheOptimizer requests the following TikTok permissions:
* **Read ad campaigns** — retrieve campaign structure, ad groups, and ad creative data
* **Manage ad campaigns** — update campaign status, budgets, and bids via the TikTok Marketing API
* **Read performance metrics** — access impressions, clicks, spend, and conversion data
TheOptimizer does not request access to your TikTok creator profile, personal account, or any data outside of TikTok for Business.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/tiktok/integration/manage-accounts
Enable, disable, and archive TikTok ad accounts — plus reassign profiles, add tags, and manage tracker connections per account.
Once your TikTok integration is connected, you can manage the individual ad accounts and authentication profiles associated with it from **Integrations → TikTok**.
***
## Ad Accounts
Click on the TikTok integration to see the full list of advertiser accounts pulled from your connected TikTok login.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the TikTok login TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are the TikTok logins (OAuth tokens) that TheOptimizer uses to access your TikTok advertiser accounts. After connecting TikTok via OAuth, each authenticated login becomes a profile.
### Add New Profiles
Go to **Integrations → TikTok → Profiles** and click **Add Profile**. Complete the OAuth flow with the additional TikTok login.
Reasons to add multiple profiles:
* **Team access** — each team member manages their own set of accounts under their own login.
* **Backup access** — if a primary profile is restricted or the token becomes invalid, a backup profile can take over the affected accounts immediately.
* **Multiple TikTok Business accounts** — different business accounts have different admin logins.
### Sync New Ad Accounts
When you add a new advertiser account to a TikTok login you've already connected, it won't appear automatically. To pull in the new account:
1. Go to **Integrations → TikTok → Profiles**.
2. Find the profile that has access to the new account.
3. Click **Sync** (or **Refresh Accounts**).
This triggers a re-sync for that profile and pulls in any new accounts without requiring a full re-authorisation.
### Re-authenticate a Profile
TikTok OAuth tokens expire or become invalid when you:
* Change your TikTok account password
* The ad network detects suspicious activity on your account
* Security settings change
* The token is manually revoked from TikTok's security settings
When a token expires, TheOptimizer can no longer sync data or run automation for the accounts under that profile.
To re-authenticate:
1. Go to **Integrations → TikTok → Profiles**.
2. Find the profile showing an error or "Re-authentication required" warning.
3. Click **Re-authenticate** and complete the OAuth flow again.
Re-authenticating refreshes the token without losing any account history, automation settings, or tags.
You will receive email notifications when a profile needs re-authentication. Do not ignore them. If a profile becomes invalid and is not refreshed, all automation and data sync for its accounts will silently stop.
# TikTok on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/tiktok/overview
Connect TikTok to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to TikTok so you can monitor performance, automate optimization, and manage everything from one dashboard. You connect it with a single OAuth login — no API keys to copy.
## Set up TikTok
You connect it with a single OAuth login — no API keys to copy.
Enable, disable, tag, and configure the TikTok ad accounts you sync.
## Automate & launch
Ready-to-copy automation rules proven on real TikTok campaigns.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Connect Trillion
Source: https://docs.theoptimizer.io/ad-networks/trillion/integration/connect
Connect your Trillion account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
Trillion integration is currently in **Beta**. Access may be limited. Contact Trillion or TheOptimizer support to confirm availability for your account.
Trillion is an emerging advertising network built for performance marketers. It provides access to display and native inventory with a focus on transparent buying and campaign control. As a newer platform, Trillion is gaining traction with media buyers looking to diversify beyond established networks.
Trillion connects via API credentials — you obtain your API credentials directly from Trillion, as the platform does not yet have a self-serve API management interface.
***
## Where to Find Your API Credentials
API credentials for Trillion are provided directly by the Trillion team. Contact **Trillion** to request your API credentials for connecting to TheOptimizer.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **Trillion** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "Trillion – Main Account").
* **API credentials** — paste the credentials provided by Trillion.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/trillion/integration/manage-accounts
Enable, disable, and archive Trillion ad accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your Trillion integration is connected, you can manage the individual ad accounts and API credential profiles associated with it from **Integrations → Trillion**.
***
## Ad Accounts
Click on the Trillion integration to see the full list of ad accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your Trillion ad accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → Trillion → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple Trillion accounts** — if you manage ad accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new ad accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → Trillion → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries Trillion's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your Trillion API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → Trillion → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in Trillion.
# Trillion on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/trillion/overview
Connect Trillion to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to Trillion so you can monitor performance, automate optimization, and manage everything from one dashboard. You connect it using API credentials generated from the network's own settings.
Trillion is currently in **beta**. Core integration and reporting are available; some automation and campaign-creation features may be limited.
## Set up Trillion
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the Trillion ad accounts you sync.
## Automate & launch
Build rules that watch Trillion campaigns and act 24/7.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# Connect Yahoo DSP
Source: https://docs.theoptimizer.io/ad-networks/yahoodsp/integration/connect
Connect your Yahoo DSP account to TheOptimizer using API credentials to sync campaign data and enable automated optimisation.
Yahoo DSP integration is currently in **Beta**. Access may be limited. Contact your Yahoo account manager or TheOptimizer support to confirm availability for your account.
Yahoo DSP (Demand Side Platform) is Yahoo's programmatic advertising platform, offering access to display, native, and video inventory across Yahoo's owned properties and the broader open web. It is used by performance marketers and agencies seeking programmatic reach with first-party Yahoo audience data.
Yahoo DSP connects via API credentials — your Client ID and Client Secret are provided directly by your Yahoo account manager, as they are not self-serve from within the platform UI.
***
## Where to Find Your API Credentials
API credentials for Yahoo DSP are not generated from a self-serve settings panel. Contact your **Yahoo account manager** to request your **Client ID** and **Client Secret** for the Yahoo DSP API.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Find the **Yahoo DSP** card and click **Connect →**.
Enter the credentials requested:
* **Integration name** — a descriptive label for this connection (e.g. "Yahoo DSP – Main Account").
* **Client ID** — paste the Client ID provided by your Yahoo account manager.
* **Client Secret** — paste the Client Secret provided by your Yahoo account manager.
Give the integration a descriptive name so it's easy to identify if you manage multiple accounts.
Once credentials are accepted, TheOptimizer begins syncing your campaign data. Initial sync takes up to 20–30 minutes.
If you have multiple ad accounts under this network, they will all be pulled in and listed under this integration after the initial sync.
***
## Next Steps
* Connect a tracking platform to bring conversion and revenue data into your campaign reports
# Manage Ad Accounts & Profiles
Source: https://docs.theoptimizer.io/ad-networks/yahoodsp/integration/manage-accounts
Enable, disable, and archive Yahoo DSP ad accounts — plus manage credential profiles, add tags, and configure tracker connections per account.
Once your Yahoo DSP integration is connected, you can manage the individual ad accounts and API credential profiles associated with it from **Integrations → Yahoo DSP**.
***
## Ad Accounts
Click on the Yahoo DSP integration to see the full list of ad accounts associated with your connected credentials.
### Enable and Disable Accounts
Each ad account has an **ON/OFF** toggle. Disabling an account stops TheOptimizer from syncing data and running automation rules for that account. All historical data is retained — you can re-enable it at any time and data will resume syncing.
You can also disable multiple accounts at once using the bulk actions menu.
***
### Archive Ad Accounts
Archiving is a stronger form of removal than disabling. When an ad account is archived it is completely hidden from the system — it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing for it: no data sync, no automation rules, no campaign or resource visibility.
Use archiving when you want to permanently retire an ad account from your workflow without losing the ability to restore it later if needed.
**Archive a single account**
Hover over any ad account row in the list. Below the account name, two inline actions appear: **Edit** and **Archive**. Click **Archive** to archive that account immediately.
**Archive multiple accounts at once**
Select the checkboxes next to two or more ad accounts. A bulk action bar appears at the bottom of the screen showing options including **Manage Tags**, **Manage Linked Trackers**, **Change Profile**, and **Archive**. Click **Archive** to archive all selected accounts in one operation.
**View and unarchive archived accounts**
Archived accounts are hidden from the default view. To find them:
1. Click **Filters** at the top of the ad accounts list.
2. Select **Archived** from the filter menu.
3. Choose **Archived** (to see only archived accounts) or **All** (to see both active and archived).
4. Click **Apply Filters**.
Once the archived accounts are visible, select one or more using their checkboxes, then click **Unarchive** in the bottom action bar. The account is immediately restored — it reappears in all selectors and filters, and TheOptimizer resumes data syncing and rule execution for it.
***
### Assign Ad Accounts to a Profile
Each ad account uses one profile — the credentials TheOptimizer uses to access it. Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile.
The dialog shows two sections: accounts that the selected profile has access to but which are currently assigned to a different profile (available to reassign), and accounts already using this profile. Select the accounts you want to add and click **Save**.
You can also reassign a single ad account directly from the ad accounts table — hover the row and click **Edit** to change its assigned profile without opening the profiles panel.
***
### Add Tags
Ad accounts can be tagged with any labels you define — by client, brand, vertical, team, or any other convention. Tags appear as filters throughout TheOptimizer, making it easy to work with specific subsets of accounts.
Some tags (timezone, currency) are applied automatically by TheOptimizer when the account is first synced.
To add a tag: click on the ad account → **Tags** → **Add Tag**.
***
### Customise Tracker Connections Per Account
By default, tracker connections are configured at the integration level and apply to all ad accounts. But you can override this at the individual account level:
* **Link a different tracker** — use a different tracking platform for this specific account.
* **Pause the tracker connection** — stop pulling tracker data for this account without affecting others.
* **Change the tracking template** — use a different template (macro mapping) for this account.
Access these settings from **Linked Trackers** on the individual ad account page.
***
## Profiles
**Profiles** are sets of API credentials (key and secret) that TheOptimizer uses to access your Yahoo DSP ad accounts. Each profile corresponds to one pair of valid API credentials. TheOptimizer uses whichever profile is assigned to each account to authenticate all requests for that account.
### Add New Profiles
Go to **Integrations → Yahoo DSP → Profiles** and click **Add Profile**. Enter the API key and secret for the new credential set and give it a recognisable name.
Reasons to add multiple profiles:
* **Multiple Yahoo DSP accounts** — if you manage ad accounts under different logins or organisations, each login has its own API credentials and needs its own profile.
* **Team management** — different credential sets can be assigned to different account groups managed by different team members.
* **Backup credentials** — if one credential set becomes invalid, accounts can be reassigned to a backup profile immediately without any reconfiguration.
### Sync New Ad Accounts
When new ad accounts become accessible under an existing set of credentials, they won't appear automatically. To pull them in:
1. Go to **Integrations → Yahoo DSP → Profiles**.
2. Find the relevant profile.
3. Click **Sync** (or **Refresh Accounts**).
This re-queries Yahoo DSP's API using the stored credentials and pulls in any newly available accounts without requiring you to re-enter your credentials.
### Update API Credentials
If your Yahoo DSP API credentials are regenerated or expire, the profile using them will stop working. TheOptimizer can no longer sync data or run automation for any accounts assigned to that profile until the credentials are updated.
To update credentials:
1. Go to **Integrations → Yahoo DSP → Profiles**.
2. Find the profile with invalid or outdated credentials (it will typically show an error or warning).
3. Click **Edit** on the profile and enter the new API key and secret.
4. Save the changes.
Data sync and automation resume immediately for all accounts assigned to that profile.
You will receive notifications when a profile's credentials are invalid. If credentials are not updated promptly, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly after regenerating API keys in Yahoo DSP.
# Yahoo DSP on TheOptimizer
Source: https://docs.theoptimizer.io/ad-networks/yahoodsp/overview
Connect Yahoo DSP to TheOptimizer to monitor performance, automate optimization, and manage campaigns from one dashboard.
TheOptimizer connects to Yahoo DSP so you can monitor performance, automate optimization, and manage everything from one dashboard. You connect it using API credentials generated from the network's own settings.
Yahoo DSP is currently in **beta**. Core integration and reporting are available; some automation and campaign-creation features may be limited.
## Set up Yahoo DSP
You connect it using API credentials generated from the network's own settings.
Enable, disable, tag, and configure the Yahoo DSP ad accounts you sync.
## Automate & launch
Build rules that watch Yahoo DSP campaigns and act 24/7.
## Shared tools you'll use
Once your data is flowing, everything below works the same across every network:
Monitor and act on all your campaigns, ad sets, and ads from one table.
Learn how the rules engine, rule chains, and templates work.
Track creative performance and reuse winning assets.
See every automated action and change TheOptimizer makes.
# API Overview
Source: https://docs.theoptimizer.io/api/overview
TheOptimizer exposes a public API for programmatic access to your campaign data. Explore the available endpoints in the Postman collection below.
TheOptimizer provides a public API that lets you retrieve and manage campaign data programmatically. We currently expose a focused set of endpoints — you can browse them all in the Postman collection, which includes request examples and response schemas for each method.
View all available endpoints, parameters, and example responses.
## Authentication
Please refer to the Postman collection
## Rate limits
Please refer to the Postman collection for any rate limit notes on individual endpoints.
The API is currently in limited availability. Additional endpoints will be added over time. If you need access to specific data or actions not yet available, reach out to our support team.
# Rule Chains: Build Multi-Step Automation Strategies
Source: https://docs.theoptimizer.io/automation/rule-chains
Use tags to chain automation rules into multi-step sequences — so each rule picks up where the previous one left off. Includes three complete chain examples.
Automation rules are powerful on their own, but individually they only react to a single moment in time. **Rule chains** let you build sequences of rules that execute in a deliberate order — each rule picking up exactly where the previous one left off. The mechanism that makes this possible is **tags**: structured labels you attach to campaigns, ad sets, ads, or sites that carry history forward from one rule to the next.
***
## How rule chains work
Every rule in TheOptimizer can be configured to **add** or **remove** tags from the items it acts on. Those tags then become available as conditions in other rules, so you can create logic like: "Only run this rule on campaigns that have already been processed by that other rule."
This creates a pipeline: Rule A fires and tags the item, and Rule B is waiting for exactly that tag before it acts.
**Example**: Rule checks for tags using the "Tags" condition.
**Example**: Rule Adds and/or Removes Tags once it finishes the execution. It prepares the campaign, ad set or ad for the next stage.
**The key principle:** a tag is a signal that something has already happened. It carries history forward.
***
## Setting up tags on a rule
When editing any rule, navigate to the **Auto Tags** section.
* **Tags to Add** — one or more tags applied to every item the rule acts on when it fires.
* **Tags to Remove** — tags stripped from items when the rule fires (useful for clearing a stage so an item can move to the next one).
Tags are applied immediately after the rule's main action executes. If a rule pauses a campaign, the tags are added or removed from that campaign at the same time.
To use a tag as a **condition** in another rule, add a condition in Step 2 (Conditions) using the **Tags** field:
| Field | Condition | Value |
| ----- | --------- | --------------- |
| Tags | Contains | `your-tag-name` |
This ensures the downstream rule only applies to items that carry that tag.
Use descriptive, stage-based tag names rather than rule-based ones. `passed-learning` or `budget-scaled-once` are far more readable at a glance than `rule3-fired`. Name the stage, not the rule.
***
## Example chains
### 1. The Probation Chain — pause, wait, re-test
**Goal:** Pause campaigns that lose money, hold them for a cooling-off period, then automatically reactivate them for a second chance before deciding whether to kill them permanently.
**Why chain this?** A direct pause-and-forget rule loses campaigns that may have had a bad day. This chain distinguishes between temporary underperformers and genuine losers.
Fires when a campaign has spent enough to judge performance and is not profitable.
| Metric | Condition | Value |
| ------ | ------------ | ----- |
| Spend | Greater than | \$50 |
| CPA | Greater than | \$40 |
**Action:** Pause Campaign
**Tags to Add:** `on-probation`
**Schedule:** Every 4 hours
Fires on campaigns tagged `on-probation` that have been paused for at least 3 days.
| Metric | Condition | Value |
| ---------------------- | ------------ | -------------- |
| Tags | Contains | `on-probation` |
| Days Since Last Action | Greater than | 3 |
**Action:** Enable Campaign
**Tags to Add:** `retest-round-2` | **Tags to Remove:** `on-probation`
**Schedule:** Once daily
Fires on campaigns tagged `retest-round-2` that are still unprofitable after their second chance.
| Metric | Condition | Value |
| ------ | ------------ | ---------------- |
| Tags | Contains | `retest-round-2` |
| Spend | Greater than | \$30 |
| CPA | Greater than | \$40 |
**Action:** Pause Campaign
**Tags to Add:** `permanent-pause` | **Tags to Remove:** `retest-round-2`
**Schedule:** Every 4 hours
Items tagged `permanent-pause` are excluded from all other rules — preventing them from being re-enabled by broader reactivation rules. Add a condition `Tags does not contain permanent-pause` to any reactivation rule you run.
***
### 2. The Winner Escalation Chain — validate, scale, clone
**Goal:** Automatically move profitable campaigns through a structured scaling process — only unlocking larger budget increases and cloning after sustained performance, not just one good day.
**Why chain this?** Scaling too fast on early signals wastes budget on campaigns that regress. This chain requires proof at each stage before moving to the next.
Fires when a campaign shows early profitability signals.
| Metric | Condition | Value |
| ------ | ------------ | ----- |
| ROAS | Greater than | 200% |
| Spend | Greater than | \$100 |
**Action:** No action (or Send Notification)
**Tags to Add:** `potential-winner`
**Schedule:** Every 6 hours
Fires on campaigns tagged `potential-winner` that maintain profitability over 3 days.
| Metric | Condition | Value |
| ------------------- | ------------ | ------------------ |
| Tags | Contains | `potential-winner` |
| ROAS (last 3 days) | Greater than | 200% |
| Spend (last 3 days) | Greater than | \$200 |
**Action:** Increase Budget by 30%
**Tags to Add:** `scale-stage-1` | **Tags to Remove:** `potential-winner`
**Schedule:** Once daily
Fires on campaigns tagged `scale-stage-1` that are still performing after further spend.
| Metric | Condition | Value |
| ------------------- | ------------ | --------------- |
| Tags | Contains | `scale-stage-1` |
| ROAS (last 7 days) | Greater than | 180% |
| Spend (last 7 days) | Greater than | \$500 |
**Action:** Increase Budget by 50%
**Tags to Add:** `scale-stage-2` | **Tags to Remove:** `scale-stage-1`
**Schedule:** Once daily
Fires on campaigns tagged `scale-stage-2` with sustained, strong ROAS — duplicating the campaign to expand reach.
| Metric | Condition | Value |
| ------------------- | ------------ | --------------- |
| Tags | Contains | `scale-stage-2` |
| ROAS (last 14 days) | Greater than | 180% |
**Action:** Clone Campaign
**Tags to Add:** `cloned` | **Tags to Remove:** `scale-stage-2`
**Schedule:** Once daily
***
### 3. The Creative Fatigue Chain — detect, rotate, retire
**Goal:** Automatically detect when an ad's performance is fading, pause it for a rest period, then reactivate it. If performance doesn't recover, retire it permanently.
**Why chain this?** Creative fatigue is gradual. A single threshold rule either acts too early or too late. This chain catches the decline in stages.
Fires on ads that have been running long enough to have a performance baseline but are showing CTR decline.
| Metric | Condition | Value |
| ----------- | ------------ | ------ |
| Impressions | Greater than | 50,000 |
| CTR | Less than | 0.10% |
| Conversions | Less than | 3 |
**Action:** No action (or Send Notification)
**Tags to Add:** `creative-fatigue`
**Schedule:** Every 6 hours
Fires on ads tagged `creative-fatigue` if CTR has not recovered after 48 hours.
| Metric | Condition | Value |
| ----------------- | --------- | ------------------ |
| Tags | Contains | `creative-fatigue` |
| CTR (last 2 days) | Less than | 0.10% |
**Action:** Pause Ad
**Tags to Add:** `creative-resting` | **Tags to Remove:** `creative-fatigue`
**Schedule:** Every 6 hours
Fires on paused ads tagged `creative-resting` after 7 days, giving them a fresh start.
| Metric | Condition | Value |
| ---------------------- | ------------ | ------------------ |
| Tags | Contains | `creative-resting` |
| Days Since Last Action | Greater than | 7 |
**Action:** Enable Ad
**Tags to Add:** `creative-retest` | **Tags to Remove:** `creative-resting`
**Schedule:** Once daily
Fires on ads tagged `creative-retest` that still aren't converting after their second chance.
| Metric | Condition | Value |
| ------------------------- | ------------ | ----------------- |
| Tags | Contains | `creative-retest` |
| Impressions (last 3 days) | Greater than | 10,000 |
| CTR (last 3 days) | Less than | 0.10% |
**Action:** Pause Ad
**Tags to Add:** `creative-retired` | **Tags to Remove:** `creative-retest`
**Schedule:** Every 6 hours
***
## Tips for building reliable chains
**Keep each rule's job narrow.** A rule in a chain should do one thing — flag, scale, pause, or reactivate. Rules that try to handle multiple stages get hard to debug and maintain.
**Use Tags to Remove to prevent re-entry.** If Rule 2 fires on a tag left in place, it may fire again on the same item on the next run. Always remove the inbound tag once the rule has acted.
**Add a notification at key transitions.** For high-stakes stages — especially scaling or cloning — enable notifications alongside the tag action so you stay informed while the chain runs autonomously.
**Test with small scope first.** Before applying a chain globally, add it to a small group of campaigns using the standard (non-global) rule type. Review the tag history on those campaigns after the first few runs to confirm the flow is working as intended.
Use `permanent-pause` or `retired` tags as circuit breakers. Add a condition `Tags does not contain permanent-pause` to any reactivation rule to ensure items that have been deliberately stopped never get re-enabled by a separate rule.
# Automation Rule Templates and Examples
Source: https://docs.theoptimizer.io/automation/rule-templates
Ready-to-use rule patterns for pausing losers, reactivating winners, scaling budgets, managing bids, cloning campaigns, and detecting creative fatigue.
Rather than logging in every few hours to pause losers, top up budgets, or scale winners, you define conditions once and let TheOptimizer act automatically. This page collects the most useful rule patterns — grouped by what they do — so you can get started quickly or find inspiration for your own setup. Each example includes a plain-English summary, the exact conditions and action to configure, and the recommended data interval and schedule.
All examples are available as built-in templates inside the platform. Go to **Automation → Rules → New Rule** and look for the **Templates** tab to find them pre-configured and ready to customise.
***
## 1. Protecting Your Budget — Pause Underperformers
These rules stop spend on campaigns, ad sets, ad groups, or ads that have had enough data to prove they are not profitable. The key principle in all of them is to only act after a meaningful spend threshold has been reached — this prevents the rule from pausing campaigns that simply haven't had enough impressions yet.
***
### Pause Campaigns with Poor ROAS
**Platforms:** Facebook · TikTok (use Conversions instead of ROAS for the TikTok variant)
After a campaign has spent enough to be statistically meaningful, if it still isn't returning at least $1 for every $1 spent, it's better to stop it than to keep burning budget. This rule is typically scoped to specific geos using a name filter.
**Data Interval:** Last 7 Days (Today Included)
| # | Metric | Operator | Value |
| --- | ------------- | ------------------- | ----- |
| If | Amount Spent | is Greater than | \$100 |
| And | ROAS | is Less or Equal to | 1 USD |
| And | Campaign Name | Contains | `usa` |
**Action:** Pause Campaign
**Scheduling:** Run every hour, or at a fixed time once per day — depending on how tightly you want to control spend.
Remove the name filter if you want the rule to apply to all your campaigns regardless of geo. Add multiple name values (e.g., `usa`, `us`) to catch different naming conventions.
***
### Pause Ad Sets / Ad Groups with Poor ROAS
**Platforms:** Facebook (Ad Sets) · TikTok (Ad Groups — use Conversions instead of ROAS)
The same logic as the campaign-level rule, but applied one level down. Useful when you want to keep a campaign alive and only cut the specific ad sets or ad groups that are losing money, rather than pausing the whole campaign.
**Data Interval:** Last 7 Days (Today Included)
**Conditions (Facebook — Ad Set):**
| # | Metric | Operator | Value |
| --- | ------------ | ---------------------- | ----- |
| If | Amount Spent | is Greater or Equal to | \$100 |
| And | ROAS | is Less or Equal to | 1 USD |
| And | Name | Contains | `usa` |
**Conditions (TikTok — Ad Group):**
| # | Metric | Operator | Value |
| --- | ------------ | --------------- | ----- |
| If | Amount Spent | is Greater than | \$100 |
| And | Conversions | are Less than | 1 |
| And | Name | Contains | `usa` |
**Action:** Pause Ad Set / Pause Ad Group
**Scheduling:** Run every hour, or daily.
***
### Pause Low CTR & Low Engagement Ads
**Platforms:** Facebook · TikTok
Ad-level rules let you cut creatives that are dragging down the overall ad set. If an ad has received enough spend but is delivering poor click-through rates — and on Facebook, low social engagement signals — it's not resonating with the audience and should be replaced.
**Data Interval:** Last 3–7 Days (Today Included)
**Conditions (Facebook):**
| # | Metric | Operator | Value |
| --- | ------------ | --------------- | ----- |
| If | Amount Spent | is Greater than | \$50 |
| And | CTR | is Less than | 1% |
| And | Likes | are Less than | 100 |
**Conditions (TikTok):**
| # | Metric | Operator | Value |
| --- | ------------ | ------------------- | ----- |
| If | Amount Spent | is Greater than | \$50 |
| And | CTR | is Less or Equal to | 1% |
**Action:** Pause Ad
**Scheduling:** Once per day, typically in the morning before reviewing your account.
***
### Pause Campaign When 90% of Daily Budget is Spent
**Platforms:** Facebook
A safety rule that stops a campaign once it has consumed 90% of its daily budget. Useful when you want tight control over daily spend and to trigger a notification so you can decide whether to increase the budget manually.
**Data Interval:** Today
| # | Metric | Operator | Value |
| -- | ------------ | --------------- | ------------------- |
| If | Amount Spent | is Greater than | 90% of Daily Budget |
**Action:** Pause Campaign
**Scheduling:** Run every 30 minutes throughout the day to catch the threshold promptly.
***
### Stop-Loss: Pause Campaign After 3 Days Below Break-Even
**Platforms:** Facebook · TikTok
New campaigns don't usually hit their CPA target on day one. Meta and TikTok need a few days to exit the learning phase — and it's normal for day-one CPA to be above target. What this rule checks is whether the campaign is *still* above your CPA threshold on day three. If it hasn't improved after three full days of real spend, it's unlikely to self-correct.
The power of this rule comes from evaluating each day in isolation using **per-condition custom intervals**. Rather than comparing against a rolling 3-day average (which would hide a bad day between two good ones), it checks CPA Day 1, CPA Day 2, and CPA Day 3 individually — and only pauses when all three days have been above the threshold.
**Global Data Interval:** Last 3 Days
| # | Metric | Interval | Operator | Value |
| --- | ------------ | ----------- | --------------- | -------------------------------------------------- |
| If | Amount Spent | Last 3 Days | is Greater than | $90 _(~$30/day, confirms 3 days of active spend)\_ |
| And | CPA | Day 1 | is Greater than | \$15 *(your CPA target)* |
| And | CPA | Day 2 | is Greater than | \$15 |
| And | CPA | Day 3 | is Greater than | \$15 |
| And | Hour of Day | — | is in | 00:00 every day |
**Action:** Pause Campaign
**Scheduling:** Run every hour. The Hour of Day condition ensures the pause fires once at midnight — at the exact moment when Day 3 rolls over to Day 4 — so you don't accidentally pause a campaign mid-day based on incomplete data.
Set the CPA threshold to your break-even CPA, not your target CPA. The goal of a stop-loss rule is to cut campaigns that have no path to profitability — not to enforce strict targets during the learning phase. Replace CPA with ROI if you use a tracker to measure blended performance.
***
## 2. Reactivating Winners
These rules bring paused campaigns, ad sets, ad groups, or ads back to life automatically when performance data shows they are worth running again. Together with pause rules, they form a continuous loop that keeps only profitable activity running.
***
### Activate Campaigns with Positive ROAS
**Platforms:** Facebook
Re-enables any paused campaign that has delivered at least $1 in return for every $1 spent over the last 7 days, provided it has had some spend. Particularly useful after manual pauses or after a budget-exhaustion pause rule has fired.
**Data Interval:** Last 7 Days (Today Included)
| # | Metric | Operator | Value |
| --- | ------------ | ---------------------- | ----- |
| If | ROAS | is Greater or Equal to | 1 USD |
| And | Amount Spent | is Greater than | \$0 |
**Action:** Activate Campaign
**Scheduling:** Once per day, ideally in the morning.
***
### Activate Campaigns with Good CPA
**Platforms:** TikTok
The TikTok equivalent of the ROAS activation rule, using Cost Per Action as the primary metric. Campaigns that have generated conversions at or below your target CPA and have enough spend data are re-enabled automatically.
**Data Interval:** Last 7 Days (Today Included)
| # | Metric | Operator | Value |
| --- | ------------ | --------------- | ----- |
| If | CPA | is Less than | \$2 |
| And | Amount Spent | is Greater than | \$50 |
**Action:** Activate Campaign
**Scheduling:** Once per day in the morning.
Adjust the CPA threshold to match your own target. If your offer pays $5 per conversion, a $2 CPA target gives you a 2.5× return.
***
### Re-Activate Ad Sets with Positive ROAS
**Platforms:** Facebook
The same positive-ROAS logic applied at the ad set level. Brings back individual ad sets that were paused but have recovered to profitability over the last week.
**Data Interval:** Last 7 Days (Today Included)
| # | Metric | Operator | Value |
| --- | ------------ | ---------------------- | ----- |
| If | ROAS | is Greater or Equal to | 1 USD |
| And | Amount Spent | is Greater than | \$0 |
**Action:** Activate Ad Set
**Scheduling:** Once per day.
***
### Re-Activate Ad Groups with Good CPA
**Platforms:** TikTok
Restores paused ad groups that have delivered conversions below your CPA target, provided they've had enough spend to be a meaningful signal.
**Data Interval:** Last 7 Days (Today Included)
| # | Metric | Operator | Value |
| --- | ------------ | --------------- | ----- |
| If | Amount Spent | is Greater than | \$50 |
| And | CPA | is Less than | \$5 |
**Action:** Activate Ad Group
**Scheduling:** Once per day.
***
### Re-Activate Ads with Positive ROI
**Platforms:** TikTok
Brings back paused ads that have delivered a positive return on investment. Useful when you have a large creative library and want to cycle previously paused ads back in when conditions improve.
**Data Interval:** Last 7 Days (Today Included)
| # | Metric | Operator | Value |
| --- | ------------ | --------------- | ----- |
| If | Amount Spent | is Greater than | \$50 |
| And | ROI | is Greater than | 0% |
**Action:** Activate Ad
**Scheduling:** Once per day.
***
## 3. Scaling Budgets Automatically
These rules increase budgets on campaigns or ad sets/groups that are performing well and are about to run out of money for the day. Rather than manually topping up budgets each afternoon, the rule detects that a campaign is on track and increases its budget while there are still hours left to spend.
***
### Increase Budget When Nearly Spent — Ad Set / Ad Group Level
**Platforms:** Facebook (Ad Sets) · TikTok (Ad Groups)
When an ad set or ad group has already consumed 90% of its daily budget, it means the campaign is finding good inventory. Increasing the budget at this point allows it to keep spending for the rest of the day rather than going dark.
**Data Interval:** Today
| # | Metric | Operator | Value |
| -- | ------------ | --------------- | ------------------- |
| If | Amount Spent | is Greater than | 90% of Daily Budget |
**Action:** Increase Budget By **20%** of Current Budget
* Do not allow the budget to go lower than **\$50**
* Do not allow the budget to go higher than **\$200**
**Scheduling:** Run every 30–60 minutes during peak spend hours.
The min/max budget guards prevent the rule from scaling a budget too low (which would be meaningless) or too high (which would risk overspend). Set these limits based on your own risk tolerance and campaign size.
***
### Increase Budget When Nearly Spent + Positive ROAS — Campaign Level
**Platforms:** Facebook · TikTok
A more conservative version that adds a profitability condition before increasing the budget. The campaign must both be on pace (90%+ of daily budget spent) *and* be profitable before a budget increase is applied.
**Data Interval:** Today
**Conditions (Facebook):**
| # | Metric | Operator | Value |
| --- | ------------ | ---------------------- | ------------------- |
| If | ROAS | is Greater or Equal to | 1 USD |
| And | Amount Spent | is Greater or Equal to | 90% of Daily Budget |
**Conditions (TikTok):**
| # | Metric | Operator | Value |
| --- | ------------ | ---------------------- | ------------------- |
| If | CPA | is Less or Equal to | \$2 |
| And | Amount Spent | is Greater or Equal to | 90% of Daily Budget |
**Action:** Increase Budget By **20%** of Current Budget
* Do not allow the budget to go lower than **\$100**
* Do not allow the budget to go higher than **\$1,000**
**Scheduling:** Every 30–60 minutes throughout the day.
***
### Scale Budget 2× a Week When CPA is Stable for 3 Consecutive Days
**Platforms:** Facebook · TikTok
Intraday budget scaling reacts to what is happening today. This rule takes a longer view: it confirms that a campaign has been consistently profitable over three individual days before increasing its budget, and it runs on a fixed schedule to prevent overly aggressive compounding.
The three per-day CPA conditions are what set this rule apart from a simple "Last 7 Days" check. If a campaign had two great days followed by one bad day, a 7-day average might still look fine — but the per-day check would correctly hold back the budget increase until stability is restored.
**Global Data Interval:** Last 7 Days
| # | Metric | Interval | Operator | Value |
| --- | ------------ | ----------- | ---------------- | ------------------------ |
| If | Amount Spent | Last 7 Days | is Greater than | \$150 |
| And | Results | Last 7 Days | are Greater than | 50 |
| And | CPA | Day 1 | is Less than | \$15 *(your CPA target)* |
| And | CPA | Day 2 | is Less than | \$15 |
| And | CPA | Day 3 | is Less than | \$15 |
| And | Hour of Day | — | is in | 00:00 — Tue, Thu |
**Action:** Increase Budget By **20%** of Current Budget
* Do not allow the budget to go lower than **\$50**
* Do not allow the budget to go higher than **\$1,000**
**Scheduling:** Run every hour. The Hour of Day condition on Tuesday and Thursday means the budget change happens at the start of the day so Meta/TikTok can pace spend smoothly.
Scaling twice a week (Tuesday and Thursday) gives the algorithm time to adjust to each budget increase before the next one fires. If CPA is running well below target and you have higher risk tolerance, you can add Wednesday and Friday. Use the min/max budget caps as a safety net.
***
## 4. Daily Budget Reset
Budget reset rules fire once per day at a specific time to set every campaign's or ad set's budget back to a fixed amount. This is useful when Facebook or TikTok has carried over unspent budget from the previous day, inflating today's available amount.
***
### Reset Ad Set / Ad Group Budget Every Day at 9 AM
**Platforms:** Facebook (Ad Sets) · TikTok (Ad Groups)
Fires once per day at 9 AM and sets the budget back to your defined amount. The time condition is set using the **Hour of Day** metric in the rule conditions, so the rule runs on its normal schedule but only takes action when the hour matches.
**Data Interval:** Today
| # | Metric | Operator | Value |
| -- | ----------- | -------- | ---------------------------------------------- |
| If | Hour of Day | is in | 09:00 — every day |
| | Timezone | | America/New\_York (or your preferred timezone) |
**Action:** Set Budget to your target daily budget amount (e.g., \$100)
**Scheduling:** Run every hour so the rule checks reliably at the 9 AM window.
***
### Reset Campaign Budget Every Day at 9 AM (Pacific Time)
**Platforms:** Facebook · TikTok
Same as above but at the campaign level and in Pacific Time. On TikTok, you can also add a name filter to target only specific campaign groups — for example, campaigns whose names end with `eCom`.
**Data Interval:** Today
| # | Metric | Operator | Value |
| --- | ------------- | --------- | ------------------------------------------------------ |
| If | Campaign Name | Ends with | `eCom` *(optional — remove to apply to all campaigns)* |
| And | Hour of Day | is in | 09:00 — every day |
| | Timezone | | PST8PDT (Pacific Time) |
**Action:** Set Budget to your target daily budget amount
**Scheduling:** Run every hour.
***
## 5. Bid Optimisation
Bid rules adjust what you pay per click or per impression based on actual performance data. Instead of setting a static bid and leaving it, these rules keep your bids aligned with what the traffic is actually worth.
***
### Set Bid to 80% of EPC
**Platforms:** Facebook
EPC (Earnings Per Click) is the average revenue generated per click. Setting your bid to 80% of EPC means you are paying no more than 80 cents for every dollar of revenue earned — a built-in profit margin baked into every bid.
**Data Interval:** Last 3 Days (Today Included)
| # | Metric | Operator | Value |
| --- | ------------ | --------------- | ----- |
| If | Amount Spent | is Greater than | \$50 |
| And | Revenue | is Greater than | \$0 |
**Action:** Set Bid to **80% of EPC**
* Do not allow the bid to go lower than **\$0.20**
* Do not allow the bid to go higher than **\$0.65**
**Scheduling:** Once per day, or every few hours if your EPC fluctuates significantly intraday.
The 80% multiplier is a starting point. If your campaigns are consistently spending out, you may be bidding too high — try 70%. If they're struggling to win impressions, try 85–90%.
***
### Increase Bid When Underspending
**Platforms:** Facebook
If a campaign has spent less than 50% of its daily budget by midday, it is likely losing auctions — either because the bid is too low or the targeting is too narrow. This rule increases the bid by 10% to improve competitiveness.
**Data Interval:** Today
| # | Metric | Operator | Value |
| --- | ------------ | ------------------- | ------------------- |
| If | Amount Spent | is Less or Equal to | 50% of Daily Budget |
| And | Hour of Day | is in | Mon–Sun 12:00–23:00 |
| | Timezone | | America/New\_York |
**Action:** Increase Bid By **10%**
**Scheduling:** Run every 1–2 hours between noon and midnight.
***
## 6. Cloning for Scale
Clone rules create duplicate copies of campaigns, ad sets, or ad groups. This is a scaling technique: instead of increasing a single campaign's budget indefinitely (which can cause Facebook or TikTok to exit the learning phase), you duplicate winning campaigns so multiple versions compete simultaneously, each with its own budget and audience delivery.
***
### Clone Campaigns 3 Times
**Platforms:** Facebook · TikTok
The simplest clone rule. Any campaign that has had any spend is duplicated three times. Best used as a one-off scaling action rather than a recurring rule, and typically run manually after identifying a winner.
**Data Interval:** Today
| # | Metric | Operator | Value |
| -- | ------------ | ---------------------- | ----- |
| If | Amount Spent | is Greater or Equal to | \$0 |
**Action:** Clone Campaign — **3 copies**
**Scheduling:** Run once manually. Disable the rule after it fires to avoid repeated cloning.
***
### Clone Campaigns That Spent Less Than 50% of Their Budget
**Platforms:** Facebook · TikTok
Targets campaigns that had available budget yesterday but didn't spend it all. Cloning them creates fresh duplicates — sometimes a new copy will find better delivery and spend through more efficiently, especially when the original has accumulated poor historical signals with the ad network.
**Data Interval:** Yesterday
| # | Metric | Operator | Value |
| -- | ------------ | ------------ | ------------------- |
| If | Amount Spent | is Less than | 50% of Daily Budget |
**Action:** Clone Campaign
**Scheduling:** Run once per day, typically in the morning.
***
### Clone Winning Campaigns by ROAS
**Platforms:** Facebook
Creates copies of campaigns that have proven to be profitable over a longer window and have had significant spend. This is a strategic scaling move: once you know a campaign converts well, you duplicate it to multiply its budget capacity without touching the original.
**Data Interval:** Last 7 Days (Today Included)
| # | Metric | Operator | Value |
| --- | ------------ | ---------------------- | ----- |
| If | ROAS | is Greater than | 1 USD |
| And | Amount Spent | is Greater or Equal to | \$200 |
**Action:** Clone Campaign
**Scheduling:** Run once per day, or on demand.
***
### Clone Ad Groups with Good EPC
**Platforms:** TikTok
Identifies ad groups that are generating strong earnings per click and have enough spend to be statistically reliable, then duplicates them. Works well for traffic arbitrage setups where EPC is the primary profitability signal.
**Data Interval:** Last 3 Days (Today Included)
| # | Metric | Operator | Value |
| --- | -------------------- | --------------- | ------ |
| If | Amount Spent | is Greater than | \$50 |
| And | EPC (traffic source) | is Greater than | \$0.55 |
**Action:** Clone Ad Group
**Scheduling:** Once per day.
***
### Clone Ad Groups That Are Underspending
**Platforms:** TikTok
When an ad group hasn't spent much in the last 3 days, creating a fresh copy can help it find better delivery. This is especially effective on TikTok where the algorithm's learning phase can stall on older ad groups.
**Data Interval:** Last 3 Days (Today Included)
| # | Metric | Operator | Value |
| -- | ------------ | ------------ | ----- |
| If | Amount Spent | is Less than | \$50 |
**Action:** Clone Ad Group — **3 copies**
**Scheduling:** Once per day, in the morning.
***
## 7. Day Parting
Day parting rules control when your campaigns run. They activate campaigns at the start of a window and pause them at the end, completely hands-free. Useful for advertisers who only want to pay for traffic during hours when their offer converts well, or when their support team is available to handle leads.
***
### Run Campaigns Only During Working Hours
**Platforms:** Facebook · TikTok
Starts all selected campaigns at 9 AM Monday–Friday and pauses them at 5 PM. Campaigns are off over weekends and outside business hours. The "Otherwise" clause in the action means you only need one rule — not separate start and stop rules.
**Data Interval:** N/A — this rule is time-based, not performance-based
| # | Metric | Operator | Value |
| -- | ----------- | -------- | ---------------------------------------------- |
| If | Hour of Day | is in | Mon–Fri 09:00–17:00 |
| | Timezone | | America/New\_York (or your preferred timezone) |
**Action:** Start Campaign — **Otherwise:** Pause Campaign
**Scheduling:** Run every hour, every day.
To customise the hours, adjust the checked boxes in the Hour of Day grid. You can select any combination of days and hours — for example, Mon–Fri 08:00–22:00 for a longer active window.
***
## 8. Creative Fatigue Detection
Creative fatigue happens when the same people have seen your ad too many times. The creative stops feeling fresh, CTR drops, and your cost-per-result climbs. What makes fatigue detection powerful in TheOptimizer is the ability to assign a **different data interval to each individual condition**. Rather than averaging performance over a week, you can check each day in isolation — and only fire the rule when the same KPI has been moving in the wrong direction for two or three consecutive days.
**How per-condition intervals work:** When a conditions table below shows an "Interval" column, each row is evaluated against that specific window of data. "Day 1" = yesterday, "Day 2" = two days ago, "Day 3" = three days ago, and so on.
***
### Detect Fatigued Ads: 3-Day CTR Decline and CPA Rise
**Platforms:** Facebook
Rather than checking a single rolled-up average, this rule compares each day individually — confirming that CTR has been falling and CPA has been rising for three consecutive days. All three must be true before the rule fires, which dramatically reduces false positives.
**Global Data Interval:** Last 3 Days
| # | Metric | Interval | Operator | Value |
| --- | ----------- | ----------- | --------------- | ------------------- |
| If | Impressions | Last 3 Days | is Greater than | 2,000 |
| And | Clicks | Last 3 Days | is Greater than | 50 |
| And | Frequency | Last 3 Days | is Greater than | 2 |
| And | CTR | Day 3 | is Less than | 100% of CTR (Day 4) |
| And | CTR | Day 2 | is Less than | 100% of CTR (Day 3) |
| And | CTR | Day 1 | is Less than | 100% of CTR (Day 2) |
| And | CPA | Day 3 | is Greater than | 100% of CPA (Day 4) |
| And | CPA | Day 2 | is Greater than | 100% of CPA (Day 3) |
| And | CPA | Day 1 | is Greater than | 100% of CPA (Day 2) |
**Action:** Send Alert (Slack / Telegram / Email) — or Pause Ad if you prefer automatic action
**Scheduling:** Every 3 hours.
The CTR conditions say "CTR Day 3 is less than 100% of CTR Day 4" — meaning CTR three days ago was lower than CTR four days ago, confirming the start of the decline. Repeating this for Day 2 vs Day 3 and Day 1 vs Day 2 confirms the downward trend held across all three days. If you don't track conversions, you can remove the CPA conditions and use the CTR trend alone, though pairing both metrics produces far fewer false positives.
***
### Alert: Ad Still Performing Well but Frequency Is Rising
**Platforms:** Facebook
The best time to replace a fatigued creative is *before* the CPA deteriorates — while the ad is still performing. This rule detects that early-warning window: CPA is still within your target for the last 3 days, but frequency has already climbed to 3 or above. Rather than pausing, it sends a notification so you can queue a replacement creative in advance.
**Global Data Interval:** Last 6 Days
| # | Metric | Interval | Operator | Value |
| --- | ------------ | ----------- | ---------------------- | ------------------------ |
| If | Amount Spent | Last 6 Days | is Greater than | \$5 |
| And | CPA | Day 1 | is Less than | \$15 *(your CPA target)* |
| And | CPA | Day 2 | is Less than | \$15 |
| And | CPA | Day 3 | is Less than | \$15 |
| And | Frequency | Days 3–1 | is Greater or Equal to | 3 |
**Action:** Send Alert (Slack / Telegram / Email)
**Scheduling:** Once per day.
This rule is designed to be paired with the pause rule below. Think of it as a two-stage system: this alert fires first ("your ad is about to saturate — prepare a replacement"), and then the pause rule fires if performance actually degrades.
***
### Pause: Saturated Ad with Degraded CPA
**Platforms:** Facebook
When a fatigued ad has already pushed CPA above your target for three consecutive days and frequency has climbed above 3, this rule pauses the ad automatically. Because it checks each of the last 3 days individually (not just an average), it avoids pausing ads that had one bad day surrounded by good ones.
**Global Data Interval:** Last 7 Days
| # | Metric | Interval | Operator | Value |
| --- | ------------ | ----------- | --------------- | ------------------------ |
| If | Amount Spent | Last 7 Days | is Greater than | \$5 |
| And | CPA | Day 1 | is Greater than | \$15 *(your CPA target)* |
| And | CPA | Day 2 | is Greater than | \$15 |
| And | CPA | Day 3 | is Greater than | \$15 |
| And | Frequency | Days 3–1 | is Greater than | 3 |
**Action:** Pause Ad
**Scheduling:** Once per day, typically in the morning.
This is the companion rule to the alert above. Together they give you a proactive workflow: alert when saturation is approaching → launch replacement creative → pause when the old ad has fully degraded.
***
### Pause TikTok Ads with Low Hook Rate and Low CTR
**Platforms:** TikTok
On TikTok, creative fatigue manifests differently. Because the algorithm continuously serves content to fresh audiences, frequency rarely spikes the way it does on Facebook. Instead, the signal is a creative that has simply stopped stopping the scroll. The **Hook Rate** — the percentage of viewers who watched at least the first 3 seconds — is the leading indicator. Combined with a low CTR, this confirms the creative is no longer resonating.
**Global Data Interval:** Last 3 Days
| # | Metric | Operator | Value |
| --- | ------------ | --------------- | ----- |
| If | Amount Spent | is Greater than | \$30 |
| And | Hook Rate | is Less than | 20% |
| And | CTR | is Less than | 1% |
**Action:** Pause Ad
**Scheduling:** Once per day.
A healthy Hook Rate for most direct-response TikTok ads sits around 25–30%. If your best performers are at 35–40%, set your fatigue threshold at 20% to catch creatives that are materially underperforming your own baseline.
***
## 9. Native Ads — Site & Ad Rules
Native ad platforms like Taboola, Outbrain, MGID, and RevContent have a different structure from Facebook and TikTok. Instead of Ad Sets and Ads, you work with three levels:
* **Campaign** — the top-level budget container, same as other platforms.
* **Site** — the individual placements (a specific website or page where your ad appears). Called *Sites* on Taboola, *Sections* or *Publishers* on Outbrain, *Widgets* on MGID, AdsKeeper, and RevContent.
* **Ad** — the actual ad creative (headline + image combination).
Rules at the site and ad level are the most valuable part of native automation. Blocking a low-performing site is equivalent to negative placement targeting — once blocked, it no longer receives your budget.
**Site bid limits:** Taboola allows a maximum of 200 sites with custom bids per campaign. Outbrain allows approximately 500 bid changes per campaign. If you are running high-volume campaigns and hitting these limits, ask your account manager to increase them.
***
### Block Low CTR Sites
**Platforms:** Taboola · Outbrain · MGID · RevContent
Sites with very low CTR drag down your overall campaign CTR — and on most native networks, a lower CTR reduces your traffic priority regardless of your bid. This rule blocks any site that has received enough impressions to generate reliable data but is still clicking at under 0.05%, with no revenue to justify the poor click rate.
**Data Interval:** Last 7 or Last 14 Days
| # | Metric | Operator | Value |
| --- | --------------- | --------------- | ------ |
| If | Impressions | is Greater than | 20,000 |
| And | CTR | is Less than | 0.05% |
| And | Tracker Revenue | is Equal to | \$0 |
**Action:** Block Site
**Scheduling:** Run every 10–15 minutes. Sites accumulate impressions quickly, so checking frequently helps you cut bad placements before they consume significant budget.
***
### Block Sites with Suspiciously High LP CTR (Bot Traffic)
**Platforms:** Taboola · Outbrain · MGID · RevContent
A landing page CTR above 75% is a strong signal of bot clicks — bots typically click through to the landing page at near-100% rates. These clicks cost money but generate no conversions, and they skew your campaign's performance data.
**Data Interval:** Last 7 or Last 14 Days
| # | Metric | Operator | Value |
| --- | --------------- | --------------- | ----- |
| If | Clicks | is Greater than | 50 |
| And | LP CTR | is Greater than | 75% |
| And | Tracker Revenue | is Equal to | \$0 |
**Action:** Block Site
**Scheduling:** Every 10–15 minutes.
You can also create the inverse rule — block sites with a very low LP CTR (under 10% with 50+ clicks and no revenue). Abnormally low LP CTR indicates clicks that never load the landing page, which is another bot signal. Running both rules gives you a bracket that catches bot traffic from both ends.
***
### Block Unprofitable Sites
**Platforms:** Taboola · Outbrain · MGID · RevContent
Once a site has accumulated enough spend to provide a meaningful signal, cut it if it's generating negative ROI and no revenue. This is the native equivalent of the Facebook/TikTok pause rules — it protects budget by eliminating proven money-losers at the placement level rather than pausing the whole campaign.
**Data Interval:** Last 7 or Last 14 Days
| # | Metric | Operator | Value |
| --- | --------------- | --------------- | ----- |
| If | Cost | is Greater than | \$50 |
| And | Tracker ROI | is Less than | -10% |
| And | Tracker Revenue | is Equal to | \$0 |
**Action:** Block Site
**Scheduling:** Every 15–30 minutes.
The `-10%` ROI threshold gives sites a small margin of tolerance before being blocked. If your offer has conversion postback delays (common with Cash on Delivery or affiliate networks), widen this to `-20%` or `-30%` and pair it with an unblock rule so sites are recovered once delayed conversions post.
***
### Unblock Profitable Sites (After Conversion Delay)
**Platforms:** Taboola · Outbrain · MGID · RevContent
Many affiliate and e-commerce offers have known postback delays — conversions may arrive 24–48 hours after the click. This means a site that was blocked while its data looked flat may actually be profitable once all conversions have posted. This rule automatically re-enables blocked sites that have since shown positive ROI.
**Data Interval:** Last 7 or Last 14 Days
| # | Metric | Operator | Value |
| --- | ----------- | ---------------------- | ----- |
| If | Cost | is Greater than | \$20 |
| And | Tracker ROI | is Greater or Equal to | 0% |
**Action:** Unblock Site
**Scheduling:** Once per day, typically in the morning after overnight conversion data has posted.
***
### Pause Low CTR Ads
**Platforms:** Taboola · Outbrain · MGID · RevContent
An ad with a high impression count but very low CTR and no revenue is not winning attention — pausing it lets the platform redistribute budget to better-performing ads in the same campaign.
**Data Interval:** Last 7 or Last 14 Days
| # | Metric | Operator | Value |
| --- | --------------- | --------------- | ------ |
| If | Impressions | is Greater than | 20,000 |
| And | Ad CTR | is Less than | 0.1% |
| And | Tracker Revenue | is Equal to | \$0 |
**Action:** Pause Ad
**Scheduling:** Every 10–15 minutes.
***
### Activate Profitable Ads
**Platforms:** Taboola · Outbrain · MGID · RevContent
When a paused ad has started generating revenue or positive ROI — often due to delayed conversion data — this rule re-enables it automatically. Particularly useful for Cash on Delivery or high-payout offers where an ad may look unprofitable for a day or two before its conversions catch up.
**Data Interval:** Last 7 or Last 14 Days
| # | Metric | Operator | Value |
| --- | ----------- | --------------- | ----- |
| If | Ad CTR | is Greater than | 0.1% |
| And | Tracker ROI | is Greater than | 1% |
**Action:** Activate Ad
**Scheduling:** Once per day.
***
### Scale Campaign Budget — Taboola
**Platforms:** Taboola
Taboola's two bidding strategies require different scaling approaches. With **Maximum Conversions** (the default for most advertisers), the algorithm is sensitive to budget shocks — increasing the budget by more than 30% in a single step can force the algorithm to re-enter learning and spike your CPA. With **Enhanced CPC (Smart Bids)**, you control the bids and the algorithm is more robust, allowing larger percentage increases.
**For Maximum Conversions campaigns:** Scale 20–25%, two to three times per week.
**Data Interval:** Last 7 Days (Today Included)
| # | Metric | Operator | Value |
| --- | -------------------- | ---------------------- | --------------------------------------------------------------------- |
| If | Traffic Source Spent | is Greater or Equal to | 350% of Campaign Daily Budget *(confirms \~3.5 days of active spend)* |
| And | Tracker ROI | is Greater or Equal to | 25% *(Last 7 Days)* |
| And | Tracker ROI | is Greater or Equal to | 25% *(Yesterday)* |
| And | Hour of Day | is in | 01:00 — Mon, Wed, Fri |
**Action:** Increase Budget By **20%** of Current Budget
* Do not allow the budget to go lower than **\$50**
* Do not allow the budget to go higher than **\$2,500**
**For Enhanced CPC campaigns:** You can be more aggressive — scale 30–50% every day or every other day.
**Scheduling:** Run every hour. The Hour of Day condition ensures the increase fires at 1 AM so Taboola can pace the new budget smoothly from the start of the day.
Checking both last-7-days ROI *and* yesterday's ROI ensures you aren't scaling a campaign that had a few profitable days but fell apart recently. The 350% spend condition confirms the campaign has been consistently active and not stuck in a learning pause.
***
### Scale Campaign Budget — Outbrain
**Platforms:** Outbrain
Outbrain's budget scaling works best when your campaign is set to **Daily budget allocation with Accelerated pacing**. Standard and Daily Target pacing modes are not well-suited to automated scaling because they manage their own delivery curves. With Accelerated pacing, Outbrain spends the daily budget as fast as possible, making budget-based rules a reliable proxy for performance.
**Data Interval:** Today
| # | Metric | Operator | Value |
| --- | -------------------- | ---------------------- | ----------------------------------------- |
| If | Traffic Source Spent | is Greater or Equal to | 90% of Campaign Daily Budget |
| And | Tracker ROI | is Greater or Equal to | 20% |
| And | Hour of Day | is in | desired scaling window (e.g. 10:00–18:00) |
**Action:** Increase Budget By **20%** of Current Budget
* Do not allow the budget to go lower than **\$50**
* Do not allow the budget to go higher than **\$1,000**
**Scheduling:** Every 1–2 hours.
Outbrain has a known reporting delay of up to a few hours on some metrics. If you notice rules firing on stale data, switch the **Traffic Source Spent** condition to **Estimated Spent**, which uses real-time estimates rather than the delayed official figures.
***
### Bid Day Parting — Lower Bid During Off-Hours Instead of Pausing
**Platforms:** Taboola · Outbrain
On native networks, pausing a campaign entirely during off-hours can reduce your traffic priority even after you resume, because the algorithm uses historical delivery patterns to allocate inventory. A softer approach is to lower the bid during low-converting hours rather than pausing. This keeps the campaign active at a lower cost, preserving your delivery history while limiting spend.
**Data Interval:** Today
| # | Metric | Operator | Value |
| --- | ----------- | --------------- | ------------------------------------------------- |
| If | Impressions | is Greater than | 10 *(ensures rule only runs on active campaigns)* |
| And | Hour of Day | is in | off-peak hours (e.g. 22:00–06:00) |
| | Timezone | | your target GEO timezone |
**Action:** Set Campaign Bid to your reduced off-hours value (e.g., \$0.05)
**Scheduling:** Run every hour. Create a matching rule with the active hours window and your normal bid to restore it during peak hours.
Run this rule in pairs: one rule sets a low bid during off-hours, and a companion rule sets the normal bid during active hours. Both use the same Hour of Day condition with their respective time windows.
***
### Automate Site / Section Bids Based on ROI
**Platforms:** Taboola (Site Bid) · Outbrain (Section Bid)
Rather than using a single campaign-level bid for all placements, this rule adjusts bids site-by-site based on actual performance. Sites with positive ROI and good EPC get a higher bid; the formula ties your spend directly to what each placement is worth.
**Data Interval:** Last 3–7 Days
**Conditions (increase bid on profitable sites):**
| # | Metric | Operator | Value |
| --- | ----------- | --------------- | ------ |
| If | Tracker ROI | is Greater than | 20% |
| And | Tracker EPC | is Greater than | \$2.70 |
**Action:** Set Site Bid / Section Bid to **\$0.80** *(your target CPC for profitable placements)*
* Or: Increase Bid by 15% of Current Bid
* Do not allow the bid to go lower than **\$0.05**
* Do not allow the bid to go higher than **\$2.00**
**Conditions (decrease bid on poor sites):**
| # | Metric | Operator | Value |
| --- | ----------- | --------------- | ----------------------- |
| If | Cost | is Greater than | \$30 |
| And | Tracker CPA | is Greater than | \$15 *(your CPA limit)* |
| And | Tracker ROI | is Less than | 10% |
**Action:** Decrease Site Bid / Section Bid by **15%** of Current Bid
**Scheduling:** Every 30 minutes.
***
### Set Ad Bid to 80% of EPC
**Platforms:** Outbrain · MGID · RevContent
Outbrain supports ad-level bid changes directly through the API — a capability not available in Outbrain's own interface. This rule sets each ad's bid to 80% of its EPC, ensuring you maintain a built-in profit margin on every click. MGID and RevContent offer similar ad-level bid controls.
**Data Interval:** Last 3 Days
| # | Metric | Operator | Value |
| --- | --------------- | --------------- | ----- |
| If | Cost | is Greater than | \$20 |
| And | Tracker Revenue | is Greater than | \$0 |
**Action:** Set Ad Bid to **80% of EPC**
* Do not allow the bid to go lower than **\$0.03**
* Do not allow the bid to go higher than **\$0.80**
**Scheduling:** Once per day, or every few hours if your EPC fluctuates significantly.
The 80% multiplier means you're targeting a 20% margin on every click. If your campaigns are underspending, try raising the multiplier to 90%. If margins are tight, lower it to 70%.
***
### Widget Coefficient Change
**Platforms:** MGID · AdsKeeper
Widget Coefficient is a multiplier on top of the base campaign bid, available exclusively on MGID and AdsKeeper. Setting a coefficient above 1.0 increases how much you bid on a specific widget relative to your campaign baseline; below 1.0 reduces it. This gives you fine-grained control without changing the base campaign bid.
**Data Interval:** Last 7 Days
**Conditions (increase coefficient on good widgets):**
| # | Metric | Operator | Value |
| --- | ----------- | --------------- | ----- |
| If | Cost | is Greater than | \$30 |
| And | Tracker ROI | is Greater than | 20% |
**Action:** Set Widget Coefficient to **1.3** *(30% above base bid)*
* Do not allow the coefficient to go lower than **0.5**
* Do not allow the coefficient to go higher than **2.0**
**Conditions (reduce coefficient on poor widgets):**
| # | Metric | Operator | Value |
| --- | ----------- | --------------- | ----- |
| If | Cost | is Greater than | \$30 |
| And | Tracker ROI | is Less than | -10% |
**Action:** Set Widget Coefficient to **0.7** *(30% below base bid)*
**Scheduling:** Once per day.
Widget coefficients are an alternative to hard blocking — instead of cutting a placement entirely, you reduce what you pay for it. Useful for widgets that are marginally unprofitable but still generating some revenue, where you'd rather keep them at a lower bid than lose the traffic source entirely.
***
## Tips for Using These Examples
**Start with the spend threshold.** Every pause and activate rule works best when you set a meaningful minimum spend before acting. Too low and you'll pause campaigns that just had a bad hour. A good starting point is 1–2× your target CPA, or $50–$100 depending on your vertical.
**Use the data interval wisely.** Last 7 Days smooths out day-to-day volatility and is good for structural decisions (pause, activate, clone). Today is better for intraday budget and bid adjustments where you need to react quickly.
**Layer conditions, don't rely on one metric.** The strongest rules combine a spend threshold + a performance metric + optionally a name filter. This keeps the rule scoped and prevents accidental mass pauses.
**Use rule groups to organise and control.** If you run the same rule pattern across multiple accounts or campaigns, put them in named groups. You can pause an entire group at once, which is much easier than managing individual rules.
**Test on a small set of campaigns first.** When setting up a new rule, use the campaign filter in the **Select Campaigns** section to restrict it to 2–3 test campaigns. Confirm it behaves as expected before expanding it to your full account.
# Automation Rules: Complete Guide for Media Buyers
Source: https://docs.theoptimizer.io/automation/rules-guide
Learn how to build, configure, and schedule automation rules in TheOptimizer — from conditions and actions to scope, filtering, and notifications.
Automation rules are the engine behind TheOptimizer's optimization capabilities. Instead of logging in every few hours to pause underperformers or scale winners, you define the logic once and let the platform act for you around the clock. There are three core reasons to use them: they **free up your time** by handling repetitive tasks so you can focus on higher-leverage work like creative testing and landing page improvements; they provide **24/7 coverage** so a campaign going over budget at 3am or a winner hitting its limit overnight gets handled automatically; and they **eliminate human error** by executing exactly what you define, every single time.
***
## 1. Navigating the Rules Engine
### Accessing Rules
On the left-side navigation menu, locate the **Automation** section.
Click **Rules** to open the rules engine.
### Top Menu Options
Once inside the Rules page, the top menu bar gives you four key options:
| Option | Description |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **New Rule (Standard)** | Creates a rule that applies to specific campaigns you manually select. New campaigns launched later must be added manually. |
| **New Global Rule** | Works identically to a Standard Rule in terms of logic, but applies to an entire **Ad Account**. Any new campaign launched inside the selected account automatically inherits the rule. |
| **Load from Template** | Opens a library of pre-built rule templates (Stop-Loss, Scaling, Dayparting, and more). A fast way to get started — but always customize the default values before saving. |
| **Manage Groups** | Lets you organize rules into folders. Groups also let you assign a whole set of rules to a campaign at once, saving significant time as your rule library grows. |
### Standard Rules vs. Global Rules
The most important practical difference between the two rule types is what happens when you launch a new campaign.
With a **Standard Rule**, you must manually open the rule and add every new campaign you create. If you forget, those new campaigns are completely unprotected — no automation applies to them.
With a **Global Rule**, you select an Ad Account instead of individual campaigns. Any new campaign you launch inside that account is automatically covered from day one, with no extra steps required.
For stop-loss and scaling rules that you want applied consistently across all your campaigns, prefer **Global Rules**. Reserve **Standard Rules** for logic that should only apply to a specific, curated subset of campaigns.
### Finding the Right Rule for Your Traffic Source
When you click **New Rule**, the system loads available rule types for every ad network you have connected. Use these methods to find what you need quickly:
* **Search by network name** — type "Facebook" to filter only Facebook rules.
* **Search by level** — type "ad", "campaign", or "adset" to see rules at that level.
* **Read the icons** — each rule shows the logos of ad networks that support it. A rule showing all your connected network logos works across all of them.
**Cross-network rules:** Rules supported by multiple networks can be applied to campaigns from different ad networks within a single rule. If your Pause Campaign logic is the same for Facebook and TikTok, you can create one rule and add campaigns from both networks — rather than maintaining two separate rules.
### Platform Terminology: Widget & Content
Sometimes you might encounter these terms throughout the platform (especially if you are working with native ad networks:
| Platform term | What it means |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Widget** | A site (on Taboola) or publisher (on Outbrain) — the placement level below the ad. |
| **Content** | An ad or creative. "Content rules" are ad-level rules. |
***
## 2. Creating a Rule: Basic Settings
Click **New Rule**, select your rule type (for example, "Pause Ads – Facebook"), and you'll enter the rule builder. The first section is **Basic Settings**.
### Key Configuration Steps
Use a name that describes the logic, not just the type. `Pause Ads – Spend > $50 & 0 Conv` tells you everything at a glance; `Rule 1` tells you nothing. As your rule library grows, self-explanatory names save a lot of scrolling.
Assign the rule to a group to keep your dashboard tidy and to bulk-assign rules to campaigns later without selecting them one by one.
The time window the system looks at when evaluating all conditions. Options range from **Today** and **Yesterday** to **Last 3 Days**, **Last 7 Days**, all the way to **Last 90 Days**. Every condition in the rule uses this interval unless you override it individually (see Section 3).
Removes specific recent days from the evaluation window. If your revenue data arrives with a 24-hour delay — common in Search Arbitrage — excluding **Today** prevents the rule from making decisions based on spend with no corresponding revenue yet. You can exclude up to the last 3 days.
If you create a rule from a template, always review and adjust the default values before saving. Template values are placeholders to get you started — they are almost never the right numbers for your specific account and offers.
***
## 3. Rule Logic: Conditions & Time Frames
The **Conditions** section is the brain of your automation. Conditions define the exact criteria that must all be true for the rule to execute. Each condition has three parts: a **Metric**, an **Operator**, and a **Value**.
### Adding Conditions
Click **Add Condition** (or the `+` button) to open a new condition row.
Use the search bar in the dropdown to find metrics quickly.
Choose Greater Than, Less Than, Greater or Equal, Less or Equal, etc.
Enter the number you're comparing against.
**Example logic:**
```text theme={null}
IF Amount Spent > 50
AND Conversions ≤ 0
```
### Understanding Metric Categories
Metrics in the dropdown are organized into three categories:
| Category | Source |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Traffic Source Metrics** | Data pulled directly from your ad network (Amount Spent, Impressions, Clicks from Facebook or TikTok). |
| **Tracker Metrics** | Data from your connected tracking platform (conversions, revenue, EPC from Voluum, Binom, etc.). |
| **Custom Metrics** | Metrics you define yourself by writing a formula inside TheOptimizer — useful for KPIs that combine data from multiple sources. |
### Duplicating a Condition
When you need two conditions that are very similar — for example, checking that spend is both greater than $50 and less than $200 — use the **duplicate button** on the right side of any condition row. This clones the condition so you only need to change the operator or value, rather than rebuilding from scratch.
### Advanced Logic: Percentage Comparisons
Instead of comparing a metric to a fixed number, you can compare it to another metric. Click the `$` icon next to the value field to switch modes:
| Mode | Description |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| **\$ (Fixed Value)** | Default. Compare against a specific number (e.g., Spend > \$50). |
| **% of Campaign** | Compare against a campaign-level metric. Example: "Spend is greater than 20% of Campaign Daily Budget." |
| **% of** | Compare against another metric at the same level. Example: "Spend is greater than 50% of Revenue" — an ROI threshold without a fixed number. |
### Custom Time Frames (Per Condition)
All conditions use the Default Data Interval by default, but you can override this on a per-condition basis — allowing you to build rules that look at different time windows simultaneously.
To do this, toggle **Use Custom Interval** inside the condition row and select a time range. The condition will display a small label showing its custom interval. You can also define fully custom date ranges — for example, "between 10 days ago and 6 days ago" — for advanced use cases where you need to analyze performance in a specific historical window.
**Mixed time frames example:** Check whether an ad has spent money *Today*, while also checking its ROI over the *Last 7 Days*. Set the global interval to Last 7 Days, then give the Spend condition a custom interval of Today.
### Hour of Day Condition
The Hour of Day condition restricts **when** a rule is allowed to act, independently of whether the other conditions are met. If you only select Monday 9am–5pm, the rule will not take any action outside those hours — even if all other conditions are true.
Find it under the "Other" category, or search for it directly.
A grid appears with days on the vertical axis and hours on the horizontal axis. Click individual cells, or use the shortcuts: **Weekdays**, **Weekends**, **Working Hours**, **Select All**, and **Clear All**. You can also click an hour header to select that hour across all days, or click a day label to select all hours for that day.
Defaults to UTC. Change this if your team or traffic operates in a specific timezone.
If you use an Hour of Day condition, set the rule's execution frequency to **Every 1 Hour**. Running it every 10 minutes is redundant and clutters your execution logs.
### Created Date Condition
The **Created date** condition lets a rule act on ad sets and ads based on how recently they were created. Use it to target items by age — for example, hold off on brand-new ad sets that are still in the learning phase, or run a cleanup rule only on older ad sets and ads. Add a condition and select **Created date** from the metric dropdown, then choose an operator and a date or age threshold.
***
## 4. Rule Actions
The **Rule Actions** section defines what the rule does when all conditions are met. There are four main action types.
### 1. Status Actions (Pause / Activate)
The simplest action type. When conditions are met, the entity (ad, adset, or campaign) is paused or activated. No further configuration is needed — the action is fully defined by the rule type you selected.
### 2. Budget & Bid Adjustments
For change-budget and change-bid rule types, configure the action in the **Rule Action** section:
| Action | Description |
| --------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Set To** | Forces the budget or bid to an exact value — a fixed number or a percentage of another metric. |
| **Increase By** | Adds to the current value by a fixed amount or a percentage. Useful for incremental scaling. |
| **Decrease By** | Subtracts from the current value by a fixed amount or a percentage. Useful for gradually pulling back on underperformers. |
#### Budget Safety Rails: Floor & Ceiling
When using **Increase By** or **Decrease By**, you can set a minimum and maximum budget value to prevent the rule from adjusting beyond safe limits:
* **Min Budget (Floor)** — The rule will never reduce the budget below this value, even if the decrease amount would go lower.
* **Max Budget (Ceiling)** — The rule will never increase the budget above this value, even if the increase amount would go higher.
Budget floors and ceilings are optional but strongly recommended for all scaling rules. Without them, a single rule execution can accidentally push a budget to an extreme value if something unexpected happens in your account.
### 3. Cloning Actions
Cloning rules automatically duplicate a campaign, adset, or ad when conditions are met. Two additional fields appear:
* **Number of Copies** — How many clones to create each time the rule fires.
* **Adjust budget before cloning** — Optionally set the budget on the cloned copy to a specific value at creation time, rather than inheriting the original's current budget.
* **Destination** — By default, clones land in the same campaign. Enable **Change Cloned Ad Destination** to redirect them to a specific adset, campaign, or a different ad account. For campaign cloning rules you can now select **multiple destination ad accounts** in a single rule, so one rule replicates a winning campaign across your whole portfolio instead of needing a separate rule per account.
* **Set start time** — For campaign cloning rules, choose when the cloned campaigns should start. Instead of going live the instant they're created, clones can be scheduled to begin at a specific time — useful for lining up automated launches with budget resets or peak-traffic hours.
### 4. Dayparting
Dayparting rules let you schedule exactly when a campaign runs.
Dayparting is only available at the **campaign level**. It cannot be applied to ads or adsets.
The rule combines a grid (where you select hours and days) with an action:
| Action | Description |
| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **Pause on selected hours, otherwise do nothing** | Pauses during selected hours only. Outside those hours, the campaign is left in its current state. |
| **Pause on selected hours, otherwise start** | The most commonly used option. Pauses during selected hours and actively ensures the campaign is running at all other times. |
**Example:** Select all hours on Saturday and Sunday, then choose "Pause on selected hours, otherwise start." The campaign will automatically pause on Friday night and resume Monday morning — no manual intervention needed.
***
## 5. Scope and Filtering
Once the logic and action are defined, you control exactly which entities the rule monitors and acts on.
### Filtering: Include or Exclude Specific Items
The filter section lets you narrow or exclude specific items within your selected campaigns:
| Mode | Behavior |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Include** | Overrides the campaign selection scope. Even if you have 100 campaigns selected, the rule will only act on the specific items you list here. |
| **Exclude** | The rule applies to everything across all selected campaigns, *except* the items you list. Use this to protect specific ads (e.g., those with "DO NOT TOUCH" in the name) while automating everything else. |
You can populate either list by searching for specific items manually, or by using bulk filtering to select all items matching a naming pattern at once.
### Select Campaigns
Every rule — regardless of whether it acts on ads, adsets, or campaigns — requires you to specify which campaigns it monitors. The rule evaluates entities within those campaigns only.
* **Manual Selection** — Search for specific campaigns and check them one by one.
* **Smart Filtering** — Use the filter sidebar to auto-select all campaigns matching a naming pattern (e.g., all campaigns containing "US\_2026").
**Standard Rules: don't forget new campaigns.** A campaign not in this list is completely invisible to the rule. Every time you launch a new campaign with a Standard Rule, you must come back and add it here. This is the key reason to prefer Global Rules for broad automations.
If you are creating a **Global Rule**, this section asks you to select **Ad Accounts** instead of individual campaigns.
***
## 6. Scheduling & Frequency
This setting controls how often TheOptimizer evaluates your conditions and potentially fires the rule.
| Frequency | Best For |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| **Every 10 min – Every 1 Hour** | Stop-loss rules where you need to react quickly to bad performance. |
| **As Soon as Conditions Are Met** | Time-sensitive actions. The system continuously checks and fires the moment all conditions become true. |
| **Once Daily / Daily at Specific Time** | Budget resets or full-day performance reviews. You can set the exact time (e.g., 8:00am UTC). |
| **Weekly** | Rules that only need to run once a week — e.g., reviewing and adjusting budgets every Monday morning. |
If your rule includes an **Hour of Day** condition, set the frequency to **Every 1 Hour**. Running it every 10 minutes is redundant — the rule won't act outside the specified hours regardless — and it clutters your execution logs.
***
## 7. Notifications & Alerts
The final step controls whether the rule acts, notifies you, or both.
### Execution Modes
| Mode | Description |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| **Execute & Alert** | The rule makes the change **and** sends you a notification listing all items that triggered it. |
| **Execute** | The rule makes the change silently. No notification is sent. Use for well-established automations you trust completely. |
| **Alert Only** | Sends a notification but makes **no changes** whatsoever. The rule becomes a monitoring and alerting tool. |
**Building a pure monitoring rule:** You can turn any rule type into a monitoring-only rule by selecting **Alert Only**. The rule type itself doesn't matter — what matters is the level (campaign, ad, adset) and the conditions. Create a "Pause Ads" rule, define your conditions, set it to **Alert Only**, and you'll be notified when matches occur without anything actually being paused.
### Notification Channels
Notifications can be sent via **Email**, **Slack**, or **Telegram**. You can configure multiple accounts for each — for example, alert multiple Slack channels or multiple team members by email simultaneously.
To configure channels, go to **Profile icon → Settings → Notifications** tab. Channels must be set up there before they can be selected inside a rule.
### Run on Paused Campaigns
By default, rules only evaluate entities within **active** campaigns. Paused campaigns are completely invisible to the rule — this is intentional, as in most cases you don't want automations touching campaigns you've deliberately stopped.
Toggle **Run on Paused Campaigns** to **ON** only when you specifically need a rule to monitor paused entities — for example, a rule that reactivates an ad if late conversions arrive after it was paused.
# Smart Lists
Source: https://docs.theoptimizer.io/automation/smart-lists
Build and manage global blacklists that automatically block bad-performing placements across all your native ad campaigns — at the campaign level or across entire ad accounts.
Smart Lists are TheOptimizer's mechanism for building and maintaining global placement blacklists for native ad networks. Once a placement is added to a Smart List, TheOptimizer automatically ensures it stays blocked across every campaign the list covers — so you don't have to manually block it in each campaign one by one.
Smart Lists are exclusively for **native ad networks** (Taboola, Outbrain, MGID, RevContent, and similar). They are not available for Facebook, TikTok, or Google Ads.
***
## How Smart Lists Work
Every Smart List does two things: it holds a set of placement IDs, and it applies those blocks to a set of campaigns or ad accounts.
**Placements can be added in four ways:**
* **Paste from clipboard** — copy a list of placement IDs and paste them directly into the list.
* **Upload a CSV** — import a CSV file of placement IDs, for example one exported from the reporting section of TheOptimizer or provided by your account manager.
* **Import from another Smart List** — pull placements from one or more existing Smart Lists into the current one. Useful when merging lists or building a new list that should inherit an existing blacklist.
* **Via attached automation rules** — attach any pause-placement rule (Pause Site, Pause Publisher, Pause Widget, etc.) to the Smart List. Each time that rule fires and blocks a placement, it also adds the placement to the Smart List automatically. This keeps your blacklist growing dynamically without any manual effort.
Only **pause-placement rules** can be attached to a Smart List. Rules that pause campaigns, ad sets, or ads are not compatible. If no rules appear when you try to attach one, check that you have at least one pause-placement rule created for the relevant ad network.
### Execution Frequency
Smart Lists run **every 30 minutes**. This means that when you add placements to a list — whether by pasting, uploading a CSV, or importing — the blocks are not applied immediately. Allow at least 30 minutes before checking whether placements have been blocked.
Every time a Smart List executes and blocks a placement, a record is written to [Logs](/logs/overview). If you want to confirm that blocking is happening as expected, go to **Logs**, filter by type **List**, and look for entries from your Smart List.
***
## Scope: Campaign Level vs. Ad Account Level
When you create a Smart List, you choose its **scope** — this is one of the most important decisions.
| Scope | How it works |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Campaign Level** | You manually select individual campaigns the list protects. Any new campaign you launch later must be added manually or it won't be covered. |
| **Ad Account Level** | You select ad accounts. The list automatically covers **all campaigns** within those accounts — including any new campaigns you create in the future. |
Ad Account Level is the recommended scope for most blacklists. It eliminates the risk of forgetting to add a new campaign and ensures your blacklist is applied consistently from day one on every new launch.
***
## The Smart Lists View
Navigate to **Automation → Smart Lists** to see all your lists.
### Stats Bar
At the top of the page, a summary bar shows:
* **Lists created** — total number of Smart Lists in your account
* **Active lists** — how many lists are currently running
* **Total placements** — the combined number of placement IDs across all lists
* **Total campaigns** — the combined number of campaigns being protected across all lists
### Search and Filters
Use the search bar to find lists by name or placement content. Filter the list view by:
* **Ad network** — show only lists for a specific network (e.g., Taboola only)
* **Scope** — filter by Campaign Level or Ad Account Level
* **Status** — filter by active or inactive lists
### Table Columns
| Column | Description |
| ------------- | --------------------------------------------------------------------- |
| **Name** | The list name, with the ad network logo shown alongside it |
| **Scope** | Whether the list operates at campaign level or ad account level |
| **Rules** | Number of automation rules currently attached to this list |
| **Coverage** | Number of ad accounts or campaigns this list is applied to |
| **Blocked** | Number of placements inside this list that are actively being blocked |
| **Last Sync** | The last time the system executed this list and enforced its blocks |
### Inline Actions
Each row has inline controls:
* **Start / Stop toggle** — immediately activate or deactivate the list without opening it
* **Three-dot menu** — options to **Edit**, **Duplicate**, or **Delete** the list
***
## Creating a Smart List
Click the **New Smart List** button in the top-right corner to open the creation modal.
### 1. Name and Description
Give the list a descriptive name that explains what it does and where it applies — for example, `Taboola – Global Blacklist – US` rather than `List 1`.
The **description field** (new in this version) lets you add freeform context: what kind of placements are on this list, which campaigns it's meant to protect, or how it gets populated. This is especially useful when multiple team members manage lists or when returning to a list after some time away.
### 2. Traffic Source
Select the **ad network** this list is for. A Smart List is always network-specific — a Taboola blacklist will only block placements on Taboola campaigns.
### 3. Scope
Choose **Campaign Level** or **Ad Account Level** (see [Scope section](#scope-campaign-level-vs-ad-account-level) above).
### 4. Protected Ad Accounts or Campaigns
Based on your scope selection, this section will show either **Protected Ad Accounts** or **Protected Campaigns**.
Click **Add** in the top-right corner of this section to open the selector. You can search for accounts or campaigns by name, scroll to browse, or select multiple at once. When you're done selecting, click **Add** to confirm. The selected items will appear in the protected list.
To remove an account or campaign, click **Manage** (which appears next to the **Add** button once items are added) and deselect the ones you want to remove.
### 5. Automation Rules
In the **Automation Rules** section, attach the pause-placement rules that should populate this list automatically.
Click **Add** to open the rules selector. Only pause-placement rules for the ad network you selected will appear here. Select the rules you want, then click **Add** to attach them.
For Taboola, these are "Pause Site" rules. For Outbrain, "Pause Publisher" rules. For RevContent and MGID, "Pause Widget" rules. The terminology varies by network, but they all appear in the selector when relevant.
When a rule fires and blocks a placement, that placement is automatically written into this Smart List — so your blacklist grows dynamically without any manual input.
### 6. Placements
The **Placements** section is where the actual blacklisted placement IDs live. You can populate it in three ways from within the creation modal:
* **Paste from Clipboard** — paste a list of placement IDs directly. Useful when you have a list from your account manager or another source.
* **Upload CSV** — upload a CSV file containing placement IDs. Ideal for bulk imports from reporting exports.
* **Import from Smart List** — select one or more existing Smart Lists to import their placements into this new list. The dialog shows all existing lists; select any combination and click **Import** to copy their placements in.
You can combine all three methods — paste some, upload more, and import from existing lists in the same creation session.
### 7. Create
Click **Create Smart List** in the top-right navigation to save the list. It will appear in the main table and will begin syncing immediately if set to active.
***
## Editing a Smart List
To edit an existing list:
* **Click the row** in the Smart Lists table — this opens the edit modal directly.
* Or click the **three-dot menu** on the row and select **Edit**.
Editing works identically to creation. You can change the name, description, scope, add or remove protected accounts or campaigns, attach or detach rules, and add or remove placements.
***
## Tips & Best Practices
**Use Ad Account Level scope for all new lists.** Campaign Level lists require ongoing maintenance as you launch new campaigns. Ad Account Level lists are self-managing — any new campaign in the covered accounts is protected automatically.
**Start with a seed list, then let rules grow it.** Import your current list of bad placements from your account manager or a reporting export, then attach a pause-placement rule. From that point on, the list grows automatically as your rules execute.
**Use the description field.** A list named `Taboola Blacklist` tells you little six months later. Descriptions like "Populated via Taboola Pause Site rule. Applied to all US ad accounts. Excludes whitelisted premium publishers." pay off every time you need to audit or adjust the list.
**Merge lists with Import from Smart List.** If you have multiple smaller blacklists and want to consolidate them, create a new list and import from all the existing ones in one step.
# Campaign Creator: Launch Campaigns at Scale
Source: https://docs.theoptimizer.io/campaign-creator/overview
Build and launch campaigns across Facebook, Taboola, Outbrain, and more — all from one place, with mass creation and API-powered speed.
The Campaign Creator lets you build and launch campaigns on your connected ad networks directly from TheOptimizer — without switching to each native ad manager. Configure targeting, set bids and budgets, upload creatives from a shared media library, and launch everything in one place. This page covers how Campaign Creator is structured, which networks and creation methods are supported, and how the Campaign Creation Queue and Creative Library fit into your workflow.
## Why Use Campaign Creator
You can already create campaigns directly inside each ad network, so why use TheOptimizer's Campaign Creator? Three reasons:
**Everything in one place.** You already use TheOptimizer for campaign management, automation, and optimisation. Having campaign creation here too means you never need to jump between the ad network for launching and TheOptimizer for everything else. One tool, one workflow.
**Mass campaign creation.** Every ad network has a limit on how quickly you can set up campaigns through its native interface. TheOptimizer removes that limit. You can launch 100 campaigns in just a few minutes — something no ad network allows you to do natively. Whether through the interactive interface or the Excel uploader, bulk creation is built into every traffic source we support.
**Speed.** TheOptimizer's campaign creation UI is built with speed in mind. Since we use each network's API rather than replicating their front-end flow, every step — from uploading images and videos to navigating between options — is noticeably faster than doing it in the native dashboard.
***
## How to Access Campaign Creator
**Campaign Creator** is accessible from the **left-hand navigation menu**. Click **Campaign Creator** to open the main page, where you will see a card for every supported ad network.
* Cards for networks you have already connected appear **enabled**.
* Cards for networks you have not connected yet appear **greyed out**. A greyed-out card does not mean the network is unsupported — it simply means no ad account for that network has been connected. Go to **Integrations** to add it.
At the bottom of the main page you will also see a preview of your recently launched campaigns and their statuses. Click **See full list** to open the full **Campaign Creation Queue**.
***
## Supported Ad Networks & Creation Methods
TheOptimizer supports campaign creation for **Facebook**, **Taboola**, **Outbrain**, **RevContent**, **MGID**, and **AdsKeeper**.
Depending on the traffic source, campaigns can be created through one or both of the following methods:
**Interactive interface (Create Manually)** — a step-by-step guided launcher where you configure campaign settings and upload creatives through a familiar UI. For each ad network, the interface mirrors the flow you already know from that network's native dashboard, but with added helpers and options that make the whole process more efficient. You do not need to learn anything new — the navigation and options will feel familiar, just faster.
**Excel uploader** — a bulk campaign creation tool. You fill in a Google Sheets template with your campaign data (one row per ad), export it to Excel, and upload it. TheOptimizer processes the file and pushes all campaigns to the ad network in one go.
| Traffic Source | Interactive Interface | Excel Uploader |
| -------------- | --------------------- | -------------- |
| Facebook | ✅ | — |
| Taboola | ✅ | ✅ |
| Outbrain | ✅ | ✅ |
| RevContent | ✅ | ✅ |
| MGID | ✅ | ✅ |
| AdsKeeper | ✅ | ✅ |
### Why Two Options for Native Ad Networks?
For Taboola, Outbrain, RevContent, MGID, and AdsKeeper, both creation methods are available because they serve different needs:
* **The Excel uploader enables automation.** Teams with technical resources can generate the Excel file programmatically and push it to TheOptimizer via the API — automating the entire campaign launch pipeline end-to-end without any manual steps.
* **The Excel uploader is reusable.** Once you build your first Google Sheets template, you will likely reuse it over and over with minor changes — new creatives, adjusted budgets, or updated targeting. Think of it as a living template. The first time takes some effort, but every subsequent launch is just a matter of updating a few columns and re-uploading.
* **The interactive interface is better for one-off campaigns.** When you need to create a single campaign or a small batch and want a visual, guided experience with helpers and suggestions, the manual interface is the faster path.
### Excel Uploader — How It Works
The workflow is the same across all native ad networks:
Clone the TheOptimizer Google Sheets template for your traffic source into your own Google account. Every column header has a hover note explaining what the field expects, valid values, and the required format. The template also includes auxiliary sheets with reference data — countries, regions, browsers, timezones, traffic types — to help you look up valid values.
Each row represents one ad. To create a campaign with multiple ads, use one row per ad and keep all campaign-level columns identical across those rows.
In Google Sheets, go to **File → Download → Microsoft Excel (.xlsx)**.
Go to **Campaign Creator**, select your traffic source, and upload the file.
Track the status of your submission in the **Campaign Creation Queue** and watch for email notifications.
Once you create your first Google Sheets template, you will reuse it over and over. The next time you launch, you are most likely just going to change some targeting options, update budgets, or swap in new creatives and headlines — not rebuild from scratch.
***
## The Campaign Creation Queue
Every campaign created through TheOptimizer — whether through the interactive interface or via Excel — is processed asynchronously through the **Campaign Creation Queue**. Campaigns are not launched instantly; they are queued and submitted to the traffic source in order.
Access the Queue from the **Campaign Creator** main page by clicking **See full list** at the bottom. This opens a panel showing the full list of jobs with the following details:
| Column | What it shows |
| ----------------- | ------------------------------------------------------------------------------------------- |
| **Date** | When the action was submitted |
| **Ad Account** | Which ad account the campaigns are being created in |
| **Campaign Name** | The name of the campaign or upload batch |
| **Action** | The type of operation: Campaign Creation, Campaign Editing, Campaign Clone, or Excel Upload |
| **Status** | Completed, Failed, or Partially Completed |
| **Description** | For failed or partial items, additional detail about what went wrong |
### Filtering and Searching
You can filter the Queue by **status** (Completed, Failed, Partially Completed) or by **action type** (Creation, Clone, Editing, Excel Upload). A search bar lets you locate a specific submission by name.
### Handling Errors
If a submission fails or partially completes, two options are available:
**Retry button** — available on failed and partially completed items. Use this when the failure was caused by a transient issue (network error, temporary API error from the ad network, ad network temporarily overloaded). A retry resubmits the same data.
**Details button** — click to see exactly which items within the campaign caused the error. For example, a campaign with five ad sets and ten ads might have succeeded for all ad sets but failed on two specific ads. The details view shows you precisely which items failed and why.
If any single item within a campaign submission fails — even one ad out of fifty — TheOptimizer marks the **entire operation as failed** and does not create a partial campaign. This is by design: it prevents incomplete campaigns from being pushed to the ad network with missing ads or ad sets you intended to include. Use the **Retry** button for transient failures, or check **Details** to identify which specific item caused the issue.
### Email Notifications
For campaign creation via Excel and campaign cloning operations, TheOptimizer sends email notifications to the address configured in your account settings:
* **Success email** — confirms the operation completed and lists how many campaigns were created successfully.
* **Error email** — details which items failed and why. For Excel uploads specifically, the error email includes a copy of your Excel file with all problematic cells highlighted so you can correct and re-upload.
Monitor both the Queue and your email. The Queue gives you real-time status; the email gives you a permanent record — especially useful for Excel uploads where the highlighted error file tells you exactly which cells to fix.
***
## Creative Library Integration
The Campaign Creator works hand-in-hand with TheOptimizer's **Creative Library** — a centralised collection of every creative (images, videos, headlines, text) currently running across all your active campaigns and connected ad accounts.
When using the **Excel uploader**, instead of specifying each creative individually (image URL, headline, call to action), you can reference one or more **Creative Library tags** in your file. When TheOptimizer processes the upload, it pulls in all creatives tagged with that label and generates the corresponding ads automatically. This is cleaner, faster, and eliminates the risk of copy-paste errors in image URLs and headlines.
For teams with separate creative and media buying functions, the recommended workflow is:
1. Your creative team uploads and tags assets in the **Creative Library**.
2. Your media buying team references those tags in the **Campaign Creator** — through the interactive interface or the Excel uploader.
This keeps the process clean and ensures everyone works from the same organised asset library. The Campaign Creator combined with the Creative Library lowers human error, saves time, and removes the campaign creation bottleneck — scaling becomes limited only by how much you can spend or how many creatives you have to test.
The Creative Library is covered in its own help article. In short, it collects all creatives from your active campaigns across all connected accounts, lets you browse and tag them, and makes them available inside both the interactive launcher and the Excel uploader.
# Compare Date Ranges
Source: https://docs.theoptimizer.io/campaign-manager/compare-dates
Set your reporting date range, enable period-over-period comparisons, and choose which columns display the comparison data.
## Setting a Date Range
The date picker is in the top-right corner of the navigation bar. Click it to change the reporting interval for the entire view.
Available presets: **Today**, **Yesterday**, **Last 3 / 7 / 14 / 30 days**, **Last 90 days**, **This month**, **Last month**, **Last 6 months**, and a fully custom calendar range.
***
## Comparing Two Periods
Inside the date picker, enable the **Compare dates** toggle. You can then select a second date range to compare against the primary one.
Use **Compare dates** to spot performance shifts between periods — for example, this week vs. last week — to measure the impact of a recent creative or budget change.
***
## Choosing Which Columns Show Comparison Data
Comparison data only appears for metrics you have designated as compare columns. You configure this inside **Column Management**.
Click the column settings icon at the bottom-left of the table.
Click the **Compare Columns** tab at the top right of the dialog.
Select the metrics you want to see side-by-side comparison data for (e.g., Amount Spent, Revenue, Conversions).
Click **Save as preset**.
Once set up, activating **Compare dates** in the date picker causes each selected metric to display an additional column showing the value for the comparison period — making it easy to see at a glance whether spend went up, conversions dropped, or ROI improved between the two periods.
# Create Custom Metrics
Source: https://docs.theoptimizer.io/campaign-manager/custom-metrics
Define your own metric formulas using any combination of available metrics — then use them as columns in the table and as conditions in automation rules.
If the default metrics don't cover something you track, you can define up to **10 custom metrics** using your own formulas. Once created, they appear as columns in any column preset and are also available as conditions inside your automation rules.
***
## Creating a Custom Metric
Click the column settings icon at the bottom-left of the table.
Click **Custom Metric** in the left panel. You will see a list of 10 custom metric slots.
Click the edit icon next to any empty slot.
Enter a **Column Name**, select the **Format** (Currency or Percentage), and set the **Precision** (number of decimal places to display).
Use the formula builder to select metrics from the dropdown and combine them using `+`, `−`, `×`, `/`, `(`, `)` operators.
Click **Save**. Your custom metric is immediately available as a column in any preset and as a condition in your automation rules.
Custom metrics are available across all ad networks — not just the one you created them on. Make sure your formula references metrics that exist for each network you plan to use the column with.
# Customize & Save Columns
Source: https://docs.theoptimizer.io/campaign-manager/customize-columns
Choose which metrics appear in the campaign table, reorder them, and save column presets for different workflows — including shared presets visible to your whole team.
The column settings panel is at the bottom-left corner of the table. Click it to open the **Column Management** dialog.
***
## Default Column Views
TheOptimizer provides ready-made column presets for each ad network. For Facebook, for example, you get:
* **Facebook Standard** — essential Facebook ad network metrics only, with no tracker data. A clean, focused view for native Facebook performance.
* **Facebook + Tracker** — a combined view that merges the most important Facebook metrics with key tracker metrics side by side. This preset is only shown when you have a tracker connected.
Default presets cannot be deleted and are a good starting point for building your own views.
***
## Creating Custom Column Views
Click the column settings icon at the bottom-left of the table.
Use the left panel to browse available column groups: **Traffic Source Metrics**, **Tracker Metrics**, **Custom Metric**, **Custom Conversion Metrics**, **Search Feed Metrics**, and network-specific groups (e.g., **Facebook Metrics**).
Check or uncheck columns in the center panel to show or hide them.
Use the **Order Columns** panel on the right to drag columns into the exact order you want.
Any modification to a default view automatically prompts you to **Save as preset** under a new name. Your saved views appear at the top of the column list and can be switched between at any time.
Create different presets for different workflows — for example, a "Daily Review" preset with spend, CPA, and ROI, and a separate "Creative Testing" preset focused on CTR, CPM, and click-through rate.
***
## Sharing Presets With Your Team
When saving a column preset, you will see a **Set to Public** toggle at the bottom of the Column Management dialog. Enabling it makes the preset visible to all sub-users in your TheOptimizer account — so your team can work from the same column views without each person having to recreate them manually.
Presets are private by default. Only enable **Set to Public** for views you want to standardise across your team, such as a shared daily review layout or a company-wide reporting format.
# The Details View
Source: https://docs.theoptimizer.io/campaign-manager/details-view
A deep-dive side panel for any campaign, ad set, or ad — performance charts, event timelines, action logs, automation rules, and platform-specific breakdowns.
The Details View is a side panel that slides in from the right when you click **View Details** on any campaign, ad set, or ad. It gives you a deep look at a single item without leaving the main table, and supports continuous navigation between items so you can review multiple campaigns without repeatedly opening and closing the panel.
At the top of the panel:
* **Item name** — the name of the campaign, ad set, or ad you are viewing
* **← Prev / Next →** — move to the previous or next item in the table without closing the panel
* **Totals** — a summary bar showing Cost, Revenue, NET, and ROI for this specific item
* **Date picker** — adjusts the data shown in the Details View independently from the main table date picker
***
## Overview Tab
The Overview tab provides a snapshot of the item's status, configuration, and recent activity. It contains four widgets.
### Campaign Details
A card showing the item's key configuration data:
| Field | What it shows |
| ---------------- | ----------------------------------------------------------------- |
| **ID** | The campaign, ad set, or ad ID on the ad network |
| **Status** | Current status (Running, Paused, etc.) |
| **Account** | Which ad account the item belongs to |
| **Budget** | Daily or lifetime budget and type |
| **Bid Strategy** | The bidding approach (e.g., Highest Volume, Cost Cap, Target CPA) |
| **Tracker** | Which tracking platform is linked, if any |
You can turn the item on or off directly from this card without returning to the main table — making it practical to use the Details View as a decision-making panel: check the details, decide, act, then navigate to the next item.
### Automation Rules
A list of all automation rules currently attached to this campaign. From here you can click **Add Existing Rule** to link a rule you have already created, or **Create Rule** to build a new rule and attach it in one step.
Reviewing attached rules in the Details View is a fast way to audit what automation is in place for a specific campaign without navigating to the Rules section.
### Performance Chart
A line chart showing the trend of Amount Spent, Revenue, Conversions, and Clicks over the selected date range. Use this to get an at-a-glance sense of whether the campaign is trending up, down, or flat.
### Events Timeline
A timeline of all significant changes the campaign has undergone during the selected period — budget changes, bid changes, status changes, and similar events. This is your audit trail for understanding when something changed and correlating it with performance shifts visible in the Performance chart.
Use the **Events Timeline** alongside the **Performance Chart** together. If you see a dip in conversions, scroll the Events timeline to see whether a budget cut, bid change, or rule action happened around the same time.
***
## Performance Tab
The Performance tab lets you break a single campaign's data down by time dimension. The available breakdowns are **By Hour**, **By Hour of Day**, and **By Day**.
When you use **By Hour of Day** with a multi-day date range (e.g., Last 7 Days), it aggregates traffic from all days at each hour — so "10 AM" shows the combined performance of every 10 AM–11 AM slot across the entire selected period.
You can expand each column to show change treds (hour by hour, or day by day depending on the selected grouping option). Each column is going to show 3 values:
**Final** - Is the final accumulative value recorded up to that moment (day or hour). For example if you are looking at amount spend at 11:00 AM, the Final value is the amount spent up until that hour.
**Change** - Is the value of each single hour considered separately (difference between h and h-1). In case of the spending for example it gives you an understanding of how much you are spending on each single hour separately.
**Growth** - It shows the trend between to consecutive hours or days (depending on which intervals you are looking at). It shows you if from one hour to another the spending has been decreasing or increasing.
### Practical Use Case: Finding Your Best Hours for Dayparting
Click **View Details** on the campaign you want to analyze.
Set the date range to **Last 7 Days** or **Last 14 Days** for a meaningful sample.
Click the **Performance** tab inside the Details View.
Select the **By Hour of Day** breakdown.
Review which hours have strong conversions and ROI, and which are underperforming.
Use these findings to configure time-based automation rules that pause the campaign during low-performing hours and resume it during peak hours.
The Performance tab is available at campaign, ad set, and ad level. Running an hourly breakdown on a specific ad set can help you determine whether poor performance is time-related or structural — giving you a more targeted optimization path than looking at the campaign aggregate.
***
## Logs Tab
The Logs tab shows a complete history of all actions that have affected the item — whether triggered by automation rules or made manually by a team member.
Each log entry shows:
| Field | What it shows |
| ----------------- | --------------------------------------------------------------------------------- |
| **Time** | When the action occurred |
| **Action** | What was done (e.g., budget changed, campaign paused, bid adjusted) |
| **Activity Type** | Whether the action came from a rule (and which rule) or from a manual user action |
| **Change** | |
You can filter log entries by **Rule** (show only actions triggered by a specific rule) or by **Type** (show only manual actions, or only rule-triggered actions).
To roll back changes, select the entries you want to undo and click **Rollback Activities**.
The Logs tab is invaluable when investigating why a campaign's performance changed unexpectedly. Cross-reference log timestamps with the Performance Chart in the Overview tab to understand what action preceded the change.
***
## Manage Tab
Beyond the three universal tabs, some ad networks add an extra tab to the Details View that exposes platform-specific optimization data.
### Native Ad Networks — Publisher & Site Breakdown
For Taboola and Outbrain, a **Manage** tab appears at the campaign level with a placement-level performance breakdown — the equivalent of the "Sites" or "Publisher" reporting in the native dashboards.
* **Taboola** — the Manage tab shows performance broken down by individual publisher site. You can identify which sites are driving results and pause underperforming sites directly from this view without navigating away.
* **Outbrain** — the Manage tab shows performance broken down by publisher and by section within each publisher. You can pause underperforming publishers or sections directly from this view.
### Facebook — Ad Set Level: Manage Targeting Tab
When you open the Details View for a **Facebook ad set** (not a campaign), a **Manage Targeting** tab appears. It contains three sub-breakdowns:
| Sub-tab | What it shows |
| ------------- | -------------------------------------------------------------------------------------- |
| **Placement** | Performance by ad placement (Facebook Feed, Instagram Stories, Audience Network, etc.) |
| **Device** | Performance split by device type (Mobile, Desktop, Tablet) |
| **Geo** | Performance by targeted geography |
For each dimension you can review performance data and then exclude specific placements, devices, or geos from the ad set's targeting — directly from within TheOptimizer, without going into Facebook Ads Manager.
Run a placement breakdown on your best-performing Facebook ad sets to identify whether a single placement (e.g., Facebook Feed) is driving all results while others (e.g., Audience Network) consume budget without converting. Excluding poor placements at the ad set level is a fast, impactful optimization move.
# Navigate Using Your Keyboard
Source: https://docs.theoptimizer.io/campaign-manager/keyboard-navigation
The Campaign Manager is built for keyboard-first workflows — filter, browse, and edit without ever reaching for the mouse.
TheOptimizer's Campaign Manager is designed to be fully operable from the keyboard. Combined, the shortcuts below let you run a complete review session — open filters, build conditions, navigate the table, and edit values — without touching your mouse.
***
## Filter Panel Shortcuts
| Key | Action |
| ---------------------- | ----------------------------------------------------------- |
| **Cmd+K** / **Ctrl+K** | Open the filter panel from anywhere in the Campaign Manager |
| **↑ ↓** | Navigate through filter options |
| **← →** | Navigate between filter sub-options (condition type, value) |
| **Enter** | Confirm a selection or apply a filter value |
| **Escape** | Cancel and close the panel |
You can build a complete filter — metric, condition, value — entirely from the keyboard without touching your mouse.
***
## Table Navigation & Editing
| Key | Action |
| ----------- | -------------------------------------------------------------------------------------------------------------- |
| **↑ ↓ ← →** | Move between cells in the table |
| **Space** | Select or deselect the focused row — the fastest way to build a multi-row selection without touching the mouse |
| **Enter** | Start editing a focused editable cell; press again to confirm the change |
| **Escape** | Abort an edit without saving |
# Understanding Available Metrics
Source: https://docs.theoptimizer.io/campaign-manager/metrics-overview
An overview of all metric categories available in the Campaign Manager — from traffic source and tracker data to custom metrics and conversion events.
TheOptimizer consolidates metrics from multiple sources into a single table. The **Column Management** dialog organises them into groups so you can build column presets that match exactly what you need to see.
***
## Traffic Source Metrics
These are the metrics reported directly by the ad network — the same numbers you would see inside Facebook Ads Manager, Taboola, TikTok Ads, or any other native dashboard. Common examples:
* **Amount Spent** — total cost for the selected period
* **Impressions** — how many times your ads were shown
* **Clicks** — total clicks generated
* **CTR** — click-through rate (Clicks / Impressions)
* **CPC** — cost per click
* **CPM** — cost per 1,000 impressions
* **Frequency** — average number of times each person has seen your ad (Facebook)
* **Traffic Source Conversions** — conversions recorded by the ad network's pixel or tracking tag
* **Traffic Source CPA** — cost per conversion as reported by the ad network
***
## Tracker Metrics
When you connect a tracking platform (ClickFlare, Voluum, RedTrack, etc.), TheOptimizer pulls click-level data that goes beyond what ad networks report natively. Tracker metrics include:
* **Tracker Conversions** — conversions recorded by your tracker
* **Tracker Revenue** — revenue attributed by your tracker
* **Tracker CPA** — cost per acquisition from your tracker
* **Tracker ROI** — return on investment calculated using tracker revenue
* **Tracker EPC** — earnings per click from your tracker
Tracker metrics are only visible when a tracking platform is connected to your account.
***
## Custom Conversion Metrics
If you track multiple conversion events (e.g., Add to Cart, Checkout, Purchase), each event can appear as its own column. These are available under the **Custom Conversion Metrics** group in Column Management.
***
## Search Feed Metrics
For ad networks that monetise search traffic, additional search feed-specific metrics are available under the **Search Feed Metrics** group.
***
## Network-Specific Metrics
Some ad networks expose metrics that don't exist on other platforms. These are grouped by network in Column Management — for example, **Facebook Metrics** includes things like Video Average Play Time and Post Engagement that are unique to the Facebook ecosystem.
***
## Custom Metrics
You can define up to 10 custom metrics using your own formulas, combining any of the metrics above with standard arithmetic operators. Once created, they appear as columns in any preset and are also available as conditions in your automation rules. See [Create Custom Metrics](/campaign-manager/custom-metrics) for the full setup guide.
***
## Totals Bar Metrics
At the very top of the Campaign Manager, the **Totals Bar** summarises four key figures across all currently visible campaigns:
| Metric | What it shows |
| ----------- | -------------------------------------------------------------------------------------------------------------------- |
| **Cost** | Total amount spent across selected accounts and date range |
| **Revenue** | Total revenue (from ad network or tracker — see [Ad Network vs. Tracker Revenue](/campaign-manager/revenue-sources)) |
| **NET** | Revenue minus Cost |
| **ROI** | Return on investment as a percentage |
# Working With Multiple Currencies
Source: https://docs.theoptimizer.io/campaign-manager/multiple-currencies
How TheOptimizer handles cost and revenue figures when your ad accounts operate in different currencies.
If all your ad accounts for a given network share the same currency, that currency symbol appears next to the cost figure in the Totals Bar and throughout the table.
If you have accounts in **multiple currencies**, TheOptimizer does not perform automatic currency conversion. Instead:
* The Totals Bar adds the raw values together regardless of currency
* An asterisk (`*`) replaces the currency symbol
* Hovering over the asterisk shows a tooltip confirming that multiple currencies are present
When accounts in multiple currencies are selected, treat the Totals Bar as a directional indicator — not an exact financial figure. For precise reporting, use the **Ad Accounts** filter to narrow down to accounts that share a single currency before reading the totals.
***
## Filtering by Currency Tag
Every ad account is automatically tagged with its currency when connected. You can use this tag in the **Ad Accounts** filter to instantly scope the view to a single currency — for example, selecting only `USD` accounts before running a report.
To add or customise account tags, go to **Integrations → Ad Network → Ad Accounts**.
# Navigation & Filtering
Source: https://docs.theoptimizer.io/campaign-manager/navigation-and-filtering
Switch between ad networks, drill down through campaigns, ad sets, and ads, and filter your view by any metric or attribute — all from a single unified interface.
## Ad Network Navigation
At the very top of the Campaign Manager you will find the ad network navigation bar. Every ad network you have connected to TheOptimizer appears here as an icon. Clicking an icon switches the entire campaigns view to that network — showing only campaigns, ad sets, and ads that belong to it.
If you do not see an ad network icon here, it has not been connected yet. Go to **Integrations** to add it.
***
## Ad Accounts Filter
Directly to the right of the ad network icons is the **Ad Accounts** filter. Instead of being locked to a single ad account at a time like in native ad managers, you can view and manage campaigns across all your accounts simultaneously — or narrow down to exactly the accounts you need.
Your selected accounts act as a persistent scope — all other filters and data in the view apply only within those accounts.
### Filtering by Tags
TheOptimizer automatically assigns two tags to every ad account when it is connected:
* **Timezone tag** — the time zone configured on that account (e.g., `UTC`, `America/Los_Angeles`)
* **Currency tag** — the currency of the account (e.g., `USD`, `EUR`, `GBP`)
These default tags let you instantly filter to, for example, all USD accounts or all accounts running on Eastern time. You can add your own custom tags from **Integrations → Ad Network → Ad Accounts** to create groupings that match your team structure, geo focus, or offer verticals.
### Searching for Specific Accounts
Inside the ad account filter, type to search for accounts by name. Select one or more accounts and click **Filter** to scope the Campaign Manager to only those accounts.
***
## Campaigns, Ad Sets & Ads
Three tabs sit above the main table: **Campaigns**, **Ad Sets**, and **Ads** (some networks use "Ad Groups" instead of "Ad Sets"). Each tab shows all items of that type across every selected ad account.
* Clicking a tab with **no items selected** shows all items of that type across your accounts — a cross-account view you cannot get in native ad managers.
* **Selecting one or more campaigns** on the Campaigns tab and then switching to Ad Sets filters the list to show only the ad sets belonging to those campaigns.
* **Selecting ad sets** and switching to Ads filters to show only ads within those ad sets.
This mirrors the drill-down navigation of native ad managers, but with cross-account breadth.
***
## Filters
The filtering bar sits below the Totals Bar and lets you search and filter campaigns, ad sets, or ads by virtually any metric or attribute. Click the **Search filters...** box to open the filter panel.
### Quick Conditions
At the top of the filter panel, **Quick Conditions** are pre-built single-click presets for the most common needs:
* **Delivering** — items with Impressions > 0 (receiving active traffic)
* **Profitable** — items with NET Profit > 0
* **Losing Money** — items with NET Profit \< 0
### Popular Filters & Categories
**Popular Filters** is a dynamically generated list of the filters you use most frequently. It updates as you work, surfacing the metrics you reach for regularly.
**Find by Category** is a structured directory of all available filter metrics:
| Category | What it contains |
| --------------- | ---------------------------------------------------------------------------------------- |
| **Performance** | Spend, impressions, clicks, CTR, CPC, CPA, ROI, revenue, NET, and other core metrics |
| **Conversions** | Traffic source conversions, tracker conversions, and custom conversion events |
| **Identifiers** | Campaign, ad set, and ad names and IDs — useful for filtering to a specific item by name |
| **Other** | Tags, budgets, start dates, statuses, and other non-metric attributes |
To find a specific metric quickly, start typing in the filter search box — you do not need to browse through the categories manually.
### Saving Custom Views
Once you have built a filter combination you want to reuse, save it as a **View**.
Add one or more filters to the filtering bar.
When at least one filter is active, a **Create View** button appears at the right of the filtering bar. Click it.
Enter a name for the view and click **Create**.
Saved views appear as clickable tabs above the filtering bar. A single click applies the entire filter combination instantly.
Create views for your most common morning review filters — for example, a "Profitable" view per network, or a "High Spend / No Conversions" view for catching wasted budget quickly.
# Campaign Manager
Source: https://docs.theoptimizer.io/campaign-manager/overview
Your unified workspace for managing campaigns, ad sets, and ads across all connected ad networks — all from a single table.
The Campaign Manager is the operational core of TheOptimizer. It replaces your native ad managers — Facebook Ads Manager, TikTok Ads, Taboola, Outbrain, and others — with a single workspace where you can view and act on campaigns, ad sets, and ads across every connected account at the same time.
Everything you would normally do inside a native dashboard can be done here, across all your ad accounts, at the same time — filtering, pausing, editing budgets, reviewing performance, and managing automation rules.
This guide walks through the Campaign Manager from top to bottom. Use the navigation on the left to jump to any section.
# Quick & Bulk Actions
Source: https://docs.theoptimizer.io/campaign-manager/quick-bulk-actions
Edit budgets and bids inline, pause or activate individual items, and apply actions to multiple campaigns at once using the bulk action bar.
## Inline Actions
For individual items, several actions are available directly in the table row without opening any dialog:
* **On/Off toggle** — the toggle at the left of each row pauses or activates the item immediately.
* **Budget** — if the budget cell is editable (indicated by a pencil icon on hover), click it to modify the daily or lifetime budget inline.
* **Bid** — bid values can be edited inline where supported by the ad network.
Click the value, make your change, and press **Enter** to confirm or **Escape** to cancel.
### Name Hover Options
Hovering over any campaign, ad set, or ad name in the table reveals three additional options to the right of the name:
| Option | What it does |
| ----------------------------- | ------------------------------------------------------------------------------------------------------- |
| **View Details** | Opens the full Details View side panel for that item |
| **Clone** | Starts the cloning workflow for the campaign, ad set, or ad |
| **Quick Details** (info icon) | Shows a compact popup with the campaign ID, ad account, advertising objective, budget, and bid strategy |
Use **Quick Details** to copy a campaign ID instantly. Hover over the campaign name, click the info icon, and the ID is right there — no need to open the full campaign settings.
***
## Bulk Actions
To act on multiple items at once, check the boxes at the left of each row. Once one or more items are selected, a floating action bar appears at the bottom of the page.
| Bulk action | What it does |
| ------------------------ | -------------------------------------------------------------- |
| **Play / Pause** | Activate or pause all selected items |
| **Change Budget** | Apply a budget change to all selected items at once |
| **Manage Tags** | Add or remove tags on selected items |
| **Add Rules** | Attach an automation rule to all selected items simultaneously |
| **Manage / Un-Manage** | Include or exclude items from TheOptimizer's automation scope |
| **Archive / Un-archive** | Archive campaigns you no longer want displayed |
**Archive** and **Manage / Un-Manage** are only available through the bulk action bar, not as inline row actions. These are higher-impact operations most commonly applied to multiple items at once, so they are intentionally kept out of the inline row to prevent accidental single-item changes.
# Ad Network vs. Tracker Revenue
Source: https://docs.theoptimizer.io/campaign-manager/revenue-sources
Understand the difference between ad network revenue and tracker revenue — and how to switch between them.
TheOptimizer can pull revenue data from two different sources: the **ad network** itself, or your connected **tracking platform**. The source you choose affects the Revenue column throughout the Campaign Manager and the Totals Bar.
***
## The Two Sources
**Ad Network Revenue** — revenue data passed directly by the ad network (e.g., Facebook, Taboola). This only works if you are actively sending revenue events back to the traffic source. If you do not, this figure will show `$0.00`.
**Tracker Revenue** — revenue attributed by your connected tracking platform (ClickFlare, Voluum, RedTrack, etc.). This is generally the more reliable source for performance marketers, as trackers receive click-level postbacks from your offer or landing page regardless of what the ad network tracks.
***
## How to Switch Sources
This setting is controlled from the **Dashboard** view — there is a toggle that switches between **Ad Network Revenue** and **Tracker Revenue**. Whichever option is active on the Dashboard also determines what the Campaign Manager shows.
If you see `$0.00` in the Revenue column despite having active campaigns, the most likely cause is that **Ad Network Revenue** is selected but you are not pushing revenue data to the traffic source. Switch to **Tracker Revenue** on the Dashboard and the correct figures will appear.
***
## Which Source Should You Use?
| Scenario | Recommended source |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| You use a third-party tracker (ClickFlare, Voluum, etc.) | **Tracker Revenue** |
| You send revenue events back to the ad network | **Ad Network Revenue** |
| You are not sure | **Tracker Revenue** — more reliable in most setups |
# Creative Library: Store, Analyze, and Reuse Creatives
Source: https://docs.theoptimizer.io/creative-library/guide
Aggregate creative performance across all campaigns, store and tag assets in one hub, and pull them into the Campaign Creator — no file sharing required.
The Creative Library is a centralized collection of all your ads, images, videos, and text copies pulled from every connected ad network and ad account. Instead of browsing creatives one campaign at a time inside Facebook, TikTok, or another ad manager, it brings everything together in one place and shows you how each creative performs across all the campaigns where it has been used. Your creative team can also upload and tag new assets here so media buyers can pull them directly into the Campaign Creator — no file sharing, no copy-pasting URLs.
## Why use the Creative Library
### Cross-campaign creative analysis
Native ad managers show you how an ad performs inside a single campaign. The Creative Library aggregates performance across every campaign, ad set, and ad account where a creative, image, video, or headline has been used — giving you a true picture of which assets are your winners. Sort by Spend, CTR, EPC, or usage count to instantly identify top performers and underperformers across your entire operation.
### Creative storage and organisation
The Creative Library serves as a centralized storage hub for all your ad assets. Upload images, videos, and text copies, organize them with tags, and keep everything in one place. No more scattered files across local folders, shared drives, or chat threads. When it is time to launch a new campaign, your assets are already inside the platform, tagged and ready to use.
### Bridge between creative team and media buyers
Most teams have a separation between the people who produce creatives and the people who launch campaigns. The Creative Library eliminates the handoff friction. The creative team uploads and tags assets; media buyers pull them by tag directly inside the Campaign Creator. No file sharing, no messages asking "where is that new batch?" — the workflow stays inside TheOptimizer.
### Creative performance feedback loop
After campaigns run, the creative team can come back to the Creative Library to review how their assets performed using the aggregated metrics across all campaigns. This makes it easy to spot which creative directions are working and which ones should be retired or iterated on — without needing access to the campaign management side of the platform.
### Safeguard against ad account loss
If you lose access to a Facebook ad account — whether due to a policy violation, a disabled Business Manager, or any other reason — all creatives from that account remain available in the Creative Library. TheOptimizer saves a local copy of every creative it pulls from your ad networks. Even if the original ad account is gone, your images, videos, and text copies stay accessible for reuse in new accounts and new campaigns.
***
## What's inside — Creatives, Media, and Headlines
Access the Creative Library from the left-hand navigation menu under **Creative Library**. Expanding it reveals three sub-sections:
This section shows full ads as they were pulled from your ad networks — the complete creative unit including image or video, headline text, primary text, and call to action.
Each card in the grid displays:
* A thumbnail preview of the ad
* The ad network icon it belongs to
* A badge showing how many campaigns it is used in
* Three key performance metrics: **Spend**, **CTR**, and **EPC**
This section extracts just the media — images and videos — from all your ads, without any text, headlines, or CTAs. Each image or video is treated as a unique asset.
If the same image has been used across 10 different ads in 10 different campaigns, the Creative Library recognizes it as one asset and shows the aggregated performance across all of them.
Video thumbnails show a **Play Video** badge so you can distinguish them from images at a glance.
This section extracts just the text copies — headlines and primary text — from all your ads and displays them independently. Each unique piece of text appears as its own card with aggregated performance metrics across every ad and campaign where it has been used.
This makes it easy to spot which copy is resonating and worth reusing, without having to check individual ads one by one.
***
## Aggregated performance metrics
This is the most powerful aspect of the Creative Library. Instead of showing performance for a single ad in a single campaign, every item in the library shows aggregated metrics across all campaigns where it has been used.
For example, if the same image has been uploaded as an ad across five campaigns in three different ad accounts, the **Media** section shows the total Spend, CTR, EPC, Revenue, Clicks, and Impressions from all five campaigns combined. The same applies to Creatives (full ads) and Headlines (text copies).
Each card in the grid shows three metrics at a glance: **Spend**, **CTR**, and **EPC**. For the full set — Revenue, Clicks, Impressions, and more — click on the item to open the Creative Details preview.
This cross-campaign view of creative performance is not available in any native ad manager, where performance is always scoped to a single campaign.
***
## Filtering, sorting, and search
The top bar of each section provides filtering and sorting options to help you find what you are looking for quickly.
**Filtering options:**
* **Metrics** — filter by performance thresholds. For example: show only creatives where Spend is greater than \$100, or CTR is above 2%. You can combine multiple metric conditions.
* **Tags** — filter by tags assigned to creatives. Useful when your team has tagged assets by campaign, media buyer name, creative batch, or any other convention.
* **Traffic Source** — filter by ad network to see only creatives from Facebook, TikTok, Taboola, or any other connected network.
* **Accounts** — filter by specific ad accounts.
**Sorting options:**
* **Spend Highest / Spend Lowest** — sort by total spend across all campaigns
* **Newest / Oldest** — sort by creation date
* **CPR** — sort by cost per result
* **Most Used / Least Used** — sort by the number of campaigns where the creative, image, or headline has been used
**Search** — search by text content, image name, or video name.
**Date picker** — adjust the date range for the performance metrics displayed. This controls the time window for all statistics shown on the cards.
**Show Uploaded Only** — a toggle on the right side of the toolbar. When turned on, the view filters to show only assets your team has manually uploaded to the Creative Library, excluding creatives that were automatically pulled from your running campaigns.
***
## Uploading new assets
Each section has its own upload button at the top: **+ Upload New Creatives**, **+ Upload New Media**, or **+ Upload New Headlines**.
### Uploading creatives
Click **+ Upload New Creatives** in the Creatives section. The upload screen has two main areas:
* **Headlines** — enter the headline text that will display with your media. Enter one headline per line. You can also click **Use Headlines from Creative Library** to pull in existing headlines already stored in the library.
* **Media** — upload images or videos by dragging them into the drop zone or clicking to browse. You can also click **Add Media from URL** to import from a URL, or **Use Media from Library** to pull in images or videos already stored in the Media section.
Limits: max 100 images and 20 videos per upload; minimum dimensions 100×100px.
The **Creatives Preview** panel on the right shows a live preview of the creative combinations that will be generated from the headlines and media you have added. Add tags at the bottom before clicking **Upload New Creatives** to submit.
### Uploading media
Click **+ Upload New Media** in the Media section. Drag images or videos into the drop zone or click to browse. You can also use **Add Media from URL** to import from external URLs.
The same limits apply: max 100 images, 20 videos, minimum 100×100px. Add tags at the bottom before clicking **Upload New Images and Videos** to submit.
### Uploading headlines
Click **+ Upload New Headlines** in the Headlines section. Enter your text copies in the text area — one headline per line. The **Headlines Preview** panel on the right shows a preview of what will be uploaded. Add tags at the bottom before clicking **Upload New Headlines** to submit.
### Uploading via API
For teams that want a fully automated pipeline, TheOptimizer supports uploading creatives, media, and headlines via API. This is useful when your creative team stores assets in a shared folder or DAM system — a technical team member can set up an automated process that pushes new files to the Creative Library automatically, with tags applied programmatically. Contact support or refer to the API documentation for details.
***
## Tagging
Tags are the organizational backbone of the Creative Library. Every creative, image, video, and headline can be tagged with one or more labels that you define.
**How to add tags:**
* **During upload** — use the **Tags** field at the bottom of the upload screen before submitting
* **After upload** — click on any item to open the Creative Details preview, then use **+ Add Tags**
* **In bulk** — select multiple items, then use the bulk action to add tags to all selected items at once
**Common tagging conventions:**
* By media buyer name — so each team member can filter to find their own creatives
* By creative batch or campaign — e.g., `March-batch-1`, `summer-promo`
* By content type — e.g., `UGC`, `product-shot`, `testimonial`
* By status — e.g., `approved`, `testing`, `winner`
Tags you add in the Creative Library are also available as filters inside the Campaign Creator when you are selecting media for a new campaign. This is what enables the team workflow described below — establishing a clear tagging convention is the single most important thing you can do to make the Creative Library effective.
***
## Creative Details preview
Click on any item in the grid to open the **Creative Details** dialog. It provides:
* **Preview** — a larger view of the creative, image, or headline
* **Tags** — view and add tags directly from this dialog
* **Ad Network** — which network this creative belongs to
* **Extended performance metrics** — the full set of aggregated KPIs: Spend, CTR, EPC, Revenue, Clicks, and Impressions (the grid view only shows three)
* **List of Campaigns** — every campaign where this creative is currently being used; each campaign name is clickable and takes you directly to that campaign in the Campaigns section
* **Clone Creative** — duplicate the creative within the library
The campaign list is particularly useful for auditing — you can see at a glance where a creative is running and click through to check performance or make changes at the campaign level.
***
## Bulk actions
Select multiple items in the grid by clicking their checkboxes or using **Select All**. Once you have a selection, the following bulk actions are available:
* **Delete** — remove the selected items from the library
* **Clone** — duplicate the selected items
* **Add Tags** — apply one or more tags to all selected items at once
Bulk tagging is especially useful when you receive a batch of new creatives and want to tag them all with the same label before your media buying team starts using them.
***
## Grid view vs. table view
The Creative Library supports two display modes, toggled from the icons in the top-right corner of each section:
* **Grid view** (default) — shows creatives as visual cards with thumbnails and three key metrics (Spend, CTR, EPC). Best for browsing visually and quickly recognizing images or videos.
* **Table view** — shows creatives in a row-based table with all performance columns visible. Best for comparing metrics side by side, sorting by specific columns, and working with large numbers of items where scanning a table is faster than scrolling a grid.
***
## Integration with the Campaign Creator
The Creative Library integrates directly into the Campaign Creator to streamline campaign creation. When you reach the media upload step in the Campaign Creator, you have the option to **browse and pull assets from the Creative Library** instead of uploading from your computer. You can filter by tags, sort by performance, and select the creatives you want to use — all without leaving the Campaign Creator.
This means your team does not need to re-download images from one place and re-upload them somewhere else. Assets already in the Creative Library are immediately available for any new campaign.
The same applies to headlines — when writing ad copy in the Campaign Creator, you can pull in text copies from the Creative Library's Headlines section.
For the best workflow, upload and tag your creatives in the Creative Library first, then open the Campaign Creator and filter by tag. This is faster than uploading from your computer every time — especially when different team members are responsible for creative production and campaign launching.
***
## Team workflow — creative team and media buyers
The Creative Library is designed to support a clear separation of responsibilities between creative production and campaign management.
The creative team uploads images, videos, and text copies to the Creative Library and tags them using the convention your team has agreed on — by media buyer name, campaign type, batch date, or any other system. This can be done manually through the interface or automatically via API.
When a media buyer opens the Campaign Creator to build a new campaign, they browse the Creative Library from within the launcher. They filter by tag, select the assets they need, and use them in the campaign — without coordinating directly with the creative team for file handoffs.
After campaigns have been running, the creative team returns to the Creative Library to check how their assets are performing using the aggregated metrics across all campaigns. This helps them identify winning creatives worth iterating on and underperformers that should be retired or reworked.
This cycle repeats regularly for most teams: produce → upload and tag → launch → review → iterate.
Establishing a clear tagging convention across your team is the single most important thing you can do to make the Creative Library effective. Without consistent tags, media buyers spend time searching instead of launching.
# Frequently Asked Questions — TheOptimizer
Source: https://docs.theoptimizer.io/faq
Answers to the most common questions about TheOptimizer — covering setup, automation, campaign creation, pricing, integrations, and troubleshooting.
This page covers the most common questions about TheOptimizer, organized by topic. If you do not find what you are looking for here, reach out to support directly.
## General platform and usage
TheOptimizer is built for media buyers, affiliate marketers, and performance marketing teams who run paid campaigns across multiple ad networks and need to manage, optimize, and scale them efficiently. Whether you are a solo media buyer or part of an agency managing dozens of ad accounts, TheOptimizer is designed to fit your workflow.
TheOptimizer connects your ad networks (like Facebook, TikTok, Taboola) and trackers (like ClickFlare, Voluum) in one dashboard. It lets you see accurate cost and revenue data in one place, automate optimization tasks (pausing ads, changing bids and budgets) via rules, and launch campaigns in bulk.
TheOptimizer supports: Facebook (Meta), Google Ads, TikTok, Taboola, Outbrain, MGID, RevContent, MediaGo, BigoAds, Adskeeper, NewsBreak, YahooDSP, and Trillion (Beta).
Yes. You can use TheOptimizer with ad network data alone. A tracking platform is optional.
Only if you set up automation rules and tell it to. Nothing happens by default — you decide what the platform is allowed to do, under what conditions, and on which campaigns. You control the thresholds, time windows, and actions for every rule.
For Facebook, Google Ads, and TikTok, you connect via OAuth — you log in with your account and grant standard ads management permissions. For native ad networks (Taboola, Outbrain, MGID, and others), you provide API credentials generated from within the ad network's own settings.
Yes. The **Campaigns** section shows all campaigns from all connected ad accounts for a given network in a single table. This is one of the main advantages over native ad managers, where you can only view one ad account at a time.
Data typically starts appearing within a few minutes. For newly added accounts, the platform pulls data for the past 30 days. Selecting a date range older than that may show no data initially.
Yes. The multi-user feature is available starting from the Master plan. Admins can invite sub-users and assign them access to specific ad accounts. Sub-users only see data for the accounts assigned to them.
***
## Automation rules
A **Standard Rule** applies only to the campaigns you manually select. If you launch a new campaign, you must add it to the rule manually. A **Global Rule** applies to an entire ad account — any new campaign launched in that account inherits the rule automatically. For safety nets like stop-loss rules, Global Rules are the safer choice.
Rules can pause or resume campaigns, ad sets, and ads; increase or decrease budgets and bids; clone campaigns; send email or Slack alerts; and more. Every action is conditional — it only fires when the conditions you define are met.
Check the **Logs** section and look at the generated logs for that campaign. The most common reasons a rule does not trigger are:
* The wrong metric is used in the conditions — for example, **Revenue** instead of **Revenue (tracker)**, or **Budget** instead of **Daily Budget**
* You have a time condition set and the time has not arrived yet
* The conditions were simply not met during the evaluation window
* An error occurred, which should be visible in the logs
If you are using Standard Rules, new campaigns must be added to the rule manually. Switch to a Global Rule so all future campaigns in that ad account are covered automatically.
***
## Campaign Creator
Campaign creation is supported for Facebook, Taboola, Outbrain, RevContent, MGID, and AdsKeeper. Native ad networks support both an interactive interface and an Excel bulk uploader. Facebook uses the interactive interface only.
Campaign creation is not currently supported for TikTok, Google Ads, MediaGo, or some other networks. The team is working to expand coverage — check with support for the latest progress.
Yes. Uploading new ads or ad sets is supported for all ad networks that support campaign creation.
The failed action appears in the **Campaign Creator Queue** along with an error message. You can use the **Retry** button to push the campaign again, or review the error message, make the necessary fixes, and then retry.
***
## Troubleshooting and common problems
The most common cause is that the revenue toggle in the **Dashboard** is set to the wrong option. TheOptimizer can display revenue from the ad network or from your tracker — check the toggle and make sure it is set to the correct revenue source.
This means you have ad accounts using different currencies (for example, USD and EUR). TheOptimizer does not perform automatic currency conversion — the total is a simple sum across currencies. Filter by individual accounts if you need accurate per-currency totals.
For newly connected accounts, the first data can take up to 30 minutes to appear. TheOptimizer also only pulls back 30 days of data by default — selecting a date range older than that will show empty stats. It can also take up to 20 minutes for the first data pull after you connect a new traffic source.
TheOptimizer does not have a global time zone setting. Each ad account uses its own timezone. If you have a tracker connected, TheOptimizer uses the ad account's timezone when pulling data from the tracker.
The two most common causes are:
1. **Timezone mismatch** — when comparing revenue and conversions between TheOptimizer and your tracker, make sure your tracker is set to the same timezone as the ad account in TheOptimizer.
2. **Missing campaign ID tracking** — if only a few campaigns are showing \$0 revenue, check that the campaign ID is being tracked and reported correctly on your tracker for those campaigns. TheOptimizer cannot pull revenue or conversions from the tracker if the campaign ID is not being tracked.
Facebook occasionally invalidates authorized sessions, which can cause your integration to stop working. When this happens, you will receive an email with all the instructions needed to re-authorize the connection.
***
## Pricing, subscriptions, and account management
TheOptimizer is priced by monthly ad spend volume:
| Plan | Price | Monthly ad spend coverage |
| ------ | -------- | ------------------------- |
| Tier 1 | \$199/mo | Up to \$20,000 |
| Tier 2 | \$399/mo | Up to \$50,000 |
| Tier 3 | \$699/mo | Up to \$100,000 |
| Tier 4 | Custom | Above \$100,000 |
Overage fees apply if you exceed your tier's limit, ranging from 1% to 0.6% depending on the plan.
Yes. TheOptimizer offers a trial period so you can explore the platform without being charged. You can cancel at any point during the trial to avoid being billed.
Cancel directly through the **Member Area**. Navigate to the membership login page to manage invoices and cancellation settings.
Your campaign data, rules, and configurations remain accessible until the end of your current billing period. After that, data retention follows the standard policy outlined in the terms of service.
***
## Integrations and data
TheOptimizer integrates with most major trackers, including ClickFlare (recommended), Voluum, RedTrack, Bemob, Binom, Everflow, Google Analytics 4, and others. See the full list in the **Integrations** section.
Yes. Use the **Google Sheets or CSV integration** — export your conversion and revenue data from your tracker into a Google Sheet, connect it to TheOptimizer, and the platform will sync from it automatically every 30 minutes. Alternatively, use the API to programmatically generate and push a CSV to TheOptimizer at regular intervals.
TheOptimizer does not perform automatic currency conversion — totals are displayed as a simple sum across currencies. To view accurate aggregated data, filter by individual accounts. You can also create **Custom Metrics** and manually apply exchange rates.
Yes. The **Campaigns** view has an export button at the bottom of the table. It exports everything currently displayed based on your active filters and date range.
Yes. TheOptimizer supports Google Analytics 4 and Google Sheets under **Analytics & Reporting** integrations. For content arbitrage operators, Assertive Yield is also supported. Search feed providers — Sedo, System1, and Tonic — can be connected for search arbitrage revenue data.
Yes. TheOptimizer supports uploading conversions, revenue, and other custom data by uploading a CSV file either manually or automatically using the API.
# Quick Start
Source: https://docs.theoptimizer.io/getting-started
This guide walks you through the five steps to go from a new TheOptimizer account to a fully operational setup. By the end, your ad networks will be connected, your campaigns will be visible in a unified view, and you will have automation rules running to protect and optimize your spend.
The first thing you need to do is connect at least one ad network. Without this, the platform has no campaign data to work with and cannot take any actions.
Go to **Integrations** in the left-hand menu and open the **Ad Networks** tab. You will see a grid of all supported networks. Click **Connect** on the network you want to add and follow the authorization flow.
* **Facebook, Google Ads, and TikTok** connect via OAuth — you log in with your account and grant standard ads management permissions.
* **All other networks** (Taboola, Outbrain, MGID, MediaGo, BigoAds, Adskeeper, RevContent, NewsBreak, YahooDSP, Trillion) connect via API credentials, which you generate from the ad network's own settings and paste into TheOptimizer.
Once connected, TheOptimizer automatically pulls in your campaigns, ads, and account data. If you have multiple ad accounts under the same network, they all appear under the integration and you can manage which ones are active from the **Manage Ad Accounts** section.
After connecting a new ad account, the initial data sync can take up to 20–30 minutes. If you see empty stats immediately after connecting, wait a few minutes and refresh.
You can add tags to your ad accounts (for example, by timezone or currency) from the **Integrations** section. These tags let you filter campaigns by account group with a single click from the main **Campaigns** view.
A tracking platform is not required, but it is strongly recommended. Connecting one gives you accurate cost and revenue data at the click level, browser and device breakdowns not available from ad networks alone, and a reliable revenue signal for your automation rules.
Go to **Integrations → Tracking Platforms** and connect your preferred tracker. TheOptimizer supports ClickFlare, Voluum, RedTrack, Bemob, Binom, Everflow, Google Analytics 4, and others.
If you do not already have a preferred tracker, ClickFlare is the recommended option. It offers deep integration with TheOptimizer and 24/7 support.
If your tracker is not on the supported list, you can use the **Google Sheets or Bring Your Own Data** integration as a workaround — export your conversion data to a Google Sheet and TheOptimizer will sync from it automatically every 30 minutes. Or upload a CSV file manually or push one via API.
Once your tracker is connected, check the revenue source toggle on your **Dashboard**. TheOptimizer can display revenue from the ad network or from your tracker — use the toggle to switch between them. If you see zero revenue in the **Campaigns** view, this setting is usually the cause.
Once your ad network is connected, go to **Campaigns** in the left-hand menu. This is the central hub where you view and manage everything across all your connected accounts.
At the top, a navigation bar shows all your connected ad networks as icons. Click one to enter the campaign view for that network. Next to it, the **Ad Accounts** filter lets you narrow down to specific accounts — or see all of them at once.
Below that, a totals bar shows your total spend, revenue, net profit, and ROI for the selected date range.
The main table has three tabs — **Campaigns**, **Ad Sets**, and **Ads** — that you can switch between freely. Selecting a campaign then switching to the **Ad Sets** tab shows only that campaign's ad sets.
**Key things to try:**
* **Filtering** — click the search bar above the table to access preset quick conditions (**Delivering**, **Profitable**, **Losing Money**) or filter by any metric, name, status, or tag. Save filters you use regularly as views — they appear as tabs above the filter bar for one-click access.
* **Column customization** — click the column settings icon at the bottom-left of the table to choose which columns are visible and in what order. Save multiple column presets and switch between them. You can also create custom metrics using your own formulas.
* **Details view** — hover over any campaign, ad set, or ad name and click **View Details**. This opens a side panel with performance charts, a change history log, attached automation rules, and publisher or site-level breakdowns for native ad networks. You can move to the next or previous item without closing the panel.
* **Keyboard shortcuts** — the Campaigns section is designed to be keyboard-navigable. You can launch the filter bar, navigate the table, and edit values without using the mouse.
Automation rules convert your manual optimization strategy into logic that TheOptimizer runs around the clock. A rule watches your campaigns for specific conditions — and when those conditions are met, it takes an action such as pausing a campaign, adjusting a budget, or sending you an alert.
Go to **Automation → Rules** in the left-hand menu and click **New Rule** — or **New Global Rule** if you want the rule to apply automatically to all new campaigns in an ad account.
The fastest way to get started is to load a pre-built rule from the template library. TheOptimizer includes stop-loss rules, scaling rules, dayparting setups, and more. Load a template, review the conditions, adjust the threshold values to fit your strategy, and activate it.
Set up your automation rules before your campaigns go live. Rules that are not attached to a campaign at launch must be added manually afterward, and there may be a window where the campaign runs without any protection.
Use **Global Rules** for your safety nets such as stop-loss rules. A Global Rule automatically covers every campaign in the assigned ad account — including new ones you launch later — so you never have an unprotected campaign.
Once you are familiar with the Campaigns section and have automation rules in place, the Campaign Creator lets you build and launch campaigns at a scale that is not possible in native ad managers.
Go to **Campaign Creator** in the left-hand menu. You will see a card for each supported network — click one to open the launcher.
**Supported networks:** Facebook, Taboola, Outbrain, RevContent, MGID, AdsKeeper.
Each network supports both an interactive interface and an Excel bulk uploader — except Facebook, which uses the interactive interface only.
**What makes it worth using:**
* Upload 50–100 creatives and automatically generate one campaign (or ad set) per creative, each with isolated budgets — in a few minutes
* Test multiple audiences, budgets, or placements by defining variation groups and letting the system create all permutations
* Launch the same campaign structure across multiple ad accounts simultaneously
* Save your configuration as a reusable template for future launches
* Attach automation rules during the launch flow so they are active from the first impression
After publishing, monitor the creation process in the **Campaign Creation Queue**. You will receive email notifications when the launch completes or if any item fails — and you can use the **Retry** button on any failed item directly from the queue.
# Connecting Ad Networks
Source: https://docs.theoptimizer.io/integrations/ad-networks
Connect Facebook, Google Ads, TikTok, Taboola, Outbrain, MGID, and other ad networks to TheOptimizer.
Ad networks are the primary source of campaign data and the target of all automation actions. TheOptimizer pulls spend, impressions, clicks, and conversion data from your connected ad networks, and sends back any actions your rules trigger — pausing campaigns, adjusting budgets, and so on.
You must connect at least one ad network before anything else in the platform can function.
## Supported Ad Networks
| Ad Network | Auth Method | Status |
| ---------- | ---------------------------- | --------- |
| Facebook | OAuth (login with Facebook) | Available |
| Google Ads | OAuth (login with Google) | Available |
| TikTok | OAuth (login with TikTok) | Available |
| Taboola | API credentials (key/secret) | Available |
| Outbrain | API credentials (key/secret) | Available |
| MGID | API credentials (key/secret) | Available |
| MediaGo | API credentials (key/secret) | Available |
| BigoAds | API credentials (key/secret) | Available |
| Adskeeper | API credentials (key/secret) | Available |
| RevContent | API credentials (key/secret) | Available |
| NewsBreak | API credentials (key/secret) | Available |
| Trillion | API credentials (key/secret) | Beta |
| YahooDSP | API credentials (key/secret) | Beta |
***
## Auth Methods
**OAuth (Facebook, Google Ads, TikTok)** — you log in directly with your social account. TheOptimizer stores a token after the OAuth flow completes. Tokens expire when you change your account password, the ad network detects suspicious activity, or security settings change. When a token expires, re-authentication is required.
**API credentials (all other networks)** — you enter an API key and secret provided by the ad network. These credentials do not expire unless you regenerate them in the ad network.
***
## Connecting an Ad Network
### OAuth Networks (Facebook, Google Ads, TikTok)
From the **Integrations** page, find the ad network and click **Connect →**.
Log in with your account and grant the requested permissions. For Facebook, you will be asked which Pages and Business Managers to include — select all current and future Pages to avoid re-authorising every time you add a new Page.
TheOptimizer shows a confirmation screen with the number of ad accounts added. Initial sync takes up to 20–30 minutes. Campaigns and ads may not appear immediately — this is expected.
From the confirmation screen, click **Connect Tracker** to link a tracking platform to this ad network. You can also do this later from the Integrations page.
For the full Facebook-specific setup guide — including Page selection, Business Manager access, and troubleshooting — see [Connect Facebook](/ad-networks/facebook/integration/connect).
### API Credential Networks (Taboola, Outbrain, MGID, and others)
Log in to the ad network's dashboard and locate your API key and secret. The exact location varies by network — typically found under Settings → API or Account → Integrations.
From the **Integrations** page, find the ad network and click **Connect →**.
Paste your API key and secret. Give the integration a name for your reference (e.g., "Taboola — Main Account").
Click **Connect**. TheOptimizer verifies the credentials and pulls in your ad accounts. Initial sync takes up to 20–30 minutes.
***
## Managing Ad Accounts
Once an ad network is connected, click on the integration to see the list of associated ad accounts.
**Enable / disable accounts** — use the ON/OFF toggle to pause syncing for a specific account. Pausing stops TheOptimizer from syncing data and running automation on that account but retains all historical data.
**Archive accounts** — archiving goes further than disabling. An archived ad account is fully hidden from the system: it no longer appears in dropdown selectors, filters, or the Campaign Creator, and TheOptimizer stops all processing — no data sync, no automation rules, no campaign visibility. Use this to permanently retire accounts you no longer want visible anywhere in the platform. Archived accounts can be restored at any time by filtering for archived accounts and using the Unarchive bulk action.
Both single-account and bulk archiving are supported. To archive a single account, hover its row and click the **Archive** inline action. To archive multiple accounts, select their checkboxes and click **Archive** in the bulk action bar that appears at the bottom. To view and unarchive archived accounts, use the **Filters → Archived** filter to surface them, then select and unarchive via the bulk action bar.
**Assign ad accounts to profiles** — each ad account uses one profile (the login or API credentials that TheOptimizer uses to access it). Ad account-to-profile assignments are managed from the Profiles panel: click **Manage Ad Accounts** on any profile card to open an assignment dialog where you can add or remove accounts from that profile. You can also reassign a single account directly from the ad accounts table by hovering its row and clicking **Edit**.
**Add tags** — tag ad accounts for organisation (by client, brand, vertical, or team) to make filtering and management easier across large account lists. Some tags (timezone, currency) are applied automatically.
**Customise tracker connections per account** — link a different tracker, pause the tracker connection, or edit the tracking template for a specific ad account without affecting other accounts in the same integration.
There is no limit on the number of ad accounts you can connect across all networks.
***
## Managing Profiles
A **profile** is the authentication credential TheOptimizer uses to access an ad network — either an OAuth token (Facebook, Google Ads, TikTok) or an API key/secret (all others).
**Multiple profiles** — you can add multiple profiles to a single ad network integration. This supports team management (each team member's own profile), backup access, and accounts under different logins.
**Syncing new accounts** — when you add a new ad account to a network you are already connected to, sync from your profile management settings to pull the new account in without going through the full connection flow again.
**Re-authentication** — OAuth tokens expire when you change your account password, the ad network flags suspicious activity, or security settings change. When this happens, TheOptimizer can no longer sync data or run automation for affected accounts. Re-authenticating refreshes the token without losing any account history or automation settings.
You will receive email notifications when an account needs re-authentication. If a profile becomes invalid and is not refreshed, all automation and data sync for accounts under that profile will silently stop. Check your integrations regularly, especially after changing passwords or seeing unexpected drops in data.
# Bring Your Own Data
Source: https://docs.theoptimizer.io/integrations/bring-your-own-data/connect
Import any conversion, revenue, or custom event data from your own tracking systems into TheOptimizer — with full control over the metrics you define and support for both manual CSV uploads and automated API delivery.
Bring Your Own Data is a flexible integration designed for teams who use their own internal tracking systems or third-party platforms that aren't natively supported by TheOptimizer. Instead of being limited to a fixed set of importable fields, you define exactly which metrics matter to your workflow — and then push that data in via CSV or API.
***
## Why Bring Your Own Data
Before this integration, TheOptimizer's CSV and Google Sheets import options only supported a fixed structure: conversions, clicks, and revenue. That was sufficient for basic use cases but left teams unable to bring in richer data like custom sales events, add-to-cart actions, upsell completions, or any other metric tracked in their backend.
Bring Your Own Data solves two specific problems:
**1. Flexible metric definition.** You create your own fields — give each one a name, choose a type, and TheOptimizer treats it as a proper metric across reporting and automation. You can define up to 50 fields in total across all your Bring Your Own Data integrations.
**2. API-based submission.** In addition to manual CSV uploads, every Bring Your Own Data integration generates a unique API key and endpoint instructions, so your technical team can automate the entire data delivery process.
***
## The Bring Your Own Data View
Navigate to **Integrations → Bring Your Own Data** to see all integrations you've created.
Each integration card shows the integration name and surfaces three quick actions directly on the card (see [Working with a Data Source](#working-with-a-data-source) below). You can create as many integrations as you need — for example, one per ad network, one per data provider, or one per team.
***
## Creating a Bring Your Own Data Integration
Click **Connect New Account** to open the configuration dialog.
### Integration Name
Give the integration a descriptive name that makes it easy to identify later — for example, `Internal CRM – US Revenue` or `Shopify Sales Data`. Since you can create multiple integrations, names that reflect the source or purpose are more useful than generic labels.
### Currency
Select the currency in which you'll be submitting data. This affects how all fields of type **Currency** are interpreted when they arrive.
If the ad accounts you're uploading data for use a different currency — for example, your data is in USD but your Taboola accounts report in EUR — TheOptimizer will automatically convert the submitted values to match each ad account's currency. You don't need to pre-convert your data; just select the currency your backend data is denominated in.
### Defining Data Fields
This is the core of the setup. Each data field becomes a column in your CSV template and a reportable metric in TheOptimizer.
To add a field: enter a name, select a type, and click **Add**. Repeat for every metric you want to import.
**Field types:**
| Type | Use when |
| ------------ | -------------------------------------------------------------------------------------- |
| **Number** | Whole-number counts — conversions, sales, clicks, add-to-cart events, page views, etc. |
| **Decimal** | Fractional values that aren't monetary — ratios, rates, scores |
| **Currency** | Monetary amounts — revenue, cost-per-sale, upsell value, etc. |
There is a **hard limit of 50 data fields total** across all Bring Your Own Data integrations in your account. If you've already created fields for one integration, those count toward this limit.
#### Reusing Fields Across Integrations
When you create a second (or third) Bring Your Own Data integration, you'll see a list of data fields already defined by your other integrations. You can toggle any of them **on** to include them in this integration's CSV template as well. Hovering over the lock icon on a field shows which integration owns it, its type, and its current status.
#### Active vs. Inactive Fields
Toggling a field off does **not** remove it from TheOptimizer's reporting or hide its data. It only removes that field from the downloaded CSV template for this integration, giving you a more compact upload file. If you stop tracking a particular metric temporarily, turning off its field keeps your CSV tidy without losing any historical data.
***
## Working with a Data Source
Once a Bring Your Own Data integration is created, three actions are available — directly from the card in the list view, or by opening **Edit**.
### Download CSV Template
Downloads a pre-formatted CSV file containing all your active data fields as column headers, plus the required system columns. The filename matches the integration name. Use this template as the base for every upload — do not add or rename columns manually.
See [CSV Format & Upload Guide](/integrations/bring-your-own-data/csv-guide) for a full explanation of how to fill in the template correctly.
### Upload CSV
Opens a file picker to upload a completed CSV directly. This is the manual upload path — useful for one-off imports or when you're not yet ready to automate via API.
You can also access this by clicking **Edit** on the integration and using the upload fields there.
### Send Data via API
Opens a dialog with everything needed to automate data submission programmatically:
* A **unique API key** scoped to this specific integration
* **Endpoint and request instructions** for sending the CSV file via API call
Hand these details to your technical team to build an automated pipeline — for example, a nightly job that generates the CSV from your backend and posts it to TheOptimizer automatically.
***
## Editing a Bring Your Own Data Integration
Click **Edit** on any integration card to open the same configuration dialog used during creation. From here you can:
* Rename the integration
* Change the currency
* Add new data fields or deactivate existing ones
* Access the upload and API panels
# CSV Format & Upload Guide
Source: https://docs.theoptimizer.io/integrations/bring-your-own-data/csv-guide
How to correctly structure your Bring Your Own Data CSV — required columns, per-level rows, and how to submit data manually or via API.
Every Bring Your Own Data integration revolves around a CSV file. TheOptimizer generates a template based on the data fields you've defined, and you fill it in with the actual metric values for each campaign item you want to report on. This page explains the format in detail and walks through both upload methods.
***
## Downloading the Template
From your Bring Your Own Data integration card (or the Edit dialog), click **Download CSV Template**. The file is named after your integration and contains:
* All your **active data fields** as column headers
* The **required system columns** that TheOptimizer needs to map each row to the right campaign item
Do not add, remove, or rename any columns. The template structure is what TheOptimizer expects when you upload.
***
## Required System Columns
In addition to your custom metric columns, every CSV template includes these required columns. They cannot be removed:
| Column | Description |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **date** | The date this row's data refers to, in `YYYY-MM-DD` format. Each row is attributed to a specific day. |
| **level** | The entity type being reported on. Accepted values vary by ad network but include: `campaign`, `ad_set`, `ad`, `site`, `section`, `domain`, and similar. |
| **campaign\_id** | The ad network's ID for the campaign this row belongs to. **Required on every row**, regardless of which level you're uploading data for. |
| **level\_id** | The ID of the specific item at the level you're reporting. For campaign-level rows this is the same as `campaign_id`. For ad set or ad rows, this is the ID of that specific ad set or ad. |
***
## One Row Per Item, Per Level, Per Date
This is the most important rule for structuring your CSV correctly: **TheOptimizer does not distribute data up or down the hierarchy automatically.**
If you upload 20 sales and \$2,000 in revenue for a campaign on a given day, TheOptimizer records those values at the campaign level only. It has no way of knowing which ad sets or individual ads generated those results — you have to tell it explicitly by providing separate rows.
### Example
Say you have a campaign with one ad set and three ads, and you want to upload today's data for all levels:
| date | level | campaign\_id | level\_id | sales | revenue |
| ---------- | -------- | ------------ | --------- | ----- | ------- |
| 2026-05-23 | campaign | 1000001 | 1000001 | 20 | 2000.00 |
| 2026-05-23 | ad\_set | 1000001 | 1000002 | 20 | 2000.00 |
| 2026-05-23 | ad | 1000001 | 1000003 | 8 | 800.00 |
| 2026-05-23 | ad | 1000001 | 1000004 | 7 | 700.00 |
| 2026-05-23 | ad | 1000001 | 1000005 | 5 | 500.00 |
Notice that:
* `campaign_id` is the same (`1000001`) on every row — it's the anchor that ties all rows to the right campaign.
* `level_id` changes per row to identify the specific item at each level.
* The ad-level rows add up to the ad set and campaign totals — but TheOptimizer does not enforce this. You're responsible for the consistency of your own data.
You don't need to include every level in every upload. If you only have campaign-level data, upload only campaign-level rows. Just be aware that ad sets and ads will show no data for those metrics unless you upload rows for them explicitly.
***
## Uploading the CSV
### Manual Upload
From the Bring Your Own Data integration card, click **Upload CSV** and select your completed file. TheOptimizer validates the structure and imports the data.
You can also upload from inside the **Edit** dialog — open the integration, scroll to the upload section, and attach your file there.
Uploads are additive for the specified dates. If you upload data for a date that already has data, the new upload will overwrite the existing values for the rows provided.
### API Upload
For automated workflows, use the API to submit your CSV programmatically. From the integration card, click **Send Data via API** to open the API instructions dialog. You'll find:
* A **unique API key** tied to this specific integration
* The **endpoint URL** and **request format** for submitting the CSV file
Share these with your development team to build an automated pipeline — for example, a nightly job that pulls data from your backend system, generates the CSV, and posts it to TheOptimizer. Once set up, the entire data delivery process runs without any manual steps.
Each Bring Your Own Data integration has its own API key. If you have multiple integrations, make sure you're using the right key for each one — submitting data with the wrong key will result in the data landing in the wrong integration.
***
## Common Mistakes to Avoid
**Missing `campaign_id` on non-campaign rows.** The campaign ID is required on every row, not just campaign-level ones. Rows without a valid `campaign_id` will be rejected.
**Uploading only campaign-level data and expecting ad-level reporting.** Data doesn't cascade down. If your rules or reports need ad-level metric values, you must upload ad-level rows.
**Using the wrong date format.** TheOptimizer expects `YYYY-MM-DD`. Dates in other formats (e.g., `05/23/2026` or `23-05-2026`) will not be parsed correctly.
**Uploading a modified template.** Adding columns not defined as data fields, or removing required system columns, will cause the upload to fail. Always use the downloaded template as your base.
# Custom Events
Source: https://docs.theoptimizer.io/integrations/custom-events
Import any custom event — and its revenue — from Facebook, Outbrain, and Taboola into TheOptimizer to use in reporting, rules, and custom metrics.
TheOptimizer can import **any custom event** — and the revenue generated by it — from **Facebook, Outbrain, and Taboola**. Once imported, custom events are available across the product: as columns in reporting, as conditions in rules, and as inputs to your own custom metrics (formulas).
Previously TheOptimizer only pulled the standard events for Facebook, and only the single main conversion event for Taboola and Outbrain — no custom events at all. That left many advertisers optimizing on incomplete data. Custom events close that gap, so you can optimize and scale on the KPIs that actually drive your business.
***
## Where to find it
Custom events are configured from the **Custom Events** tab inside the integration section of each ad network:
**Integrations → (Facebook / Outbrain / Taboola) → Custom Events**
Each ad network is configured independently, so you can import a different set of events per network.
***
## Sync your events
Click **Sync** and TheOptimizer queries the ad network for every available custom event. To give you a sensible starting point, it **automatically selects all events that had activity in the last 30 days**. You can then customize the selection — deselect events you don't need, or add events that were inactive in the last 30 days but that you still want to track.
Go to **Integrations**, open the ad network you want (Facebook, Outbrain, or Taboola), and select the **Custom Events** tab.
TheOptimizer pulls in all available custom events for that network and pre-selects the ones with activity in the last 30 days.
Add or remove events so the list reflects only the events you plan to use. Save your selection when done.
Each ad network allows a maximum of **60 custom events**. Because slots are limited, only select the events you actually plan to use in reporting, rules, or custom metrics.
***
## Native networks: Taboola & Outbrain
Custom events are a brand-new capability for Taboola and Outbrain. Until now, TheOptimizer could only import each network's single main conversion event. You can now sync any custom event these networks expose — along with its revenue — and use it exactly like a Facebook custom event: in reporting, as a rule condition, or inside a custom metric. This closes a long-standing gap for native media buyers who optimize on downstream events (leads, deposits, upsells) rather than the top-line conversion.
***
## Using custom events
Once synced, your custom events (and their revenue) are available everywhere metric data is used:
* **Reporting** — add custom events as columns and compare campaigns on the KPI that matters to you, not just the default conversion.
* **Rules** — use a custom event as a condition (for example, pause ad sets that spend without generating a "Purchase" event).
* **Custom metrics** — build your own formulas from custom events and their revenue (for example, cost per lead or return on ad spend based on a downstream event).
***
## Next Steps
* [Ad Network Integrations](/integrations/ad-networks) — connect Facebook, Outbrain, and Taboola
* [Rules Guide](/automation/rules-guide) — use custom events as conditions in automation
* [Custom Metrics](/campaign-manager/custom-metrics) — build formulas from your imported custom events
# Google Analytics & Google Sheets
Source: https://docs.theoptimizer.io/integrations/google-analytics
Connect Google Analytics 4 to bring behavioural metrics into TheOptimizer, or use Google Sheets as a manual conversion data feed for unsupported trackers.
## Google Analytics 4
If you are already running campaigns with a click-tracking platform and also using Google Analytics 4 to track on-site user behaviour — sessions, session duration, bounce rate, engagement rate — you can bring those GA4 metrics into TheOptimizer alongside your ad network and tracker data.
GA4 and a tracker can run side by side. TheOptimizer keeps their metrics in separate column sets — tracker metrics appear in their own columns and GA4 metrics in their own. You can display both in a single view and use metrics from either platform when building automation rules.
From the left-hand menu, go to **Integrations**, scroll down to the **Analytics & Reporting** section, and click **Connect** on the **Google Analytics 4** card.
Click **Connect New Account**, give the integration a descriptive name, then click **Connect**. This launches the Google authorisation flow — log in with the Google account that has access to your GA4 properties and click **Continue** to grant the required permissions.
The integration is not complete after authorisation alone. You have authorised TheOptimizer to access GA4, but you still need to link the integration to your ad accounts. Continue to the next step.
Go back to the **Integrations** page, open your **Ad Networks** section, and click on the ad network whose campaigns you are tracking with GA4 (for example, Facebook).
Select one or more ad accounts. A floating action menu will appear at the bottom of the screen — click **Manage Linked Trackers**.
In the dialog that appears, click **Connect Tracking Platform** and choose the GA4 integration you just added from the list.
If the GA4 integration does not appear in the list immediately, refresh the page and navigate back to the ad account selection.
After selecting the GA4 integration, a configuration dialog will open. Click **Add Analytics Property**.
Select the **GA4 account** accessible via the Google profile you used during authorisation, then select the **property** (the specific site whose data you want to use).
Choose which GA4 metrics you want to import. Some are pre-selected by default. Click **Add more metrics** to search for additional ones, or deselect any you don't need.
There is a hard limit of **60 metrics** across all your GA4 integrations combined. This applies to the total number of distinct metrics imported from all properties and all GA4 connections. Plan your selection carefully — import only the metrics you will actually use in your views or automation rules.
The macro mapping section is where you tell TheOptimizer how your campaigns are tracked in GA4 — which UTM parameter (or custom dimension) carries each ad network dimension.
**Standard UTM mapping for Facebook:**
| Facebook Macro | UTM Parameter |
| -------------- | ------------- |
| Campaign ID | utm\_campaign |
| Ad Set ID | utm\_medium |
| Ad ID | utm\_content |
| Placement | utm\_source |
If you are already using standard UTM parameters for other purposes (for example, passing campaign names rather than campaign IDs), create **custom dimensions** in GA4 and pass the required ad network IDs through those. You can then select those custom dimensions in the macro mapping instead of the standard UTM parameters.
TheOptimizer requires Campaign ID, Ad Set ID, Ad ID, and Placement to be flowing into GA4 — either via standard UTMs or custom dimensions — before this integration can work.
Once you have configured the macro mappings, click **Add** to save the property. You can add multiple properties at this stage. When done, click **Connect Tracker** to finalise the link between GA4 and the ad account.
After completing the integration:
* Allow **20–30 minutes** before GA4 metrics begin appearing in TheOptimizer.
* **Check your column visibility.** GA4 metrics are not displayed by default — go to your column settings and add the GA4 columns you want to see.
* If your campaigns are not yet passing macro data to GA4, append the tracking parameter code shown at the end of the setup flow to your campaign URLs.
***
## Google Sheets
The Google Sheets integration is the solution for users whose tracking platform is not natively supported by TheOptimizer. Instead of a direct API connection, you export conversion data from your tracker into a Google Sheet. TheOptimizer reads from that sheet automatically every 30 minutes and makes the data available alongside your ad network metrics — just like any natively integrated tracker.\\
From the left-hand menu, go to **Integrations**, scroll down to **Analytics & Reporting**, and click **Connect** on the **Google Sheets** card.
Give the integration a name — for example, the name of the platform you're exporting from.
Below the name field, click the link to clone the required Google Sheet template. If you are logged into a Google account, this automatically creates a copy in your Google Drive.
You must use the provided template. The Google Sheet must follow a specific structure for TheOptimizer to read it correctly — do not create your own sheet from scratch. Review each column's description carefully; the data format, column order, and naming must match the template exactly.
For TheOptimizer to read your Google Sheet, you must share it with TheOptimizer's service account. The service account email address is displayed in the integration dialog.
Copy the email address shown, then in Google Sheets: click **Share** in the top right, paste the service account email, grant it **Viewer** or **Editor** access, and click **Share**.
Without this step, TheOptimizer cannot access the sheet and the integration will fail. Complete the share before clicking Connect.
Back in TheOptimizer integration dialog, paste the Google Sheet URL into the URL field and select the currency that your revenue data is reported in. Click **Connect** — TheOptimizer will verify it can access the sheet.
Once the integration is live, TheOptimizer pulls data from your sheet every 30 minutes. You are responsible for keeping the sheet populated with up-to-date data, whether through a manual export or an automated export from your tracking system on a schedule.
**Data structure: one row per entity per level**
| Level | What to include |
| ----------------- | ----------------------------------------------------------------- |
| Campaign | One row per Campaign ID with its clicks, conversions, and revenue |
| Ad Set / Ad Group | One row per Ad Set ID with its clicks, conversions, and revenue |
| Ad | One row per Ad ID with its clicks, conversions, and revenue |
If a level is missing, TheOptimizer will not show data for that level. For example, if you only populate campaign-level rows, you will see Google Sheets data on campaigns but not on ad sets or ads.
# Integrations Overview
Source: https://docs.theoptimizer.io/integrations/overview
Connect ad networks, tracking platforms, analytics tools, and upload conversion data — everything TheOptimizer needs to manage and automate your campaigns.
Integrations are how TheOptimizer connects to the tools you already use. Without at least one ad network connected, the platform has no campaign data to work with and no actions it can take. Integrations are the first thing you set up, and the foundation everything else builds on.
TheOptimizer organises integrations into four categories:
**Ad Networks** — your primary source of campaign data and the target of all automation actions. TheOptimizer pulls spend, impressions, clicks, and conversion data from connected ad networks, and sends back rule-triggered actions (pausing campaigns, adjusting budgets, and so on). You must connect at least one ad network before anything else in the platform can function.
**Tracking Platforms** — sit between your ads and landing pages, providing accurate click-level reporting and advanced funnel analytics. They enable features like browser and device breakdowns, funnel management, and traffic distribution. Supported platforms include ClickFlare, Voluum, RedTrack, Bemob, Binom, Everflow, and others.
**Analytics & Reporting** — bring external reporting data into TheOptimizer alongside your ad network data. Includes Google Analytics 4 (behavioural metrics), Assertive Yield (yield analytics for content arbitrage), Google Sheets (for unsupported trackers), and Search Feeds (Sedo, System1, Tonic).
**Bring Your Own Data** — Upload any event data (manually or using our API) data from any source using a standardised CSV column format, for cases where no direct integration exists.
***
## Data Sync & Historical Data
### Data Sync Frequency
TheOptimizer syncs data from all connected ad networks and tracking platforms **every 30 minutes** by default. If you need more frequent updates, this interval can be lowered on request depending on your subscription plan:
| Plan | Minimum sync interval |
| --------------- | --------------------- |
| Starter | 30 minutes (default) |
| Pro | 20 minutes |
| Master / Custom | 10 minutes |
To request a lower sync interval, contact TheOptimizer support.
### Historical Data Pull
When you connect a new ad network or tracking platform for the first time, TheOptimizer automatically pulls **30 days of historical data**. This means your campaign history, spend, and conversion data will be available immediately after setup — you don't need to wait for live data to accumulate.
The time required to complete the historical pull varies depending on the amount of data in the account. Most accounts complete within **2–3 hours**. During this window, you may see partial data — this is expected and will resolve once the pull finishes.
***
## Next Steps
How to connect Facebook, TikTok, Taboola, and other ad networks.
Connect ClickFlare, Voluum, RedTrack, and other trackers.
Bring GA4 behavioural metrics and Google Sheets data into TheOptimizer.
Upload conversion data manually using a CSV or Google Sheet.
# Connecting Tracking Platforms
Source: https://docs.theoptimizer.io/integrations/tracking-platforms
Connect ClickFlare, Voluum, RedTrack, Bemob, Binom, Everflow, and other tracking platforms to bring conversion and revenue data into TheOptimizer.
Tracking platforms sit between your ads and your landing pages, providing accurate click-level reporting and advanced funnel analytics. They overcome the attribution limitations that come with cookie restrictions on ad networks, and enable features like browser and device breakdowns, funnel management, and traffic distribution.
Supported platforms include **ClickFlare**, **Voluum**, **RedTrack**, **Bemob**, **Binom**, **Everflow**, and others.
ClickFlare is the recommended tracking platform for users who don't already have a preferred tool. It offers robust features, deep integration with TheOptimizer, and 24/7 support.
***
## How Tracker Integration Works
Once connected, TheOptimizer matches tracker-reported conversions to specific campaigns, ad sets, and ads, and factors that data into your automation rules. Tracker metrics (clicks, conversions, revenue, CPA, EPC, ROI) appear as separate columns alongside your ad network metrics.
***
## Connecting a Tracking Platform
The steps below use **ClickFlare** as the example. The process is the same for all tracking platforms that use API key authentication.
\[The example below is using ClickFlare tracker]
From the **Integrations** page, click **Connect →** on your tracking platform. You'll be prompted to enter:
* **Integration name** — a label for this connection. Use something descriptive like "ClickFlare – Brand A".
* **API Key** — found in your tracker's settings or API section.
* **Currency** — the currency your tracker reports revenue in.
* **Conversion registration time** — choose whether conversions are reported at **visit time** (when the user lands) or **postback time** (when the conversion fires). This affects how data is matched across time windows.
The Currency and Conversion Registration Time settings must match what you have configured on your tracking platform. Using different options here will cause data discrepancies between TheOptimizer and your tracker.
After connecting your tracking platform, TheOptimizer prompts you to configure the tracker for each ad network you are already using with TheOptimizer. This tells the platform how to match tracker data to ad network data.\
\\
For each ad network listed, click **Connect →** and select the **tracking template** that corresponds to how you've set up your tracker for that network.
No data will be pulled from your tracking platform for ad networks that are not configured.
**Understanding tracking templates**
A tracking template is a set of macros that defines how your tracker reports campaign data for a specific ad network — which tracking parameter maps to the Campaign ID, Ad Set ID, Ad ID, and so on. These are typically called "Traffic Sources" on your tracking platform.
The **Choose a tracking template** dropdown shows all available tracking templates from your tracker. The template you select becomes the default for all ad accounts of that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any of these are missing, TheOptimizer will flag the issue and you'll need to fix the template in your tracker before proceeding.
Once a tracking template is selected for an ad network, the connection status updates to **Connected.**
Turn off the connection if you want to stop receiving data from your tracker for a specific ad network without removing the integration entirely.
Make sure the generated **tracking parameters code** is added to your campaigns on the ad network. This is what enables the tracker to receive the correct campaign and ad data and report it back to TheOptimizer.
Without the tracking code added to your campaigns, the tracker will receive visits but won't be able to match them to your campaigns IDs — meaning no conversion or revenue data will flow into TheOptimizer.
***
## The One Tracker Per Campaign Rule
Only one instance of a tracker type should track any individual campaign at a time. Using two instances of the same tracker type (for example, two ClickFlare trackers) on the same campaign causes conflicts in data matching and attribution.
Running multiple **different** tracker types simultaneously on the same campaign is fine — for example, using ClickFlare for affiliate attribution alongside Google Analytics on the same campaign is a supported and common setup.
***
## Customising Tracker Connections Per Ad Account
From your ad network's integration page, you can customise the tracker connection at the individual ad account level:
* **Link a different tracker** to a specific ad account
* **Pause the tracker connection** for an account without removing it
* **Edit the tracking template** for a specific account without affecting others in the same integration
This is useful when different ad accounts use different tracking setups, or when you're testing a new tracker on a subset of accounts before rolling it out fully.
# Upload Conversion and Revenue Data via CSV File
Source: https://docs.theoptimizer.io/integrations/upload-csv
Manually upload tracker, revenue, or publisher data into TheOptimizer using a CSV file — for delayed revenue, unsupported trackers, and backfilling.
If your tracking system, CRM, or internal reporting tool is not directly integrated with TheOptimizer via API, you can still bring your conversion and revenue data into the platform by uploading a CSV file. Once uploaded, this data is treated exactly like data pulled from an integrated tracker — it appears in your dashboards, feeds into calculated metrics like ROI and CPA, and can be used by your automation rules.
## When to Use CSV Upload
**Delayed or confirmed revenue.** You are running search feed arbitrage campaigns (Tonic, Sedo, System1, etc.) and revenue is only confirmed 24–36 hours after the click. You need to upload the confirmed numbers once they become available so your rules and reports reflect actual performance — not estimates.
**Unsupported tracker or CRM.** Your tracking platform is not one of the systems TheOptimizer integrates with via API. Rather than going without tracker data, you export a report from your tracker and upload it as a CSV.
**Manual reconciliation.** Conversions were not posted to your tracker in real time — delayed postbacks, server issues, or manual entry workflows. A CSV upload lets you backfill the missing data so your historical reports and rule evaluations are accurate.
**Internal reporting systems.** You track conversions in an internal database, a BI tool, or a spreadsheet. Exporting to CSV and uploading is the simplest way to get that data into TheOptimizer without building an API integration.
***
## Where to Find It
Go to **Automation** → **Stats Update** in the left-hand menu, then click **Upload CSV File**.
The **Manual Stats Update** page supports two workflows: pulling data on demand from a connected tracker (using the dropdowns at the top), and uploading a CSV file.
***
## Download the CSV Template
TheOptimizer provides a ready-made CSV template with all supported columns and the correct header names. Always start from this template.
[**Download the CSV Template (Google Sheets)**](https://docs.google.com/spreadsheets/d/1DGpytxaY-dJEW0G6OvNhcSew12H6BmNv3Wspt_r8u2E/edit#gid=0)
Make a copy of the template into your own Google Drive, fill in the data you need, then export it as a `.csv` file and upload it to TheOptimizer.
Column names must match the template exactly — including capitalisation. `TrackerRevenue` works; `tracker_revenue`, `Tracker Revenue`, or `Revenue` will not. If column names don't match, the upload will fail.
***
## How the CSV Works
**One row = one entity on one date.** Each row updates the data for a single entity (a campaign, an ad set, an ad, a widget, etc.) for a single date. If you want to update campaign-level revenue for three days, you need three rows — one per day.
**Rows are scoped to the entity type in that row.** If you enter a row with `Type=campaign` and `TrafficSourceCampaignId=12345`, the revenue in that row will only be updated at the campaign level for that campaign. Ads, ad sets, or other placements inside that campaign will not be updated. You need separate rows for each entity level you want to update.
**You can mix entity types in a single file.** A single CSV can contain rows for campaigns, ad sets, ad groups, ads, widgets, sections, and domains — all in one upload. The `Type` column tells TheOptimizer how to interpret each row.
**Data columns are additive — use only what you need.** Fill in only the columns relevant to your upload. Leave everything else empty.
**After upload, you will receive an email** with details about what was processed, including any errors (unrecognised campaign IDs, invalid dates, or formatting issues).
***
## CSV Column Reference
### Required Columns
These columns are required in every row.
| Column | Description |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Date** | The date being updated, in `yyyy-mm-dd` format (e.g., `2026-04-13`). |
| **Type** | The entity type being updated. Accepted values: `campaign`, `adset`, `adgroup`, `widget`, `site`, `publisher`, `content` (ad), `section`, `domain`, `exchange`. |
| **TrafficSourceCampaignId** | The campaign ID as it appears on the traffic source (Facebook, TikTok, Taboola, Outbrain, etc.). Always required — even when updating a sub-entity like an ad or widget — because it tells TheOptimizer which campaign the entity belongs to. |
### Entity ID Columns
Use the column that matches the `Type` value in your row. Leave all other entity ID columns empty.
| Column | When to Use |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| **TrafficSourceWidgetId** | `Type=widget`, `site`, or `publisher`. The ID must match the format shown in TheOptimizer's Widgets/Sites/Publishers tab. |
| **TrafficSourceContentId** | `Type=content` (ad). The ad ID as reported on the traffic source. |
| **TrafficSourceSectionId** | `Type=section` (Outbrain sections). |
| **TrafficSourceDomainId** | `Type=domain`. |
| **TrafficSourceSiteId** | `Type=site` (for platforms that distinguish sites from widgets). |
| **TrafficSourceExchangeId** | `Type=exchange`. |
| **TrafficSourceAdGroupId** | `Type=adgroup` (TikTok ad groups) or `Type=adset` (Facebook ad sets). The ad group or ad set ID from the traffic source. |
| **TrackerCampaignId** | Only for search feed data (Tonic, Sedo, etc.) where the tracker campaign ID is needed to match the data correctly. Leave empty in all other cases. |
### Data Columns
Fill in only the columns relevant to your upload. Leave all others empty.
Leave unused columns **empty** — do not enter zero. An empty cell means "no data to upload for this metric." A zero means "the value is zero" and will overwrite whatever is currently stored. Accidentally filling cost or revenue columns with `0` will wipe out that day's stored data for those entities.
| Column | Description |
| ---------------------------- | --------------------------------------------------------------------- |
| **TrackerClicks** | Clicks as reported by your tracking system. |
| **TrackerConversions** | Conversions as reported by your tracking system. |
| **TrackerRevenue** | Revenue as reported by your tracking system. |
| **TrafficSourceImpressions** | Impressions as reported by the traffic source. |
| **TrafficSourceClicks** | Clicks as reported by the traffic source. |
| **TrafficSourceConversions** | Conversions as reported by the traffic source. |
| **Cost** | Ad spend / cost as reported by the traffic source. |
| **TrafficSourceRevenue** | Revenue as reported by the traffic source. |
| **PublisherClicks** | Clicks as reported by your publisher integration (Tonic, Sedo, etc.). |
| **PublisherRevenue** | Revenue as reported by your publisher integration. |
| **PublisherConversions** | Conversions as reported by your publisher integration. |
***
## Examples by Platform
### Facebook — Campaign-level revenue
You are running Facebook campaigns tracked by an internal CRM and want to upload yesterday's confirmed revenue at the campaign level.
```csv theme={null}
Date,Type,TrafficSourceCampaignId,TrackerConversions,TrackerRevenue
2026-04-13,campaign,23851234567890,42,315.50
2026-04-13,campaign,23851234567891,18,127.00
```
All other columns are left empty. The campaign IDs are the Facebook campaign IDs as they appear in Ads Manager and in TheOptimizer.
### Facebook — Individual ads (Type=content)
To get revenue data at the ad level, use `Type=content` with the ad ID in `TrafficSourceContentId`.
```csv theme={null}
Date,Type,TrafficSourceCampaignId,TrafficSourceContentId,TrackerConversions,TrackerRevenue
2026-04-13,content,23851234567890,23851234500001,15,112.50
```
### TikTok — Campaigns and ad groups
TikTok uses "ad groups" instead of "ad sets". Use `Type=campaign` for campaign-level data and `Type=adgroup` for ad-group-level data. Leave `TrafficSourceAdGroupId` empty on campaign rows.
```csv theme={null}
Date,Type,TrafficSourceCampaignId,TrafficSourceAdGroupId,TrackerConversions,TrackerRevenue
2026-04-13,campaign,1790123456789,,30,240.00
2026-04-13,adgroup,1790123456789,1790123456001,18,144.00
```
### Native — Widget-level data with search feed revenue
Native traffic sources have additional entity types like widgets, sites, sections, and domains. For search feed data at the widget level, `TrackerCampaignId` is required — it tells TheOptimizer which tracker campaign to associate the publisher data with.
```csv theme={null}
Date,Type,TrafficSourceCampaignId,TrafficSourceWidgetId,TrackerCampaignId,PublisherRevenue,PublisherClicks
2026-04-13,widget,12345678,msn-home-network,vol-abc123,45.20,320
```
***
## Google Sheets — Automated Alternative
If you upload the same type of data every day — for example, confirmed search feed revenue each morning — consider using the **Google Sheets integration** instead. It uses the same column format as the CSV template, but TheOptimizer pulls data from your Google Sheet automatically every 30 minutes. You keep the spreadsheet up to date; TheOptimizer handles the rest.
**How to set it up:**
1. Go to the **Account Wizard** page and select the traffic source account you want to connect.
2. Click **Add New** in the tracker step and select **Google Sheets** from the tracking platform dropdown.
3. Clone the Google Sheets template into your own Google Drive.
4. Share your Google Sheet with TheOptimizer's service account by adding `optimizer-google-sheets@theoptimizerio.iam.gserviceaccount.com` as a viewer.
5. Paste the **Google Sheet URL** into TheOptimizer, select your currency, and save.
The column format and naming rules are identical to the CSV template, so if you've already been preparing CSV files you can use the same structure.
***
## Tips and Common Mistakes
**Always use the template.** Column names must match exactly — including capitalisation. Download the template and work from it to avoid formatting issues.
**Use `yyyy-mm-dd` for dates.** The date format must be `2026-04-13`, not `04/13/2026` or `13-Apr-2026`. If your spreadsheet application auto-formats dates into a different style, format the Date column as plain text before exporting.
**Campaign IDs must match exactly.** The `TrafficSourceCampaignId` must be the ID as it appears in TheOptimizer and on the traffic source — not a tracker campaign ID or an internal reference number. If an ID doesn't match, that row will be skipped and reported as an error in the confirmation email.
**One row updates one entity on one date.** If you want to update both the campaign level and the ad level for the same campaign on the same day, you need separate rows — one with `Type=campaign` and one with `Type=content`. The campaign-level row does not cascade down to ads.
**Leave unused columns empty — not zero.** See the warning in the [Data Columns](#data-columns) section above.
**Check your confirmation email.** After every upload, TheOptimizer sends an email summarising what was processed and any errors. If rows were skipped, the email will tell you why — usually an unrecognised campaign ID or a formatting issue in one of the columns.
# TheOptimizer.io - Your Advertising Co-Pilot
Source: https://docs.theoptimizer.io/introduction
TheOptimizer connects your ad networks and trackers in one dashboard so you can monitor performance, automate optimization, and launch campaigns at scale.
TheOptimizer is a campaign management and automation platform built for media buying teams, agencies, or solo marketers. It connects to your ad networks and tracking platforms, giving you a unified view of performance across all accounts, automation rules that run your optimization logic around the clock, and tools to launch campaigns at scale — all from a single dashboard.
## Who It's For
TheOptimizer is designed for anyone who runs paid campaigns across multiple ad networks and needs to manage them efficiently:
* **Solo media buyers or media buying teams** who want to automate repetitive optimization tasks and reclaim time
* **Affiliate marketers** running performance campaigns across native, social, and search networks
* **Performance marketing agencies** managing dozens of ad accounts across multiple clients
You can use TheOptimizer with ad network data alone — a third-party tracking platform is optional, though strongly recommended for accurate revenue attribution.
## Supported Ad Networks
TheOptimizer connects to all major paid traffic sources:
**Full integration:** Facebook (Meta), Google Ads, TikTok, Taboola, Outbrain, MGID, MediaGo, BigoAds, Adskeeper, RevContent, NewsBreak
**Beta:** Trillion, YahooDSP
## Supported Tracking Platforms
Connect your preferred tracking platform to bring accurate cost and revenue data into TheOptimizer for reporting and automation:
**Recommended:** ClickFlare
**Also supported:** Voluum, RedTrack, Bemob, Binom, Everflow, Google Analytics 4, AdsBridge, Cloud Thrive, CPV Lab, Funnel Flux, Funnel Flux Pro, Kintura, Keitaro
If your tracker is not on the supported list, you can use the Google Sheets or Bring Your Own Data integration as a workaround.
* Export your conversion data to a Google Sheet and TheOptimizer will sync from it automatically every 30 minutes.
* Use our Bring Your Own Data integration to upload your conversion, revenue or any other custom data using our API
## Key Features
View and manage campaigns, ad sets, and ads across all your connected ad accounts in a single unified table. Filter by performance conditions, save views, customize columns, and create custom metrics with your own formulas.
Convert your optimization strategy into rules that TheOptimizer runs 24/7. Rules can pause campaigns, adjust budgets and bids, send alerts, and more — triggered only when the conditions you define are met.
Launch campaigns at scale across Facebook, Taboola, Outbrain, RevContent, MGID, and AdsKeeper. Upload hundreds of creatives, auto-generate campaigns, and launch across multiple ad accounts simultaneously.
A centralized collection of all images and videos from your active campaigns across every connected account. Tag creatives so your team can filter and pull them directly inside the Campaign Creator.
# Logs
Source: https://docs.theoptimizer.io/logs/overview
A complete audit trail of every manual action and automated change across your campaigns — with detailed rule condition snapshots to help you understand exactly what happened and why.
Logs record everything that happens inside TheOptimizer: every manual change a team member makes, every action an automation rule fires, and every placement a Smart List blocks. Whenever you need to understand what changed, who changed it, why a rule fired, or why an action failed, Logs is where you start.
***
## How to Access Logs
There are two ways to access Logs, depending on how much scope you need.
**System-wide Logs** — accessible from **Logs** in the left-side navigation menu. This view shows every log entry across your entire account: all ad networks, all campaigns, all team members, all rules. Use this when you need to investigate across the whole account or when you're not sure which campaign to look in.
**Item-specific Logs** — accessible from within the **Campaign Manager**. Open the Details view for any campaign, ad set, or placement, then click the **Logs** tab. This shows only the log entries for that specific item, making it much easier to trace the history of a single entity without any noise.
***
## Log Types
Every log entry belongs to one of three types.
**Manual** logs are generated when a team member takes a direct action in the interface — changing a bid or budget, pausing or activating a campaign, cloning an ad set, and so on. Manual logs tell you who did what and when, which is essential when multiple people work across the same accounts.
**Rule** logs are generated automatically each time an automation rule executes. They capture what the rule did (or decided not to do), what the metric values were at the moment of execution, and whether the action succeeded or was skipped.
**List** logs are generated when a Smart List runs and blocks placements across campaigns. They tell you which placements were blocked, on which campaigns, and when.
***
## The Logs View
### Searching and Filtering
The filter bar above the table gives you several ways to narrow down the log entries:
* **Activity type** — show only Manual logs, Rule logs, or Smart List logs.
* **Item type** — filter to a specific level: campaign-level changes only, ad set changes, ad changes, placement changes, and so on.
* **Status** — filter by Completed, Failed, or show Info logs (see [No Change / Info Logs](#no-change--info-logs) below).
* **Rule** — show only logs generated by a specific automation rule. Useful for auditing what one rule has been doing.
* **Campaign** — show only logs that belong to a specific campaign.
* **Free text search** — the search bar accepts any text: a campaign name, an item name, a placement ID, or any other string present in the log data.
* **Date range picker** — on the right side of the filter bar, select a time window to show older or more recent logs.
A **column settings control** is also available below the filter bar, letting you show or hide specific columns from the table.
***
## Table Columns
| Column | Description |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Time** | UTC timestamp of when the log was recorded. All timestamps in Logs are in UTC — convert to your local timezone as needed. |
| **Type** | Whether this is a Manual, Rule, or Smart List log entry. |
| **Item** | The entity that was affected. Shows the ad network logo, the item name, and its ID. A quick-copy icon lets you copy the ID to your clipboard. |
| **Action** | What actually happened. For bid and budget changes, this shows both the original value and the updated value. For pause/activate actions, it shows the direction of the change. For cloning, it shows that a clone was started (see note below). |
| **Status** | The outcome: **Completed**, **Failed**, or **No Change** (see below). |
**Cloning actions** only log the start of the process. Because cloning involves a large amount of data and multiple steps, the full result is sent to you by email once the process completes. The log entry here confirms the clone was initiated and includes information about the source and target item.
***
## Status Values
**Completed** means the action was executed successfully. A rule fired, the condition was met, the change was applied, and the ad network confirmed it.
**Failed** means something went wrong. The action was attempted but did not succeed. Expanding a failed log entry (see below) will show the specific error that caused the failure.
**No Change** means a rule ran, evaluated all its conditions, but determined there was nothing to do at that moment. This is not an error — it is the system confirming the rule is still active and executing on schedule. Common reasons include:
* One or more conditions were not met (e.g., the spend threshold wasn't reached)
* The target value was already at the limit (e.g., a budget cap rule where the budget is already at the maximum allowed value)
### No Change / Info Logs
No Change logs are **hidden by default** to keep the table focused on meaningful activity. To show them, open the filter panel and toggle **Show Info Logs**, then apply the filter. Toggle them back off to hide them again when you're done.
***
## Expanding a Log Entry
Click on any row in the table to expand it and see the full details for that log entry.
The expanded view shows:
* **Timestamp, activity type, affected item** — the same information visible in the table row, presented in full detail.
* **Execution status** — Completed, Failed, or No Change.
* **Error details** (failed logs only) — a description of what went wrong, useful for diagnosing issues like insufficient permissions, API errors from the ad network, or configuration problems.
* **Rule conditions** (rule logs only) — for each condition defined in the rule, the expanded view shows:
* The condition as configured (e.g., "Amount Spent > 50% of daily budget")
* The actual metric value at the moment the rule executed (e.g., "Amount Spent was $48.20, daily budget is $100")
This makes it easy to see exactly why a rule fired or didn't fire. If a log is marked No Change and one condition's actual value didn't meet the threshold, that condition will be visible here.
**View Details button** — for a complete technical snapshot, click **View Details** inside the expanded log. This opens a full before-and-after JSON record of the log, showing the exact state of the item before the action and after. This is primarily useful for technical debugging or for users who want to verify the precise data the rule acted on.
***
## Exporting Logs
The Logs table supports export. Use the export option to download a copy of the current filtered view — useful for sharing with team members, auditing rule activity, or keeping records of account changes over a given period.
Page size is adjustable, and standard pagination controls let you navigate through large log histories.
# Connect AdsBridge
Source: https://docs.theoptimizer.io/tracking-platforms/adsbridge/connect
Connect AdsBridge to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
AdsBridge is a cloud-based tracking platform designed for affiliate marketers and media buyers. It provides click-level tracking, landing page hosting, traffic distribution, and real-time reporting — all from a hosted environment that requires no server management. AdsBridge is popular with teams that want an all-in-one solution combining tracking and landing page functionality.
***
## Where to Find Your API Credentials
Log in to AdsBridge → go to **Profile** → **API Settings** → copy your **Account ID** and **API Key**.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the AdsBridge card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "AdsBridge – Brand A").
* **Account ID** — paste the Account ID from your AdsBridge profile.
* **API Key** — paste the API Key from your AdsBridge profile.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains in AdsBridge, add them here using the **+ Add Domain** button. This ensures TheOptimizer can correctly attribute data from those domains.
The Currency and Conversion Registration Time settings must match what you have configured in AdsBridge. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match AdsBridge data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up AdsBridge for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your AdsBridge account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in AdsBridge before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from AdsBridge. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows AdsBridge to receive the correct campaign and ad identifiers and report them back.
Without this step, AdsBridge will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two AdsBridge integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, AdsBridge for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect Assertive Yield
Source: https://docs.theoptimizer.io/tracking-platforms/assertive-yield/connect
Connect Assertive Yield to TheOptimizer to bring publisher revenue data into your campaign reports and automation rules.
Assertive Yield is a publisher revenue analytics and yield optimisation platform. Unlike click-based trackers, Assertive Yield focuses on programmatic revenue data — tracking metrics like Prebid revenue, Dynamic Allocation, Sessions, RPM, and Viewability. It is commonly used by content publishers and media buyers who monetise inventory through programmatic advertising and want to connect publisher-side revenue to their traffic source spend.
Assertive Yield connects using your account email and password, not an API key. Make sure you use the credentials for the Assertive Yield account that owns the properties you want to track.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the Assertive Yield card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "Assertive Yield – Main").
* **Email** — the email address you use to log in to Assertive Yield.
* **Password** — the password for your Assertive Yield account.
After saving your credentials, TheOptimizer prompts you to add an **Assertive Yield Entity**. An entity represents a web property tracked in Assertive Yield (e.g. a website or domain).
Click **Add Assertive Yield Entity** and configure the tracking token mapping. This tells TheOptimizer how to match revenue data from Assertive Yield to your campaigns.
TheOptimizer supports passing all required tracking values through a single UTM parameter, so existing UTM configurations can be kept as-is while still correctly matching traffic source and Assertive Yield data.
If you track multiple web properties in Assertive Yield, add a separate entity for each one.
***
## What Data Assertive Yield Brings In
Once connected, TheOptimizer pulls publisher revenue metrics from Assertive Yield into your campaign reports. These include:
* **Revenue** (total, Prebid, Direct, Dynamic Allocation)
* **RPM** and **Session RPM** variants
* **Impressions**, **Sessions**, **Page Views**
* **Viewability** and **Value-RPM** metrics
For a full list of available metrics and their definitions, see the [Assertive Yield Metrics Reference](/tracking-platforms/assertive-yield/metrics).
# Assertive Yield Metrics Reference
Source: https://docs.theoptimizer.io/tracking-platforms/assertive-yield/metrics
Full list of Assertive Yield metrics available in TheOptimizer, including their definitions and calculation formulas.
Assertive Yield tracks a wide range of programmatic revenue metrics. Below is the complete list of metrics available in TheOptimizer when Assertive Yield is connected, along with the corresponding Assertive Yield metric name and formula where applicable.
Some metrics are **calculated metrics** derived from raw data rather than reported directly by Assertive Yield. Formulas are provided where relevant.
***
## Clicks & Sessions
| TheOptimizer Metric | Assertive Yield Metric | Formula |
| --------------------- | ---------------------- | ---------------------- |
| AY Clicks | Clicks | `clicks` |
| Clicks Bounced | Clicks Bounced | `clicksBounced` |
| Clicks Returned | Clicks Returned | `clicksReturned` |
| AY New Sessions | New Sessions | `session_starts` |
| AY Sessions | Sessions | `sessions` |
| AY Page Views | PageViews | `pageViews` |
| PageViews per Session | PageViews per Session | `pageViews / sessions` |
***
## Impressions
| TheOptimizer Metric | Assertive Yield Metric | Formula |
| ------------------------ | ----------------------------------- | -------------------------------------------------------- |
| AY Impressions | Impressions | `impressions` |
| D Impressions | D Impressions (Direct) | `direct_impressions` |
| DA Impressions | DA Impressions (Dynamic Allocation) | `dynamicAllocation_impressions` |
| DA Predicted Impressions | DA Predicted Impressions | `dynamicAllocation_predicted_impressions` |
| PB Lost Impressions | Prebid Lost Impressions | `prebid_lost_impressions` |
| PB Won Impressions | Prebid Won Impressions | `prebid_won_impressions` |
| P Impressions | Programmatic Impressions | `prebid_won_impressions + dynamicAllocation_impressions` |
| Nativo Impressions | Nativo Impressions | `nativo_impressions` |
| AY First Five Indicator | First Five Indicator | — |
| AY Viewable | Viewable | `viewable` |
| AY Line Item Revenue | Line Item Revenue | `lineItem_revenue` |
***
## Revenue
| TheOptimizer Metric | Assertive Yield Metric | Formula |
| --------------------------------- | --------------------------------- | ------------------------------------------------------------------------------- |
| Revenue | Assertive Yield Revenue | `prebid_won_revenue + dynamicAllocation_revenue + direct_revenue` |
| D Revenue | Direct Revenue | `direct_revenue` |
| DA Revenue | Dynamic Allocation Revenue | `dynamicAllocation_revenue` |
| DA Predicted Revenue (Client) | DA Predicted Revenue (Client) | `dynamicAllocation_predicted_revenue / 1000` |
| DA Predicted Revenue (Server) | DA Predicted Revenue (Server) | `dynamicAllocation_predicted_revenue_server / 1000` |
| DA Revenue with Forecast | DA Revenue with Forecast | `dynamicAllocation_revenue_with_forecast` |
| DA Revenue with Forecast (Client) | DA Revenue with Forecast (Client) | `dynamicAllocation_revenue_with_forecast_client` |
| PB Revenue | Prebid Revenue | `prebid_revenue` |
| PB Lost Revenue | Prebid Lost Revenue | `prebid_lost_revenue` |
| PB Won Revenue | Prebid Won Revenue | `prebid_won_revenue` |
| P Revenue | Programmatic Revenue | `prebid_won_revenue + dynamicAllocation_revenue` |
| P Revenue with DA Forecast | P Revenue with DA Forecast | `prebid_won_revenue + dynamicAllocation_revenue_with_forecast` |
| Revenue with DA Forecast | Revenue with DA Forecast | `prebid_won_revenue + dynamicAllocation_revenue_with_forecast + direct_revenue` |
| Nativo Revenue | Nativo Revenue | `nativo_revenue` |
| AY Line Item Revenue | Line Item Revenue | `lineItem_revenue` |
***
## RPM (Revenue Per Mille)
| TheOptimizer Metric | Assertive Yield Metric | Formula |
| --------------------- | ---------------------- | ------------------------------------------------------------------ |
| RPM | RPM | `revenue / impressions * 1000` |
| RPM with DA Forecast | RPM with DA Forecast | `revenue_with_forecast / impressions * 1000` |
| D RPM | Direct RPM | `direct_revenue / direct_impressions * 1000` |
| DA RPM | Dynamic Allocation RPM | `dynamicAllocation_revenue / dynamicAllocation_impressions * 1000` |
| PB RPM | Prebid RPM | `prebid_revenue / impressions * 1000` |
| PB Lost RPM (PBL RPM) | Prebid Lost RPM | `prebid_lost_revenue / prebid_lost_impressions * 1000` |
| PB Won RPM (PBW RPM) | Prebid Won RPM | `prebid_won_revenue / prebid_won_impressions * 1000` |
| P RPM | Programmatic RPM | `programmatic_revenue / programmatic_impressions * 1000` |
| NTV RPM | Nativo RPM | `nativo_revenue / nativo_impressions * 1000` |
***
## Session RPM
| TheOptimizer Metric | Assertive Yield Metric | Formula |
| ---------------------------- | -------------------------------------- | ----------------------------------------------------------- |
| Session RPM | Session RPM | `revenue / sessions * 1000` |
| Session RPM with DA Forecast | Session RPM with DA Forecast | `revenue_with_forecast / sessions * 1000` |
| D Session RPM | Direct Session RPM | `direct_revenue / sessions * 1000` |
| DA Session RPM | Dynamic Allocation Session RPM | `dynamicAllocation_revenue / sessions * 1000` |
| DA Session RPM with Forecast | DA Session RPM with Forecast | `dynamicAllocation_revenue_with_forecast / sessions * 1000` |
| PB Session RPM | Prebid Session RPM | `prebid_revenue / sessions * 1000` |
| PBL Session RPM | Prebid Lost Session RPM | `prebid_lost_revenue / sessions * 1000` |
| PBW Session RPM | Prebid Won Session RPM | `prebid_won_revenue / sessions * 1000` |
| P Session RPM | Programmatic Session RPM | `programmatic_revenue / sessions * 1000` |
| P Session RPM with Forecast | Programmatic Session RPM with Forecast | `programmatic_revenue_with_forecast / sessions * 1000` |
| NTV Session RPM | Nativo Session RPM | `nativo_revenue / sessions * 1000` |
***
## PageView RPM
| TheOptimizer Metric | Assertive Yield Metric | Formula |
| ------------------- | ------------------------------- | ---------------------------------------------- |
| PageView RPM | PageView RPM | `revenue / pageViews * 1000` |
| D PageView RPM | Direct PageView RPM | `direct_revenue / pageViews * 1000` |
| DA PageView RPM | Dynamic Allocation PageView RPM | `dynamicAllocation_revenue / pageViews * 1000` |
| PB PageView RPM | Prebid PageView RPM | `prebid_revenue / pageViews * 1000` |
| PBL PageView RPM | Prebid Lost PageView RPM | `prebid_lost_revenue / pageViews * 1000` |
| PBW PageView RPM | Prebid Won PageView RPM | `prebid_won_revenue / pageViews * 1000` |
| P PageView RPM | Programmatic PageView RPM | `programmatic_revenue / pageViews * 1000` |
| NTV PageView RPM | Nativo PageView RPM | `nativo_revenue / pageViews * 1000` |
***
## Value-RPM (Viewability-Adjusted)
Value-RPM metrics apply a viewability multiplier to RPM figures to give a quality-adjusted revenue estimate.
| TheOptimizer Metric | Assertive Yield Metric | Formula |
| ---------------------- | ------------------------------------- | ---------------------------------------------- |
| Value-RPM | Value RPM | `rpm * viewability` |
| Session Value-RPM | Session Value-RPM | `session_rpm * viewability` |
| PageView Value-RPM | PageView Value-RPM | `pageView_rpm * viewability` |
| D Value-RPM | Direct Value-RPM | `direct_rpm * viewability` |
| D Session Value-RPM | Direct Session Value-RPM | `direct_session_rpm * viewability` |
| D PageView Value-RPM | Direct PageView Value-RPM | `direct_pageView_rpm * viewability` |
| DA Value-RPM | Dynamic Allocation Value-RPM | `dynamicAllocation_rpm * viewability` |
| DA Session Value-RPM | Dynamic Allocation Session Value-RPM | `dynamicAllocation_session_rpm * viewability` |
| DA PageView Value-RPM | Dynamic Allocation PageView Value-RPM | `dynamicAllocation_pageView_rpm * viewability` |
| PB Value-RPM | Prebid Value-RPM | `prebid_rpm * viewability` |
| PB Session Value-RPM | Prebid Session Value-RPM | `prebid_session_rpm * viewability` |
| PB PageView Value-RPM | Prebid PageView Value-RPM | `prebid_pageView_rpm * viewability` |
| PBL Value-RPM | Prebid Lost Value-RPM | `prebid_lost_rpm * viewability` |
| PBL Session Value-RPM | Prebid Lost Session Value-RPM | `prebid_lost_session_rpm * viewability` |
| PBL PageView Value-RPM | Prebid Lost PageView Value-RPM | `prebid_lost_pageView_rpm * viewability` |
| PBW Value-RPM | Prebid Won Value RPM | `prebid_won_rpm * viewability` |
| PBW Session Value-RPM | Prebid Won Session Value-RPM | `prebid_won_session_rpm * viewability` |
| PBW PageView Value-RPM | Prebid Won PageView Value-RPM | `prebid_won_pageView_rpm * viewability` |
| P Value-RPM | Programmatic Value-RPM | `programmatic_rpm * viewability` |
| P Session Value-RPM | Programmatic Session Value-RPM | `programmatic_session_rpm * viewability` |
| P PageView Value-RPM | Programmatic PageView Value-RPM | `programmatic_pageView_rpm * viewability` |
***
## Win Rates & Ratios
| TheOptimizer Metric | Assertive Yield Metric | Formula |
| ------------------- | --------------------------- | --------------------------------------------- |
| Viewability | Assertive Yield Viewability | `viewable / impressions` |
| D Win Rate | Direct Win Rate | `direct_impressions / impressions` |
| DA Win Rate | Dynamic Allocation Win Rate | `dynamicAllocation_impressions / impressions` |
| PB Win Rate | Prebid Win Rate | `prebid_won_impressions / impressions` |
| P Win Rate | Programmatic Win Rate | `programmatic_impressions / impressions` |
| AY CTR | CTR % | `clicks / impressions * 100` |
| AY Miss-Click Rate | Miss-Click Rate | `clicksBounced / clicks` |
| Click-Leave Rate | Click-Leave Rate | `(clicks - clicksReturned) / clicks` |
| AY Ads Per Pageview | Ads per PageView | `impressions / pageViews` |
| AY Ads Per Session | Ads per Session | `impressions / sessions` |
***
For the full official Assertive Yield metric definitions, refer to the [Assertive Yield API documentation](https://suite.assertiveyield.com/docs/api-v2#calculated-metrics).
# Connect Bemob
Source: https://docs.theoptimizer.io/tracking-platforms/bemob/connect
Connect Bemob to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
Bemob is a cloud-hosted tracking platform built for affiliate marketers and performance advertisers. It offers click-level tracking, conversion attribution, and real-time reporting with a focus on simplicity and ease of setup. Bemob is commonly used by individual media buyers and small teams who want a reliable hosted solution without complex configuration.
***
## Where to Find Your API Credentials
Log in to Bemob → click your **profile name** in the top-right corner → **My Profile** → open the **API** tab → copy the **Access Key** and **Secret Key** shown.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the Bemob card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "Bemob – Brand A").
* **Access Key** — paste the Access Key from your Bemob profile.
* **Secret Key** — paste the Secret Key from your Bemob profile.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains in Bemob, add them here using the **+ Add Domain** button. This ensures TheOptimizer can correctly attribute data from those domains.
The Currency and Conversion Registration Time settings must match what you have configured in Bemob. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match Bemob data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up Bemob for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your Bemob account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in Bemob before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from Bemob. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows Bemob to receive the correct campaign and ad identifiers and report them back.
Without this step, Bemob will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two Bemob integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, Bemob for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect Binom
Source: https://docs.theoptimizer.io/tracking-platforms/binom/connect
Connect Binom to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
Binom is a self-hosted tracking platform designed for high-volume performance marketers. Because it runs on your own server, Binom delivers extremely fast click processing with no per-click fees. It is a favourite among serious affiliates and media buying teams who need full control over their data and infrastructure.
***
## Where to Find Your API Key
Log in to your Binom installation → go to **Admin panel** → **Settings** → **API** → copy the API Key shown.
Because Binom is self-hosted, you will also need the domain URL of your Binom installation when connecting in TheOptimizer.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the Binom card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "Binom – Brand A").
* **API Key** — paste the key you copied from Binom.
* **Tracker URL** — the domain of your Binom installation (e.g. `https://tracker.yourdomain.com`). Do not include `.php` at the end of the URL.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Secret Key** *(optional)* — if you have configured a secret key in Binom for additional API security, enter it here.
Do not include `.php` in the Tracker URL. Enter only the base domain (e.g. `https://tracker.yourdomain.com`), not `https://tracker.yourdomain.com/click.php`.
**URL Customization**
If you have customised the default paths in your Binom installation, expand the **URL Customization** section and update:
* **Login Page Path** — the path to your Binom login page (default: `login`).
* **Campaign Path** — the path used for campaign tracking links (default: `click`).
Leave these at their defaults unless you have specifically changed them in your Binom settings.
The Currency and Conversion Registration Time settings must match what you have configured in Binom. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match Binom data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up Binom for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your Binom account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in Binom before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from Binom. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows Binom to receive the correct campaign and ad identifiers and report them back.
Without this step, Binom will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two Binom integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, Binom for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect Binom2
Source: https://docs.theoptimizer.io/tracking-platforms/binomv2/connect
Connect Binom2 to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
Binom2 is the next generation of the Binom tracking platform, offering both self-hosted and cloud deployment options. It retains the speed and flexibility that made Binom popular among high-volume media buyers, while adding a modernised interface and improved API. Binom2 is suited for affiliates and teams who want powerful tracker capabilities with flexible infrastructure choices.
***
## Where to Find Your API Key
Log in to your Binom2 installation → go to **Settings** → **API** → copy the API Key shown.
You will also need the domain URL of your Binom2 installation when connecting in TheOptimizer.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the Binom2 card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "Binom2 – Brand A").
* **API Key** — paste the key you copied from Binom2.
* **Tracker URL** — the domain of your Binom2 installation (e.g. `https://tracker.yourdomain.com`).
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains in Binom2, add them here using the **+ Add Domain** button.
The Currency and Conversion Registration Time settings must match what you have configured in Binom2. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match Binom2 data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up Binom2 for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your Binom2 account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in Binom2 before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from Binom2. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows Binom2 to receive the correct campaign and ad identifiers and report them back.
Without this step, Binom2 will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two Binom2 integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, Binom2 for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect ClickFlare
Source: https://docs.theoptimizer.io/tracking-platforms/clickflare/connect
Connect ClickFlare to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
ClickFlare is a cloud-based tracking platform built for performance marketers and media buyers. It provides click-level tracking, attribution, and reporting across ad networks and affiliate offers. ClickFlare is popular with affiliates who need granular data without managing their own server infrastructure.
***
## Where to Find Your API Key
Log in to your ClickFlare dashboard → click your **profile avatar** in the top-right corner → **My Profile** → open the **API Keys** tab → copy the API Key shown.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the ClickFlare card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "ClickFlare – Brand A").
* **API Key** — paste the key you copied from ClickFlare.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
The Currency and Conversion Registration Time settings must match what you have configured in ClickFlare. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match ClickFlare data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up ClickFlare for that network.
The example below shows Facebook, but the same process applies to every ad network you use.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your ClickFlare account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in ClickFlare before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from ClickFlare. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows ClickFlare to receive the correct campaign and ad identifiers and report them back.
Without this step, ClickFlare will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two ClickFlare integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, ClickFlare for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect CloudThrive
Source: https://docs.theoptimizer.io/tracking-platforms/cloudthrive/connect
Connect CloudThrive to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
CloudThrive is a cloud-based tracking platform built for performance marketers and affiliate teams. It provides click-level attribution, real-time reporting, and campaign analytics from a fully hosted environment. CloudThrive is a good fit for teams looking for a reliable hosted tracker with straightforward setup and maintenance.
***
## Where to Find Your API Credentials
Log in to CloudThrive → go to your **Profile** or **Account Settings** → locate the **API** section → copy your **API Key** and **Install ID**.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the CloudThrive card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "CloudThrive – Brand A").
* **API Key** — paste the API Key from your CloudThrive account.
* **Install ID** — paste the Install ID from your CloudThrive account. This uniquely identifies your CloudThrive installation.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains in CloudThrive, add them here using the **+ Add Domain** button.
The Currency and Conversion Registration Time settings must match what you have configured in CloudThrive. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match CloudThrive data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up CloudThrive for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your CloudThrive account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in CloudThrive before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from CloudThrive. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows CloudThrive to receive the correct campaign and ad identifiers and report them back.
Without this step, CloudThrive will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two CloudThrive integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, CloudThrive for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect CPV Lab Pro
Source: https://docs.theoptimizer.io/tracking-platforms/cpvlab/connect
Connect CPV Lab Pro to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
CPV Lab Pro is a self-hosted tracking platform designed for performance marketers running CPV, PPV, display, and native campaigns. It offers advanced traffic distribution, split testing, and click-level reporting. CPV Lab Pro is popular with media buyers who want full control over their data and a tracker optimised for direct-linking campaigns.
***
## Where to Find Your API Key
Log in to your CPV Lab Pro installation → go to **Settings** → **API** → copy the API Key shown.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the CPV Lab Pro card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "CPV Lab – Brand A").
* **API Key** — paste the API Key from your CPV Lab Pro installation.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains, add them here using the **+ Add Domain** button.
The Currency and Conversion Registration Time settings must match what you have configured in CPV Lab Pro. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match CPV Lab Pro data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up CPV Lab Pro for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your CPV Lab Pro account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in CPV Lab Pro before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from CPV Lab Pro. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows CPV Lab Pro to receive the correct campaign and ad identifiers and report them back.
Without this step, CPV Lab Pro will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two CPV Lab Pro integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, CPV Lab Pro for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect Everflow (Beta)
Source: https://docs.theoptimizer.io/tracking-platforms/everflow/connect
Connect Everflow to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
Everflow integration is currently in **beta**. If you encounter any issues during setup, contact TheOptimizer support.
Everflow is a partner marketing and performance tracking platform used by affiliate networks, brands, and agencies. Beyond click-level tracking, it provides partner management, fraud prevention, and granular reporting across channels. Everflow is popular with teams running managed affiliate programmes alongside direct media buying.
***
## Where to Find Your API Key
Log in to your Everflow admin panel → go to **Settings** → **API Keys** → copy the primary API key shown.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the Everflow card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "Everflow – Brand A").
* **Account Type** — select whether you are connecting as an **Administrator** or an **Affiliate**. Choose the role that matches your access level in Everflow.
* **API Key** — paste the key you copied from Everflow.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
The Currency and Conversion Registration Time settings must match what you have configured in Everflow. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match Everflow data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up Everflow for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your Everflow account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in Everflow before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from Everflow. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows Everflow to receive the correct campaign and ad identifiers and report them back.
Without this step, Everflow will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two Everflow integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, Everflow for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect FunnelFlux
Source: https://docs.theoptimizer.io/tracking-platforms/funnelflux/connect
Connect FunnelFlux to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
FunnelFlux is a self-hosted tracking platform built around a visual funnel builder, making it uniquely suited for marketers running multi-step funnels, pre-sell pages, and complex traffic flows. It provides click-level attribution, A/B testing, and granular reporting. FunnelFlux is popular with affiliates who run sophisticated funnel-based campaigns and want full control over their tracking server.
***
## Where to Find Your API Key
Log in to your FunnelFlux installation → go to **Settings** → **API** → copy the API Key shown.
You will also need the domain URL of your FunnelFlux installation when connecting in TheOptimizer.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the FunnelFlux card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "FunnelFlux – Brand A").
* **API Key** — paste the API Key from your FunnelFlux installation.
* **Tracker URL** — the domain of your FunnelFlux installation (e.g. `https://tracker.yourdomain.com`).
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains in FunnelFlux, add them here using the **+ Add Domain** button.
The Currency and Conversion Registration Time settings must match what you have configured in FunnelFlux. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match FunnelFlux data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up FunnelFlux for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your FunnelFlux account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in FunnelFlux before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from FunnelFlux. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows FunnelFlux to receive the correct campaign and ad identifiers and report them back.
Without this step, FunnelFlux will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two FunnelFlux integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, FunnelFlux for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect FunnelFlux Pro
Source: https://docs.theoptimizer.io/tracking-platforms/funnelfluxpro/connect
Connect FunnelFlux Pro to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
FunnelFlux Pro is the cloud-hosted version of FunnelFlux, providing the same visual funnel builder and click-level tracking without the need to manage your own server. It is designed for performance marketers running multi-step funnels who want a fully managed infrastructure. FunnelFlux Pro is well suited for teams that want FunnelFlux's capabilities without the overhead of self-hosting.
***
## Where to Find Your API Key
Log in to FunnelFlux Pro → go to your **Account Settings** → open the **API** section → copy the API Key shown.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the FunnelFlux Pro card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "FunnelFlux Pro – Brand A").
* **API Key** — paste the API Key from your FunnelFlux Pro account.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains in FunnelFlux Pro, add them here using the **+ Add Domain** button.
The Currency and Conversion Registration Time settings must match what you have configured in FunnelFlux Pro. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match FunnelFlux Pro data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up FunnelFlux Pro for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your FunnelFlux Pro account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in FunnelFlux Pro before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from FunnelFlux Pro. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows FunnelFlux Pro to receive the correct campaign and ad identifiers and report them back.
Without this step, FunnelFlux Pro will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two FunnelFlux Pro integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, FunnelFlux Pro for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect Keitaro
Source: https://docs.theoptimizer.io/tracking-platforms/keitaro/connect
Connect Keitaro to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
Keitaro is a self-hosted tracking platform built for professional affiliates and media buying teams who want full control over their tracking infrastructure. It runs on your own server and supports advanced traffic distribution, A/B testing, and click-level reporting. Keitaro is widely used by teams that prioritise data ownership and custom filtering logic.
***
## Where to Find Your API Key
Log in to your Keitaro installation → go to **Settings** → **API** → copy the API Token shown.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the Keitaro card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "Keitaro – Brand A").
* **Api Key** — paste the API Token you copied from Keitaro.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
The Currency and Conversion Registration Time settings must match what you have configured in Keitaro. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match Keitaro data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up Keitaro for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your Keitaro account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in Keitaro before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from Keitaro. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows Keitaro to receive the correct campaign and ad identifiers and report them back.
Without this step, Keitaro will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two Keitaro integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, Keitaro for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect Kintura
Source: https://docs.theoptimizer.io/tracking-platforms/kintura/connect
Connect Kintura to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
Kintura is a high-performance tracking platform designed for media buyers and affiliate teams who need fast, accurate click-level attribution. It combines a clean interface with powerful reporting and supports a wide range of traffic sources. Kintura is known for its speed and is used by teams running large volumes of traffic who cannot afford tracking latency.
***
## Where to Find Your API Credentials
Log in to Kintura → go to **Settings** → **API** → copy your **API Key** and **API Secret**.
You will also need the domain URL of your Kintura tracker when connecting in TheOptimizer.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the Kintura card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "Kintura – Brand A").
* **API Key** — paste the API Key from your Kintura account.
* **API Secret** — paste the API Secret from your Kintura account.
* **Tracker URL** — the domain of your Kintura tracker (e.g. `https://tracker.yourdomain.com`).
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
The Currency and Conversion Registration Time settings must match what you have configured in Kintura. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match Kintura data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up Kintura for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your Kintura account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in Kintura before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from Kintura. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows Kintura to receive the correct campaign and ad identifiers and report them back.
Without this step, Kintura will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two Kintura integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, Kintura for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect RedTrack
Source: https://docs.theoptimizer.io/tracking-platforms/redtrack/connect
Connect RedTrack to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
RedTrack is a cloud-based ad tracking and analytics platform designed for performance marketers, media buyers, and affiliate teams. It supports multi-channel attribution, real-time reporting, and direct integrations with major ad networks. RedTrack is a popular choice for teams that want a hosted solution with a clean interface and strong direct-linking capabilities.
***
## Where to Find Your API Key
Log in to RedTrack → click the **gear icon** in the top-right corner to open **Account Settings** → go to the **API** tab → copy your API Key.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the RedTrack card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "RedTrack – Brand A").
* **API Key** — paste the key you copied from RedTrack.
* **Enable Enterprise API** — toggle this on if you have RedTrack's Enterprise API enabled on your account. This activates premium API access for advanced tracking features.
* **Revenue metric** — select which revenue metric you want to pull from RedTrack as revenue: Conversion Revenue or Total Revenue.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains in RedTrack, add them here using the **+ Add Domain** button. This ensures TheOptimizer can correctly attribute data from those domains.
The Currency and Conversion Registration Time settings must match what you have configured in RedTrack. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match RedTrack data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up RedTrack for that network.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your RedTrack account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in RedTrack before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from RedTrack. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows RedTrack to receive the correct campaign and ad identifiers and report them back.
Without this step, RedTrack will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two RedTrack integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, RedTrack for affiliate attribution alongside Google Analytics for on-site behaviour.
# Connect Voluum
Source: https://docs.theoptimizer.io/tracking-platforms/voluum/connect
Connect Voluum to TheOptimizer to bring click-level conversion and revenue data into your campaign reports and automation rules.
Voluum is a cloud-hosted performance tracking platform widely used by affiliate marketers and media buying teams. It offers real-time reporting, anti-fraud features, and deep integration with major ad networks. Voluum is particularly popular among teams running large-scale campaigns that require robust click-level attribution and A/B testing.
***
## Where to Find Your API Credentials
Log in to Voluum → click your **account name** in the top-right corner → **Settings** → open the **API Access** tab → copy the **Access Key ID** and **Access Key** shown. If no keys exist yet, click **Generate** first to create them, then copy both values.
***
## Connecting to TheOptimizer
From the left-hand menu, go to **Integrations**. Scroll to the **Tracking Platforms** section, find the Voluum card and click **Connect →**.
Fill in the connection form:
* **Integration name** — a label for this connection (e.g. "Voluum – Brand A").
* **Access Key ID** — paste the Access Key ID from Voluum.
* **Access Key** — paste the Access Key from Voluum.
* **Currency** — the currency your tracker reports revenue in. Must match your tracker's settings.
* **Conversion registration time** — choose **Visit time** (conversion counted when user lands) or **Postback time** (counted when conversion fires). Match this to your tracker's setup.
* **Custom Domains** *(optional)* — if you use custom tracking domains in Voluum, add them here using the **+ Add Domain** button. This ensures TheOptimizer can correctly attribute data from those domains.
The Currency and Conversion Registration Time settings must match what you have configured in Voluum. Mismatched settings will cause data discrepancies.
After saving the credentials, TheOptimizer prompts you to configure the tracker for each connected ad network. This step tells the platform how to match Voluum data to your campaigns.
Click **Configure →** next to each ad network and select the **tracking template** that matches how you set up Voluum for that network.
The example below shows Facebook, but the same process applies to every ad network you use.
**Understanding tracking templates**
A tracking template is a set of macros that maps your tracker's URL parameters to ad network identifiers (Campaign ID, Ad Set ID, Ad ID, Placement). The dropdown shows all templates available from your Voluum account. Select the one you use for that ad network.
Required macros: a template must include mappings for **Campaign ID**, **Ad Set ID**, **Ad ID**, and **Placement**. If any are missing, TheOptimizer will flag the issue — fix the template in Voluum before proceeding.
Once a template is selected, the connection status for that ad network updates to **Connected**.
Ad networks where you have not selected a tracking template will not receive any data from Voluum. Configure every network you actively use.
TheOptimizer generates a **tracking parameters code** at the end of setup. Add this URL parameter string to your campaigns on each ad network. This is what allows Voluum to receive the correct campaign and ad identifiers and report them back.
Without this step, Voluum will receive visits but won't be able to match them to specific campaigns — no conversion or revenue data will appear in TheOptimizer.
***
## One Tracker Type Per Campaign
Only one instance of a tracker type should track any individual campaign at a time. Running two Voluum integrations against the same campaign causes attribution conflicts.
Running **different tracker types** side by side on the same campaign is fine — for example, Voluum for affiliate attribution alongside Google Analytics for on-site behaviour.