How to Write a Monthly Business Report
Most monthly report advice hands you a template of empty boxes. The empty boxes were never the problem — turning eight thousand rows into six sentences someone will act on is. Here is how to do that part.
A monthly report has one job: make someone able to decide something. The formatting takes an hour and the analysis takes ten minutes, which is exactly backwards. Here is the version that goes the other way.
The four questions
Whatever the template says, a monthly report is answering four things:
- What happened? The headline numbers for the period.
- Compared to what? Last month, last year, or plan — stated explicitly.
- Why? The one or two causes behind the biggest moves.
- So what now? What changes as a result.
Anything that does not serve one of those is decoration. The twelve-chart deck is usually twelve answers to question 1 and none to question 3.
Build the numbers with a baseline attached
Start with a summary block where every figure sits next to its prior period. With a date column in A, category in B, and amount in D:
=SUMIFS($D:$D, $A:$A, ">="&$H$1, $A:$A, "<"&$H$2, $B:$B, $G3)
Put the period start in H1 and the next period start in H2, then copy the same formula into the next column pointing at the previous month's dates. A third column gives you the change:
=IFERROR((C3-D3)/D3, "")
Two things this buys you. Changing H1 and H2 rolls the whole report forward next month, and no number appears without a baseline — which is what stops a reader asking "is 42,000 good?"
A PivotTable gets you the same summary faster if the shape changes month to month; formulas win when the layout is fixed and you want it to roll forward untouched.
Sort by what moved, not by what is biggest
This is the step most reports skip. Sorting by revenue tells you what you already know — the big category is big. Sort by the absolute change instead and the report writes itself:
=ABS(C3-D3)
Sort descending on that column. The top three rows are your commentary. Often they are mid-sized categories that moved 30% while the headline stayed flat, which is precisely the thing a monthly total hides.
Two more passes worth making: mix shift (each category as a share of total, this period vs last — the share can move while the absolute number does not) and outliers (a single order or refund large enough to explain the whole delta by itself, which changes the story completely).
Write the commentary
Structure per mover: what changed, by how much, why, and what happens next. One line each.
Wholesale revenue fell 18% (£41,200 → £33,800), almost entirely from one customer moving their reorder into the following week. Underlying demand is unchanged; expect it back in the November figures.
Note what that does. It gives the number, the baseline, the cause, and the implication — and it pre-empts the question the reader was about to ask. A report that answers the follow-up in advance is the difference between a document and a meeting.
If you cannot explain a mover, write that you cannot. "Returns up 22%, cause not yet identified, checking against the supplier batch data" is more useful than an omission, and much more useful than a guess presented as a finding.
Keep the definitions fixed, or the trend is fiction
The comparison only works if "revenue" and "active customer" mean the same thing this month as last. That sounds obvious until two people build the same report and disagree, usually because one included refunds and the other did not. Write the definitions down once — the formula, the source, the filter — and keep them with the report. This is the cheapest thing on this page and the one most often skipped.
Where AI helps, and where it makes things up
Being specific about this matters more than the usual enthusiasm. Two different jobs are hiding under "AI writes my report":
- Drafting the narrative from computed numbers — genuinely good. Hand it the summary table with prior-period columns and it will produce readable commentary and flag movers you skimmed past.
- Computing the numbers from a raw file — this is where it goes wrong. If the model is guessing what your columns mean, "revenue" may include refunds on one run and exclude them on the next. You get a confident answer that is not reproducible, which in a monthly report is worse than no answer.
So the rule is: compute against your actual rows, with your definitions written down, and let AI do the words. That is how Quiriz is built — a report is generated from your real data rather than an impression of it, metric definitions live in Company Context so the same question returns the same figure every month, and it says a value is not in your data rather than returning a tidy zero. We wrote up the underlying failure mode in why AI gives you a different number every time.
Once the report is written, the monthly rebuild is the remaining cost. Saving it and putting it on a schedule takes that to nothing — scheduling and emailing it covers the mechanics, in Quiriz or with a Power Automate flow. In Excel the summary line itself can be a formula: =QUIRIZ.ASK("revenue by category this month vs last month", "table").
Write the report once, not every month
Generate a report from your actual spreadsheet data, with your own metric definitions, then schedule it so next month writes itself. Free to start.
Try Quiriz free →