RecipeAgents / Recipes / Ops
Ops recipeSlack → Slack: Claude channel digest in n8n
A busy Slack channel moves faster than anyone can read, and the decisions get buried between the chatter. Every weekday morning this reads the last day of messages in one channel (the whole weekend on Mondays), and Claude posts a short digest: what was decided, what still needs an answer, and who said they'd do what. It names people with Slack mentions, so you can see who to ask. In our study of 13,574 public n8n templates (snapshot 2026-10-20), 127 use a Slack node and have a summary, digest or recap name. 91 of them (71.7%) run on a schedule and 91 (71.7%) have an AI step, but only 8 (6.3%) use Anthropic's Claude node, against 51 (40.2%) for OpenAI and 26 (20.5%) for Gemini. Only 7 (5.5%) have an error workflow trigger, so most would fail without telling anyone.
| Input | The last 24 hours of top-level messages in one Slack channel (72 hours on Mondays) |
| Tools | Slack, n8n (or Zapier), Anthropic API (Claude Haiku 5.5) |
| Time | Setup about 40 minutes, most of it creating the Slack app (our estimate). |
| Cost | Claude Haiku 5.5 costs $0.10 per million input tokens and $0.50 per million output tokens for prompts up to 100k tokens, and $0.50/$2.50 above that (Anthropic pricing, read 2026-10-31). Our arithmetic: a channel with 150 messages a day at about 40 tokens each is about 6,250 input tokens with the prompt. Over 22 weekdays that is roughly 140,000 input tokens ($0.014) and, at 400 tokens per digest, about 9,000 output tokens ($0.0045): around 2 cents a month. On n8n Cloud the schedule uses about 22 executions a month, one per weekday, quiet days included. New Anthropic accounts get a small free credit; there is no ongoing free tier. |
n8n nodes in this workflow: Schedule Trigger, Slack, Code. Each links to usage data and known problems in our n8n node library.
Download it
- n8n workflow (.json)Import in n8n: Workflows → Import from file. Then connect your credentials.
- Zapier blueprint (.md)Step-by-step rebuild guide. Zapier has no public import format, so this isn't one-click.
- Open the Zap editorCreate a new Zap and follow the blueprint.
The n8n file has five nodes (Schedule Trigger, Slack channel history, a Code node that builds the transcript, Anthropic Claude, Slack post) plus a read-me note. We check that its JSON structure is valid, but we haven't run every file in a live n8n instance, so test it with sample data before you switch it on. All 25 files, the logins each needs and how to fix common import errors are on our n8n templates page. Not sure which tool to run it on? See what this kind of recipe costs in n8n vs Zapier or n8n vs Make. On n8n Cloud the trigger's poll interval matters more than the node count: n8n pricing works through it.
Steps
- Create your own Slack app: api.slack.com/apps → Create New App → From a manifest. This workflow needs only two bot scopes, channels:history and chat:write (add groups:history for a private channel). Install it to your workspace and connect it in n8n as a Slack credential.
- Invite the app to the channel you want summarized: type /invite @your-app-name in that channel. Do the same in the channel where the digest will be posted.
- Create an Anthropic API key in the Claude Console (Settings → API Keys) and add it in n8n as an Anthropic credential.
- Schedule Trigger: weeks, Monday to Friday, hour 8. Set the workflow's timezone under Workflow → Settings so 8 means your 8.
- Slack → Channel → Get History: pick the channel, turn on Return All, and set Filters → Oldest to the expression in our file. It goes back 24 hours, or 72 on Mondays so Friday afternoon and the weekend aren't lost.
- Code node (in our file): drops joins, bot posts and empty messages, sorts oldest first, marks messages that started a thread, and keeps the newest 60,000 characters. On a day with no messages it returns nothing, so nothing is posted.
- Anthropic → Text → Message a Model, model claude-haiku-5-5, with the prompt below. Under Options, turn on Include Merged Response and set Maximum Number of Tokens to 1500.
- Slack → Message → Send: pick the digest channel and map merged_response as the text. Under Options, turn off Include Link to Workflow, which is on by default and adds a link to your n8n workflow at the end of every message.
- Run it once by hand and read the digest next to the channel. Then publish it.
The prompt
You write a short daily digest of one Slack channel for people who missed the day. Below are the top-level messages from the period, oldest first. Each line is [time] <@user ID>: text.
Write the digest in Slack formatting with these sections, and leave out any section that would be empty:
*Decided*: decisions that were made, one bullet each
*Needs an answer*: questions nobody has answered yet
*Action items*: who will do what, with a due date only if one was stated
*FYI*: anything else worth knowing, at most 3 bullets
Refer to people exactly as they appear, like <@U0123ABC>. Use only what is in the messages: don't guess owners or dates. A line ending in [thread: N replies not shown] started a thread you can't see, so don't say how it ended. Keep it under 200 words. No greeting and no sign-off.
Messages:
{{transcript}}Sample run
[09:12] <@U01AAA>: Can we move the client demo from Thursday to Friday? Their CTO is out Thursday. [09:30] <@U02BBB>: Friday 14:00 works for me. Booking it. [thread: 3 replies not shown] [11:05] <@U03CCC>: Has anyone renewed the SSL certificate for the staging site? It expires on the 8th. [15:40] <@U01AAA>: I'll send the demo agenda to the client by tomorrow noon. Invented for illustration.
*Decided* • Client demo moves to Friday 14:00 (<@U02BBB> is booking it). *Needs an answer* • Who renews the staging SSL certificate? It expires on the 8th (<@U03CCC>). *Action items* • <@U01AAA>: send the demo agenda to the client, by tomorrow noon. • <@U02BBB>: book the Friday 14:00 demo.
Where it breaks
- “not_in_channel”. The app can only read and post in channels it has been added to. Slack’s conversations.history docs list this error for a token that “does not have access to the proper channel”. Run /invite @your-app-name in both channels.
- “Your Slack credential is missing required Oauth Scopes”. That is n8n’s message for Slack’s missing_scope error, and it names the scope to add. Reading a private channel needs groups:history as well as channels:history. Add the scope, then reinstall the app so the token picks it up.
- Rate-limited on a busy day. Since May 29, 2025, Slack limits commercially distributed apps that aren’t in the Slack Marketplace to 1 request a minute and 15 messages per request for conversations.history. Apps a workspace builds for itself keep 50+ requests a minute and up to 1,000 messages (Slack changelog). In the n8n 2.45.7 source we read, Get History with Return All asks for 100 messages per page and doesn’t wait and retry when Slack says no, so a second page on a limited app fails the run. That is why step 1 uses your own app.
- Threads are left out. conversations.history returns the messages in the channel itself. For replies inside a thread, Slack’s docs point to conversations.replies, a separate call. Our Code node marks each message that started a thread with its reply count, and the prompt tells Claude not to guess how the thread ended. If your team decides things in threads, add a Slack node per thread, and expect more calls against the limit above.
- The digest stops mid-sentence. n8n’s Anthropic node sends a 1,024-token output cap unless you set Maximum Number of Tokens (n8n 2.45.7 source). Our file sets 1,500, which is plenty for 200 words.
- Who gets a notification. Names in the digest are Slack mentions. Slack’s formatting docs say a mention in an app’s message notifies the person only if they are already in the channel where it’s posted. Post to the same channel and everyone named gets pinged each morning; post to a separate digest channel to keep it quiet.
- Monday misses the weekend. A plain “last 24 hours” filter on Monday at 8 starts on Sunday at 8. The Oldest expression in our file goes back 72 hours on Mondays. On self-hosted n8n, a workflow with no timezone runs in the instance timezone, which defaults to America/New_York (n8n docs).
- Private channel, public digest. If you summarize a private channel, post the digest somewhere with the same members. A summary leaks as much as the messages do.
- Anything customer-facing or money-related. Keep a human approval step until you've watched a few dozen runs and trust it.
Use GPT or Gemini instead, or build it in Zapier
- Another model in n8n: replace only the Anthropic node. With OpenAI → Text → Message a Model, map
message.contentinto the Slack text. With Google Gemini → Text → Message a Model, turn on Include Merged Response and mapmergedResponse. Set an output limit on either, and keep the same prompt. - Zapier: there is no “read the last day” step, so collect messages as they arrive. Trigger: Slack, New Message Posted to Channel. Action: Digest by Zapier, Append Entry and Schedule Digest, frequency Daily, with Trigger on Weekends set to No. Then an Anthropic (Claude) step with the Current Digest field in the prompt, and Slack, Send Channel Message. Zapier’s digest help page says the digest step doesn’t count toward your tasks.
Tool names and pricing change often, so check each tool's current docs before you build. Times on this page are estimates, not measurements.
More ops recipes
- Invoice PDFs from email into a sheet
- Alert when a supplier changes a price
- Monday digest of what's due this week
- Remind me 30 days before a contract renews
- Summarize a contract PDF with Claude
All collections · Full inbox-triage walkthrough
New to building agents? Plan this one first with the Slack channel digest agent spec sheet on PlainAgent, our sister site with plain-English guides. Not sure which AI model to use? See the writing and chat assistant ranking on TaskRank.