Marketing report template: monthly and weekly versions for clients

Two copyable client marketing report templates: a one-page monthly report across every channel you run, and a five-line weekly update, with where each number comes from.

· 8 min read

A client marketing report template needs two versions. The monthly one is a single page: a verdict against the client’s goal, one table with every channel you run (spend, sessions, key events, cost per key event), a short note on the channels that moved, the work you shipped, next month’s plan and one decision you need from the client. The weekly one is five lines: what moved, spend against budget, what you did, what is next, one question. Both are below, ready to copy, with where each number comes from.

Marketing report, KPI report, Google Analytics report: which is which?

The three overlap, and picking the wrong one is how a client ends up with twelve pages.

ReportScopeRead byOur guide
Google Analytics reportWhat happened on the website, from GA4Anyone who acts on site dataGoogle Analytics report
KPI reportFive to seven KPIs against agreed targetsThe decision makerKPI report template
SEO client reportOrganic search only, GA4 plus Search ConsoleSEO clientsSEO client report
Marketing reportEvery channel the agency runs, what it cost, what it produced, what was doneThe client, and whoever signs the budgetThis article

The marketing report is the one that answers “what did we get for the money this month?”. That means it has to cross sources: spend lives in the ad platforms, outcomes live in GA4, email stats live in the email tool. For the wider picture of formats and cadence, see our complete guide to client reporting.

The monthly marketing report template

Copy the block below into a doc, an email or a slide. Square brackets are placeholders. Keep the same order every month so the client learns where to look.

MARKETING REPORT: [Client], [Month Year]
Goal this quarter: [e.g. 300 demo requests at under $120 each]

1. VERDICT
[Two sentences. Are we on track for the goal, and what is the one thing to know?]

2. RESULTS BY CHANNEL (source: [ad platforms] for spend, GA4 for the rest)
Channel        | Spend | Sessions | Key events | Cost per key event | Key events vs last month
Paid search    | [ ]   | [ ]      | [ ]        | [ ]                | [ ]%
Paid social    | [ ]   | [ ]      | [ ]        | [ ]                | [ ]%
Email          | n/a   | [ ]      | [ ]        | n/a                | [ ]%
Organic search | n/a   | [ ]      | [ ]        | n/a                | [ ]%
Other          | [ ]   | [ ]      | [ ]        | [ ]                | [ ]%
Total          | [ ]   | [ ]      | [ ]        | [ ]                | [ ]%

3. WHAT MOVED AND WHY
- [Channel]: [what changed, the campaign or page behind it, how sure you are]
- [Channel]: [same, only for channels that changed]

4. WORK SHIPPED THIS MONTH
- [Campaign launched, test run, page rewritten, email sent]

5. NEXT MONTH
- [Planned work, with the result you expect it to move]

6. BUDGET
Spent [ ] of [ ] ([ ]%). Proposed split for next month: [ ]

7. DECISION NEEDED
[One question, or "None this month"]

8. CAVEATS AND APPENDIX
[Tracking changes, holidays, data delays. Link to the dashboard.]

A few rules make this template work:

  • Lead with the verdict, not the logo. The client reads the first two lines and the decision. Everything between them is evidence.
  • Only channels that moved get a note in section 3. A flat channel gets its row in the table and nothing else.
  • One outcome column. Pick the key event the client pays you for (demo requests, quote forms, purchases) rather than summing every event marked as key. GA4 now calls the actions you mark as important “key events” (conversions are the subset used for Google Ads, per Google’s explanation), so say which key event you mean in the table header.
  • Label the source of every number. Clicks in an ad platform and sessions in GA4 rarely match, and a client who compares them unprompted starts doubting both.

Channel modules for clients with more than one service

If you run SEO for one client and paid plus email for another, keep the core above identical and add a short module per service. This is the “one template, a few tiers” approach from the client reporting guide.

ModuleAdd these linesWhere the numbers live
Paid search and paid socialSpend, cost per key event, top and bottom campaignThe ad platforms, or GA4 once cost is in (see below)
EmailSends, click rate, sessions and key events from emailYour email tool for sends and clicks, GA4 for the rest
SEOClicks, impressions, the landing pages that movedSearch Console and GA4: see the SEO client report
EcommercePurchases, revenue, average order valueThe store platform, checked against GA4

Where each number comes from

Sessions and key events by channel come from one place: GA4’s Traffic acquisition report (Reports > Acquisition > Traffic acquisition). Its default dimension is Session default channel group, and its metrics include sessions, key events and session key event rate, so most of the channel table is one screen.

Spend is the harder part:

  • Google Ads: link the Ads account to the GA4 property (you need the Editor or Administrator role on the property and admin access on the Ads account). Google says Ads data shows up in Analytics reports within 48 hours of linking, including Google Ads cost and clicks.
  • Other ad platforms: GA4’s campaign data import (previously called cost data import) brings in cost, clicks and impressions from outside Google. It has direct, daily imports for Meta, Pinterest, Reddit, Snap and TikTok, and file uploads (CSV, Google Sheets, SFTP and others) for the rest. Imported costs appear under Reports > Acquisition > Non Google campaign. The rows join to your sessions on utm_source, utm_medium and date, so the tags must match exactly.
  • Without either: copy spend from each ad platform into the table by hand. For a handful of clients that is perfectly fine.

Pull the numbers a few days into the new month. Google says GA4 data can take 24 to 48 hours to process, and some data can arrive up to 7 days late.

Fix the channel rows before the first report

The channel table is only as good as the tracking links behind it. GA4 sorts each session into a channel with fixed rules, and three of them catch agencies out:

  1. Paid social that lands in Organic Social. For manually tagged links, GA4 counts Paid Social only when the source is a known social site and the medium matches its paid pattern (any value containing “cp” such as cpc or cpm, ppc, retargeting, or anything starting with “paid”). A Meta ad tagged utm_medium=social is counted as Organic Social, and your paid social row looks empty.
  2. Performance Max outside Paid Search. Google Ads campaigns of type Performance Max, Demand Gen, Smart, Local and App fall in the Cross-network channel, not Paid Search. Add a Cross-network row, or the client will ask where part of the search budget went.
  3. Unassigned. When no rule matches, GA4 files the session as Unassigned. A large Unassigned row usually means a medium value nobody planned for.

Google recommends always setting utm_source, utm_medium and utm_campaign, using one medium value per channel, and remembering that values are case sensitive: “Meta” and “meta” are two sources. Agree the naming with the client at kickoff and check it in the ad platforms before the first monthly report, not after.

The weekly marketing report template

The monthly report is the record. The weekly update is what keeps the client from being surprised by it. Five lines, in the body of the message, no attachment:

[Client], week of [date]

1. What moved: [the one or two channels that changed, with the number]
2. Spend: [ ] of [ ] monthly budget used, [on pace / ahead / behind]
3. What we did: [the work shipped this week]
4. Next week: [what is planned, and the result it should move]
5. One question: [a decision you need, or "Nothing needed from you this week"]

Line 2 is what makes this a marketing update rather than a traffic note. A client who learns on the 20th that the budget is 80% spent can still decide what to do; one who learns it in the monthly report cannot. For pacing against a monthly target, the KPI report guide has a spreadsheet formula you can reuse for spend.

Here is the template filled in. The client and every number are illustrative, made up to show the format:

Harbour Physio, week of 19 October (illustrative)

  1. What moved: booking requests from paid search fell from 31 to 22 after the competitor bid change on Tuesday; organic and email were flat.
  2. Spend: $2,140 of the $4,000 monthly budget used, slightly ahead of pace.
  3. What we did: launched the new back pain landing page and paused two low-quality keywords.
  4. Next week: point the back pain ad group at the new page and watch cost per booking.
  5. One question: can we raise the bid cap on “physio near me” by 15% for two weeks?

A quiet week gets a quiet update: “Nothing unusual across channels, spend on pace, plan unchanged.” Why a short update like this gets read when the PDF does not is covered in your clients don’t read your reports.

Automating the weekly version

The monthly report is worth writing by hand: it carries spend, work done and your judgment. The weekly update is where the hours go, because it means opening GA4 for every client every Monday to find what moved.

Dialytics, our product, does the GA4 part of that. For each client’s GA4 property it posts a digest to that client’s own Slack channel every Monday at 8am (Paris time): what moved this week against last week, the likely reason, and the one point worth your attention. Every morning it checks yesterday’s sessions, users, new users and key events and sends at most one alert a day, only when the day is unusual for that weekday. Anyone in the channel can mention the bot in the thread to ask, say, how paid social compared with last week. All clients sit in one account (how agency mode works).

It reads GA4 only. It does not pull ad spend, email platform stats or Search Console data, so lines 2 to 5 of the weekly template and the spend and budget parts of the monthly one stay yours.

Frequently asked questions

What should a monthly marketing report for a client include?

A one-line verdict against the client's goal, a channel table with spend, sessions, key events and cost per key event, a short note on each channel that moved, the work you shipped, the plan for next month and one decision you need. Everything else goes in an appendix or a dashboard link.

What is the difference between a marketing report and a KPI report?

A KPI report compares a short list of KPIs with targets and gives each a status. A marketing report covers every channel the agency runs for the client, what it cost, what it produced and what work was done. Many agencies put a small KPI scorecard at the top of the monthly marketing report.

Why does paid social show up as Organic Social in GA4?

GA4 only counts a manually tagged visit as Paid Social when the source is a known social site and the medium matches its paid pattern, such as a value containing 'cp' (cpc, cpm), ppc, retargeting or a value starting with paid. A link tagged with utm_medium=social lands in Organic Social. Fix the tags in the ad platform, then report.

Should agencies send a weekly or a monthly marketing report?

Both, at different lengths. A five-line weekly update catches problems while the month can still be saved and keeps the client in the loop. The one-page monthly report is the record of spend, results and work done, which is what a client's finance team or board usually asks for.

Written by

Founder, Dialytics

Keep reading

Stop building the Monday report

Dialytics reads your GA4, posts the weekly digest in Slack, flags what actually moved, and answers follow-ups in the thread.

Start free trial

No credit card. 14 days free.