Weekly site and ad report
Use this skill on the fixed day each week when a client's site traffic and paid campaigns need reporting, and the report has to say what to do rather than what happened. Produces a short report: the five numbers that matter against last week and the four-week average, what moved and why, and one recommendation per channel the client can act on. Also use for "weekly report for [client]", "how did the ads do last week", "pull the traffic numbers", "marketing report".
Applies on the same day every week, per client. Produces a one-screen report that leads with what changed and ends with what to do about it.
The play
- Pull the same five numbers every week, per client, from the same sources. Sessions, conversions, conversion rate, spend, and cost per conversion. The definitions and where each comes from are in references/metrics.md, and the definitions do not change once set, because a redefined metric erases the history that makes the report worth reading.
- Set every number against two baselines, not one: last week, and the four-week rolling average. Week on week catches the spike, the rolling average tells you whether the spike matters. A number reported on its own is decoration.
- Flag only what moved beyond normal variance for that client. The thresholds, and how to work out a client's own normal variance from their first eight weeks, are in references/thresholds.md. A small site will swing 30% on nothing at all, and reporting that swing as a finding teaches the client to ignore the report.
- Explain each flagged move before writing a word of recommendation. Work the list in references/thresholds.md in order: tracking broken, a change you shipped, a change they shipped, seasonality or a calendar event, then the market. Most weeks the answer is in the first three, and the discipline is to rule those out rather than reach for the interesting explanation.
- Branch by what is running:
- Paid live, spend steady, cost per conversion moving: it is creative fatigue or auction pressure. Look at frequency and impression share before touching the budget.
- Paid live and newly launched: report learning-phase numbers as directional only, and say so. A recommendation off four days of data is a guess with a chart behind it.
- No paid this week: the report is shorter, not padded. Organic and conversion rate only.
- A campaign launched or ended mid-week: name the date on the chart. Unlabelled, it reads as a trend forever after.
- Write one recommendation per channel. Each names the action, the expected effect and who does it. Three recommendations a client acts on beat twelve observations they skim. The report format is in references/report-format.md.
- Carry last week's recommendations forward with their outcome. A report that never checks its own previous advice is a newsletter.
What good looks like
- First thing I check that most people skip: whether tracking is still working before reading a single number. A conversion drop to zero is a broken tag far more often than a dead channel, and nothing is more expensive than a recommendation built on a broken pixel.
- The mediocre version: an exported dashboard with twenty metrics, every one of them up or down in green and red, no explanation, and a closing line that says we will continue to monitor. It takes two minutes to generate and gives the client nothing to decide.
- I know the report is right when the client replies about a recommendation rather than a number.
- Second test: someone could read only the first three lines and know whether the week was good, bad or flat.
- Red flag: the same recommendation appearing three weeks running. Either it was never actioned, which is a conversation, or it was wrong.
Rules
- MUST verify tracking before reading the numbers.
- MUST show every number against both last week and the four-week average.
- MUST keep the metric definitions fixed once set.
- MUST explain a move before recommending anything, ruling out tracking and shipped changes first.
- MUST carry forward last week's recommendations with their outcome.
- MUST label a newly launched campaign's numbers as directional.
- NEVER report a move inside normal variance as a finding.
- NEVER send a report whose only recommendation is to keep monitoring.
references/metrics.md
The five numbers
Five, every week, same definitions. The restraint is the point: a client can hold five numbers in their head and will act on them. Twenty metrics get skimmed.
| Metric | Source | Definition | Why this one |
|---|---|---|---|
| Sessions | Google Analytics | All sessions, all channels, excluding internal traffic | The denominator for everything else |
| Conversions | Google Analytics | One named primary event per client, chosen at kickoff | The only number the client's board asks about |
| Conversion rate | Derived | Conversions / sessions | Separates a traffic problem from a site problem |
| Spend | Google Ads + Meta Ads | Total paid media, all platforms, same currency | The input |
| Cost per conversion | Derived | Spend / conversions attributed to paid | The output that decides next week's budget |
Setting the primary conversion
One event per client, agreed at kickoff, never changed mid-engagement. A demo request, a qualified form fill, a trial start, a booked call. Not "all form submissions", which quietly includes the contact page, the newsletter and the careers enquiry.
Secondary events can be tracked and reported under the fold. They are never promoted into the headline number partway through an engagement, because it breaks every comparison that came before it.
Segmenting
Report the five totals, then split sessions and conversions by channel group: organic, paid search, paid social, direct, referral. Five channel rows, not twelve sources.
Split paid by platform in the paid section only, never in the headline. The client cares what paid cost in total first, and which platform second.
Filters that must be in place before any of this means anything
- Internal traffic excluded by IP or by a flag, including the agency's own
- Bot filtering on
- Cross-domain tracking configured if the form or the booking tool lives on another domain
- UTM conventions agreed and used, or every paid click lands in direct and the report is fiction
The cross-domain one accounts for most inherited analytics accounts that report a conversion rate that looks impossibly bad.
Attribution
Pick a model at kickoff, name it in the report footer, and leave it alone. Platform-reported conversions and analytics-reported conversions will never match, and the gap is normal. Report one as the number of record and mention the other only when the gap itself changes sharply, which usually means a tracking change rather than a performance one.
references/report-format.md
The report
One screen. The client reads the first three lines on a phone and knows how the week went. Everything else is there for the person who wants it.
[CLIENT] - week of [date range]
THE WEEK
[One line: good, bad or flat, and the single reason.]
This week vs last vs 4-wk avg
Sessions 2,410 +12% +4%
Conversions 38 -5% -1%
Conversion rate 1.6% -15% -5%
Spend $4,200 0% +2%
Cost per conv $141 +18% +9%
WHAT MOVED
[Only flagged items. Each one: what moved, then why, then the evidence.]
- Cost per conversion up 18% on flat spend. Frequency hit 2.9 on the
prospecting set, CTR down 24%. Creative fatigue, not auction pressure.
RECOMMENDATIONS
1. [Paid] Swap the three prospecting creatives for the new set.
Expect cost per conversion back near $120 within 10 days. Us, Tuesday.
2. [Site] Pricing page is 41% of entries and converts at 0.7%.
Test the form above the fold. Us, next sprint.
LAST WEEK'S RECOMMENDATIONS
1. Raise search budget 20% - done Monday, impression share lost to
budget fell from 31% to 9%. Working.
2. Fix the mobile nav - not started. Carried.
Primary conversion: demo request. Attribution: [model]. Paid: [platforms].
Rules of the format
The week is one line and it commits. "Flat, with paid costs drifting up" is a judgment. "Mixed results across channels" is not.
The table is five rows and three columns. Always both comparison columns. No colour coding: red and green do the thinking for the reader and they do it badly, because a spend increase is not inherently bad.
What moved only lists flagged items. Each entry is what, then why, then the evidence that rules out the alternatives. If the why is not known yet, write that and say what will be checked. An honest unknown beats a confident guess that gets quoted back in three weeks.
Recommendations are one per channel, maximum three. Each one: action, expected effect, owner, date. A recommendation with no owner is an observation.
Last week's recommendations carry forward with their outcome: done and it worked, done and it did not, or not started. This section is what makes the report compound, and it is the first section people drop when busy.
The footer names the primary conversion, the attribution model and the platforms. It settles the quarterly argument about why these numbers do not match the ones in the ad platform.
Length
If it does not fit on one screen, cut the commentary, not the recommendations.
Delivery
The same day, the same time, every week. A report that lands late is read later, and a report read later is not acted on. Delivering a thin report on time beats a thorough one on Thursday.
references/thresholds.md
What counts as a move
A number is not a finding until it leaves that client's normal range. Small sites swing hard on nothing, and a report that treats every swing as news trains the client to stop reading.
Establishing normal variance
Take the client's first eight weeks. For each metric, the week-on-week percentage change, highest and lowest. That spread is their normal. Anything inside it is noise for that client.
No eight weeks of history yet? Start with the defaults below and say in the report that the bands are provisional.
| Weekly sessions | Default flag threshold |
|---|---|
| Under 500 | 40% |
| 500 to 2,000 | 25% |
| 2,000 to 10,000 | 15% |
| Over 10,000 | 10% |
Conversions get one band wider than sessions, because the counts are smaller and noisier. Under 10 conversions a week, do not flag percentage moves at all; report the raw count and talk about the trend over four weeks.
Always flag, whatever the size
- Conversions at zero for a full day with traffic arriving. Tracking, until proven otherwise.
- Spend over or under pacing by more than 20% against plan.
- Cost per conversion moving more than 30% with spend flat.
- Any channel going to zero.
- A single day accounting for more than half the week's sessions.
Explaining a move, in order
Work the list top down and stop at the first that fits. The order matters because the boring explanations are the common ones, and the interesting explanation is the one that produces a wrong recommendation.
- Tracking. Tag fired? Container published? Did anyone touch the site, the consent banner or the form?
- Something we shipped. A page went live, a redirect, a nav change, a new form. Check the deploy log before theorising.
- Something they shipped. A price change, a product announcement, an email send, a webinar, a conference. Ask rather than assume; clients routinely forget to mention a 40,000-recipient send.
- Calendar and seasonality. Holiday, quarter end, industry event, the week everyone is at a conference.
- Platform or market. Auction pressure, a competitor launch, an algorithm change. Last, and only with evidence from inside the platform, such as impression share or frequency.
Paid specifics
| Signal | Threshold | Reading |
|---|---|---|
| Frequency | Over 2.5 in a week on a cold audience | Creative fatigue. Refresh before touching budget. |
| Impression share lost to rank | Rising 10 points | A quality or relevance problem, not a budget one |
| Impression share lost to budget | Over 20% | Genuinely budget constrained. This is the one worth more money. |
| Learning phase | Under 7 days or under 50 conversions | Directional only. Say so, recommend nothing. |
| CTR | Down 25% with impressions flat | The creative has been seen too often |
When nothing moved
Say so in one line and keep the recommendation section. A flat week with a clear recommendation is a useful report. A flat week padded with commentary is how a weekly report loses its slot.