

How to Send Gmail Digest Summaries to Slack with Zapier
Every morning or week, Zapier pulls matching Gmail messages — by label, sender domain, or unread status — and posts a formatted summary to a Slack channel so your team sees what matters without opening email.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Small to mid-size teams who need a daily or weekly snapshot of priority Gmail activity — like emails from clients, vendors, or specific labels — posted to a shared Slack channel.
Not ideal for
Teams that need real-time email alerts the moment a message lands; use a Gmail New Email trigger with instant Slack notification instead.
Sync type
scheduledUse case type
notificationReal-World Example
A 12-person agency uses this to post a 9am digest to #client-comms every weekday showing all unread emails from client domains received in the last 24 hours. Before this, account managers each checked their own inboxes independently and the team had no shared visibility on client requests. Now the whole team sees the same summary at the same time and response time dropped from 4 hours to under 45 minutes.
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
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Email Subject | ||
| Sender (From) | ||
| Date/Time Received | ||
| Number of Results | ||
4 optional fields▸ show
| Body Plain Text | |
| Label Names | |
| Email ID (Message ID) | |
| Thread ID |
Step-by-Step Setup
zapier.com > Dashboard > Create Zap
Create a new Zap and name it
Log in to zapier.com and click the orange 'Create Zap' button in the left sidebar. You'll land in the Zap editor. Click the default name 'My Zap' at the top of the screen and rename it something like 'Daily Gmail Digest to Slack'. This name shows up in your Zap history and task logs, so make it identifiable. You won't lose progress if you navigate away — Zapier autosaves.
- 1Click 'Create Zap' in the left sidebar
- 2Click the pencil icon or 'My Zap' title at the top center
- 3Type your Zap name, e.g. 'Daily Gmail Digest — Client Emails to Slack'
- 4Press Enter to save the name
Zap Editor > Trigger > App & Event
Set the Schedule trigger
Click the Trigger step card and search for 'Schedule by Zapier' in the app search box. This is a built-in Zapier utility — not Gmail. Select it, then choose 'Every Day' or 'Every Week' depending on your digest frequency. You'll pick the exact time and day next. This trigger fires once per period and kicks off the Gmail search in the following step.
- 1Click the 'Trigger' card in the editor
- 2Type 'Schedule' in the app search box
- 3Select 'Schedule by Zapier' from the results
- 4Click 'Every Day' (or 'Every Week' if you want weekly digests)
- 5Click 'Continue'
Zap Editor > Trigger > Configure
Configure the digest schedule
Set the 'Time of Day' field to when you want the digest posted — typically 8:00 or 9:00 AM in your team's timezone, converted to UTC. For weekly digests, also set 'Day of Week' to Monday or whichever day the team starts. Leave 'Trigger on Weekends' set to No unless your team works weekends. Click 'Continue' when done.
- 1Set 'Time of Day' to your target time in UTC
- 2If weekly, set 'Day of Week' to your preferred day
- 3Set 'Trigger on Weekends' to No (unless needed)
- 4Click 'Continue'
Zap Editor > Action 1 > App & Event
Add a Gmail 'Find Email' action step
Click the '+' button below the trigger to add a new action. Search for 'Gmail' and select it. For the event, choose 'Find Email'. This lets you search your Gmail inbox using the same query syntax as Gmail's search bar. You'll connect your Google account in the next sub-step. This is the core step that fetches matching emails from the window you define.
- 1Click the '+' icon below the Schedule trigger
- 2Search for 'Gmail' in the app search
- 3Select 'Gmail'
- 4Choose 'Find Email' as the event
- 5Click 'Continue'
Zap Editor > Action 1 > Configure > Search String
Connect your Gmail account and write the search query
Click 'Sign in to Gmail' and complete the Google OAuth flow — you'll need to allow Zapier to read, send, and manage Gmail. Once connected, you'll see a 'Search String' field. Enter a Gmail search query here exactly as you would in the Gmail search bar. For example: 'from:(@acmecorp.com) is:unread newer_than:1d' fetches unread emails from that domain in the last 24 hours. For labeled emails use: 'label:priority-clients newer_than:1d'.
- 1Click 'Sign in to Gmail'
- 2Select your Google account in the popup
- 3Grant Zapier the requested permissions
- 4In 'Search String', type your Gmail query, e.g. 'from:(@vendor.com) is:unread newer_than:1d'
- 5Toggle 'Find All' to Yes if you want multiple results
- 6Click 'Continue'
Zap Editor > Action 2 > Code by Zapier > Run Python
Add a Code by Zapier step to format the digest message
Click '+' to add another action. Search for 'Code by Zapier' and select 'Run Python' (or 'Run JavaScript'). This step takes the raw email data from Gmail and formats it into a readable Slack message. Without this step, you'd be sending raw JSON blobs or a single email's fields with no structure. Paste the formatting code from the Pro Tip section into the code box. Map the Gmail 'Find All' results array as the input.
- 1Click '+' below the Gmail action
- 2Search for 'Code by Zapier'
- 3Select 'Run Python'
- 4In the 'Input Data' section, add a key called 'emails' and map it to the Gmail 'Find All' output
- 5Paste your formatting code in the 'Code' box
- 6Click 'Test' to verify output
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}This Python code runs in Code by Zapier (Run Python) and formats the raw Gmail 'Find All' line-item output into a structured Slack message with subjects, senders, timestamps, and body previews. Paste this into the 'Code' box in your Code by Zapier step. In the 'Input Data' section above the code box, create keys named 'subjects', 'senders', 'dates', and 'bodies' — map each to the corresponding Gmail line-item field.
JavaScript — Code Step# Input Data keys to map in Zapier:▸ Show code
# Input Data keys to map in Zapier: # subjects -> Gmail: Subject (line item) # senders -> Gmail: From (line item)
... expand to see full code
# Input Data keys to map in Zapier:
# subjects -> Gmail: Subject (line item)
# senders -> Gmail: From (line item)
# dates -> Gmail: Date (line item)
# bodies -> Gmail: Body Plain (line item)
import datetime
subjects = input_data.get('subjects', '').split(',')
senders = input_data.get('senders', '').split(',')
dates = input_data.get('dates', '').split(',')
bodies = input_data.get('bodies', '').split(',')
# Trim whitespace from each item
subjects = [s.strip() for s in subjects if s.strip()]
senders = [s.strip() for s in senders if s.strip()]
dates = [s.strip() for s in dates if s.strip()]
bodies = [s.strip() for s in bodies if s.strip()]
count = len(subjects)
today = datetime.date.today().strftime('%A %b %-d')
if count == 0:
output = {'message': '', 'count': '0'}
else:
lines = [f'📧 *Daily Email Digest — {today}* | {count} email{"s" if count != 1 else ""}\n']
for i in range(count):
subject = subjects[i] if i < len(subjects) else '(no subject)'
sender = senders[i] if i < len(senders) else '(unknown sender)'
body = bodies[i] if i < len(bodies) else ''
preview = (body[:120] + '...') if len(body) > 120 else body
# Format date to readable time if possible
raw_date = dates[i] if i < len(dates) else ''
try:
dt = datetime.datetime.fromisoformat(raw_date.replace('Z', '+00:00'))
time_str = dt.strftime('%-I:%M%p').lower()
except Exception:
time_str = raw_date
lines.append(f'{i+1}. *{subject}*\n From: {sender} | {time_str}\n _{preview}_')
output = {'message': '\n\n'.join(lines), 'count': str(count)}channel: {{channel}}
ts: {{ts}}
Zap Editor > Action 3 > Slack > Send Channel Message
Add Slack 'Send Channel Message' action
Click '+' to add another action. Select 'Slack' and choose 'Send Channel Message' as the event. Connect your Slack workspace via OAuth — you'll need to authorize Zapier to post messages. In the 'Channel' dropdown, select the channel where the digest should post (e.g. #client-comms or #team-digest). Map the 'Message Text' field to the formatted output from the Code by Zapier step.
- 1Click '+' below the Code by Zapier step
- 2Search for and select 'Slack'
- 3Choose 'Send Channel Message' as the event
- 4Click 'Sign in to Slack' and authorize Zapier
- 5In the 'Channel' field, select your target channel from the dropdown
- 6In 'Message Text', click the field and select the output from the Code step
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action 3 > Slack > Configure
Configure the Slack message formatting
In the Slack action config, set 'Bot Name' to something like 'Email Digest Bot' so it's clear in Slack who posted the message. Optionally set a 'Bot Icon' using an emoji like ':email:'. Under 'Include a link to this Zap?', set this to No — it adds noise to the message. Leave 'Send as a reply in thread?' as No unless you want all digests threaded under a pinned message.
- 1Set 'Bot Name' to 'Email Digest Bot' or your preferred label
- 2Set 'Bot Icon' to ':email:' or ':envelope:'
- 3Set 'Include a link to this Zap?' to No
- 4Set 'Link Names?' to Yes so @mentions resolve if used
- 5Click 'Continue'
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}Zap Editor > Action 3 > Test
Test the full Zap end-to-end
Click 'Test Step' on the Slack action. Zapier will post the formatted digest message to your chosen Slack channel using the sample data from your Gmail test. Open Slack and verify the message looks right — check that subjects, senders, and timestamps are readable, not garbled. If you see 'undefined' or empty fields, go back to the Code step and check your input variable mapping.
- 1Click 'Test Step' on the Slack action
- 2Open Slack and navigate to your target channel
- 3Verify the digest message posted with correct email summaries
- 4If the message looks wrong, click back to the Code step and re-test
- 5Delete the test message from Slack once confirmed
Zap Editor > between Gmail and Code steps > Filter by Zapier
Add a filter to skip empty digests
Between the Gmail step and the Code step, add a 'Filter by Zapier' action. Set the condition: only continue if Gmail 'Number of Results' is greater than 0. This prevents Zapier from posting an empty digest message to Slack on days when no matching emails were received. Without this filter, you'll get messages like 'Daily Digest — 0 emails' cluttering your channel every morning.
- 1Click '+' between the Gmail action and the Code step
- 2Select 'Filter by Zapier'
- 3Set condition: 'Gmail > Number of Results' 'Greater than' '0'
- 4Click 'Continue'
- 5Confirm the filter logic shown matches your intent
Zap Editor > Publish > Task History
Turn on the Zap and monitor first runs
Click 'Publish' in the top right of the Zap editor. Toggle the Zap to 'On'. Check back the next morning (or next scheduled run) and look at the Zap's Task History — go to zapier.com, click your Zap, then 'Task History'. You should see one task per run showing success or the reason it was filtered. For the first week, manually verify in Slack that the digest is appearing at the right time with the right emails.
- 1Click 'Publish' in the top right corner
- 2Toggle the Zap switch to 'On'
- 3After the first scheduled run, go to zapier.com > Your Zap > Task History
- 4Confirm each step shows a green checkmark
- 5Open Slack and verify the digest message content
Scaling Beyond More than 10 matching emails per digest run+ Records
If your volume exceeds More than 10 matching emails per digest run records, apply these adjustments.
Zapier caps Gmail Find All at 10 results
The Gmail 'Find All' action in Zapier returns a maximum of 10 emails per run. If your search regularly matches more than 10 messages, you will silently miss emails. There is no pagination option. For high-volume inboxes, switch to Make which supports iterating over Gmail search results in batches.
Narrow your search query to control volume
Instead of broad queries like 'is:unread', add domain filters ('from:@acmecorp.com'), label filters ('label:priority'), or time constraints ('newer_than:1d') to keep results under 10 per run. The more specific your query, the more reliable the digest.
Split into multiple Zaps by category if volume is high
If you need more than 10 emails covered, create separate Zaps for separate email categories — one for client emails, one for invoices, one for support. Each posts to the same Slack channel or different channels. This keeps each Zap under the 10-result cap and makes digests more targeted.
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 Zapier for this if your team is non-technical and needs a digest running within the hour without touching any code — the Schedule trigger plus Gmail Find All gets you 80% of the way there through a point-and-click UI. Zapier also works well if you're already paying for it for other Zaps, since adding this workflow costs just 5 additional tasks per day. The one scenario where you'd skip Zapier: if you need to pull more than 10 emails per digest run. Zapier hard-caps Gmail Find All at 10 results and won't paginate. At that point, use Make.
Cost math: a daily digest uses 5 tasks per run — Schedule, Gmail, Filter, Code, Slack. That's 150 tasks per month. Zapier's Starter plan includes 750 tasks/month for $19.99/month, so this digest burns 20% of your Starter quota. If you're running 3-4 other Zaps, you'll likely stay under the limit. Make's equivalent setup runs entirely on the free tier (1,000 operations/month) at 5 operations per run, saving you the full $19.99/month — but the build takes about twice as long.
Make handles this use case better if you need pagination, multi-account Gmail aggregation, or conditional digest formatting based on email count. Make's Gmail module supports iterating over full result sets and has a native Array Aggregator that builds the digest message without requiring separate code. n8n lets you self-host so there's no per-task cost, which matters at scale — it also handles the formatting natively in its Function node. Power Automate's Gmail connector is weaker than its Office 365 equivalent, so if your team uses Outlook instead of Gmail, Power Automate wins easily. Pipedream gives you full Node.js with async email fetching and no task limits, but it requires a developer to maintain it. Zapier is still the right call for non-technical teams who want something live today and don't plan to iterate on it constantly.
Three things you'll hit after setup. First, the 'newer_than:1d' Gmail operator is timezone-naive — it's relative to when Zapier runs the search in UTC, which can cause emails sent late in your local evening to fall outside the window by morning. Buffer to 'newer_than:2d' and deduplicate in Slack by checking if the subject already appeared recently. Second, Zapier's Code by Zapier receives Gmail line-item arrays as comma-separated strings, not actual arrays — the split logic in the Pro Tip code handles this, but if you write your own code without accounting for it, you'll get one long string instead of individual email entries. Third, Gmail OAuth tokens issued to Zapier expire if the connected Google account's password changes or security settings are updated. When this happens, the Zap fails with a '401 Unauthorized' error in Task History and stops silently — set up Zapier's error notification emails so you catch this within hours, not days.
Ideas for what to build next
- →Add a digest for a second Gmail label or sender group — Duplicate the Zap and change the Gmail search query to target a different category — like support tickets from [email protected] or invoices labeled 'billing'. Post this second digest to a different Slack channel so each team only sees what's relevant to them.
- →Route urgent emails to a separate instant Slack alert — Build a parallel Zap using the Gmail 'New Email Matching Search' trigger (not Schedule) to fire the moment a high-priority email arrives — like emails marked with a specific Gmail star or sent directly to the CEO. This gives you both real-time alerts for urgent items and a scheduled digest for everything else.
- →Log digest summaries to a Google Sheet for record-keeping — Add a Google Sheets action after the Slack step to append each email's subject, sender, and date to a running log sheet. This gives you a searchable archive of what was included in each digest, useful for audits or reviewing what the team was notified about on a given day.
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