This workflow corresponds to n8n.io template #4778 — we link there as the canonical source.
This workflow follows the Google Calendar → Google Sheets recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "tpJVuoH0Z7kyiXZH",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "google-calendar-shees-template-v1.0",
"tags": [],
"nodes": [
{
"id": "e7d2f6c5-9d54-496b-83ff-1d22e6782c43",
"name": "Schedule Trigger1",
"type": "n8n-nodes-base.scheduleTrigger",
"notes": "Every 1 min",
"position": [
4040,
1320
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1.2
},
{
"id": "834ec869-a81e-4d28-b9d5-9dc81d4cece6",
"name": "Get Events1",
"type": "n8n-nodes-base.googleCalendar",
"notes": "Get events",
"position": [
4460,
1320
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1.3
},
{
"id": "5ee267ed-5b2a-4bd3-a4e6-f8d101433892",
"name": "Check for Empty Events1",
"type": "n8n-nodes-base.if",
"position": [
4700,
1320
],
"parameters": {},
"typeVersion": 2.2,
"alwaysOutputData": true
},
{
"id": "404884b7-8b8d-405d-a6dd-27217f2c6ac4",
"name": "Loop Over Events & Rows1",
"type": "n8n-nodes-base.splitInBatches",
"notes": "Loop over",
"position": [
5160,
1340
],
"parameters": {},
"typeVersion": 3
},
{
"id": "9355e33a-109c-41d2-abec-559ebbf97758",
"name": "Get Rows1",
"type": "n8n-nodes-base.googleSheets",
"notes": "Get rows",
"onError": "continueRegularOutput",
"position": [
5420,
1440
],
"parameters": {},
"executeOnce": true,
"notesInFlow": true,
"retryOnFail": false,
"typeVersion": 4.6,
"alwaysOutputData": true
},
{
"id": "d57d6abc-af73-41b7-8e3d-c4346d934171",
"name": "Match Events vs Rows1",
"type": "n8n-nodes-base.code",
"notes": "Check event against sheet",
"position": [
5800,
1320
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 2,
"alwaysOutputData": false
},
{
"id": "d587e1c9-b04d-417f-b155-847df5ac83cb",
"name": "Check for Match1",
"type": "n8n-nodes-base.if",
"notes": "true -> update; false -> add to sheet",
"position": [
6040,
1320
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 2.2
},
{
"id": "48c435fb-df81-44a4-ad55-8cf7db844b76",
"name": "Update Sheet1",
"type": "n8n-nodes-base.googleSheets",
"notes": "Update rows in sheet",
"position": [
6340,
1300
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 4.6
},
{
"id": "04e8f9f2-0c1c-4a2b-83a6-5bf9a9d14943",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
4320,
1500
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "fcc2f4e1-06bc-4c4a-99b9-1efd869644d5",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
4320,
1220
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "66e8c77d-d12b-41ae-a631-bf603687562e",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
3960,
1260
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "f978e8f1-0f29-44c3-8e99-4422b5dba01c",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
3960,
1500
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "c4929ab1-873d-41d5-8a0d-ff4cc96c2d90",
"name": "Sticky Note13",
"type": "n8n-nodes-base.stickyNote",
"position": [
5040,
1220
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "fdf237ab-5851-472f-92e5-11fa41f53555",
"name": "Sticky Note14",
"type": "n8n-nodes-base.stickyNote",
"position": [
5040,
1680
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "21ee9327-52b6-48b0-b756-ca125c6ed697",
"name": "Sticky Note15",
"type": "n8n-nodes-base.stickyNote",
"position": [
5700,
1220
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "fa732d6e-36a9-4604-90ef-38bc467c6d5a",
"name": "Sticky Note16",
"type": "n8n-nodes-base.stickyNote",
"position": [
5700,
1680
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "ff657f6f-9da2-4c1a-8fc6-89dd8a6c8efa",
"name": "Add to Sheet1",
"type": "n8n-nodes-base.googleSheets",
"notes": "Add rows to sheet",
"position": [
6340,
1480
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 4.6
},
{
"id": "b3c2f7df-409a-4699-a48b-9a1bf1c227fb",
"name": "Sticky Note17",
"type": "n8n-nodes-base.stickyNote",
"position": [
3940,
1040
],
"parameters": {
"content": ""
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "1a845fb1-74c7-4d0f-9c1b-a11d7174fd55",
"connections": {
"Get Rows1": {
"main": [
[
{
"node": "Loop Over Events & Rows1",
"type": "main",
"index": 0
}
]
]
},
"Get Events1": {
"main": [
[
{
"node": "Check for Empty Events1",
"type": "main",
"index": 0
}
]
]
},
"Check for Match1": {
"main": [
[
{
"node": "Update Sheet1",
"type": "main",
"index": 0
}
],
[
{
"node": "Add to Sheet1",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger1": {
"main": [
[
{
"node": "Get Events1",
"type": "main",
"index": 0
}
]
]
},
"Match Events vs Rows1": {
"main": [
[
{
"node": "Check for Match1",
"type": "main",
"index": 0
}
]
]
},
"Check for Empty Events1": {
"main": [
[],
[
{
"node": "Loop Over Events & Rows1",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Events & Rows1": {
"main": [
[
{
"node": "Match Events vs Rows1",
"type": "main",
"index": 0
}
],
[
{
"node": "Get Rows1",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
How it works Listens for new or updated events in your chosen Google Calendar. Extracts key details like event name, date, time, description, and attendees. Adds each event as a new row in your connected Google Sheet. Prevents duplicates by checking for existing Event IDs before…
Source: https://n8n.io/workflows/4778/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Reads every workflow on your n8n instance every 30 minutes, extracts their schedule triggers, and keeps a matching recurring event on Google Calendar — one event per workflow, forever in sync.
Teams that manage tasks in ClickUp and want those tasks reflected—and kept in sync—in Google Calendar automatically.
This workflow monitors customer health by combining payment behavior, complaint signals, and AI-driven feedback analysis. It runs on daily and weekly schedules to evaluate risk levels, escalate high-r
Workflow Description:
Code Postgres. Uses httpRequest, splitInBatches, postgres, hubspot. Scheduled trigger; 23 nodes.