

How to Send Gmail Digests to Slack with Make
A scheduled Make scenario that queries Gmail for emails matching your criteria — by label, sender domain, or unread status — then formats and posts a summary digest to a Slack channel on your chosen cadence.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that get 20–100 important emails per day and want a single Slack message summarizing what matters, without everyone checking Gmail constantly.
Not ideal for
If you need alerts within seconds of an email arriving, build an instant Gmail-to-Slack trigger instead — a scheduled digest has inherent delay.
Sync type
scheduledUse case type
notificationReal-World Example
A 12-person customer success team at a B2B SaaS company receives 40–60 support and renewal emails daily from client domains. Before this workflow, the team lead checked Gmail every hour and manually copied subject lines into a Slack standup thread. Now Make runs at 8am and 2pm, posts a digest to #cs-email-digest with sender, subject, and a link to each message, and the team triages in Slack without touching Gmail until something is urgent.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into Make
Copy the pre-built Make blueprint and paste it straight into Make. All modules, filters, and field mappings are already configured — you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Optional
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Email Subject | ||
| From (Sender) | ||
| Gmail Message ID | ||
| Aggregated Digest Text | ||
| Slack Channel ID | ||
| Digest Date Header | ||
3 optional fields▸ show
| Date Received | |
| Email Snippet | |
| Labels |
Step-by-Step Setup
make.com > Scenarios > + Create a new scenario
Create a new Make scenario
Log into make.com and click the blue 'Create a new scenario' button on your Scenarios dashboard. You'll land on the canvas — a blank dark-grey workspace with a single circle in the center labeled 'Add a module'. This is where the scheduled trigger goes. Make opens every new scenario in the canvas editor; you don't need to visit any settings page first.
- 1Go to make.com and log in
- 2Click '+ Create a new scenario' in the top-right corner of the Scenarios page
- 3Wait for the canvas editor to open — you'll see a grey circle with a plus icon in the center
Canvas > Empty Module Circle > Tools > Clock > Run a scenario
Add a Schedule trigger
Click the empty circle on the canvas to open the module picker. Search for 'Clock' or scroll to the Tools section and select 'Clock'. Choose 'Run a scenario' as the trigger type — this is Make's native scheduler. Set your interval: for a daily digest, choose 'Every Day' and set the time to 08:00 in your team's timezone. For a weekly digest, select 'Every Week', choose the day, and set the time.
- 1Click the grey circle on the canvas
- 2Type 'Clock' in the search box
- 3Select 'Tools – Clock' from the results
- 4Choose 'Run a scenario' as the trigger event
- 5Set 'Every Day' and enter '08:00' as the time, then select your timezone from the dropdown
Canvas > + > Gmail > Search Emails (Advanced)
Connect Gmail and search for emails
Click the '+' button to the right of the Clock module to add the next module. Search for 'Gmail' and select it. Choose the action 'Search Emails (Advanced)'. You'll be prompted to connect a Google account — click 'Add' and complete the OAuth flow in the popup window. Make will ask for Gmail read permissions; you must allow these or the search will fail.
- 1Click the '+' icon to the right of the Clock module
- 2Search 'Gmail' and click the Gmail app
- 3Select 'Search Emails (Advanced)' as the action
- 4Click 'Add' next to the Connection field
- 5Complete the Google OAuth popup and click 'Allow' on the permissions screen
Canvas > Gmail Module > Search Emails (Advanced) > Query Fields
Configure your Gmail search query
In the 'Search Query' field, enter a Gmail search string exactly as you would in the Gmail search bar. To filter by label, use 'label:important is:unread'. To filter by sender domain, use 'from:@acme.com'. Combine them with 'AND': 'from:@acme.com is:unread'. In the 'Maximum Number of Results' field, enter 50 — this caps the batch and prevents Make from pulling hundreds of emails on the first run. Set 'Mark as Read' to No so the digest doesn't alter email state.
- 1Click inside the 'Search Query' field
- 2Enter your Gmail query string (e.g., 'label:client-updates is:unread')
- 3Set 'Maximum Number of Results' to 50
- 4Set 'Mark as Read' to No
- 5Leave 'After Date' blank unless you want to limit results to today only
Canvas > + > Tools > Text Aggregator
Aggregate emails into a single bundle
By default, the Gmail module outputs one bundle per email, which would post one Slack message per email — not a digest. Add a 'Text Aggregator' module from the Tools section. In the 'Source Module' dropdown, select your Gmail module. In the 'Text' field, build one line per email using Make's formula panel: combine Subject, From, and a link to the email. Separate each line with a newline character using the newline option in the text editor.
- 1Click '+' after the Gmail module
- 2Search 'Text Aggregator' and select it from Tools
- 3In 'Source Module', choose your Gmail search module from the dropdown
- 4In the 'Text' field, click into the editor and map: '• {{subject}} — from {{from}} — {{id}}'
- 5Click the newline button (the arrow icon) at the end of the text line to separate entries
Canvas > + > Flow Control > Router
Add a Router to handle empty results
If no emails match your query today, the Text Aggregator outputs an empty string. Without handling this, Make will post a blank Slack message. Add a 'Router' module after the Text Aggregator. Create two routes: Route 1 checks that the aggregated text is not empty (use the filter 'Text > Does not equal > empty string'). Route 2 is the fallback — you can stop the scenario here or post a 'No new emails today' message.
- 1Click '+' after the Text Aggregator
- 2Search 'Router' and select it from Flow Control
- 3Click the wrench icon on Route 1 to open the filter editor
- 4Set condition: 'Text' (map the aggregated text field) 'Does not equal' and leave the value field empty
- 5Leave Route 2 without a filter — it acts as the fallback for empty results
Canvas > Router > Route 1 > + > Slack > Create a Message
Connect Slack and post the digest to Route 1
On Route 1, click '+' to add a Slack module. Search 'Slack' and choose 'Create a Message'. Connect your Slack workspace via OAuth when prompted. In the 'Channel' field, type or search for your target channel (e.g., #cs-email-digest). In the 'Text' field, write a header like '*📧 Daily Email Digest*' then add a newline and map the aggregated text from the Text Aggregator. Slack uses mrkdwn formatting — wrap bold text in asterisks.
- 1Click '+' on the Route 1 line
- 2Search 'Slack' and select the Slack app
- 3Choose 'Create a Message' as the action
- 4Click 'Add' next to Connection and authorize your Slack workspace
- 5In 'Channel', search and select your target channel
- 6In 'Text', type your header line, click the newline button, then map the Text Aggregator output
Canvas > Tools > Set Variable (insert before Slack module)
Format the digest message with a Set Variable module
Before the Slack module, insert a 'Set Variable' module from Tools to clean up the digest text. Map the aggregated text into the variable and apply Make's 'replace()' and 'trim()' functions to strip any trailing newlines or double spaces. This prevents the Slack message from having blank lines between entries when an email subject line is empty. Store the result in a variable named 'cleaned_digest'.
- 1Right-click the connection line between the Text Aggregator and the Slack module
- 2Select 'Add a module between'
- 3Search 'Set Variable' from Tools
- 4Name the variable 'cleaned_digest'
- 5In the Value field, enter: trim(replace({{aggregated_text}}, "\n\n", "\n"))
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Canvas > Slack Module > Create a Message > Text Field
Add a date header to the digest
Inside the Slack 'Create a Message' text field, prefix the digest with today's date so recipients know which day the digest covers. Use Make's 'formatDate()' function directly in the text field: formatDate(now; 'MMMM D, YYYY'). This outputs something like 'November 14, 2024'. Put it on the first line before your email list. The 'now' variable is built into Make and always reflects the moment the scenario runs.
- 1Click into the Slack module's Text field
- 2On the first line, type '*Email Digest — '
- 3Open the formula editor (the function icon) and enter: formatDate(now; 'MMMM D, YYYY')
- 4Close the formula with '*' to bold the entire header line
- 5Press newline, then map the 'cleaned_digest' variable on the next line
Canvas > Bottom Toolbar > Run once
Test the scenario end to end
Click 'Run once' in the bottom toolbar to execute the scenario manually. Make will highlight each module as it executes, showing a green checkmark when successful and a count bubble showing how many bundles passed through. Click the bubble on the Gmail module to see which emails were fetched. Click the bubble on the Slack module to confirm a message was sent. Check your Slack channel to verify the digest looks correct.
- 1Click 'Run once' in the bottom-left toolbar
- 2Watch the modules highlight in sequence left to right
- 3Click the number bubble above the Gmail module to inspect fetched emails
- 4Click the number bubble above the Slack module to confirm the message payload
- 5Open your Slack channel and verify the digest message appeared
Canvas > Bottom Toolbar > Scheduling Toggle > Activate
Activate the scenario and set scheduling
Once the test passes, click the 'Scheduling' toggle in the bottom toolbar to activate the scenario. Make will confirm activation with a blue dot on the scenario card in your dashboard. The Clock module's schedule is now live. Return to the Scenarios dashboard and verify the scenario shows 'Active' status and the next scheduled run time. Make will now run this automatically without any manual intervention.
- 1Click the 'Scheduling' toggle in the bottom-left toolbar (it turns blue when active)
- 2Click 'Activate' in the confirmation popup
- 3Navigate back to the Scenarios dashboard
- 4Confirm the scenario card shows 'Active' and the next run timestamp
Paste this into a Make 'Set Variable' module placed after the Text Aggregator and before the Slack module. It takes the raw aggregated text and reformats each line to add emoji priority indicators based on keywords in the subject line, then trims the output. Map the 'prioritized_digest' variable into your Slack text field instead of the raw aggregator output.
JavaScript — Custom Function{{-- Paste into Make Set Variable > Value field as a formula --}}▸ Show code
{{-- Paste into Make Set Variable > Value field as a formula --}}
join(
map(... expand to see full code
{{-- Paste into Make Set Variable > Value field as a formula --}}
join(
map(
split(aggregatedText; "\n");
line;
if(
contains(toLowerCase(line); "urgent");
concat("🔴 "; line);
if(
contains(toLowerCase(line); "invoice");
concat("💰 "; line);
if(
contains(toLowerCase(line); "bug");
concat("🐛 "; line);
if(
contains(toLowerCase(line); "renewal");
concat("📋 "; line);
concat("• "; line)
)
)
)
)
);
"\n"
)Scaling Beyond More than 50 emails matching your Gmail query per scheduled run+ Records
If your volume exceeds More than 50 emails matching your Gmail query per scheduled run records, apply these adjustments.
Paginate with multiple Gmail search modules
Make's Gmail 'Search Emails (Advanced)' module returns a maximum of 50 results per run. If your query matches 100+ emails daily, add a second Gmail search module with the same query but offset by 50 using the 'Page Token' field from the first module's output. Chain them into the same Text Aggregator using multiple Text Aggregator inputs.
Cap your Make operation count before scaling
Each email fetched is one operation. At 100 emails/run with two daily runs, that's 200 Gmail operations plus 2 Slack posts = 202 operations/day = 6,060/month. The Make Core plan includes 10,000 operations/month at $9/month — verify you're within this before increasing your email volume cap.
Split large digests into multiple Slack messages
Slack enforces a 3,000-character limit on message text and truncates silently beyond that. If your digest covers 50+ emails with subjects and links, split the aggregated text every 20 emails using Make's 'substring()' function and post two or three Slack messages in sequence rather than one oversized message.
Use Gmail labels instead of broad queries at high volume
Searching 'is:unread' across an entire inbox at high email volume returns noisy results and taxes your Make operation count. Pre-filter in Gmail by creating a Gmail filter rule that automatically applies a specific label to emails matching your criteria. Then query only that label in Make — the API call is faster and results are pre-filtered.
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use Make for this if your digest logic is more complex than a simple 'fetch and post'. Make's visual canvas handles branching well — you can route urgent emails to one Slack channel, standard emails to another, and log everything to a Google Sheet, all in one scenario. The Text Aggregator module is built exactly for this pattern: collapsing multiple records into one output. If your team just wants 'post every new email to Slack instantly', Zapier is faster to set up and costs the same. Make earns its place when you need scheduling, conditional routing, and text formatting in one place.
The math on Make's free tier is tight for this workflow. Each Gmail search result is one operation, plus one operation for the Slack post. A daily digest pulling 30 emails = 31 operations/run. At one run per day, that's 930 operations/month — just under Make's free 1,000-op limit. Add a second daily run or increase your email cap to 50 and you're at 1,860 operations/month, which requires the Core plan at $9/month. Zapier's free tier gives you 100 tasks/month total, which covers about 3 digest runs — Make is significantly cheaper for this volume.
Zapier has one genuine advantage here: its 'Gmail – New Email Matching Search' trigger fires within 2 minutes of an email arriving, making it better for near-real-time single-email alerts. For a digest though, that trigger fires once per email, not on a schedule — you'd need Zapier's 'Digest by Zapier' app to aggregate, and it's clunky. n8n gives you full JavaScript control over message formatting and can run self-hosted for free, which is better if your team has a developer and high email volume. Power Automate has a native 'Send an Email Digest' template in its gallery, which is faster to set up than Make for Microsoft 365 users — but it doesn't connect to Gmail natively without a third-party connector. Pipedream is the right call if you want to write custom code to parse email headers or handle complex deduplication logic. Make beats all of them on the visual-builder-with-scheduling-and-aggregation combination for non-developer teams.
Three things you'll hit after the scenario is running. First, Gmail's API rate limit is 250 quota units per second per user, which sounds generous until your scenario runs against a Gmail account that's also syncing with Outlook or another tool — you'll see 429 errors intermittently. Add a 'Sleep' module (5 seconds) before the Gmail search if you share the account with other integrations. Second, Slack's message formatting differs between the 'text' field and Block Kit — if you want buttons or structured sections, you need to switch from 'Create a Message' to 'Create a Message with Blocks' and build a JSON payload, which adds complexity. Third, Make's Text Aggregator outputs a single text string with no metadata — if you later want to sort emails by date before posting, you can't do it inside the Aggregator. You'd need to add an 'Array Aggregator' first, sort the array using Make's 'sort()' function, then pass the sorted array to a separate formatting step before posting.
Ideas for what to build next
- →Add a weekly summary rollup — Build a second scenario that runs every Friday at 5pm with a broader Gmail query (no 'after:' date limit, just the past 7 days) and posts a weekly rollup to a separate Slack channel. This gives teams two views: a daily operational digest and a weekly strategic summary.
- →Route digest lines by priority to different channels — Add a Router after the Gmail module with separate routes for high-priority emails (e.g., from executive domains or labeled 'urgent') and standard emails. Post urgent items to #alerts with @here, and standard items to the regular digest channel. This avoids treating all emails the same.
- →Archive digest summaries to a Google Sheet — After the Slack module on Route 1, add a Google Sheets 'Add a Row' module to log each digest — date, email count, and the full digest text — into a spreadsheet. This gives you a searchable record of every digest sent without relying on Slack's message history.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup