This workflow follows the Google Drive → 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": "x2kgOnBLtqAjqUVS",
"name": "Automated Work Attendance with Location Triggers",
"tags": [],
"nodes": [
{
"id": "b2cba308-6d47-432b-9296-58f233f15565",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
0,
0
],
"parameters": {
"path": "time-track",
"options": {}
},
"typeVersion": 2
},
{
"id": "67354f1c-9dac-4edd-b07d-f1b0dbd80159",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-260
],
"parameters": {
"width": 1120,
"height": 180,
"content": "## Check if the Worksheet Exists"
},
"typeVersion": 1
},
{
"id": "5fc5a1a6-f18d-4ee0-a70b-30de48a45dc7",
"name": "Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
220,
-220
],
"parameters": {
"filter": {},
"options": {},
"resource": "fileFolder",
"returnAll": true,
"queryString": "WorkTimeTracking"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": false,
"typeVersion": 3,
"alwaysOutputData": true
},
{
"id": "a0b63be4-fa46-413f-82fe-42e6edc24f29",
"name": "Create Worksheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
800,
-240
],
"parameters": {
"title": "WorkTimeTracking",
"options": {
"locale": ""
},
"resource": "spreadsheet",
"sheetsUi": {
"sheetValues": [
{
"title": "Worklog"
}
]
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "796e3ef6-3002-493e-8d89-10cba2d8026d",
"name": "Return if Null",
"type": "n8n-nodes-base.code",
"position": [
400,
-220
],
"parameters": {
"jsCode": "return [{json: {empty: items.length == 1 && Object.keys(items[0].json).length == 0}}];"
},
"typeVersion": 2
},
{
"id": "7af7ce4b-93e0-4058-8a45-9fd8269ddc77",
"name": "Doesn't exist?",
"type": "n8n-nodes-base.if",
"position": [
580,
-220
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "215b8ced-c6f5-4cf2-8755-9bba928dbe84",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{$json[\"empty\"]}}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "f2bc21c6-805b-49e7-b026-a4de56dce1fa",
"name": "Set Logging Details",
"type": "n8n-nodes-base.set",
"position": [
780,
20
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={\n \"Date\": \"{{ $now.format('yyyy-MM-dd') }}\",\n \"Time\": \"{{ $now.format('hh:mm') }}\",\n \"Direction\":\"Check-In\"\n}\n"
},
"typeVersion": 3.4
},
{
"id": "64bc8b93-a925-49d6-9e52-3f30f0c9e5a8",
"name": "Create Log",
"type": "n8n-nodes-base.googleSheets",
"position": [
1000,
20
],
"parameters": {
"columns": {
"value": {
"Date": "={{ $json.Date }}",
"Time": "={{ $json.Time }}",
"Direction": "={{ $('Webhook').item.json.headers.direction ? $('Webhook').item.json.headers.direction : \"\"}}"
},
"schema": [
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Time",
"type": "string",
"display": true,
"required": false,
"displayName": "Time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Direction",
"type": "string",
"display": true,
"required": false,
"displayName": "Direction",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": []
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 308318361,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1P7-Uqa4SPA6keujkkOTru1wdS2qDryJVkz0Nz_sFp7A/edit#gid=308318361",
"cachedResultName": "Worklog"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Google Drive').item.json.id }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "cabca7d5-b4ae-45db-904d-f8efb37c4ab2",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
660,
-40
],
"parameters": {
"width": 600,
"height": 280,
"content": "## Log Check-In or Check-Out"
},
"typeVersion": 1
},
{
"id": "5b9505fc-71a4-42c1-805f-c363384b4c8a",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-440,
-320
],
"parameters": {
"color": 3,
"width": 380,
"height": 640,
"content": "## Location-Based Time Tracking\n\nThis automation streamlines your time tracking by using location triggers. Here's how it works:\n\nCreate two shortcuts in the iPhone Shortcuts app:\n\nName one \"Check-In\" and the other \"Check-Out.\"\nWithin each shortcut, use the \"Get Content from URL\" action to call the Webhook. Set the Header Direction for \"Check-In\" or \"Check-Out\"\n\n\nNow, whenever you enter or exit the specified location, your iPhone will automatically record the time in your Google Sheet. This creates a seamless and accurate log of your work hours or time spent at a particular place."
},
"typeVersion": 1
}
],
"active": true,
"settings": {
"timezone": "Europe/Lisbon",
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1",
"executionTimeout": -1,
"saveManualExecutions": true
},
"versionId": "2de5264f-eb68-4919-a3f3-133a8ceb45bb",
"connections": {
"Webhook": {
"main": [
[
{
"node": "Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Google Drive": {
"main": [
[
{
"node": "Return if Null",
"type": "main",
"index": 0
}
]
]
},
"Doesn't exist?": {
"main": [
[
{
"node": "Create Worksheet",
"type": "main",
"index": 0
}
],
[
{
"node": "Set Logging Details",
"type": "main",
"index": 0
}
]
]
},
"Return if Null": {
"main": [
[
{
"node": "Doesn't exist?",
"type": "main",
"index": 0
}
]
]
},
"Create Worksheet": {
"main": [
[
{
"node": "Set Logging Details",
"type": "main",
"index": 0
}
]
]
},
"Set Logging Details": {
"main": [
[
{
"node": "Create Log",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleDriveOAuth2ApigoogleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow automates work attendance logging by triggering entries whenever an employee enters or leaves the office, using location-based signals to ensure accurate records without manual input. It's ideal for team leads or HR managers in small to medium businesses seeking to streamline compliance and productivity tracking, saving hours on administrative tasks each week. The key step involves a webhook capturing location data, which then populates a Google Sheet via Google Drive integration for real-time updates and easy reporting.
Use this workflow for routine office attendance in hybrid teams where geofencing via mobile apps provides reliable triggers, or to monitor remote workers' site visits. Avoid it for fully remote setups without location hardware, as false positives from imprecise signals could skew data. Common variations include adding email notifications for absences or integrating with Slack for instant alerts on late arrivals.
About this workflow
Automated Work Attendance with Location Triggers. Uses stickyNote, googleDrive, googleSheets. Webhook trigger; 10 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
Line Save File to Google Drive and Log File's URL. Uses googleSheets, googleDrive, httpRequest, stickyNote. Webhook trigger; 27 nodes.
LINE BOT - Google Sheets Record Receipt. Uses stickyNote, httpRequest, googleDrive, googleSheets. Webhook trigger; 12 nodes.
Unique QRcode coupon assignment and validation for Lead Generation system. Uses httpRequest, formTrigger, googleSheets, stickyNote. Webhook trigger; 29 nodes.
AutoQoutesV2_template. Uses manualTrigger, httpRequest, stickyNote, googleSheets. Event-driven trigger; 28 nodes.
AutoClip – Automatically Generate Video Clips and Upload to YouTube. Uses manualTrigger, googleSheets, googleDrive, stickyNote. Event-driven trigger; 23 nodes.