Did the campaign actually work?
A Microsoft 365 Copilot agent I built at a regional utility. It turns raw analytics and campaign exports into a report a marketer can act on and a manager can read at a glance.
- Campaign measurement
- Executive reporting
- Microsoft 365 Copilot
- AI-assisted workflow
Real tool, sample numbers. The agent and its history are real. Campaign results are internal, so every figure in the exhibit is invented.
Start with what nobody wants to read
The first real run took about 900 rows of web analytics and an agency’s media report. Accurate, complete and unreadable to most of the people who needed it.
Web analytics export
| date | source / medium | campaign | sessions | engaged | key events |
|---|---|---|---|---|---|
| … about 900 rows | |||||
Schematic. Campaign figures are internal and not shown.
Catch what a quick read gets wrong
An analytics export is full of numbers that look like findings and aren’t. The agent checks for them before it ranks anything.
-
Direct41,200 views
“Direct traffic was our biggest driver.”
Source unknown. Untagged traffic lands here, so it is never ranked first without that caveat.
-
Scroll depth 0%52,800 events
“Our most-viewed page.”
An engagement event, not a page. It is not counted as views.
-
Paid social6,400 visits, 0.2 seconds each
“Visitors landed briefly.”
A sub-second average is a measurement artifact, not attention.
-
Email2,900 visits in analytics
“Email underperformed.”
The email platform counted 9,100 clicks. The gap between the two goes at the top of the report.
-
Ad-tech referrals1,300 visits
“Bot traffic.”
Ad platform trackers, named for what they are.
Sample data, invented for this page. The five checks are real. Each came from a limitation a user documented.
Write for two readers
The report had one stated reader and two real ones: the marketer who runs it, and the manager who reads whatever gets forwarded.
Campaign performance report
Summary at a glance
- What happened
- Email reached the audience. Web analytics missed most of it.
- Did it go well
- Partly. Paid social drew clicks but no time on the page.
- What to do next
- Fix link tagging before the next send.
The full analysis
- Key numbers
- What’s working
- What needs attention
- Findings and recommended actions
- What to pull next time
Report structure from the current version of the agent. The summary text is a sample. The top layer stands on its own, so it still makes sense when it’s forwarded.
Let the user find the limits
The marketer who ran it built an 11‑slide deck about it on his own and documented six limitations. Five became fixes in the next version. One couldn’t be fixed, so the agent states it plainly.
5 fixed 1 kept
Direct traffic looked like the biggest driver, and he didn’t trust it.
FixedUnattributed traffic is labeled uncertain.
The email platform’s report was left out, so nothing could be cross-checked.
FixedIt takes both files and reports the gap.
Scroll events inflated the traffic numbers.
FixedEvents are treated as engagement signals, never as pages.
A fraction-of-a-second visit was reported as people “landing briefly.”
FixedSub-second averages are flagged as artifacts.
Tracker traffic was labeled as bots.
FixedAd-tech and tracking domains are named.
Radio and print can’t be tracked in web analytics.
KeptA real limit. The agent says so instead of working around it.
The challenge
After a campaign, a marketer with no analytics background had about 900 rows of data and one question from leadership: did it work?
What I built
An agent that runs in plain Microsoft 365 Copilot: one pass, an 8,000-character instruction limit and uploaded files only. I proposed it after helping with a one-off analysis. It has three versions, each with a recorded reason for changing.
What happened
Its first run produced a six-page analysis used for a campaign postmortem. Its user built a deck about it unprompted, credited me by name and presented it at a regional meeting of three utilities. Adoption and time saved haven’t been measured.