$65M+ Revenue InfluencedAI Training for TeamsAI TransformationMarketing / Sales / HR / Finance6+ Years Building Growth Systems125+ Projects Delivered$65M+ Revenue InfluencedAI Training for TeamsAI TransformationMarketing / Sales / HR / Finance6+ Years Building Growth Systems125+ Projects Delivered$65M+ Revenue InfluencedAI Training for TeamsAI TransformationMarketing / Sales / HR / Finance6+ Years Building Growth Systems125+ Projects Delivered$65M+ Revenue InfluencedAI Training for TeamsAI TransformationMarketing / Sales / HR / Finance6+ Years Building Growth Systems125+ Projects Delivered$65M+ Revenue InfluencedAI Training for TeamsAI TransformationMarketing / Sales / HR / Finance6+ Years Building Growth Systems125+ Projects Delivered$65M+ Revenue InfluencedAI Training for TeamsAI TransformationMarketing / Sales / HR / Finance6+ Years Building Growth Systems125+ Projects Delivered$65M+ Revenue InfluencedAI Training for TeamsAI TransformationMarketing / Sales / HR / Finance6+ Years Building Growth Systems125+ Projects Delivered$65M+ Revenue InfluencedAI Training for TeamsAI TransformationMarketing / Sales / HR / Finance6+ Years Building Growth Systems125+ Projects Delivered
All 20 AI systems

Open-source playbook · 07 of 20 · For marketing

Campaign Performance Report

Campaign numbers live in five dashboards, and the report is always late.

The systemPulls spend, leads and pipeline from every channel into one weekly report, with the why written up.

// The problem

Five dashboards, five different answers.

Each ad platform counts the leads it touched. The CRM counts people. Analytics counts form events. So someone spends Monday morning copying numbers into a spreadsheet, and the report goes out late, with the numbers but not the reasons.

Report due Monday, 9 am. Still pulling numbers at 11:40.

Meta Ads ManagerLeads, last 7 days

171

LinkedIn Campaign ManagerLeads, last 7 days

97

Google AdsConversions, last 7 days

149

HubSpotNew contacts, paid, last 7 days

361

Google AnalyticsKey events: generate_lead, last 7 days

398

“So how many leads did we get?”

// How it works

Every channel flows into one report, with the why in the margin.

Early on Monday it pulls last week’s numbers from each tool, matches them by campaign and checks they add up. Then it writes a short note beside every number that moved, and sends the draft to the marketing lead.

  • Meta AdsSpend, clicks, leads
  • LinkedIn AdsSpend, clicks, leads
  • Google AdsSpend, clicks, conversions
  • CRMLeads, deals, pipeline
  • AnalyticsVisits, sign-ups, sources

Matched by campaign, checked, the why draftedMonday, 6 am

Copperline

Weekly campaign report

Week 42 · 12–18 October · all paid channels

Draft for review by Ana Ribeiro, marketing lead. Not shared yet.

Spend

$44.2k+8% vs. last week

Leads

361−10% vs. last week

Cost per lead1

$122+20% vs. last week

New pipeline2

$412k+30% vs. last week

The short version: cost per lead rose on LinkedIn, pipeline rose on two webinar deals, and the top Meta ad is wearing out.

Spend and cost per lead, by channel

  • Meta3$14.2k$100 a lead +30%
  • LinkedIn$18.6k$211 a lead +34%
  • Google4$11.4k$87 a lead −7%

Leads per week, last 8 weeks

318W35
334W36
352W37
371W38
389W39
402W40
400W41
361W42
CampaignChannelSpendLeads 5Per leadPipeline
Month-end webinarLinkedIn · $9,800LinkedIn$9,80041$239$214k
Brand searchGoogle · $4,200Google$4,20069$61$56k
Ops leaders, lead formLinkedIn · $8,800LinkedIn$8,80047$187$42k
Demo retargetingMeta · $6,100Meta$6,10074$82$38k
Switch from spreadsheetsMeta · $8,100Meta$8,10068$119$31k
Reporting software, genericGoogle · $7,200Google$7,20062$116$31k
All campaigns$44,200361$122$412k

Numbers are pulled, never typed. The notes are drafts for the marketing lead.Sample report, fictional company.

// Before it’s shared

It writes the first draft. The marketing lead has the last word.

The lead knows things the data doesn’t: a webinar that drove searches, a budget call still open. Their pass takes minutes because the numbers are already right.

Checked before the draft reaches them

  • Spend matches what each ad platform will bill
  • Every lead is matched to a campaign, or listed as unmatched
  • Every move over 10% gets a reason, or says “reason not found”
  • Every reason points to the number or change it rests on

It never changes budgets, pauses campaigns or sends the report on its own.

Summary, week 42

3 edits by Ana Ribeiro

Spend rose 8% to $44.2k while leads fell 10% to 361, so cost per lead rose 20% to $122, mostly on LinkedIn after Tuesday’s audience change. New pipeline rose 30% to $412k, mainly two enterprise deals from the month-end webinar. The higher LinkedIn cost looks worth it.We’ll keep the wider LinkedIn audience one more week, then decide. Meta leads fell 22% as the top ad wears out. Google leads rose 11%; the reason isn’t in the data.brand searches jumped after Thursday’s webinar, so expect that to fade. Next: new Meta ads by Friday (Leo).

RemovedAdded by the marketing lead

ApprovedAna Ribeiro · Mon 19 Oct, 10:12 am · shared to #marketing and the leadership email

// For your tech lead

Can we build it? Here’s what it takes.

Most of the work is plumbing: getting every channel’s numbers into one table with the same campaign names. The writing step is small once the numbers are clean.

Tools you’ll use

JobUseOr
Ad and web numbersThe Meta, LinkedIn and Google Ads APIs, plus GA4Supermetrics, Funnel, Windsor.ai
Leads, deals and pipelineHubSpot or Salesforce APIa weekly CRM export
Joining it all by campaignBigQueryGoogle Sheets, Snowflake
Running it every Mondayn8nMake, a scheduled script
Writing the whyClaudeChatGPT, Gemini

Access it needs

  • Read-only access to each ad account and to analytics
  • Read access to CRM contacts, deals and campaign fields
  • Write access to one folder or channel, for the draft only

Three ways to build it

  1. Start simple2–3 days

    Supermetrics pulls every channel into one Google Sheet. A saved Claude prompt reads the sheet and drafts the why.

  2. Production1–2 weeks

    n8n pulls the APIs every Monday at 6 am into BigQuery, joins by campaign, runs the checks, has Claude write the notes and sends the draft to the lead.

  3. Custom3–4 weeks

    Adds mid-week alerts when a number jumps, any-two-weeks comparisons, and cost per deal as well as cost per lead.

Guardrails

  • Read-only: it never changes budgets, bids or campaigns
  • Numbers come straight from the data. The AI writes only the notes, and each one names its source
  • When it can’t find a reason, it says so instead of guessing
  • The marketing lead edits and approves before anyone else sees it

What to measure

  • Hours from week end to report shared
  • Hours spent pulling numbers by hand
  • Share of big moves with a sourced reason
  • Edits the lead makes per report, falling over time

Who builds and runs it

A marketing ops person or analyst builds it, with an engineer for a day or two on the API connections. After that, the marketing lead spends about 20 minutes each Monday on the draft.

// Want help building it?

We’ll build your Campaign Performance Report with your team.

In 30 minutes with our founder, we’ll look at your tools and your week, and work out what your first AI systems should be and how long they’ll take.

Book a Strategy Call
Pallav KaushishFree 30-minute call with our founder · No commitmentPallav Kaushish Co-Founder, AIxGrowth