Connect Google Sheets to a Slack digest in Make.com, batch new rows every 10 minutes, and format scannable messages reliably for ops teams without spam.
Introduction
The manual version is simple and exhausting: someone checks a Google Sheet, copies new rows into Slack, posts updates, then repeats when the same records change again. If you try to automate it as one Slack message per row, you create a noisy channel that people ignore, and you still lose track of what is actually new.
In this Cross-Platform Automation (XPA) setup, you will connect Google Sheets to a Slack digest using Make.com. Instead of blasting Slack, you collect updates for a short window, then post one readable digest message.
By the end, you will have a working Google Sheets to Slack digest that batches updates every 10 minutes and stays maintainable.
What You'll Need
- Make.com account with scenario creation and scheduling enabled.
- Google Sheets access to the spreadsheet and the specific tab you will watch.
- Slack access, and permission for the Make.com Slack app to post into your channel.
- In your Google Sheet, add or confirm:
- A stable unique identifier column (example:
RecordID) that never changes per row. - An update timestamp column (example:
UpdatedAt) that changes when the row changes. - Optional but recommended:
Title/Name,Status, and a link field (or enough data to build one).
- A stable unique identifier column (example:
This is intermediate because it includes batching logic and Slack formatting. You can build it without paid add-ons beyond Make’s normal automation capabilities, but you may need the Make plan that supports the Digest modules you use.
How It Works (The Logic)
Your Make.com scenario uses this logic:
- Trigger: When a row changes in Google Sheets.
- Action (batching): For each qualifying row, Make adds an item into a Digest collector.
- Timer flush: Every 10 minutes, Make finalizes the digest.
- Action (output): Make posts one Slack message that includes all items collected in that time window.
The key is that you batch, then post once, which is what makes this feel like a proper XPA operational feed rather than “integration spam.”
Step-by-Step Setup
1) Prepare your Google Sheet for reliable change tracking
Ensure these columns exist and are consistently populated:
RecordID(unique, stable)UpdatedAt(timestamp updated on changes)Title(what you want people to scan)Statusand/orOwner(what tells you why it matters)Link(optional). If you do not have a link column, you can still post a placeholder and add the real link later.
If RecordID or UpdatedAt is blank for some rows, your digest can silently skip or behave unpredictably.
2) Create a new Make.com scenario
- In Make.com, Create a new scenario.
- Add a Google Sheets trigger designed for detecting row changes (commonly “Watch Rows” style).
You will connect filters and mapping in the next steps.
3) Filter immediately, before you add items to the digest
Right after the Google Sheets trigger, add a filter module so only the rows you want go into the digest:
RecordIDis not emptyUpdatedAtis not emptyStatusis in your actionable set (example:New,In Review,Ready for Approval)
Gotcha: if you filter too aggressively (for example, requiring a field you rarely populate), your digest will look “broken.”
4) Build the digest item fields
Add a mapping/transform step so every digest item has the same structure. Create values like:
DigestTitle=TitleDigestDetail= concat(Status, optionalOwner)DigestTime=UpdatedAtnormalized to a consistent format (ISO 8601 is easiest)DigestLink=Linkif present
You are setting yourself up for a message that is fast to read and easy to troubleshoot.
5) Add each qualifying row into the Make Digest collector
Add the Digest module in Make:
- Action: Add item to digest
- Map into digest item fields, for example:
item_title=DigestTitleitem_detail=DigestDetailitem_time=DigestTimeitem_link=DigestLink
This step is the batching engine of your XPA.
6) Schedule the flush every 10 minutes
Add a time-based module that fires on a cadence (for example, every 10 minutes), then connect it to the digest finalize step.
Gotcha: avoid multiple independent flush paths. You want one digest collection, one finalize, one Slack post per window.
7) Finalize the digest and post a single Slack message
Add your Slack module after digest finalization.
Message formatting approach:
- If your Make Slack action supports Block Kit fields, use a block-style message.
- If it only supports plain text, use mrkdwn-friendly formatting and keep items short.
Useful Slack formatting reference: Slack’s guidance on message formatting is here: Slack help on message formatting.
A solid template for the message:
- Header:
*Google Sheets Digest* (10 min window) - One line per digest item:
Title - Status - Link - Footer: digest window timestamp
8) Add failure handling so updates do not disappear
Add an error branch:
- If the Slack post fails, write the digest payload summary to a “Digest Errors” Google Sheet, or
- Send an alert to a separate Slack channel like
#ops-alerts.
Include: window start/end and item count. Without this, you will only find out from angry users.
9) Test with controlled edits
- Insert 2 rows into the sheet and set
Statusto an included value. - Wait for the next flush window.
- Confirm Slack shows exactly those rows.
- Update one row’s status and confirm it appears in the next digest according to your filters.
Start with a short window in staging (5 minutes) if your workflow supports it.
Real-World Business Scenario
A healthcare services provider tracks onboarding tasks in a Google Sheet used by multiple teams. Previously, the onboarding coordinator copied updates into Slack manually, and the channel became chaotic when multiple tasks changed at once.
With this Google Sheets to Slack digest in Make.com, every meaningful row update is collected and posted once per 10 minutes. The Slack channel becomes a clean operational feed: people can scan titles and statuses, then click through to the sheet row. The team reduced follow-up questions like “did we already get this update?” because the digest window makes the timeline obvious.
Common Variations
-
Notify only when Status changes to specific stages
- Add filters for
Statusvalues that represent a handoff:Ready for Review,Approved,Blocked.
- Add filters for
-
Group digest items by Owner in Slack
- Build
Ownerinto the digest item and format the Slack message so sections are per owner.
- Build
-
Add escalation for high-priority statuses
- If
StatusequalsBlocked, also send an immediate Slack alert outside the digest (or route to a different channel).
- If
A reliable XPA feed you can maintain
What you built is a proper XPA-style pipeline from Google Sheets into Slack, with batching via Make’s Digest so your channel stays readable. Once your RecordID and UpdatedAt columns are consistent, this setup is stable and easy to extend.
If you want this tailored to your exact sheet schema and Slack formatting preferences, Olmec Dynamics builds these integrations end-to-end. You can start by exploring Cross-Platform Automation (XPA) and then see what we do here.