Slack to Google Calendar, invites from reactions
You’ve seen it: a Slack thread starts with “next Thursday around 6?” and ends with three different times, two locations, and nobody actually putting it on the calendar.
This Slack calendar invites automation hits team leads first, because they’re the ones chasing RSVPs. Operations managers feel it too when attendance matters. And honestly, busy agency owners get tired of “we should do this” never turning into a real event.
This workflow turns a simple Slack reaction into a proper Google Calendar invite, with the correct date, time, and location. You’ll see how it works, what you need, and where teams usually trip up.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Slack to Google Calendar, invites from reactions
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "For Each User ID...", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Get User"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Search for Invite Requests"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Get Existing Invite EventID"]
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Should Create Event?", pos: "b", h: 48 }
n5@{ icon: "mdi:location-exit", form: "rounded", label: "Create Event", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Get Invite Reactions"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Get Invite Replies"]
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Invite Reactions", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get Old EventId", pos: "b", h: 48 }
n10@{ icon: "mdi:location-exit", form: "rounded", label: "Add Attendee to Event", pos: "b", h: 48 }
n11@{ icon: "mdi:location-exit", form: "rounded", label: "Get Event Details", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Is Attending", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get User Email", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Should Add Attendee?", pos: "b", h: 48 }
n15@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n16@{ icon: "mdi:wrench", form: "rounded", label: "SerpAPI", pos: "b", h: 48 }
n17@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n18@{ icon: "mdi:wrench", form: "rounded", label: "Wikipedia", pos: "b", h: 48 }
n19@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Reply Invite with EventId"]
n21@{ icon: "mdi:robot", form: "rounded", label: "Calendar Event Booking Agent", pos: "b", h: 48 }
n16 -.-> n21
n1 --> n14
n18 -.-> n21
n5 --> n20
n12 --> n0
n13 --> n10
n9 --> n11
n19 --> n2
n11 --> n6
n17 -.-> n21
n7 --> n3
n0 --> n1
n6 --> n8
n14 --> n13
n4 --> n21
n4 --> n9
n8 --> n12
n15 -.-> n21
n2 --> n7
n3 --> n4
n21 --> n5
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n19 trigger
class n15,n21 ai
class n17 aiModel
class n16,n18 ai
class n4,n12,n14 decision
class n3 code
classDef customIcon fill:none,stroke:none
class n1,n2,n3,n6,n7,n20 customIcon
The Problem: Slack Plans Don’t Become Calendar Events
Slack is where plans get made, but it’s a terrible place to keep plans. Someone suggests dinner, a client catch-up, a team offsite, or “quick coffee next week,” and the details drift across replies, time zones, and half-serious “I’m in” messages. Then the organizer does the unpaid second job: translating chat into a calendar invite, finding the real address, and nudging people to accept. Miss a step and you get no-shows, late arrivals, or double bookings. The worst part is the mental load. You’re not just doing admin; you’re carrying uncertainty.
It adds up fast. Here’s where it breaks down in real teams.
- Event details live in a thread, so you end up scrolling and guessing what’s “final.”
- Locations are vague (“Bunker 51”) and someone has to turn that into an actual address.
- RSVPs in chat don’t sync to the calendar, which means you still chase people.
- Attendance changes, and the invite becomes outdated unless you manually keep it updated.
The Solution: Turn Slack Reactions Into Real Invites
This n8n workflow listens to a Slack channel for a specific signal: a message that gets a 📅 reaction. That reaction becomes your “make this real” button. Once it sees it, the workflow sends the message content to an AI agent, which pulls out the important stuff (date, time, title, and any location hint). Then it looks up the precise address using Google Maps, so your calendar invite isn’t “somewhere downtown.” Finally, it creates a Google Calendar event with the correct details and posts back in Slack so everyone knows the invite exists. After that, attendee management happens through reactions too: people RSVP with ✅, and the workflow updates the calendar invite to match who’s in (and who changed their mind).
The workflow starts in Slack with a 📅 reaction on an “invite” message. AI translates messy human language into structured event details and confirms the location. Google Calendar gets a clean invite, and Slack becomes the RSVP layer, so attendees stay synced without someone playing coordinator all week.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your team organizes 5 things a week in Slack: client coffees, team lunches, a workshop, whatever. Manually, each one is maybe 20 minutes to confirm details, look up the address, create the invite, and chase RSVPs, so you lose about 2 hours weekly. With this workflow, you react with 📅 (a few seconds), the AI creates the invite, and attendees RSVP with ✅ while the calendar updates automatically. You get those 2 hours back, and the invite is cleaner than what most humans would build under pressure.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Slack for the channel, messages, and reactions.
- Google Calendar to create and update invites.
- OpenAI API key (get it from the OpenAI dashboard) to parse messages reliably.
Skill level: Intermediate. You’ll connect accounts, paste an API key, and tweak a couple of fields to match your Slack channel and reaction rules.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A Slack reaction kicks it off. The workflow monitors a chosen Slack channel and waits for an “invite message” to receive a 📅 reaction. That reaction is the trigger that says, “turn this thread into an event.”
The message gets translated into event details. The text is passed to an AI agent (using an OpenAI chat model) that extracts date, time, and what the event is actually about. If the message is casual (“next Thursday around 6”), the AI normalizes it into calendar-ready fields.
Location becomes precise. The workflow uses an HTTP request to search Google Maps for the venue and returns a proper address. “Bunker 51” becomes something your phone can navigate to, which means fewer last-minute questions.
Google Calendar stays in sync with Slack RSVPs. The event is created in Google Calendar, and the workflow posts a confirmation back into Slack. Later, it checks reactions like ✅ to add attendees, and it also removes attendees if people un-react.
You can easily modify which emojis trigger creation and RSVP behavior to match your team’s habits. See the full implementation guide below for customization options.
Common Gotchas
- Slack credentials can expire or require extra scopes for reading reactions. If it suddenly stops seeing 📅 or ✅, check the Slack app permissions and reconnect the account in n8n.
- If you’re using Wait nodes or any delayed polling, processing times vary. Bump up the wait duration if downstream checks run before Slack has updated reaction counts.
- Default prompts in AI nodes are generic. Add your team’s format early (time zone, how you name events, what “around” means) or you will be editing outputs forever.
Frequently Asked Questions
About 30 minutes if you already have Slack, Google Calendar, and an OpenAI API key ready.
No coding required. You’ll mostly be connecting accounts and adjusting a few fields like the Slack channel and emoji rules.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage, which is usually low for short messages.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes. You can add a second reaction rule (like 🤔) in the Slack reaction checks and route it through a Switch node so “maybe” users get a different outcome. Common tweaks include sending a reminder message closer to the date, limiting invites to specific user groups, and changing 📅/✅ to match your team’s emoji habits.
Usually it’s expired credentials or missing Slack scopes for reading reactions and user info. Reconnect Slack in n8n, then confirm the workflow can access the specific channel and read message reactions. If it fails only during busy periods, you may be hitting Slack rate limits and need a short wait before re-checking reactions.
On a typical n8n Cloud plan it can comfortably handle dozens of invite triggers per day, and self-hosting scales based on your server.
Often, yes, because this workflow needs a bit of logic: detect specific reactions, parse natural language, look up locations, then keep syncing attendees as reactions change. n8n handles branching and “check again later” patterns cleanly, and self-hosting can be a big deal if you run lots of executions. Zapier or Make can still work for simpler “create event once” flows, especially if you don’t need ongoing attendee sync. The tradeoff is flexibility versus simplicity. If you want help choosing, Talk to an automation expert.
Once this is in place, Slack can stay casual while your calendar stays accurate. The workflow handles the follow-through, so you’re not the one herding cats every week.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.