Automating Weekly Report Digests with AI
5 min read · Updated Jul 17, 2026

You automate a weekly report digest by pulling numbers from your existing tools (a database query, a project-management API, an analytics endpoint) into n8n on a schedule, handing the raw numbers to an LLM with a prompt that forbids it from inventing anything, and posting the generated summary to Slack or email. The part everyone gets wrong is letting the model do arithmetic. It should only write the sentences around numbers you already calculated in code.
Key takeaways
- Calculate every number in a Code or Set node before the LLM ever sees it. The model writes prose around numbers, it never computes them.
- Schedule the trigger for Friday at 07:00, not Friday at midnight. Some source systems settle Thursday’s data late.
- A weekly digest read by 3 people who actually act on it beats a beautifully formatted report nobody opens.
- Post to a channel people already have open, not a new dashboard they have to remember to visit.
- Add a "no data available" fallback path. A report that silently skips a broken data source is worse than one that clearly flags it.
Why teams stop maintaining manual weekly reports
Manual weekly reports die the same way every time. Someone owns the spreadsheet, that person goes on leave or changes roles, and three weeks later nobody has updated the numbers but everyone still references "the report" in meetings as if it reflects reality. Automating the pull-and-summarise step removes the single point of failure, even if a human still reviews the output before it ships.

The architecture: three stages, in order
- Pull: a Schedule Trigger fires the workflow, then HTTP Request or database nodes pull raw numbers from each source (support tickets closed, deals moved, deploys shipped, revenue booked).
- Calculate: a Code node computes every derived number (week-over-week change, percentage, rank) so the LLM never has to do arithmetic.
- Write: an LLM node receives the calculated numbers as structured JSON and writes the prose summary around them, nothing more.
Scheduling: why Friday at midnight is the wrong answer
I built my first version of this for a support team in late 2023, scheduled for midnight Friday into Saturday. It ran clean for two weeks, then the support platform’s own nightly rollup job hadn’t finished writing Friday’s numbers by the time my workflow queried it, and the digest reported Thursday’s totals as if they were the full week. Nobody noticed for a month because the numbers still looked plausible. I moved the trigger to 07:00 Friday, after every source system had finished its own overnight batch job, and the gap disappeared.
{
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 7 * * 5"
}
]
}
}The prompt that keeps the model honest
The system prompt has one job: stop the model from inventing a trend it did not see. Feed it the calculated numbers as JSON, tell it explicitly which fields are already computed, and ban it from adding any figure that is not in the input.
{
"role": "system",
"content": "You write a short weekly team digest from the JSON metrics provided. Use only the numbers given, never estimate or invent a figure. Write 4 to 6 short sentences, one per major metric, in plain language a non-technical stakeholder can read in under a minute. If a metric is missing or null, say so explicitly rather than omitting it silently. Do not add a headline number that was not in the input."
}Where to send it, and why the channel choice matters more than the format
A gorgeous PDF report nobody opens is worse than a plain-text Slack message in the channel people already check every morning. I think most teams over-invest in report formatting and under-invest in placement. Post to the channel with the highest existing traffic for that team, not a new one created specifically for the digest. New channels for reports get muted within a month.
Measuring whether the digest is actually working
Track two things for the first month: how many people react or reply to the digest message, and whether anyone still asks "what happened this week" in a meeting right after it posts. If engagement is near zero and people still ask verbally, the digest is landing in the wrong channel or the wrong format, not failing because the automation is broken.
“The best compliment a weekly digest gets is silence, because everyone already read it and had no follow-up questions.”
Frequently asked questions
Frequently asked questions
Should the LLM calculate percentage changes for the report?
No. Calculate every derived number in a Code node before it reaches the LLM. Models are unreliable at arithmetic and will produce confidently wrong percentages that look plausible enough to go unnoticed.
What time should a weekly report digest be scheduled?
Friday morning, after your source systems finish their own overnight rollup jobs, typically 07:00. Scheduling at midnight Friday often queries a source before it has finished writing that day’s data.
Should I send the digest to Slack, email, or both?
Send it to whichever channel the target team already checks daily. A new dedicated channel or a separate email report tends to get ignored within a month, regardless of how good the content is.
How do I handle a data source that is down when the digest runs?
Add an explicit fallback branch that states the metric is unavailable rather than omitting it or showing zero. A silent gap reads as "nothing happened" when the truth is "we could not check."
Which LLM is good enough for writing a weekly digest summary?
A small, cheap model like GPT-4o-mini or a local 8B model handles this well, since the task is templated prose around pre-calculated numbers rather than open-ended reasoning. There is no need for a frontier model here.