# Turn a weekly report into a scheduled workflow

Pull the numbers, write a short summary, get the owner's OK in Slack, then post it to your team every Monday.

- Category: Operations
- Runs on: n8n
- Level: Intermediate
- Audience: both
- Setup time: about 90 minutes
- Evidence: Documented (each step backed by official docs; not tested by us)
- Last updated: 2026-10-31
- Named sources: 4
- Canonical URL: https://crimsonbot.com/use-cases/weekly-report-workflow

## You will need

- Read access to where your numbers live (this example uses Google Sheets)
- n8n: n8n Cloud (paid after a free trial) or the free self-hosted Community edition
- A model API key (for example Anthropic or OpenAI; billed per token)
- A Slack workspace and channel, plus the report owner's Slack account

## You will end up with

- A draft summary sent to the report owner every Monday morning
- The report posted to the team channel only after the owner approves it

## Steps

### 1. Add a Schedule Trigger

Use the Schedule Trigger node with a Weeks interval, Monday, at the hour you want. Set the workflow time zone in workflow settings, otherwise n8n uses the instance time zone. Publish the workflow or the schedule will not run.

Sources:
- [n8n docs: Schedule Trigger node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger)

### 2. Read this week's and last week's numbers

Add a Google Sheets node with 'Get Row(s)' to read the rows. Use a credential that can only read that sheet.

Sources:
- [n8n docs: Google Sheets node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets)

### 3. Write the summary with a model

Add a Basic LLM Chain node with a chat model. Pass both weeks' numbers.

```text
Here are this week's and last week's numbers as JSON: {{numbers}}.
Write three bullet points: what changed, by how much, and one possible reason. Use only these numbers. Do not invent causes; say 'reason unknown' if the data does not show one.
```

Sources:
- [n8n docs: Basic LLM Chain node](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm)

### 4. Ask the owner to approve in Slack (human checkpoint)

Use the Slack node's 'Send and Wait for Response' operation to send the draft to the report owner. The workflow pauses until they approve or decline.

Sources:
- [n8n docs: Slack node (Send and Wait for Response)](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack)

### 5. Post the approved report

If approved, post to the team channel with the Slack node's 'Send a message'. If declined, stop and let the owner post by hand. Have the owner compare the first few reports with the source sheet.

Sources:
- [n8n docs: Slack node (Send and Wait for Response)](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack)

## Tools used

- [n8n](https://n8n.io): Workflow automation with AI agent nodes.

## Next

- [Our tool: Scrub a PDF locally before you paste it into AI →](https://crimsonbot.com/go/p/pdf-scrubber)
- [Get an email when the newsletter launches →](https://crimsonbot.com/#newsletter)
