This workflow corresponds to n8n.io template #14718 — we link there as the canonical source.
This workflow follows the Gmail → 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": "lBzYkA3Hk0wMPihF",
"meta": {
"templateCredsSetupCompleted": false
},
"name": "Jira Ticket Deadline & Blockage Notifier",
"tags": [],
"nodes": [
{
"id": "c93cacbb-f5fd-4d12-9c8b-cb1a08c6215d",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
6016,
3088
],
"parameters": {},
"typeVersion": 1
},
{
"id": "6f4473d4-0134-4d95-8fba-ca32bc22298e",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
7424,
2704
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "341ef938-af93-46e2-a454-64ea5c7f991c",
"name": "END PROCESS",
"type": "n8n-nodes-base.noOp",
"position": [
8960,
2256
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b351a94f-3217-4daf-9f6f-2a102aa23044",
"name": "Note - Level 1 Reminder",
"type": "n8n-nodes-base.stickyNote",
"position": [
8896,
2528
],
"parameters": {
"color": 7,
"width": 720,
"height": 272,
"content": "## LEVEL 1 -> REMINDER ASSIGNEE \ud83e\udde0\n- [0 - 2] Imminent DueDate \u2192 Send email to ticket assignee"
},
"typeVersion": 1
},
{
"id": "0c9fb7ab-4cb6-4400-80bf-79f9d3921801",
"name": "Note - Level 2 Warning",
"type": "n8n-nodes-base.stickyNote",
"position": [
8896,
2848
],
"parameters": {
"color": 7,
"width": 1152,
"height": 560,
"content": "## LEVEL 2 -> (WARNING ASSIGNEE OR NOTIFICATION CHANNEL) -> WARNING \u26a0\ufe0f\n\n* **if [1 - 2] OverDue Days** \u2192 Send Email to ticket assignee\n\n* **if ]2 - 4] OverDue Days** \u2192 Send notification to google chat dedicated channel"
},
"typeVersion": 1
},
{
"id": "ff65c963-1b31-474a-9283-7061d3d9679e",
"name": "Note - Level 3 Escalation",
"type": "n8n-nodes-base.stickyNote",
"position": [
8896,
3456
],
"parameters": {
"color": 7,
"width": 768,
"height": 288,
"content": "## LEVEL 3 -> ESCALATION MANAGER -> ALERT \ud83d\udea8\n* Greater than 4 OverDue Days \u2192 Send email to manager(s)"
},
"typeVersion": 1
},
{
"id": "c3235594-6225-4c8e-aebd-f64239a38217",
"name": "ROUTES",
"type": "n8n-nodes-base.switch",
"position": [
7984,
2912
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "37e0a73e-2415-4fc1-9998-4a261194236f",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $input.last().json.isImminent }}",
"rightValue": ""
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0c83b937-ca5a-49ec-be1a-194eb4c6e1f4",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $input.last().json.isOverdue && $input.last().json.overdue_days <= 4}}",
"rightValue": ""
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8d2eb47c-6428-4eee-a554-00eac1e7fbd8",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $input.last().json.isOverdue && $input.last().json.overdue_days > 4 }}",
"rightValue": ""
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "e782ccbf-8565-428b-92dc-3deb04531162",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $input.last().json.isBlocked }}",
"rightValue": ""
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d68ebbe7-614e-4bbb-8f1a-28a77fa31a0c",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ true // Continue Loop }}",
"rightValue": ""
}
]
}
}
]
},
"options": {
"allMatchingOutputs": true
}
},
"typeVersion": 3.4
},
{
"id": "9d5faec2-6653-4007-bf77-c35d16f2260d",
"name": "Note - What Is This Workflow",
"type": "n8n-nodes-base.stickyNote",
"position": [
5824,
2016
],
"parameters": {
"width": 640,
"height": 944,
"content": "## Jira Tickets Monitoring \u2014 Deadlines & Blockages \ud83d\udea8\n\nAutomate Jira ticket monitoring with progressive escalation to assignees, teams, and managers.\n\n\n### How it works\n\nFetches all open sprint tickets daily and routes each one based on its status:\n\n- \ud83e\udde0 **Reminder** `[0\u20132 days left]` \u2192 Email to assignee\n- \u26a0\ufe0f **Warning** `[1\u20134 days overdue]` \u2192 Email to assignee or Google Chat alert\n- \ud83d\udea8 **Escalation** `[> 4 days overdue]` \u2192 Email to manager(s)\n- \ud83d\udd34 **Blocked** \u2192 Escalates over 3 days: assignee email \u2192 team chat \u2192 manager\n\n\n### How to use\n\nEdit only the **\u2699\ufe0f CONFIG** node with your 4 values, then enable the Schedule Trigger.\n\n\n### Requirements\n\n- Jira Software Cloud\n- Gmail (OAuth2)\n- Google Chat Webhook\n\n\n### \u2699\ufe0f CONFIG\n\n- `JIRA_DOMAIN`: e.g `my-company.atlassian.net`\n- `JIRA_PROJECT_KEY`: e.g. `PROJ`\n- `MANAGER_EMAILS`: Escalation recipient(s)\n- `GOOGLE_CHAT_WEBHOOK_URL`: Your Google Chat space webhook\n\n\n### Need Help?\n\nVisit \ud83d\udc49 [aixautomation.tech](https://aixautomation.tech/)"
},
"typeVersion": 1
},
{
"id": "ea6adf87-9a03-4eab-ac3e-198c179dd8b9",
"name": "MANAGER_ESCALATION",
"type": "n8n-nodes-base.gmail",
"onError": "continueRegularOutput",
"position": [
9008,
3568
],
"parameters": {
"sendTo": "={{ $('\u2699\ufe0f CONFIG').first().json.MANAGER_EMAILS }}",
"message": "=Hello {{ $input.last().json.assignee.displayName }}, This is an alert for an overdue ticket: https://{{ $('\u2699\ufe0f CONFIG').first().json.JIRA_DOMAIN }}/browse/{{ $input.last().json.key }}",
"options": {},
"subject": "Jira DueDate Ticket Alert \ud83d\udea8",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 2.2,
"waitBetweenTries": 5000
},
{
"id": "d797d9f0-a813-4805-8792-91bbdffdc3f1",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
6432,
3104
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.3
},
{
"id": "0e6f9872-5176-4357-a969-b90bb0e45803",
"name": "Note - Blocked Tickets Logic",
"type": "n8n-nodes-base.stickyNote",
"position": [
8896,
3808
],
"parameters": {
"color": 7,
"width": 2464,
"height": 720,
"content": "## Blocked Tickets (WARNING ASSIGNEE \u26a0\ufe0f OR ESCALATION EMAIL \ud83d\udea8)\n* Blocked + 1 Days \u2192 Send Email to ticket assignee\n* Blocked + 2 Days -> Notify google chat team\n* Blocked + 3 Days \u2192 send email to manager. \n"
},
"typeVersion": 1
},
{
"id": "d6ee8543-a77f-4864-be81-f8c8bf15d026",
"name": "MANAGER_ESCALATION_BLOCKED",
"type": "n8n-nodes-base.gmail",
"onError": "continueRegularOutput",
"position": [
10464,
4240
],
"parameters": {
"sendTo": "={{ $input.last().json.data.assignee.emailAddress }}",
"message": "=Hello {{ $input.last().json.data.assignee.displayName }}, This an Alert for blocked ticket: https://{{ $('\u2699\ufe0f CONFIG').first().json.JIRA_DOMAIN }}/browse/{{ $input.last().json.data.key }}",
"options": {},
"subject": "Jira Blocked Ticket Alert \ud83d\udea8",
"emailType": "text"
},
"retryOnFail": true,
"typeVersion": 2.2,
"waitBetweenTries": 5000
},
{
"id": "579919c1-a353-479b-b5b3-c2f9282a51fb",
"name": "IS_OVERDUE_BETWEEN",
"type": "n8n-nodes-base.if",
"position": [
8976,
3040
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "23a7703e-2b5f-4244-869b-23af22a1fec4",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $input.last().json.overdue_days >= 1 && $input.last().json.overdue_days <= 2 }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2.3
},
{
"id": "c3fc68cd-b7ee-4861-8a4d-ab0082e34b2d",
"name": "AGGREGATE_ITEMS",
"type": "n8n-nodes-base.aggregate",
"position": [
9184,
4144
],
"parameters": {
"include": "specifiedFields",
"options": {},
"aggregate": "aggregateAllItemData",
"fieldsToInclude": "created, items",
"destinationFieldName": "jira_issue_changelog"
},
"typeVersion": 1
},
{
"id": "6baf8aac-d716-43af-9eb1-604051410174",
"name": "DATA_FLOW",
"type": "n8n-nodes-base.code",
"position": [
8976,
3968
],
"parameters": {
"jsCode": "return (\n [\n {\n json: {\n ...$input.last().json\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "47bb7350-1d66-4fc0-aad9-3633cda23f11",
"name": "MERGE_DATA",
"type": "n8n-nodes-base.merge",
"position": [
9424,
3984
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"executeOnce": true,
"typeVersion": 3.2
},
{
"id": "46e9dc22-e952-41ce-bffd-25094fa3fc42",
"name": "GET_BLOCKED_ITEM",
"type": "n8n-nodes-base.code",
"position": [
9664,
3984
],
"parameters": {
"jsCode": "const blocked_item = $input.last().json.jira_issue_changelog.filter((item) => {\n return (\n // filter by labels field\n item.items[0].field == \"labels\" && item.items[0].toString === \"blocked\"\n )\n})\n\n\nreturn (\n [\n {\n json: {\n blocked_item,\n data: $input.last().json\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "a9ae5760-cf82-46ef-943c-d03e39bf700f",
"name": "COMPUTE_BLOCKED_DAYS",
"type": "n8n-nodes-base.code",
"position": [
9872,
3984
],
"parameters": {
"jsCode": "const today = new Date();\nconst blocked_date = new Date($input.last().json.blocked_item[0].created)\nconst diff = today - blocked_date;\nconst blocked_days = Math.floor(diff / (1000 * 60 * 60 * 24));\n\nreturn (\n [\n {\n json: {\n blocked_days,\n data: $input.last().json.data\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "d4f1ac3c-7605-4ec3-81d6-7fee1ac68dc6",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
10080,
3952
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b899124e-ca75-4da5-8819-d31e7984559a",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $input.last().json.blocked_days }}",
"rightValue": 1
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c8d62507-f9dd-4128-a443-b64eafad39fa",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $input.last().json.blocked_days }}",
"rightValue": 2
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "e94bcb44-3073-483c-a487-dfcdbb7e32aa",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $input.last().json.blocked_days }}",
"rightValue": "3"
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3b878fe6-a918-4920-8602-f43ef9d9424b",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ true // continue loop }}",
"rightValue": ""
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.4
},
{
"id": "73b5c491-72da-4d7c-8d87-70415098ec95",
"name": "CONTINUE_LOOP",
"type": "n8n-nodes-base.code",
"position": [
8224,
3232
],
"parameters": {
"jsCode": "return (\n [\n {\n json: {\n success: true\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "4190444b-8700-4614-a0a6-04865a15d434",
"name": "CONTINUE_LOOP_OVERDUE_WARNING",
"type": "n8n-nodes-base.code",
"position": [
9472,
2624
],
"parameters": {
"jsCode": "return (\n [\n {\n json: {\n success_leve_1: true\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "0e5b6ed1-0f0d-4089-aa75-b2c1a1cbdc73",
"name": "CONTINUE_LOOP_ESCALATION",
"type": "n8n-nodes-base.code",
"position": [
9904,
3232
],
"parameters": {
"jsCode": "return (\n [\n {\n json: {\n success_leve_2: true\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "13d4646e-9424-4f16-be04-4f056de51843",
"name": "CONTINUE_LOOP_BLOCKED_WARNING",
"type": "n8n-nodes-base.code",
"position": [
9520,
3568
],
"parameters": {
"jsCode": "return (\n [\n {\n json: {\n success_leve_3: true\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "d31106b5-5277-40b2-a544-092744f58a33",
"name": "CONTINUE_LOOP_BLOCKED_ESCALATION",
"type": "n8n-nodes-base.code",
"position": [
11216,
4352
],
"parameters": {
"jsCode": "return (\n [\n {\n json: {\n success_leve_4: true\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "e02a848a-dad0-4c0e-a203-2e9c46f72859",
"name": "GET_JIRA_ISSUES",
"type": "n8n-nodes-base.jira",
"position": [
6976,
2704
],
"parameters": {
"options": {
"jql": "=project = {{ $('\u2699\ufe0f CONFIG').first().json.JIRA_PROJECT_KEY }} AND status != Done AND sprint in openSprints()"
},
"operation": "getAll",
"returnAll": true
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 1,
"waitBetweenTries": 5000
},
{
"id": "039f87a2-b2a1-4f2a-91f3-afec38ac6464",
"name": "GET_ISSUES_LIST",
"type": "n8n-nodes-base.code",
"position": [
7216,
2704
],
"parameters": {
"jsCode": "const issues = $input.all().map((e) => {\n const new_obj = {\n key:e.json.key,\n due_date:e.json.fields.duedate,\n assignee:e.json.fields.assignee,\n labels:e.json.fields.labels\n }\n return (\n new_obj\n )\n})\n\nconst issues_list = issues.filter((e) => {\n return (e.due_date != null)\n})\n\nreturn (\n [\n ...issues_list\n ]\n);"
},
"typeVersion": 2
},
{
"id": "d5931d7e-6b2c-4557-b94a-3c01a06bca09",
"name": "ISSUE_DATE_INSIGHTS",
"type": "n8n-nodes-base.code",
"position": [
7728,
2912
],
"parameters": {
"jsCode": "const dueDate_string = $input.last().json.due_date;\nconst today_string = new Date().toISOString().split('T')[0];\nconst key = $input.last().json.key;\nconst assignee = $input.last().json.assignee;\n\nconst due = new Date(dueDate_string);\nconst tod = new Date()\n// difftime < 0 overdue, == 0 duedate, > 0 still on date\nconst diffTime = due - tod;\nconst daysLeft = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\nreturn [\n {\n json: {\n key,\n dueDate_string,\n today_string,\n isOverdue: daysLeft < 0 ? true : false,\n isImminent: daysLeft >= 0 && daysLeft <= 2,\n isBlocked: $input.last().json.labels.includes(\"blocked\"),\n days_left: daysLeft,\n overdue_days: daysLeft < 0 ? daysLeft * -1 : 0,\n assignee: assignee\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "7bb905aa-b11a-49e5-b7b1-2c6c4b839387",
"name": "GET_ISSUE_CHANGELOG",
"type": "n8n-nodes-base.jira",
"position": [
8976,
4144
],
"parameters": {
"issueKey": "={{ $input.last().json.key }}",
"operation": "changelog"
},
"executeOnce": false,
"typeVersion": 1
},
{
"id": "bf6c3148-f27f-493f-98c1-30bdfadc19db",
"name": "Note - Production Quotas Warning",
"type": "n8n-nodes-base.stickyNote",
"position": [
10224,
2608
],
"parameters": {
"color": 3,
"width": 560,
"height": 1120,
"content": "## TO CONSIDER FOR PRODUCTION: \u26a0\ufe0f GMAIL / GOOGLE CHAT QUOTA \u26a0\ufe0f\n\n\n### \ud83d\udcac Google Chat Webhook Quotas\n* **Per-Space Limit:** 60 messages / minute (Strict).\n* **Per-Project Limit:** 3,000 messages / minute.\n* **Max Message Size:** ~32 KB.\n> **Tip:** In HTTP Node, set Batching to **1 item per 1000ms**.\n\n---\n\n\n### \ud83d\udce7 Gmail API Quotas (n8n Node)\n* **Daily Limit (Workspace):** 2,000 recipients / day.\n* **Daily Limit (Free):** 500 recipients / day.\n* **Burst Rate:** ~1\u20133 emails per second.\n> **Tip:** **Split In Batches** (Size 1) + **Wait Node** (1s).\n\n---\n\n\n### \ud83d\udee0\ufe0f Error Handling Strategy\n* **Retry on Failure:**\n* **Max Retries:** 3\n* **Delay Between Retries:** 5000ms (5 seconds).\n* **Error Action:** \"Continue\" to avoid stopping the whole workflow."
},
"typeVersion": 1
},
{
"id": "96aeefd6-6ef9-46c9-b53f-746bd0396c66",
"name": "Wait - Rate Limit (Blocked Escalation)",
"type": "n8n-nodes-base.wait",
"position": [
10960,
4304
],
"parameters": {
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "ab8da30a-eb23-4e26-89fc-955d02e6f7c0",
"name": "Wait - Rate Limit (Reminder)",
"type": "n8n-nodes-base.wait",
"position": [
9232,
2624
],
"parameters": {
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "b54bacd9-b0d7-4163-985e-cad1b494b8a3",
"name": "Wait - Rate Limit (Warning)",
"type": "n8n-nodes-base.wait",
"position": [
9664,
3232
],
"parameters": {
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "8c494186-d369-438c-a8ec-199ba4c0f8c6",
"name": "Wait - Rate Limit (Escalation)",
"type": "n8n-nodes-base.wait",
"position": [
9248,
3568
],
"parameters": {
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "d77dc4fc-49fb-4a77-802d-5bcdafb6ed09",
"name": "NOTIFY_TEAM",
"type": "n8n-nodes-base.httpRequest",
"notes": "Quota | TypeLimit (per 60 seconds) | Impact\n\nPer-Project (Write)\t | 3,000 messages\t| This is the total messages your \"app\" (webhook) can send across all spaces it has access to.\n\nPer-Space (Write)\t | 60 messages\t| This is the limit for a single chat space. If you send more than 1 message per second to one channel, you will hit this.\n\nMessage Size\t | ~32 KB\t | A single message (including text and any card JSON) cannot exceed roughly 32 KB",
"position": [
9408,
3232
],
"parameters": {
"url": "={{ $('\u2699\ufe0f CONFIG').first().json.GOOGLE_CHAT_WEBHOOK_URL }}",
"method": "POST",
"options": {
"batching": {
"batch": {
"batchSize": 1,
"batchInterval": 1100
}
}
},
"jsonBody": "={\n \"cards\": [\n {\n \"header\": {\n \"title\": \"Jira DueDate Ticket Warning \u26a0\ufe0f\"\n },\n \"sections\": [\n {\n \"widgets\": [\n {\n \"textParagraph\": {\n \"text\": \"<b>Issue:</b> {{ $input.last().json.key }}\"\n }\n },\n {\n \"textParagraph\": {\n \"text\": \"<b>Assignee:</b> {{ $input.last().json.assignee.displayName }}\"\n }\n },\n {\n \"textParagraph\": {\n \"text\": \"<b>Due date:</b> {{ $input.last().json.dueDate_string }}\"\n }\n },\n {\n \"textParagraph\": {\n \"text\": \"{{ $input.last().json.isOverdue ? '\u23f1\ufe0f Cette t\u00e2che est en retard.' : '\u23f1\ufe0f Cette t\u00e2che est proche de la deadline.' }}\"\n }\n }\n ]\n },\n {\n \"widgets\": [\n {\n \"buttons\": [\n {\n \"textButton\": {\n \"text\": \"VOIR LE TICKET\",\n \"onClick\": {\n \"openLink\": {\n \"url\": \"https://{{ $('\u2699\ufe0f CONFIG').first().json.JIRA_DOMAIN }}/browse/{{ $input.last().json.key }}\"\n }\n }\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"retryOnFail": true,
"typeVersion": 4.4
},
{
"id": "7115286c-b711-4cf8-9523-ce3e2509cc22",
"name": "SEND_BLOCKED_WARNING",
"type": "n8n-nodes-base.gmail",
"onError": "continueRegularOutput",
"position": [
10464,
3840
],
"parameters": {
"sendTo": "={{ $input.last().json.data.assignee.emailAddress }}",
"message": "=Hello {{ $input.last().json.data.assignee.displayName }}, This a warning for your blocked ticket: https://{{ $('\u2699\ufe0f CONFIG').first().json.JIRA_DOMAIN }}/browse/{{ $input.last().json.data.key }}",
"options": {},
"subject": "Jira Blocked Ticket Warning \u26a0\ufe0f",
"emailType": "text"
},
"retryOnFail": true,
"typeVersion": 2.2,
"waitBetweenTries": 5000
},
{
"id": "886ec602-647b-40f2-8846-1ebf8421769f",
"name": "SEND_DUEDATE_REMINDER",
"type": "n8n-nodes-base.gmail",
"notes": "Account | TypeDaily Sending Limit | Burst Limit (Rate)\n\nFree Gmail | ~500 recipients/day | ~1 email per second\n\nGoogle Workspace | ~2,000 recipients/day | ~2\u20133 emails per second",
"onError": "continueRegularOutput",
"position": [
8992,
2624
],
"parameters": {
"sendTo": "={{ $input.last().json.assignee.emailAddress }}",
"message": "=Hello {{ $input.last().json.assignee.displayName }}, This is a reminder for your imminent ticket: https://{{ $('\u2699\ufe0f CONFIG').first().json.JIRA_DOMAIN }}/browse/{{ $input.last().json.key }}",
"options": {},
"subject": "Jira DueDate Ticket Reminder \ud83e\udde0",
"emailType": "text"
},
"retryOnFail": true,
"typeVersion": 2.2,
"waitBetweenTries": 5000
},
{
"id": "bfb53c90-8246-4f95-8cdc-0d1890b72a33",
"name": "SEND_DUEDATE_WARNING",
"type": "n8n-nodes-base.gmail",
"onError": "continueRegularOutput",
"position": [
9408,
3024
],
"parameters": {
"sendTo": "={{ $input.last().json.assignee.emailAddress }}",
"message": "=Hello {{ $input.last().json.assignee.displayName }}, This is a warning for your overdue ticket: https://{{ $('\u2699\ufe0f CONFIG').first().json.JIRA_DOMAIN }}/browse/{{ $input.last().json.key }}",
"options": {},
"subject": "Jira DueDate Ticket Warning \u26a0\ufe0f",
"emailType": "text"
},
"retryOnFail": true,
"typeVersion": 2.2,
"waitBetweenTries": 5000
},
{
"id": "6c9b5ebc-ec31-482e-89fa-e2df0f683975",
"name": "NOTIFY_TEAM_BLOCKED",
"type": "n8n-nodes-base.httpRequest",
"notes": "Quota | TypeLimit (per 60 seconds) | Impact\n\nPer-Project (Write)\t | 3,000 messages\t| This is the total messages your \"app\" (webhook) can send across all spaces it has access to.\n\nPer-Space (Write)\t | 60 messages\t| This is the limit for a single chat space. If you send more than 1 message per second to one channel, you will hit this.\n\nMessage Size\t | ~32 KB\t | A single message (including text and any card JSON) cannot exceed roughly 32 KB",
"position": [
10464,
4048
],
"parameters": {
"url": "={{ $('\u2699\ufe0f CONFIG').first().json.GOOGLE_CHAT_WEBHOOK_URL }}",
"method": "POST",
"options": {
"batching": {
"batch": {
"batchSize": 1,
"batchInterval": 1100
}
}
},
"jsonBody": "={\n \"cards\": [\n {\n \"header\": {\n \"title\": \"Jira DueDate Ticket Warning \u26a0\ufe0f\"\n },\n \"sections\": [\n {\n \"widgets\": [\n {\n \"textParagraph\": {\n \"text\": \"<b>Issue:</b> {{ $input.last().json.key }}\"\n }\n },\n {\n \"textParagraph\": {\n \"text\": \"<b>Assignee:</b> {{ $input.last().json.assignee.displayName }}\"\n }\n },\n {\n \"textParagraph\": {\n \"text\": \"<b>Due date:</b> {{ $input.last().json.dueDate_string }}\"\n }\n },\n {\n \"textParagraph\": {\n \"text\": \"{{ $input.last().json.isOverdue ? '\u23f1\ufe0f Cette t\u00e2che est en retard.' : '\u23f1\ufe0f Cette t\u00e2che est proche de la deadline.' }}\"\n }\n }\n ]\n },\n {\n \"widgets\": [\n {\n \"buttons\": [\n {\n \"textButton\": {\n \"text\": \"VOIR LE TICKET\",\n \"onClick\": {\n \"openLink\": {\n \"url\": \"https://{{ $('\u2699\ufe0f CONFIG').first().json.JIRA_DOMAIN }}/browse/{{ $input.last().json.key }}\"\n }\n }\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"retryOnFail": true,
"typeVersion": 4.4
},
{
"id": "6d921474-4367-49df-bcce-5663e9904d49",
"name": "Note - Manual Testing Trigger",
"type": "n8n-nodes-base.stickyNote",
"position": [
5824,
2992
],
"parameters": {
"color": 7,
"width": 480,
"height": 288,
"content": "## MANUAL TRIGGER FOR TESTING"
},
"typeVersion": 1
},
{
"id": "24fe6d20-c826-44bf-8bb5-45a5bcb1b8ae",
"name": "\u2699\ufe0f CONFIG",
"type": "n8n-nodes-base.set",
"position": [
6656,
2704
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "20ec815c-0122-4afd-8e28-92331aebc688",
"name": "JIRA_DOMAIN",
"type": "string",
"value": "YOUR-COMPANY.atlassian.net"
},
{
"id": "8ceaeb0e-a182-400f-811f-9c874abaa615",
"name": "JIRA_PROJECT_KEY",
"type": "string",
"value": "YOUR_PROJECT_KEY"
},
{
"id": "2be49975-547f-4515-af08-2dc8f88f4a22",
"name": "MANAGER_EMAILS",
"type": "string",
"value": "user@example.com [ CAN BE LIST OF EMAILS ]"
},
{
"id": "09ba7ee7-867d-48b0-b007-bad57c89c4cb",
"name": "GOOGLE_CHAT_WEBHOOK_URL",
"type": "string",
"value": "https://chat.googleapis.com/v1/spaces/XXXXXX/messages?key=YOUR_TOKEN_HERE&token=YOUR_TOKEN_HERE"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b1193c34-7888-453e-8b4b-aa19e5a60853",
"name": "Note - Config Instructions",
"type": "n8n-nodes-base.stickyNote",
"position": [
6496,
2608
],
"parameters": {
"color": 3,
"width": 432,
"height": 240,
"content": "## \u2699\ufe0f CONFIGURATION NODE\nSet all your values here \u2014 **this is the only node you need to edit**"
},
"typeVersion": 1
},
{
"id": "7df7065a-4731-4d4a-8d13-e4fe76be5459",
"name": "Note - Prepare Data Section",
"type": "n8n-nodes-base.stickyNote",
"position": [
6944,
2608
],
"parameters": {
"color": 7,
"width": 944,
"height": 432,
"content": "## PREPARE DATA \ud83d\udcca"
},
"typeVersion": 1
},
{
"id": "5a690ddf-c55f-4359-bcdf-1480b97f379b",
"name": "Note - Workflow End",
"type": "n8n-nodes-base.stickyNote",
"position": [
8880,
2176
],
"parameters": {
"color": 7,
"width": 720,
"height": 256,
"content": "## WORKFLOW END"
},
"typeVersion": 1
},
{
"id": "dfeb8e14-ba51-4dfa-bb45-92328bcf4e6b",
"name": "Note - Automatic Trigger",
"type": "n8n-nodes-base.stickyNote",
"position": [
6336,
2992
],
"parameters": {
"color": 7,
"width": 480,
"height": 288,
"content": "## AUTOMATIC TRIGGER FOR PRODUCTION"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"versionId": "9687e19c-ef1a-45c6-9c18-f674d43c0a5a",
"connections": {
"ROUTES": {
"main": [
[
{
"node": "SEND_DUEDATE_REMINDER",
"type": "main",
"index": 0
}
],
[
{
"node": "IS_OVERDUE_BETWEEN",
"type": "main",
"index": 0
}
],
[
{
"node": "MANAGER_ESCALATION",
"type": "main",
"index": 0
}
],
[
{
"node": "GET_ISSUE_CHANGELOG",
"type": "main",
"index": 0
},
{
"node": "DATA_FLOW",
"type": "main",
"index": 0
}
],
[
{
"node": "CONTINUE_LOOP",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "SEND_BLOCKED_WARNING",
"type": "main",
"index": 0
}
],
[
{
"node": "NOTIFY_TEAM_BLOCKED",
"type": "main",
"index": 0
}
],
[
{
"node": "MANAGER_ESCALATION_BLOCKED",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait - Rate Limit (Blocked Escalation)",
"type": "main",
"index": 0
}
]
]
},
"DATA_FLOW": {
"main": [
[
{
"node": "MERGE_DATA",
"type": "main",
"index": 0
}
]
]
},
"MERGE_DATA": {
"main": [
[
{
"node": "GET_BLOCKED_ITEM",
"type": "main",
"index": 0
}
]
]
},
"NOTIFY_TEAM": {
"main": [
[
{
"node": "Wait - Rate Limit (Warning)",
"type": "main",
"index": 0
}
]
]
},
"CONTINUE_LOOP": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"\u2699\ufe0f CONFIG": {
"main": [
[
{
"node": "GET_JIRA_ISSUES",
"type": "main",
"index": 0
}
]
]
},
"AGGREGATE_ITEMS": {
"main": [
[
{
"node": "MERGE_DATA",
"type": "main",
"index": 1
}
]
]
},
"GET_ISSUES_LIST": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"GET_JIRA_ISSUES": {
"main": [
[
{
"node": "GET_ISSUES_LIST",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "END PROCESS",
"type": "main",
"index": 0
}
],
[
{
"node": "ISSUE_DATE_INSIGHTS",
"type": "main",
"index": 0
}
]
]
},
"GET_BLOCKED_ITEM": {
"main": [
[
{
"node": "COMPUTE_BLOCKED_DAYS",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "\u2699\ufe0f CONFIG",
"type": "main",
"index": 0
}
]
]
},
"IS_OVERDUE_BETWEEN": {
"main": [
[
{
"node": "SEND_DUEDATE_WARNING",
"type": "main",
"index": 0
}
],
[
{
"node": "NOTIFY_TEAM",
"type": "main",
"index": 0
}
]
]
},
"MANAGER_ESCALATION": {
"main": [
[
{
"node": "Wait - Rate Limit (Escalation)",
"type": "main",
"index": 0
}
]
]
},
"GET_ISSUE_CHANGELOG": {
"main": [
[
{
"node": "AGGREGATE_ITEMS",
"type": "main",
"index": 0
}
]
]
},
"ISSUE_DATE_INSIGHTS": {
"main": [
[
{
"node": "ROUTES",
"type": "main",
"index": 0
}
]
]
},
"NOTIFY_TEAM_BLOCKED": {
"main": [
[
{
"node": "Wait - Rate Limit (Blocked Escalation)",
"type": "main",
"index": 0
}
]
]
},
"COMPUTE_BLOCKED_DAYS": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"SEND_BLOCKED_WARNING": {
"main": [
[
{
"node": "Wait - Rate Limit (Blocked Escalation)",
"type": "main",
"index": 0
}
]
]
},
"SEND_DUEDATE_WARNING": {
"main": [
[
{
"node": "Wait - Rate Limit (Warning)",
"type": "main",
"index": 0
}
]
]
},
"SEND_DUEDATE_REMINDER": {
"main": [
[
{
"node": "Wait - Rate Limit (Reminder)",
"type": "main",
"index": 0
}
]
]
},
"CONTINUE_LOOP_ESCALATION": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"MANAGER_ESCALATION_BLOCKED": {
"main": [
[
{
"node": "Wait - Rate Limit (Blocked Escalation)",
"type": "main",
"index": 0
}
]
]
},
"Wait - Rate Limit (Warning)": {
"main": [
[
{
"node": "CONTINUE_LOOP_ESCALATION",
"type": "main",
"index": 0
}
]
]
},
"Wait - Rate Limit (Reminder)": {
"main": [
[
{
"node": "CONTINUE_LOOP_OVERDUE_WARNING",
"type": "main",
"index": 0
}
]
]
},
"CONTINUE_LOOP_BLOCKED_WARNING": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"CONTINUE_LOOP_OVERDUE_WARNING": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Wait - Rate Limit (Escalation)": {
"main": [
[
{
"node": "CONTINUE_LOOP_BLOCKED_WARNING",
"type": "main",
"index": 0
}
]
]
},
"CONTINUE_LOOP_BLOCKED_ESCALATION": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "\u2699\ufe0f CONFIG",
"type": "main",
"index": 0
}
]
]
},
"Wait - Rate Limit (Blocked Escalation)": {
"main": [
[
{
"node": "CONTINUE_LOOP_BLOCKED_ESCALATION",
"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.
gmailOAuth2jiraSoftwareCloudApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Fetches all open sprint tickets daily from your Jira project Analyzes each ticket for overdue days and blocked status Routes to the right escalation level: assignee email → team Google Chat alert → manager escalation Add your Jira Software Cloud credentials in n8n Add your Gmail…
Source: https://n8n.io/workflows/14718/ — 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.
This workflow runs every Monday at 8 AM and automatically monitors your Jira project, measures progress against the active sprint, and delivers a structured report to stakeholders — with zero manual e
This template is built to be customized for your specific needs. This template has the core logic and n8n node specific references sorted to work with dynamic file names throughout the workflow. Store
📘 Description
How it works
Stripe invoicing automation that is connected to your CRM, in this example, it is ClickUp. At the end of the flow, once your lead has been sent an invoice, you (or your team) will be sent an email not