Sync Discord Scheduled Events to Google Calendar
Automate the syncing of your Discord server's scheduled events directly to your Google Calendar. This workflow ensures your calendar is always up-to-date with your community's plans.
Overview
Automatically syncs Discord scheduled events with Google Calendar to keep community members and organizers aligned across platforms without manual entry.
🧠 Description & Use Case
This workflow automatically synchronizes scheduled events from a Discord server to a Google Calendar, ensuring that your calendar always reflects the latest event details without manual intervention. It's perfect for community managers, team leaders, or anyone who organizes events on Discord.
🔄 How It Works:
- Scheduled Trigger: The workflow runs automatically at a set interval (e.g., every hour) to check for new or updated events.
- Fetch Discord Events: It sends an HTTP request to the Discord API to retrieve a list of all scheduled events for a specified server (
guild_id). - Check for Existing Events: For each event fetched from Discord, the workflow attempts to find a corresponding event in Google Calendar using the unique Discord event ID.
- Conditional Logic (Create or Update):
- If an event with the same ID exists in Google Calendar, the workflow proceeds to the
Update event detailsnode. - If no event is found, it proceeds to the
Create eventnode.
- If an event with the same ID exists in Google Calendar, the workflow proceeds to the
- Sync to Google Calendar:
- Update: Modifies the existing Google Calendar event with any new details from Discord, such as name, description, start/end times, or location.
- Create: Creates a new event in Google Calendar, using the Discord event ID as the Google Calendar event ID to enable future updates.
✅ Real-World Use Cases:
- Community Management: Keep a public-facing Google Calendar automatically updated with all community events, AMAs, and game nights scheduled on Discord.
- Team Coordination: Ensure all team members have project meetings and deadlines scheduled on Discord automatically synced to their work calendars.
- Gaming Guilds: Plan raids, tournaments, and social events in Discord and have them instantly appear in every member's personal calendar.
- Personal Organization: Never miss a community event you're interested in by syncing a server's event schedule directly to your own Google Calendar.
Instructions
Basic steps
- Download workflow JSON
- Import into n8n
- Configure node parameters as needed
- Test and enable the workflow
💡 Tips
After importing, verify all connectors and credentials match your environment.
Preview
Workflow Visualization
Nodes
List scheduled events from Discord
httpRequest
On schedule
scheduleTrigger
Update event details
googleCalendar
Create event
googleCalendar
Get events
googleCalendar
Create or update?
if
Configure
set
Sticky Note1
stickyNote
Sticky Note
stickyNote
Statistics
View full JSON structure
{
"nodes": [
{
"id": "78d5f452-5ba1-4d59-9d52-8f32512d2c25",
"name": "List scheduled events from Discord",
"type": "n8n-nodes-base.httpRequest",
"position": [
1940,
1000
],
"parameters": {
"url": "=https://discord.com/api/guilds/{{ $('Configure').first().json.guild_id }}/scheduled-events",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "with_user_count",
"value": "true"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "fxbcosIH3MYkufX8",
"name": "FILL ME"
}
},
"typeVersion": 4.1
},
{
"id": "af149917-0d46-4a40-b377-69c088a4a7b9",
"name": "On schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
1420,
1000
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.1
},
{
"id": "619c149f-f954-4f5d-a160-01a8b85f3eb7",
"name": "Update event details",
"type": "n8n-nodes-base.googleCalendar",
"position": [
2600,
900
],
"parameters": {
"eventId": "={{ $json.id }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "[UPDATE ME]",
"cachedResultName": "Events"
},
"operation": "update",
"updateFields": {
"end": "={{ $('List scheduled events from Discord').item.json.scheduled_end_time }}",
"start": "={{ $('List scheduled events from Discord').item.json.scheduled_start_time }}",
"summary": "={{ $('List scheduled events from Discord').item.json.name }}",
"location": "={{ $('List scheduled events from Discord').item.json.entity_metadata.location }}",
"description": "={{ $('List scheduled events from Discord').item.json.description }}"
}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "dRGPTy0BjDpAYjYl",
"name": "FILL ME"
}
},
"typeVersion": 1
},
{
"id": "56e60042-d345-46f2-b1c6-4e21825cb5c9",
"name": "Create event",
"type": "n8n-nodes-base.googleCalendar",
"position": [
2600,
1100
],
"parameters": {
"end": "={{ $('List scheduled events from Discord').item.json.scheduled_end_time }}",
"start": "={{ $('List scheduled events from Discord').item.json.scheduled_start_time }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "[UPDATE ME]",
"cachedResultName": "Events"
},
"additionalFields": {
"id": "={{ $('List scheduled events from Discord').item.json.id }}",
"summary": "={{ $('List scheduled events from Discord').item.json.name }}",
"location": "={{ $('List scheduled events from Discord').item.json.entity_metadata.location }}",
"description": "={{ $('List scheduled events from Discord').item.json.description }}"
}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "dRGPTy0BjDpAYjYl",
"name": "FILL ME"
}
},
"typeVersion": 1
},
{
"id": "afb05bee-eb5f-453f-8e95-277296ce94b8",
"name": "Get events",
"type": "n8n-nodes-base.googleCalendar",
"position": [
2160,
1000
],
"parameters": {
"eventId": "={{ $json.id }}",
"options": {},
"calendar": {
"__rl": true,
"mode": "list",
"value": "[UPDATE ME]",
"cachedResultName": "Events"
},
"operation": "get"
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "dRGPTy0BjDpAYjYl",
"name": "FILL ME"
}
},
"typeVersion": 1,
"continueOnFail": true,
"alwaysOutputData": false
},
{
"id": "56b731bd-4676-4b77-bafa-7120a51bf75d",
"name": "Create or update?",
"type": "n8n-nodes-base.if",
"position": [
2380,
1000
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.id }}",
"operation": "isNotEmpty"
}
]
}
},
"typeVersion": 1
},
{
"id": "12e40b0e-3740-47db-8647-eff8c0c959df",
"name": "Configure",
"type": "n8n-nodes-base.set",
"position": [
1680,
1000
],
"parameters": {
"values": {
"string": [
{
"name": "guild_id",
"value": "447359847986495498"
}
]
},
"options": {}
},
"typeVersion": 2
},
{
"id": "4160a727-6a50-40ce-a7f2-0abbd5a6b1bc",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1600,
940
],
"parameters": {
"width": 254.7946768060834,
"height": 296.7300380228139,
"content": "### Configuration\n\n\n\n\n\n\n\n\n\n\n\n\n\n__`guild_id`__: the server ID in Discord. See how to get that [from this Wikipedia tutorial](https://en.wikipedia.org/wiki/Template:Discord_server#:~:text=Getting%20Guild%20ID,to%20get%20the%20guild%20ID.)."
},
"typeVersion": 1
},
{
"id": "ac717afe-1d30-4994-a134-0d535d04b932",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
920,
760
],
"parameters": {
"width": 420.4528092560485,
"height": 639.1273068962362,
"content": "## Sync Discord scheduled events to Google Calendar\nThis workflow syncs Discord scheduled events to Google Calendar. On a specified schedule, a request to Discord's API is made to get the scheduled events on a particular server. Only the events that have not been created or have recently been updated will be sent to Google Calendar.\n\n### Setup\nYou will need to create a Discord bot. See how to do that [here](https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-getting-a-token). Once you have created your bot, create **Header Auth** in `List scheduled events from Discord` node. Your header auth fields should be:\n\nName: Authorization\nValue: Bot _<your token>_ \n(i.e. Bot MTEzMTgw...uQdg)\n\n### How it works\n1. Triggers off on the `On schedule` node.\n2. Gets the scheduled events from Discord.\n3. The IDs of the Discord scheduled events are used to get the events from Google Calendar, since the IDs are the same on creation of the Google Calendar event.\n4. We can now determine which events are new or have been updated.\n5. The new or updated events are created or updated in Google Calendar."
},
"typeVersion": 1
}
],
"connections": {
"Configure": {
"main": [
[
{
"node": "List scheduled events from Discord",
"type": "main",
"index": 0
}
]
]
},
"Get events": {
"main": [
[
{
"node": "Create or update?",
"type": "main",
"index": 0
}
]
]
},
"On schedule": {
"main": [
[
{
"node": "Configure",
"type": "main",
"index": 0
}
]
]
},
"Create or update?": {
"main": [
[
{
"node": "Update event details",
"type": "main",
"index": 0
}
],
[
{
"node": "Create event",
"type": "main",
"index": 0
}
]
]
},
"List scheduled events from Discord": {
"main": [
[
{
"node": "Get events",
"type": "main",
"index": 0
}
]
]
}
}
}Actions
Technical Specs
Compatibility
License
This workflow template follows MIT license, you can freely use, modify and distribute.
Please comply with relevant third-party service terms when using.