Beginner~8 min setupCommunication & EmailVerified April 2026
Slack logo
Gmail logo

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

scheduled

Use case type

notification

Real-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.

/mo
505005K50K

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.

Gmail account with messages you want to summarize, and read access granted to Zapier during OAuth (requires gmail.readonly scope at minimum)
Slack workspace where you have permission to add apps and post to the target channel
Zapier account on Starter plan or higher — the free plan does not support multi-step Zaps, and this workflow has at least 4 steps
Gmail labels or a defined search query already working in Gmail's search bar before you build the Zap — test your query in Gmail first
Code by Zapier access — this is available on Starter plan and above; confirm your plan includes it before starting

Field Mapping

Map these fields between your apps.

FieldAPI 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

1

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.

  1. 1Click 'Create Zap' in the left sidebar
  2. 2Click the pencil icon or 'My Zap' title at the top center
  3. 3Type your Zap name, e.g. 'Daily Gmail Digest — Client Emails to Slack'
  4. 4Press Enter to save the name
What you should see: You should see the new name displayed at the top of the editor and the first step card labeled 'Trigger' waiting for configuration.
2

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.

  1. 1Click the 'Trigger' card in the editor
  2. 2Type 'Schedule' in the app search box
  3. 3Select 'Schedule by Zapier' from the results
  4. 4Click 'Every Day' (or 'Every Week' if you want weekly digests)
  5. 5Click 'Continue'
What you should see: You should see a configuration panel with a 'Time of Day' field and a 'Day of Week' field (for weekly). The trigger shows no account connection required.
Common mistake — The Schedule trigger fires based on UTC time. If your team is in New York (UTC-5), a 9am EST digest means setting the time to 14:00 UTC. Get this wrong and your digest posts at the wrong hour.
Zapier
+
click +
search apps
Slack
SL
Slack
Set the Schedule trigger
Slack
SL
module added
3

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.

  1. 1Set 'Time of Day' to your target time in UTC
  2. 2If weekly, set 'Day of Week' to your preferred day
  3. 3Set 'Trigger on Weekends' to No (unless needed)
  4. 4Click 'Continue'
What you should see: Zapier shows a summary of the schedule, e.g. 'This Zap will run every weekday at 09:00 UTC'. You'll see a sample trigger output with a timestamp field you can use later.
Common mistake — Confirm your workflow timezone matches your business timezone — n8n uses the instance timezone by default. Also verify the workflow is saved and set to Active, since Schedule Triggers won't fire on inactive workflows.
4

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.

  1. 1Click the '+' icon below the Schedule trigger
  2. 2Search for 'Gmail' in the app search
  3. 3Select 'Gmail'
  4. 4Choose 'Find Email' as the event
  5. 5Click 'Continue'
What you should see: You see a 'Connect an Account' button for Gmail. Clicking it opens a Google OAuth popup asking for permission to read your mail.
Common mistake — Zapier's 'Find Email' only returns ONE email by default — the most recent match. To pull multiple emails into a single digest, you need to enable 'Find All' in the action settings. This toggle appears after you connect your account.
5

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'.

  1. 1Click 'Sign in to Gmail'
  2. 2Select your Google account in the popup
  3. 3Grant Zapier the requested permissions
  4. 4In 'Search String', type your Gmail query, e.g. 'from:(@vendor.com) is:unread newer_than:1d'
  5. 5Toggle 'Find All' to Yes if you want multiple results
  6. 6Click 'Continue'
What you should see: Zapier runs a test search against your Gmail and returns 1-3 sample emails matching your query. You should see fields like Subject, Sender, Body Plain, Date, and Label Names populated with real email data.
Common mistake — The 'newer_than:1d' Gmail operator is relative to when the Zap runs, not when you set it up. For weekly digests, use 'newer_than:7d'. Mismatching the query window to your schedule frequency means emails get missed or double-counted.
Zapier settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Zapier
popup window
Connected
green checkmark
6

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.

  1. 1Click '+' below the Gmail action
  2. 2Search for 'Code by Zapier'
  3. 3Select 'Run Python'
  4. 4In the 'Input Data' section, add a key called 'emails' and map it to the Gmail 'Find All' output
  5. 5Paste your formatting code in the 'Code' box
  6. 6Click 'Test' to verify output
What you should see: The test output shows a single 'output' key containing a formatted string like '📧 Daily Email Digest — 4 emails\n\n1. Subject: Q3 Invoice | From: [email protected] | 10:32am\n2. ...'
Common mistake — If you map Gmail 'Find All' results directly into Code by Zapier, the emails variable arrives as a comma-separated string of values, not a Python list. You'll need to split it manually or restructure using the line-item input approach in the Pro Tip code.
Message template
📬 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)}
message template
🔔 New Record: {{text}} {{user}}
channel: {{channel}}
ts: {{ts}}
#sales
🔔 New Record: Jane Smith
Company: Acme Corp
7

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.

  1. 1Click '+' below the Code by Zapier step
  2. 2Search for and select 'Slack'
  3. 3Choose 'Send Channel Message' as the event
  4. 4Click 'Sign in to Slack' and authorize Zapier
  5. 5In the 'Channel' field, select your target channel from the dropdown
  6. 6In 'Message Text', click the field and select the output from the Code step
What you should see: You see the Slack configuration panel with the Channel field showing your selected channel name and the Message Text field showing the Code step output variable.
Common mistake — Zapier posts as the Zapier bot by default. If your Slack workspace restricts which bots can post in specific channels, the Zap will fail silently — the task logs show success but nothing appears in Slack. Check your Slack channel settings for app posting restrictions.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
8

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.

  1. 1Set 'Bot Name' to 'Email Digest Bot' or your preferred label
  2. 2Set 'Bot Icon' to ':email:' or ':envelope:'
  3. 3Set 'Include a link to this Zap?' to No
  4. 4Set 'Link Names?' to Yes so @mentions resolve if used
  5. 5Click 'Continue'
What you should see: The configuration summary shows your channel name, bot name, and a preview of the message text variable. No raw field tokens should be visible — they should be resolved to actual email content.
Common mistake — Map fields using the variable picker — don't type field names manually. Hand-typed variable names often have invisible spacing errors that produce blank output.
Message template
📬 New entry: {{1.name}}
Email: {{1.email}}
Details: {{1.description}}
9

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.

  1. 1Click 'Test Step' on the Slack action
  2. 2Open Slack and navigate to your target channel
  3. 3Verify the digest message posted with correct email summaries
  4. 4If the message looks wrong, click back to the Code step and re-test
  5. 5Delete the test message from Slack once confirmed
What you should see: A formatted digest message appears in the Slack channel showing 2-3 email summaries from your Gmail search, each with subject line, sender, and timestamp.
Common mistake — The test always uses sample data Zapier pulled during setup, not live emails from right now. If your Gmail had no matching emails when you set up the search, the sample data will be empty and the Slack message will post blank. Run the test during a time when matching emails actually exist in your inbox.
Zapier
▶ Turn on & test
executed
Slack
Gmail
Gmail
🔔 notification
received
10

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.

  1. 1Click '+' between the Gmail action and the Code step
  2. 2Select 'Filter by Zapier'
  3. 3Set condition: 'Gmail > Number of Results' 'Greater than' '0'
  4. 4Click 'Continue'
  5. 5Confirm the filter logic shown matches your intent
What you should see: The filter card shows the condition in plain English: 'Only continue if Gmail Number of Results is greater than 0'. Zapier will halt and not post to Slack on days with zero matching emails.
Common mistake — Filtered-out runs still count as tasks on Zapier's billing. Each scheduled run uses 1 task for the Schedule trigger and 1 for the Gmail search, even if the filter stops the Zap before it posts to Slack.
Slack
SL
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Gmail
GM
notified
11

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.

  1. 1Click 'Publish' in the top right corner
  2. 2Toggle the Zap switch to 'On'
  3. 3After the first scheduled run, go to zapier.com > Your Zap > Task History
  4. 4Confirm each step shows a green checkmark
  5. 5Open Slack and verify the digest message content
What you should see: Task History shows a successful run with all steps in green. The Slack channel contains a formatted digest message posted at the scheduled time.

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.

1

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.

2

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.

3

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

VerdictWhy Zapier for this workflow

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

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.

Tradeoffs

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 groupDuplicate 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 alertBuild 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-keepingAdd 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

Was this guide helpful?
Slack + Gmail overviewZapier profile →