Google Tasks to Slack, a clean daily brief every day
Your day shouldn’t start with hunting for tasks, copying them into Slack, and then second-guessing due dates. But that’s what happens when Google Tasks lives in one place and your team communicates somewhere else.
This Google Tasks Slack automation hits team leads first (they’re the ones writing “today’s plan” posts). It also saves ops managers and busy agency owners who need a clean daily brief without the morning scramble.
In a few minutes, you’ll understand how this workflow pulls tasks due today, summarizes them, and posts a Slack-ready briefing automatically, every morning.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Tasks to Slack, a clean daily brief every day
flowchart LR
subgraph sg0["Basic LLM Chain1 Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code (Build LLM Prompt)"]
n1@{ icon: "mdi:cog", form: "rounded", label: "Get many tasks", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Basic LLM Chain1", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Ollama Model1", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send a message1"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code (Filter Due Today)"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Slack1"]
n9@{ icon: "mdi:cog", form: "rounded", label: "Trigger at Morning", pos: "b", h: 48 }
n2 --> n0
n2 --> n8
n6 --> n5
n4 -.-> n3
n1 --> n7
n3 --> n6
n9 --> n1
n0 --> n3
n7 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n3,n4 ai
class n2 decision
class n0,n6,n7 code
classDef customIcon fill:none,stroke:none
class n0,n5,n6,n7,n8 customIcon
The Problem: Daily task updates become manual busywork
Google Tasks is great for capturing work fast. The problem shows up the next morning, when you need to turn that private list into a clear plan your team can actually act on. Someone ends up rewriting tasks into Slack, cleaning up messy titles, and checking every due date because timezones and “due today” logic are surprisingly easy to get wrong. Miss one item and you’ve created confusion before the day even starts. Do it every weekday and you lose a real chunk of time, plus the mental load of remembering “did I include everything?”
The friction compounds. Here’s where it breaks down in real life:
- People copy tasks by hand, and the wording changes, which means the “plan” doesn’t match the source of truth.
- Due dates get double-checked (again), because nobody trusts a manual summary at 7:30 AM.
- Task lists drift, since some items get updated in Google Tasks and never reflected in Slack.
- When there are no tasks due today, you still spend time confirming that nothing is missing.
The Solution: A Slack-ready morning brief from Google Tasks
This workflow runs every morning on a schedule (it’s set to 7:00 AM by default). It pulls tasks from your chosen Google Tasklist, normalizes the dates to your timezone, and keeps only what’s actually due today. If there are no due-today tasks, it posts a simple “No tasks due today” message to Slack so your team isn’t left guessing. If tasks exist, it creates a compact prompt and asks a local LLM (via LangChain + Ollama) to produce a short, clean summary that’s meant for Slack. Finally, it removes any hidden <think> content the model might include, then posts the final message into your selected Slack channel.
The workflow starts with a daily Cron trigger. Then Google Tasks provides the raw list, code filters it to “today” in your timezone, and an If branch decides which message goes to Slack. The LLM path turns a task list into a brief your team will read instead of ignore.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say a team lead posts a daily plan to Slack 5 days a week. Manually, it’s usually about 10 minutes to open Google Tasks, filter what’s due today, rewrite it into a readable brief, then double-check dates and wording. That’s close to an hour every week. With this workflow, the “work” is basically zero after setup: it triggers at 7:00 AM, processes in the background, and your channel has the brief by the time people check Slack.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Tasks to read tasks from a tasklist
- Slack to post the morning brief
- Ollama endpoint for local LLM summaries
- Google Tasks OAuth2 credential (get it from Google Cloud Console)
- Slack API token (get it from your Slack app settings)
Skill level: Intermediate. You’ll connect OAuth credentials, set a timezone constant, and test one scheduled run.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled morning trigger fires. The Cron node runs at 7:00 AM by default, so your brief shows up before standups and before inbox chaos starts.
Your Google Tasks list is pulled and cleaned up. n8n fetches tasks from the tasklist you choose, then a small code step normalizes dates to your timezone and keeps only tasks due today.
The workflow takes the right path automatically. If there are no tasks due today, it sends a simple Slack message and stops. If tasks exist, it builds a compact prompt and sends the list to a LangChain LLM chain connected to an Ollama local model.
A final brief is posted to Slack. A cleanup step strips any <think>...</think> blocks (honestly, this is a lifesaver for “internal reasoning” models), and then the Slack node publishes the final summary to your chosen channel.
You can easily modify the schedule time to match your team’s day, or adjust the “due today” timezone logic for remote teams. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Cron Trigger
Set the workflow to run automatically each morning using the scheduled trigger.
- Add or open Scheduled Morning Trigger and set Trigger Times to run at hour
7. - Keep the default schedule unless you need a different daily hour for your briefing.
⚠️ Common Pitfall: The cron schedule uses your n8n instance timezone. If you need a specific local time, confirm the instance timezone aligns with your morning schedule.
Step 2: Connect Google Tasks
Pull all tasks from the specific Google Tasks list you want to summarize.
- Open Retrieve Task List and set Task to
[YOUR_ID]. - Set Operation to
getAlland enable Return All totrue. - Credential Required: Connect your googleTasksOAuth2Api credentials.
⚠️ Common Pitfall: Replace [YOUR_ID] with your actual Google Tasks list ID, or the workflow will return no tasks.
Step 3: Filter and Route Today’s Tasks
Filter tasks due today and route the flow based on whether any tasks exist.
- Open Filter Today's Tasks and keep the JavaScript as-is to filter due dates in
Asia/Dhakaand emit{ __empty: "empty" }when none exist. - In Task Presence Check, verify the condition checks Left Value
={{ $json.__empty }}notEquals Right Valueempty. - Confirm the routing: Task Presence Check sends items with tasks to Compose LLM Brief Prompt, and empty results to Post Empty Tasks Alert.
Step 4: Set Up the LLM Briefing Generation
Generate a Slack-ready summary using the LLM chain and a local Ollama model.
- Open Compose LLM Brief Prompt to keep the prompt-building logic that outputs a single
inputfield for the LLM. - In LLM Briefing Chain, set Text to
={{ $json.input }}and keep Prompt Type asdefine. - Open Ollama Language Model and set Model to
qwen3:4b. - Credential Required: Connect your ollamaApi credentials on Ollama Language Model. It is connected as the language model for LLM Briefing Chain—do not add credentials to the chain node itself.
- In Strip Think Tags, keep the cleanup code that removes
<think>...</think>and outputscleanText.
Step 5: Configure Slack Outputs
Send either a “no tasks” alert or the generated brief to Slack.
- In Post Empty Tasks Alert, set Text to
🌤️ No Google Tasks due today. I’ll check again tomorrowand choose your Slack Channel (replaceREPLACE_WITH_SLACK_CHANNEL_NAME). - Credential Required: Connect your slackApi credentials in Post Empty Tasks Alert.
- In Dispatch Slack Brief, set Text to
={{ $json.cleanText }}and choose the same or a different Slack Channel. - Credential Required: Connect your slackApi credentials in Dispatch Slack Brief.
⚠️ Common Pitfall: If the Slack channel name is wrong or not accessible to your Slack app, messages will fail to post.
Step 6: Test and Activate Your Workflow
Run a manual test to verify both branches, then activate for daily use.
- Click Execute Workflow and check the output of Retrieve Task List and Filter Today's Tasks.
- If tasks exist, confirm Dispatch Slack Brief posts a concise summary to Slack.
- If no tasks exist, confirm Post Empty Tasks Alert posts the “no tasks” message.
- When successful, toggle the workflow to Active to enable the daily scheduled run.
Common Gotchas
- Google Tasks OAuth credentials can expire or need the right scopes. If tasks stop loading, check the credential in n8n and confirm the Google Tasks API is enabled in Google Cloud Console.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Slack tokens often fail because the app is missing
chat:writepermission or the bot isn’t in the channel. Verify the Slack credential in n8n, then confirm the bot is invited to the target channel.
Frequently Asked Questions
About 30–60 minutes if your Google and Slack credentials are ready.
No. You’ll mainly connect accounts and paste in the provided code blocks as-is.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. If you use a local Ollama model, your LLM cost is basically your own compute.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s a common tweak. Change the Cron node from 7:00 AM to your preferred hour, then update the TZ constant inside the “Filter Today’s Tasks” code node to match your team. Some teams also adjust the Slack message formatting (bullets vs. short paragraphs) by editing the “Compose LLM Brief Prompt” node.
Most of the time it’s expired OAuth consent or the wrong scope on the Google Tasks credential. Re-check that the Google Tasks API is enabled in your Google Cloud project, then confirm the credential in n8n still shows as connected. Also verify the selected Tasklist inside “Retrieve Task List,” because swapping Google accounts can silently point you at an empty list. If you recently changed redirect URLs or upgraded your n8n domain, you may need to re-authenticate.
Practically, it can handle dozens of due-today tasks in a single run, and most teams never hit a limit.
Often, yes, because this workflow includes “real” filtering logic, branching, and LLM cleanup that’s awkward to maintain in simpler tools. n8n also lets you self-host, which matters if you want unlimited scheduled runs and more control over credentials. The local Ollama approach is another big deal if you don’t want to send task content to third-party AI APIs. On the other hand, if your brief is just “list tasks and post,” Zapier or Make can be quicker to set up. Talk to an automation expert if you want help choosing.
Once this is live, the “morning brief” becomes background noise in the best way. Your team gets a clear plan, and you get your mornings back.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.