Google Sheets to Slack: automatic weekly KPI posts
Three methods to automate Sheets → Slack
| Method | Effort | Cost | Best for |
|---|---|---|---|
| Geniusly (AI coworker) | Lowest (just connect and ask) | Free plan | Formatted reports with context from multiple tools |
| Google Apps Script | Medium (write code once) | Free (Google Workspace) | Custom logic, full control |
| Slack Workflow Builder | Lowest (no code) | Requires Slack Pro ($8.75/user/mo) | Simple scheduled posts (limited formatting) |
Method 1: Geniusly (AI coworker)
Best for: Formatted weekly reports that pull context from Google Sheets plus other tools (Gmail, Linear, GitHub).
How it works
Geniusly is an AI coworker for Slack that reads from Google Sheets (and Gmail, Drive, Linear, GitHub, Google Ads) to prepare reports. You ask it once (e.g., "Pull this week's KPIs from [Sheet name] and post them to #team-updates every Monday at 9am"), review the first version, and then it runs on schedule.
Steps
- Add Geniusly to Slack: Go to geniusly.ai/get-started, sign up, and add Geniusly to your Slack workspace.
- Connect Google Sheets: In a private Slack DM with Geniusly, ask "Connect Google Sheets" and follow the OAuth flow to authorize read access to your Sheets.
- Invite Geniusly to the channel: In the channel where you want KPIs posted (e.g., #team-updates), type
/invite @Geniusly. - Ask for the weekly report: @mention Geniusly in that channel with your request:
"Every Monday at 9am, pull this week's KPIs from 'Q4 Dashboard' (tab 'Weekly KPIs', rows 2-10) and post them here. Format: Week, Revenue, New Customers, Churn. Add a one-sentence summary at the top."
- Review and approve: Geniusly will prepare the first version and ask you to review. If it looks good, approve it. If not, refine the request.
- It runs automatically: Geniusly will post the report every Monday at 9am. No further work required.
Pros and cons
Pros: No code, free plan, works with multiple tools (not just Sheets), formatted reports with summaries.
Cons: Requires connecting Geniusly (another tool in your stack).
Method 2: Google Apps Script
Best for: Custom logic (e.g., conditional formatting, calculated fields) and full control.
How it works
Google Apps Script lets you write JavaScript that reads your Sheet and posts to Slack via webhook. It's free, runs in Google's cloud, and gives you full control over logic and formatting.
Steps
- Create a Slack webhook:
- Go to api.slack.com/messaging/webhooks and create a new webhook for your channel (e.g., #team-updates).
- Copy the webhook URL (it looks like
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXX).
- Open your Google Sheet and go to Extensions > Apps Script.
- Paste this code (replace
YOUR_WEBHOOK_URLwith your webhook, and adjust the sheet name and range):function postWeeklyKPIsToSlack() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Weekly KPIs'); var range = sheet.getRange('A2:D10'); // Adjust to your data range var values = range.getValues(); // Build the message var text = '*Weekly KPIs* '; values.forEach(function(row) { text += row[0] + ': ' + row[1] + ' | ' + row[2] + ' | ' + row[3] + ' '; }); // Post to Slack var payload = JSON.stringify({text: text}); var options = { method: 'post', contentType: 'application/json', payload: payload }; UrlFetchApp.fetch('YOUR_WEBHOOK_URL', options); } - Test it: Click the Run button (▶) in the Apps Script editor. Check your Slack channel—you should see the KPIs.
- Schedule it: In the Apps Script editor, click the clock icon (Triggers) and add a time-driven trigger:
postWeeklyKPIsToSlack, week timer, Monday 9-10am.
Pros and cons
Pros: Free, full control, no third-party tools.
Cons: Requires code (JavaScript), harder to update later.
Method 3: Slack Workflow Builder
Best for: Simple scheduled posts (no formatting, just raw data).
How it works
Slack Workflow Builder (available on Slack Pro and Business+) lets you create no-code workflows, including scheduled messages. You can manually paste data from Sheets into a form, but there's no native Sheets integration—so this method is best for static weekly messages (not dynamic pulls).
Steps
- Open Slack Workflow Builder: In Slack, click your workspace name > Tools > Workflow Builder.
- Create a new workflow: Click Create and choose Scheduled date & time.
- Set the schedule: Choose "Weekly" on Monday at 9:00am.
- Add a step: Send a message:
- Choose the channel (e.g., #team-updates).
- Write the message with placeholders:
*Weekly KPIs*
Revenue: [insert variable]
New Customers: [insert variable]
Churn: [insert variable]
- Publish the workflow.
Limitation
Workflow Builder doesn't pull data from Google Sheets automatically. You'd need to manually update the message each week, or use a workaround (e.g., a Sheets-to-webhook integration via Apps Script). For dynamic Sheets data, use Method 1 (Geniusly) or Method 2 (Apps Script).
Pros and cons
Pros: No code, built into Slack.
Cons: Requires Slack Pro ($8.75/user/mo), no native Sheets integration (manual updates or need a script).
Which method should you choose?
- Choose Method 1 (Geniusly) if you want no-code, free, and formatted reports (especially if you also use Gmail, Linear, or GitHub).
- Choose Method 2 (Apps Script) if you need custom logic, full control, and don't mind writing code.
- Choose Method 3 (Workflow Builder) if you're on Slack Pro and only need simple static messages (not dynamic Sheets pulls).
For most teams, Method 1 (Geniusly) is the easiest—no code, free, and it handles formatting for you.
Frequently asked questions
Can I use Zapier instead?
Yes. Zapier has a "Google Sheets → Slack" Zap that runs on a schedule. But it requires a paid Zapier plan (the free plan doesn't support scheduled Zaps). The methods above are free (or use tools you likely already have).
Does Geniusly write to Google Sheets or just read?
Geniusly reads by default. It can make explicitly requested Sheets edits (e.g., "Add this row to [Sheet name]"), but for weekly KPI posts, it only needs read access.
Can I format the Slack message (bold, bullets, etc.)?
Yes with Methods 1 and 2. Geniusly formats reports automatically (bold headers, bullets). Apps Script lets you use Slack's markdown formatting. Workflow Builder has limited formatting.
How do I change the schedule later?
With Geniusly, just ask it in Slack ("Change the KPI post to Wednesdays at 10am"). With Apps Script, edit the trigger in the Apps Script editor. With Workflow Builder, edit the workflow.
