How to Send Discord Reminders for Google Calendar Events (2026)

Want a Discord ping before each Google Calendar event? Set it up with Zapier, Make or a free Apps Script webhook, plus timing fixes and message tips.

The Merlin team11 min read

Google Calendar can't post to Discord by itself, so you connect the two. The quickest route is Zapier: its Google Calendar Event Start trigger fires a set time before each event, and the Discord Send Channel Message action posts the reminder to a channel. For free, a short Google Apps Script can send the same reminder through a Discord webhook.

If you run a community, a study group or a gaming server, the calendar is usually where the plan lives and Discord is where the people are. Copying each event into a channel by hand works until the week you forget. Below are three ways to automate it (Zapier, Make and Apps Script), a message format that shows every member the right time, and fixes for reminders that arrive late, twice or not at all.

Google Calendar to Discord: which method to use

Method

Best for

Cost

Reminder timing

Zapier

A reminder before each event, set up in 10 minutes

Free plan works (100 tasks a month); paid plans check more often

Any lead time, but at least 16 minutes on the free plan

Make

A morning post listing the day's events

Free plan includes 1,000 credits a month

Runs on the schedule you set

Apps Script + Discord webhook

Free reminders with local-time timestamps

Free

Checks as often as every minute

Discord Scheduled Events

Events that happen inside the server

Free

Discord handles it; no calendar link

Before you start: pick the calendar and the channel

Every method below reads one Google Calendar and posts to one Discord channel, so decide both first. Use a calendar that holds only the events your members should see. Anything on it, title, location and often description, can end up in a public channel.

When I first connected a calendar to a server, I pointed it at my main calendar and set it up to post everything. The first reminder to land was a personal appointment. Now community events go on a separate calendar, and that calendar is the only one any automation reads. If you haven't made one before, creating and sharing a secondary calendar is covered in our Google Calendar beginner's guide.

On the Discord side, you need permission to add an integration to the server. For the webhook method, Discord's API documentation says creating a webhook requires the Manage Webhooks permission (Discord developer docs). If you aren't a server admin, ask one to create the webhook and send you the URL privately.

How to send Discord reminders for Google Calendar events with Zapier

Zapier sends a Discord reminder before each Google Calendar event with two steps: the Event Start trigger, which fires a chosen amount of time before an event begins, and the Discord Send Channel Message action. Both are listed on Zapier's Google Calendar and Discord page, and a two-step Zap fits Zapier's free plan.

  1. Start a fresh Zap from your Zapier dashboard, with Google Calendar as the trigger app.
  2. Pick Event Start as the trigger event and sign in to the Google account that owns the calendar.
  3. Choose the Calendar to watch. It defaults to your main calendar, so switch it to your community calendar.
  4. Set Time Before to how far ahead you want the reminder, such as 30 minutes.
  5. Optionally fill in Search Term so only matching events trigger, such as a word you put in every community event's title.
  6. Test the trigger. If no sample event appears, add a test event to the calendar that starts soon and test again.
  7. Add an action, choose Discord and the Send Channel Message event, then connect your Discord account and pick the server and channel.
  8. Write the message and map in fields from the calendar step, such as the event title and start time.
  9. Change the bot name and icon if you like, test the step, and publish the Zap.

The field names above match Zapier's own walkthrough, which also notes the message posts under a default bot name you can rename. The same Discord app has a Send Direct Message action if you'd rather remind one person than a channel.

Set the lead time with the free plan's 15-minute checks in mind

Zapier checks Google Calendar on a schedule, not instantly. Its Google Calendar help article says Time Before must be at least 16 minutes on Free plans, because free accounts are polled at 15-minute intervals and shorter settings can miss events. Zapier's pricing page lists checks every 2 minutes on Professional, which starts at $19.99 a month billed annually ($29.99 monthly).

Each reminder costs one task. Zapier says triggers never use tasks; only the successful Discord message counts. With 100 tasks a month on the free plan, a server with a few events a week stays well inside the limit.

Post a day-before reminder too

One reminder 30 minutes out catches people who are already online. People who need to plan around the event need more notice. I run two Zaps on the same calendar: one with Time Before set to a day, worded as a heads-up, and one at 30 minutes, worded as "starting soon." Each Zap stays at two steps, so both run on the free plan.

What to put in a Discord event reminder

A good Discord reminder answers three questions at a glance: what is happening, when it starts for the reader, and where to go. Everything else can wait for the event itself.

Discord reminder message
**{Event title}** starts in 30 minutes
When: {Event start time}
Where: {Event location}
React with a thumbs-up if you're coming.

Replace the parts in braces with the matching fields from the calendar step. Keep the event description out unless that calendar exists only for this purpose. Descriptions are where people paste dial-in numbers, private links and notes to themselves, and if you start from Zapier's ready-made template instead, remove the description field it fills in for you.

Show each member the start time in their own time zone

Discord can display a time in each reader's own time zone. Its message formatting reference describes timestamps written as <t:TIMESTAMP:STYLE>, where TIMESTAMP is the start time in Unix seconds. Style F shows the full date and time, and style R shows relative time, such as "in 30 minutes."

The first time I posted a plain "7 p.m." in a server with members in several countries, the replies were mostly people asking whose 7 p.m. that was. A Discord timestamp ends that thread before it starts. Zapier's calendar fields give you a formatted date, not Unix seconds, so in a two-step Zap the simple fix is to type the time zone after the mapped start time, such as ET or UTC. The Apps Script method below builds the timestamp for you.

Mentioning a role

To ping a group instead of the whole server, mention a role with <@&ROLE_ID>, using the role's numeric ID. Discord's formatting reference notes that whether a mention actually notifies people depends on the sender's permissions, so try one in a test channel first. A dedicated "events" role that members opt into is kinder than pinging everyone.

How to post a daily Discord digest of Google Calendar events with Make

Make suits a different kind of reminder: one post each morning that lists the day's events, instead of a message per event. Make's guide to adding a calendar to Discord builds it from three modules:

  1. Google Calendar > Search Events, set to find the events happening on the day the scenario runs.
  2. A Tools text aggregator, which joins those events into one list.
  3. Discord > Send a Message, which posts the list to the server and channel you choose.

Schedule the scenario to run once each morning. Make also offers ready-made templates for this pairing, including one that announces events the day before, one for events that have ended and one for cancellations. Its pricing page lists 1,000 credits a month on the free plan.

A digest works well for a busy server. Four separate pings in a day get muted; one tidy list in the morning gets read.

How to send free Discord reminders with Apps Script and a webhook

Google Apps Script can check your calendar every few minutes and post upcoming events to Discord through a webhook, for free. A Discord webhook is a URL that accepts messages for one channel, and Discord's docs say webhooks need no bot user or authentication to use (Discord developer docs). If APIs are new to you, the plain definition of an API covers what's happening under the hood.

Step 1: Create the Discord webhook

  1. In Discord, open the server's Server Settings and go to Integrations.
  2. Choose Create Webhook, give it a name such as "Calendar," and pick the channel it should post to.
  3. Copy the webhook URL.

Discord's webhook help article covers these settings, including changing the webhook's name and avatar. Anyone with the URL can post to that channel, so keep it out of chats and screenshots.

Step 2: Add the script

  1. Go to script.google.com while signed in to the Google account that owns the calendar, and create a new project.
  2. Replace the sample code with the script below. Set CALENDAR_ID at the top to your community calendar's ID, which you'll find in that calendar's settings in Google Calendar, then save.
  3. Open Project Settings, add a script property named DISCORD_WEBHOOK_URL, and paste the webhook URL as its value.
  4. Back in the editor, choose sendDiscordReminders and click Run once. Google asks you to allow the script to read your calendar and connect to an outside service.
Code.gs
// Posts a Discord message shortly before each Google Calendar event.
// Leave CALENDAR_ID empty to use your default calendar, or paste a
// calendar ID from Google Calendar's settings.
const CALENDAR_ID = '';
const LEAD_MINUTES = 30; // how long before the start to remind

function sendDiscordReminders() {
  const props = PropertiesService.getScriptProperties();
  const url = props.getProperty('DISCORD_WEBHOOK_URL');
  const cal = CALENDAR_ID
    ? CalendarApp.getCalendarById(CALENDAR_ID)
    : CalendarApp.getDefaultCalendar();
  const now = new Date();
  const until = new Date(now.getTime() + LEAD_MINUTES * 60000);

  cal.getEvents(now, until).forEach(function (ev) {
    if (ev.isAllDayEvent()) return;
    const start = ev.getStartTime();
    if (start < now) return; // already running
    const key = 'sent_' + ev.getId() + '_' + start.getTime();
    if (props.getProperty(key)) return; // reminded already

    const unix = Math.floor(start.getTime() / 1000);
    let text = '**' + ev.getTitle() + '** starts <t:' + unix + ':R>, '
      + '<t:' + unix + ':F>';
    if (ev.getLocation()) text += '\nWhere: ' + ev.getLocation();

    UrlFetchApp.fetch(url, {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify({ content: text })
    });
    props.setProperty(key, String(start.getTime()));
  });

  // Forget reminders for events that started more than a day ago.
  props.getKeys().forEach(function (k) {
    if (k.indexOf('sent_') === 0 && Number(props.getProperty(k)) < now.getTime() - 86400000) {
      props.deleteProperty(k);
    }
  });
}

The script uses documented Apps Script services: CalendarApp to read events, CalendarEvent for each event's title, start time and location, and UrlFetchApp to send the message as JSON. Discord accepts up to 2,000 characters of message content per webhook call, per the webhook docs, which a title, two timestamps and a location never come close to.

Storing each event's ID together with its start time stops duplicates. CalendarEvent's ID is the event's iCalUID, which repeating events share, so the start time is what tells one week's session from the next.

Step 3: Run it on a timer

  1. In the left sidebar of the Apps Script editor, select Triggers (the alarm clock icon).
  2. Click Add Trigger in the bottom right.
  3. Choose sendDiscordReminders, set the event source to Time-driven, and pick a minutes timer, such as every 5 minutes.
  4. Click Save.

Google's triggers guide says time-driven triggers can run as often as every minute, and that run times may be slightly randomized. With a 30-minute lead and a 5-minute timer, each reminder lands between 25 and 30 minutes before the start.

A free Google account gets 90 minutes of trigger runtime a day, and 6 hours on Google Workspace, according to Google's quotas page. A run that reads one calendar and sends a message or two takes seconds, so a 5-minute timer fits comfortably.

If the webhook URL leaks

Delete the webhook in Server Settings and create a new one, then paste the new URL into the script property. Once the webhook is deleted, the old URL can't post to your channel.

When Discord's own Scheduled Events are the better choice

If the event happens inside the server, such as a voice chat, a Stage talk or a watch party, Discord's built-in Scheduled Events may beat any calendar link. Members can subscribe to an event, and Discord's Scheduled Events article describes events as a way for a community to find out about and be notified of what's happening.

Discord's developer documentation lists three event types: Stage, voice channel and external (somewhere outside Discord, with a location and an end time). External events switch to active at their start time automatically; Stage and voice events start when someone starts them. What you give up: a Discord event doesn't sync with Google Calendar, so if the calendar is your source of truth, one of the automations above keeps the two from drifting apart.

Discord reminders not working? Fixes to try

Most failures come from timing, the wrong calendar or a message Discord refuses. Check these in order:

  • The reminder arrives late or never. On Zapier's free plan, set Time Before to 16 minutes or more (Zapier). In Apps Script, make sure the timer interval is shorter than the lead time.
  • Only some events trigger. Check the Zap's Search Term. It filters on the event's text, so an event without that word is skipped.
  • Repeating events are skipped. If you built the Zap on New Event instead of Event Start, that's why: Zapier's help article says repeated events aren't supported with the New Event trigger and recommends Event Start for them.
  • All-day events never post. The script skips them on purpose, because a "starts in 30 minutes" message makes no sense for an all-day event. Remove the isAllDayEvent line if you want them.
  • The same reminder posts twice. You probably have two Zaps or two triggers running. Look in Zapier's Zap list or the Apps Script Triggers page for a duplicate.
  • The webhook returns an error. Check that the script property holds the full URL and that the webhook still exists in Server Settings.
  • The time shown is wrong. Check the calendar's time zone in Google Calendar settings, or switch to Discord timestamps so each reader sees local time.

Checklist before your first reminder goes out

  • Point the automation at a calendar that only holds events your members should see.
  • Leave the event description out of the message unless that calendar exists only for this.
  • Create a test event 40 minutes ahead and watch it come through before you announce anything.
  • Pick one lead time to start; add a day-before reminder once the first one has run for a week.
  • Post to a dedicated events or announcements channel, not general chat, so reminders don't get buried.

If your team lives in Slack rather than Discord, the same Event Start idea works there, and scheduling Slack messages covers the manual version. Default alerts, daily agendas and other calendar automations are in this guide to automating Google Calendar.

Your own prep, before the community shows up

The Discord reminder tells your members when to show up. Merlin, our Mac app, looks after your side: connect your Google Calendar and it drops a Meeting Brief into its chat about 10 minutes before an event, with who's attending and what you've discussed with them before.

Get Merlin

Frequently asked questions

Can Google Calendar send reminders to Discord?

Not on its own. Connect them with Zapier's Event Start trigger and Discord's Send Channel Message action, a Make scenario, or a free Google Apps Script that posts through a Discord webhook.

Is there a free way to send Google Calendar reminders to Discord?

Yes. Zapier's free plan runs a two-step Event Start to Discord Zap on its monthly allowance of 100 tasks. A Google Apps Script posting to a Discord webhook costs nothing at all.

Why are my Zapier Discord reminders late?

Zapier's free plan checks Google Calendar every 15 minutes, so Zapier says Time Before must be at least 16 minutes or events may be missed. The Professional plan checks every 2 minutes.

How do I show event times in each member's time zone on Discord?

Use a Discord timestamp such as <t:TIMESTAMP:F>, where TIMESTAMP is the start time in Unix seconds. Discord displays it in each reader's own time zone and locale.

Do I need a Discord bot to post calendar reminders?

No. A Discord webhook posts messages to one channel without a bot user, and Zapier's Discord action handles the connection for you.

Can Zapier send a Discord direct message for a calendar event?

Yes. Zapier's Discord app includes a Send Direct Message action, so you can pair it with the Google Calendar Event Start trigger instead of posting to a channel.

you scrolled all the way down here

your next free moment starts in three minutes

getting started takes three minutes. sign in, and i'm on your to-dos, starting with who's waiting on you

you decide what comes after

Download for Mac Free forever. No credit card.