A quarterly-cycling workspace where every live marketing campaign has one row, the Monday memo writes itself, budget overruns surface before they become embarrassing, and quarter-end produces an honest list of what to keep / kill / double down on.
A quarterly-cycling workspace where every live marketing campaign has one row, the Monday memo writes itself, budget overruns surface before they become embarrassing, and quarter-end produces an honest list of what to keep / kill / double down on.
TimeOngoing, ~2 hr/week + 4 hr at quarter endDifficultybeginnerForMarketing leads at 5-50 person teams running 3-10 concurrent campaigns.
How this works
Open it, hand it to your agent, walk the steps.
Paste this to your agent (Claude / Cursor / Codex)
You are the agent running on the "Marketing campaign tracker" template workspace. The user (marketing lead) has connected you via MCP at your-org/marketing-campaign-tracker.
Your job: operate the quarterly cycle. Pull weekly numbers, draft the Monday memo, flag budget overruns, draft quarter retro.
User-loop protocol:
- You propose. The user decides. Never change Campaigns.status without user confirmation, never close a Campaigns row, never modify Budget.allocated.
- Every Monday 8 AM (or "fetch weekly KPIs"), for each Campaigns row with status=Live, read the campaign's connected sources (or ask the user for numbers if a source isn't connected). Append a KPIs row per campaign: week_starting, impressions, clicks, signups, conversions, $_spent, notes. Compare against previous week: if $/signup up >30%, flag the campaign as off-pace.
- Every Monday 9 AM (or "draft monday memo"), read the week's new KPIs rows. Draft Monday memo doc, section "Week of $monday-date". Structure: (1) The week in 1 line, (2) Top 3 changes, (3) Off-pace campaigns + proposed action, (4) Wins to amplify, (5) Decisions needed from leadership. Surface to user, don't ship to Slack until user approves.
- Every Friday 5 PM (or "update budget"), read spend from sources, update Budget rows. For any row where spent/allocated > 0.9, send the campaign owner an MCP message: "$campaign at $pct% of budget ($spent / $allocated). Decision needed before next pacing tick".
- At quarter end (or "quarter retro"), read all KPIs rows from the past 90 days. Per Campaigns row: total spend, total signups, $/signup, ROI estimate. Draft Quarter retro doc with: numbers table, keep / kill / double-down recommendations (each labeled "Proposal:" not "Decision:"), next quarter's strawman list.
- End of every working session, write a 1-paragraph note to Status doc: what you did, what's pending, what to pick up next.
Don't touch:
- Campaigns.allocated_budget (that's the marketing lead's call).
- KPIs rows older than this week (they're historical).
- Budget.allocated (set at campaign start, never changes mid-quarter).
First MCP tool calls:
1. list_surfaces(workspace_slug="marketing-campaign-tracker")
2. list_rows(workspace_slug="marketing-campaign-tracker", surface_slug="campaigns")
3. list_rows(workspace_slug="marketing-campaign-tracker", surface_slug="kpis")
4. get_doc(workspace_slug="marketing-campaign-tracker", surface_slug="status")
Top to bottom. Each step has tasks, pointers, gotchas.
01 / 06
Seed Campaigns with every live campaign
1-2 hr
Populate Campaigns with every campaign you have running this quarter. Channel can be paid (Google Ads, LinkedIn Ads), organic (content series, SEO), partner (co-marketing, influencer), or lifecycle (email, drip). The point is one row per addressable effort, not one row per ad creative. Aim for 5-12 rows; if you have more than 15, you're tracking too granularly.
Tasks
List every campaign currently in market (or launching this quarter)
Add a 'why' column: 1 sentence on what the campaign is meant to prove
Don't list every ad creative. Aggregate by campaign.
Gotchas
If a row's target_metric is 'awareness' or 'engagement', tighten it. Awareness isn't measurable, signups + brand-search lift are.
If you have 15+ campaigns, you're sub-scaling someone, kill the bottom 5 before importing.
02 / 06
Connect sources or define manual KPI entry
1-2 hr
Your data agent needs to pull weekly KPIs from somewhere. Best case: connect Google Ads / GA4 / your CRM via MCP and the agent fetches them on Monday. Realistic case: not all sources have MCP yet, so for those, your agent prompts you each Monday with the specific numbers it needs.
Tasks
Identify each campaign's source-of-truth tool
Connect via MCP where possible (CRM, GA, analytics-as-MCP servers)
For unconnected sources, write a Monday-prompt template the agent uses: 'I need these numbers from X tool: ____'
First Monday: manually walk the agent through a fetch + entry cycle for each source
Gotchas
Don't wait for every source to have an MCP. Manual entry + agent-drafted memo still beats no memo.
Different tools count 'conversion' differently. Lock the definition for each campaign in the Campaigns.notes field once.
03 / 06
Walk one Monday with your agent
2 hr (week 1 calibration)
Trigger a full Monday cycle the first week. Ask your agent to fetch the week's KPIs, draft the memo. Read the memo. Push back. Tune the prompt. The first Monday takes 2 hours; weeks 2-12 take 30 min of your time because the agent is doing the legwork.
Tasks
Pick a Monday with a real week behind it
Ask your agent: 'Fetch weekly KPIs for every live campaign'
Walk through each row, confirm numbers, edit anything wrong
Ask your agent: 'Draft the Monday memo'
Read the memo. Mark up: wrong framing, missing context, wrong tone for leadership
Re-ask: 'Apply comments and replace the section'
Sign off; agent posts the memo summary to Slack via MCP send_message
Gotchas
The memo's value is in the framing, not the raw numbers. If the agent's draft is just a list of numbers, push back: 'What's the story?'
Don't let the agent make decisions. Off-pace campaigns get a *proposal* (pause / swap), the lead decides.
Agent prompt for this step
Read the KPIs rows added this morning (week_starting = today, or the most recent Monday).
For each row, compute deltas vs. the same campaign's previous-week KPIs row: impressions Δ, clicks Δ, signups Δ, $/signup Δ.
Identify: (a) campaigns with $/signup up >30% (off-pace), (b) campaigns with signups up >50% (winning), (c) campaigns with impressions Δ near zero (creative fatigue or paused).
Draft Monday memo section "Week of {monday_date}". Structure:
1. **The week in one line** (1 sentence: total signups vs. target, total spend vs. budget pace)
2. **Top 3 changes** (3 bullets, each names the campaign + the delta + the likely cause)
3. **Off-pace** (each row from (a) above + proposed action: pause, swap creative, etc.)
4. **Winners** (each row from (b) above + proposed action: scale up budget, replicate)
5. **Decisions needed** (1-3 items the marketing lead needs to call this week)
Keep it under 250 words. Leadership reads this in 2 min.
04 / 06
Turn on the Friday budget watcher
30 min setup
Every Friday 5 PM, your agent updates Budget from spend sources and pings campaign owners on any row over 90% spent. This stops budget overruns from being a Monday surprise. The owner gets a Friday heads-up so they can decide before the next pacing tick.
Test the 90%-spent threshold: artificially set one row to 91% and confirm the message lands in DM
Confirm message tone: it's a heads-up, not a panic
Gotchas
Set the threshold once and don't move it. Moving thresholds = the alert stops being trusted.
Don't auto-pause campaigns. Always a human decision; alerts surface, humans decide.
05 / 06
Run the quarter retro
1 hr drafting + 1 hr meeting + 30 min forking
Last week of the quarter, your agent reads the 13 weeks of KPIs, computes per-campaign ROI, and drafts the retro. Read it with the team. Decide keep / kill / double-down. The retro seeds the next quarter's workspace as Status.
Tasks
Ask your agent: 'Draft Quarter retro from the past 13 weeks of KPIs'
Review the per-campaign ROI calculations; mark any with bad attribution
Schedule a 1-hr team meeting; walk through the retro
Decide for each campaign: keep (renew), kill (sunset), double down (expand)
Fork the workspace, name it 'Marketing campaign tracker, $next-quarter'
Confirm the fork seeded Status with the retro
Gotchas
Attribution is messy. Don't let the per-campaign ROI numbers become gospel; the trend matters more than the absolute number.
Don't kill a campaign on one quarter of data unless it's catastrophic. Brand and organic compound over 2-3 quarters.
Agent prompt for this step
Read every KPIs row from the past 90 days, every Budget row.
For each Campaigns row, compute:
- Total impressions, clicks, signups
- Total $ spent (from Budget)
- $/signup
- Signups vs. target_metric (percent of goal hit)
- 13-week trend on $/signup (improving / flat / degrading)
Rank campaigns by efficiency ($/signup ascending). Top quartile = candidates for double down, bottom quartile = candidates for kill, middle two quartiles = candidates for keep.
Draft Quarter retro doc with sections:
1. **The quarter in numbers** (total spend, total signups, blended $/signup, % of quarterly goal hit)
2. **By campaign** (table: campaign | spend | signups | $/signup | % goal | trend)
3. **Top performers** (top 3 ranked, with 1-line why)
4. **Underperformers** (bottom 3 ranked, with 1-line probable cause)
5. **Proposals for next quarter** (each campaign: keep / kill / double-down, marked "Proposal:" not "Decision:")
6. **Strawman list for new campaigns** (3-5 new things to try next quarter, surfaced from team brainstorms in Pointers if any)
Stop before "Decisions made". The team makes those in the retro meeting.
06 / 06
Fork to next quarter
20 min
End of quarter, fork the workspace. Forked workspace inherits the Campaigns schema, Pointers, and the retro seeds Status. Campaigns table copies forward only the rows the team decided to KEEP or DOUBLE DOWN on; killed rows stay archived in the previous quarter's workspace.
Tasks
Settings > Fork to next cycle
Name the new workspace 'Marketing campaign tracker, $next-quarter'
Carry forward only Campaigns rows marked Keep or Double down
Add new Campaigns rows for any new strategy approved at retro
Reset KPIs and Budget tables (new quarter, fresh baselines)
Verify Status has the retro pinned at top
Archive the previous quarter's workspace (don't delete, ROI history is forever)
Gotchas
Don't carry forward 'just in case' campaigns. If the team didn't decide Keep, don't bring it.
The fork endpoint hasn't shipped yet (early 2026). Until then, duplicate manually and paste the retro into Status.
FAQ
Common questions on this template.
Is this for paid ads or organic campaigns?
Both. Campaigns table has a `channel` column with values like paid_search, paid_social, content, partner, lifecycle, organic_social, SEO, PR. The data sources change (Google Ads for paid, GA for organic) but the cycle is identical: weekly KPI snapshot, Monday memo, quarterly retro. Mixed-channel teams get the most value because the comparison across channels happens in one workspace instead of three dashboards.
How does the agent know my attribution model?
It doesn't, you tell it. The Campaigns.notes field is where you lock the attribution rule per campaign: 'first-touch within 30 days', 'last-touch UTM', 'self-reported in signup form'. The agent uses what you wrote when it computes signups. If the rule changes, update the notes field; the agent re-reads it next Monday.
What if my CRM doesn't have an MCP server?
Use manual entry for that source. The agent prompts you each Monday with the specific numbers it needs ('Last week's HubSpot lead count for campaign X: ___'). It's slower than auto-fetch but still beats no tracker. The MCP ecosystem is growing fast; check the Pointers surface for a list of marketing tools with MCP servers, the workspace updates it.
Can my agent decide which campaigns to kill?
No, by design. The agent surfaces candidates with data; humans decide. Marketing budget calls are judgment under uncertainty, attribution is messy, brand effects compound over multiple quarters. If the agent had kill authority, it would over-prune the long-cycle brand investments that look bad at week 6 and great at week 26. The retro proposes; the team decides.
Why quarterly forking instead of annual?
Marketing strategy is faster than that. A quarter (13 weeks) is enough data to evaluate paid campaigns, content series, and most launches. Annual cycles produce a workspace with too much history for the agent's context window and too long a feedback loop for the team. Quarterly forking keeps the retro horizon sharp and the working set fast.
Open this template as a workspace.
We mint a fresh copy in your org with the steps as table rows, the pointers as a separate table, and the brief as a doc. Bring your agents, start checking off boxes.