# Campaigns

> Creating and managing campaigns, adding items, understanding nested campaign stats, and circular reference prevention.

## What is a campaign?

A campaign is a named grouping of creators, videos, and/or other campaigns within a project. It gives you **aggregate stats** across all its items: total views, likes, comments, shares: updated over time.

Campaigns are **mixed-platform**: the creators and videos you add can be on TikTok or Instagram in any combination, and their stats roll up together with a per-platform breakdown (see [Campaign stats](#campaign-stats)).

Common uses:
- A brand partnership with 5 creators and their relevant videos across TikTok and Instagram Reels
- A product launch broken into sub-campaigns by platform push date
- An always-on program with quarterly sub-campaigns nested inside

## Creating a campaign

In your project, go to **Campaigns → New Campaign** and enter a name. That's the only field in the dialog.

After you create the campaign, open it and use the **Info** tab to write its README (see [Campaign README](#campaign-readme)). To set a view target or deadline, click **Edit** (see [View target and target date](#view-target-and-target-date)).

## Adding items

A campaign can contain any combination of:

| Item type | What gets counted |
|-----------|-----------------|
| **Creator** | All `included` / `auto_tracked` / `direct_add` videos from that creator |
| **Video** | That specific video only |
| **Sub-campaign** | Recursively: all items in that campaign and its children |

To add items, open the campaign's **Members** tab. It has three sections, **Creators**, **Videos** and **Sub-campaigns**, and each has its own **+ Add** button. The button opens the add dialog on the matching tab. Search creators and videos by name; the Campaigns tab lists the project's other campaigns.

## Nested campaigns

Campaigns can nest arbitrarily deep. When you fetch stats for a parent campaign, trackagoat recursively resolves the full tree: you never need to manually aggregate sub-campaigns.

```text
2026 Program
  └── Q1
        ├── January Launch (videos by creator A)
        └── February Expansion (creators B & C)
  └── Q2
        └── Spring Push (creators A, B, D + direct videos)
```

Fetching stats for `2026 Program` gives you the union of everything under it.

> **Warning: Circular reference prevention**
>
> trackagoat prevents circular campaign references at the API layer. You cannot add Campaign B to Campaign A if Campaign B already (directly or transitively) contains Campaign A. The UI will show an error if you attempt this.

## Campaign stats

The campaign stats view shows:

- **Views over time**: daily total view count across all items in the campaign
- **Top videos**: highest-performing videos by view count
- **Top creators**: most viewed creators in the campaign
- **Video count by day**: how many videos were added to the campaign over time
- **By platform**: views and video count for each platform in the campaign, with each platform's share of total views

Stats are computed over a configurable date range (default: last 30 days).

## View target and target date

Give a campaign a view goal from **Edit** on the campaign page. Under **Goal (optional)**, set either field or both:

- **View Target**: the total views you want the campaign to reach.
- **Target Date**: the day the target is due, in your org's timezone.

Campaigns with a target show in the **Campaign Progress** panel on Campaign Insights, with a progress bar, days left and a status:

| Status | When |
|--------|------|
| **Completed** | Views have reached the target. |
| **On Track** | Views are at 80% or more of the target and the date hasn't passed. |
| **At Risk** | Views are under 80% of the target, or only a date is set, and the date hasn't passed. |
| **Missed** | The date has passed without reaching the target. |

Clear both fields to remove the goal.

## Campaign README

Each campaign has a README on its **Info** tab. Use it for:
- Campaign strategy and objectives
- Notes on what the campaign includes or excludes
- Context for AI agents ("this campaign excludes sponsored content")

The README is readable and writable through the API as the `readme` field, and agents can add to it with the MCP tool `update_notes`. If it changes while you're editing it (a teammate or an agent saved first), saving stops and asks you to reload, and your unsaved draft is kept so you can copy it back in. See [Notes and documents](https://www.trackagoat.com/docs/agents/notes.md).

- [Creator Goals](https://www.trackagoat.com/docs/guides/goals.md): Set per-creator performance targets and track compliance.
- [Analytics](https://www.trackagoat.com/docs/guides/analytics.md): Analyze campaign performance trends over time.
- [API reference: Campaigns](https://www.trackagoat.com/docs/api-reference/campaigns.md): Access campaign data programmatically via the API.

---
Source: https://www.trackagoat.com/docs/guides/campaigns
