This workflow corresponds to n8n.io template #7044 — we link there as the canonical source.
This workflow follows the Emailsend → HTTP Request 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": "88ia1RcNZ7aDAGZP",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Geofenced Student Activity Tracker via iOS Automation",
"tags": [],
"nodes": [
{
"id": "28447b9c-fdd0-4588-82e0-54d4d65c8ca9",
"name": "Location Update Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-1600,
-120
],
"parameters": {
"path": "student-location",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 1
},
{
"id": "a88c48d7-d3f5-4413-9ff6-b461cdbe1152",
"name": "Process Location Data",
"type": "n8n-nodes-base.set",
"position": [
-1380,
-120
],
"parameters": {
"values": {
"string": [
{
"name": "student_name",
"value": "={{ $json.body.student_name }}"
},
{
"name": "student_id",
"value": "={{ $json.body.student_id }}"
},
{
"name": "location_name",
"value": "={{ $json.body.location_name }}"
},
{
"name": "activity_type",
"value": "={{ $json.body.activity_type }}"
},
{
"name": "latitude",
"value": "={{ $json.body.latitude }}"
},
{
"name": "longitude",
"value": "={{ $json.body.longitude }}"
},
{
"name": "timestamp",
"value": "={{ $now.format('yyyy-MM-dd HH:mm:ss') }}"
},
{
"name": "date",
"value": "={{ $now.format('yyyy-MM-dd') }}"
},
{
"name": "time",
"value": "={{ $now.format('HH:mm') }}"
}
]
},
"options": {}
},
"typeVersion": 1
},
{
"id": "1f15187f-8602-4ba2-a3fb-7b5a8828c4cb",
"name": "Student Arrived?",
"type": "n8n-nodes-base.if",
"position": [
-1160,
-120
],
"parameters": {
"options": {},
"conditions": {
"options": {
"caseSensitive": false
},
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.activity_type }}",
"rightValue": "arrived"
}
]
}
},
"typeVersion": 2
},
{
"id": "856b5882-61c2-451c-ab3f-8d2750ecc564",
"name": "Log School Arrival",
"type": "n8n-nodes-base.httpRequest",
"position": [
-940,
-120
],
"parameters": {
"url": "https://sheets.googleapis.com/v4/spreadsheets/YOUR_SHEET_ID/values/Activities:append?valueInputOption=RAW",
"options": {},
"sendBody": true,
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleSheetsOAuth2Api"
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "30800230-2d9c-47c6-b972-13328eef51ff",
"name": "At School?",
"type": "n8n-nodes-base.if",
"position": [
-720,
-120
],
"parameters": {
"options": {},
"conditions": {
"options": {
"caseSensitive": false
},
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.location_name }}",
"rightValue": "School Campus"
}
]
}
},
"typeVersion": 2
},
{
"id": "be6abf64-49da-496d-9e83-132b4aafd92c",
"name": "Notify Teacher",
"type": "n8n-nodes-base.emailSend",
"position": [
-500,
-220
],
"parameters": {
"options": {},
"subject": "Student Arrival Alert",
"toEmail": "user@example.com",
"fromEmail": "user@example.com"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "a9e2767f-fd26-40d2-8b01-d6b6dd07dd53",
"name": "Notify Parent",
"type": "n8n-nodes-base.emailSend",
"position": [
-500,
-20
],
"parameters": {
"options": {},
"subject": "Your Child's Location Update",
"toEmail": "user@example.com",
"fromEmail": "user@example.com"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "8bf469fa-cb45-46f5-93e8-a31cec898dc8",
"name": "Success Response",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
-280,
-120
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={\n \"success\": true,\n \"message\": \"Location updated for {{ $('Process Location Data').item.json.student_name }}\",\n \"location\": \"{{ $('Process Location Data').item.json.location_name }}\",\n \"time\": \"{{ $('Process Location Data').item.json.time }}\"\n}"
},
"typeVersion": 1
},
{
"id": "11654022-f76a-4c16-9572-83890d5feb53",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1640,
-260
],
"parameters": {
"color": 6,
"width": 180,
"height": 320,
"content": "Triggered via iOS Shortcut when student location updates\n"
},
"typeVersion": 1
},
{
"id": "cb2c8940-f1d1-493e-949c-a98ffd13b723",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1400,
-260
],
"parameters": {
"width": 180,
"height": 320,
"content": "Extracts coordinates and metadata\n"
},
"typeVersion": 1
},
{
"id": "5aff6f9d-a92a-4f9e-803b-4d948a848b50",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1180,
-260
],
"parameters": {
"color": 4,
"width": 180,
"height": 320,
"content": "Checks if student entered school zone\n"
},
"typeVersion": 1
},
{
"id": "8d738c70-8bf6-4989-b18b-34c333a54d19",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-980,
-260
],
"parameters": {
"color": 3,
"width": 180,
"height": 320,
"content": "Adds arrival data to Google Sheet\n"
},
"typeVersion": 1
},
{
"id": "efea3574-c4fc-44cd-a0bc-42d1bfc2c297",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-760,
-260
],
"parameters": {
"color": 5,
"width": 180,
"height": 320,
"content": "Double-checks geofence condition before notifying\n"
},
"typeVersion": 1
},
{
"id": "2bc11c73-917f-4764-8838-f2f5747642bd",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
-260
],
"parameters": {
"color": 4,
"width": 180,
"height": 320,
"content": "Returns a 200 response to the triggering device\n\n"
},
"typeVersion": 1
},
{
"id": "220a1498-beea-48b8-adc7-58b84b7e811a",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-540,
-400
],
"parameters": {
"width": 180,
"height": 540,
"content": "Sends email if student is confirmed at school\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "73bbead3-571c-45fb-87e8-19ed76748150",
"connections": {
"At School?": {
"main": [
[
{
"node": "Notify Teacher",
"type": "main",
"index": 0
}
],
[
{
"node": "Notify Parent",
"type": "main",
"index": 0
}
]
]
},
"Notify Parent": {
"main": [
[
{
"node": "Success Response",
"type": "main",
"index": 0
}
]
]
},
"Notify Teacher": {
"main": [
[
{
"node": "Success Response",
"type": "main",
"index": 0
}
]
]
},
"Student Arrived?": {
"main": [
[
{
"node": "Log School Arrival",
"type": "main",
"index": 0
}
],
[]
]
},
"Log School Arrival": {
"main": [
[
{
"node": "At School?",
"type": "main",
"index": 0
}
]
]
},
"Process Location Data": {
"main": [
[
{
"node": "Student Arrived?",
"type": "main",
"index": 0
}
]
]
},
"Location Update Webhook": {
"main": [
[
{
"node": "Process Location Data",
"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.
googleSheetsOAuth2Apismtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates real-time student tracking using iOS Shortcuts and geolocation data, notifying both teachers and parents based on geofenced logic.
Source: https://n8n.io/workflows/7044/ — 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.
세미나 데모 용 워크플로우. Uses httpRequest, emailSend. Webhook trigger; 17 nodes.
worklow_doc. Uses httpRequest, readBinaryFile, n8n-nodes-docxtemplater, emailSend. Webhook trigger; 15 nodes.
WF2 - Upload Manual | JurisAI. Uses httpRequest, emailSend. Webhook trigger; 15 nodes.
Deliver personalized files instantly after PayPal transactions using n8n – without writing a single backend line.
This is the workflow that I presented at the April 9, 2021 n8n Meetup.