This workflow corresponds to n8n.io template #5863 — we link there as the canonical source.
This workflow follows the Agent → Gmail 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 →
{
"name": "Invoice Reminder: Gmail to Tasks",
"nodes": [
{
"id": "95eeaaed-ce70-4f9d-82aa-e67bec2a84d2",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
0,
-288
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "46df89b3-2ac9-4905-ac0a-d4bcf4dbcf9a",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"onError": "continueRegularOutput",
"position": [
448,
-288
],
"parameters": {
"text": "=You are an intelligent assistant that reads emails and determines whether the message is related to an invoice or a payment notification.\n\nYour tasks:\n1. Determine if the email is invoice-related.\n2. If yes, extract:\n - Due date (in YYYY-MM-DD format, or null)\n - Amount due (as a number, no currency symbols)\n\nAlways include these metadata values:\nId: {{ $json.id }}\nthreadId: {{ $json.threadId }}\nbody: {{ $json.text }}\nsubject: {{ $json.subject }}\nsender: {{ $json.from.value[0].name }}\n\nReturn only a valid JSON object in the format below:\n\n```json\n{\n \"is_invoice\": true or false,\n \"due_date\": \"YYYY-MM-DD\" or null,\n \"amount_due\": number or null,\n \"email_id\": \"string\",\n \"thread_id\": \"string\",\n \"sender\": \"string\",\n \"subject\": \"string\"\n}",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
},
{
"id": "9f3cb030-5bbb-4203-b473-84e986ab1848",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
480,
-64
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o",
"cachedResultName": "gpt-4o"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "4fcf203d-d777-4aaf-b157-64f7ddea55c5",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
608,
-64
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{...}"
},
"typeVersion": 1.3
},
{
"id": "51db6f62-ddb6-4cb3-b33e-b1431cbe9ba2",
"name": "No Operation, do nothing",
"type": "n8n-nodes-base.noOp",
"position": [
1072,
-96
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a6abcee9-5187-4777-a843-1d7096ac674c",
"name": "Create a task",
"type": "n8n-nodes-base.googleTasks",
"position": [
1072,
-480
],
"parameters": {
"task": "",
"title": "=Invoice from {{ $json.output.sender }} \u2013 ${{ $json.output.amount_due }} due {{ $json.output.due_date }}",
"additionalFields": {}
},
"typeVersion": 1
},
{
"id": "09aa7d30-3328-42ea-a4d5-66944b72d43a",
"name": "Add Label to Email",
"type": "n8n-nodes-base.gmail",
"position": [
1072,
-288
],
"parameters": {
"messageId": "={{ $json.output.email_id }}",
"operation": "addLabels",
"labelNames": [
"Invoice"
]
},
"typeVersion": 2.1
},
{
"id": "7fca02d6-db42-430a-bf26-ef80f84eaee7",
"name": "Mark Email as read",
"type": "n8n-nodes-base.gmail",
"position": [
1296,
-288
],
"parameters": {
"messageId": "={{ $json.id }}",
"operation": "markAsRead"
},
"typeVersion": 2.1
},
{
"id": "e360894f-77e8-49cb-b8ba-e2d271fd521e",
"name": "Get Unread Emails",
"type": "n8n-nodes-base.gmail",
"position": [
224,
-288
],
"parameters": {
"simple": false,
"filters": {
"readStatus": "unread"
},
"options": {},
"operation": "getAll"
},
"typeVersion": 2.1
},
{
"id": "f5674f2a-6875-4b89-94f8-13fb2d2c05fd",
"name": "Check If Email is Invoice",
"type": "n8n-nodes-base.if",
"position": [
848,
-288
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "dc8158a0-29aa-4c7f-9de3-994a5d827331",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.output.is_invoice }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a38b2d77-9ead-436d-ab40-12fcced60f72",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
952,
-608
],
"parameters": {
"color": 5,
"width": 336,
"height": 288,
"content": "### \ud83d\udca1 Customize Task Format \nYou can change the title in this node. For example: `Pay invoice from {{sender}} by {{due_date}}` \nInclude more invoice details in the notes field if needed."
},
"typeVersion": 1
},
{
"id": "2f9a2857-ebe6-4d0f-a583-af4b655e4844",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
0
],
"parameters": {
"width": 304,
"height": 224,
"content": "### \u26a0\ufe0f Setup Required \n- Connect your Gmail account using OAuth2 \n- Add your OpenAI API Key under **API Credentials** \n- Connect your Google Tasks account \n- Create this label in Gmail: **Invoice**"
},
"typeVersion": 1
},
{
"id": "6da66212-1ddb-4822-b660-70e0a94dc0b2",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-416
],
"parameters": {
"color": 5,
"width": 320,
"height": 272,
"content": "### \ud83d\udca1 Schedule Trigger \nThis runs every hour. \nYou can change the interval here depending on how often you want Gmail to be checked."
},
"typeVersion": 1
}
],
"connections": {
"AI Agent": {
"main": [
[
{
"node": "Check If Email is Invoice",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get Unread Emails",
"type": "main",
"index": 0
}
]
]
},
"Get Unread Emails": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Add Label to Email": {
"main": [
[
{
"node": "Mark Email as read",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Check If Email is Invoice": {
"main": [
[
{
"node": "Add Label to Email",
"type": "main",
"index": 0
},
{
"node": "Create a task",
"type": "main",
"index": 0
}
],
[
{
"node": "No Operation, do nothing",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Source: https://n8n.io/workflows/5863/ — 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 n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform
Created by: Peyton Leveillee Last updated: October 2025
SEO Blog Article Generation Workflow. Uses outputParserStructured, httpRequest, agent, lmChatOpenAi. Scheduled trigger; 56 nodes.
This workflow was born out of a very real problem.
This n8n-powered workflow automates the entire lifecycle of real estate lead intake, qualification, routing, assignment, and reporting across multiple channels. It brings WhatsApp inquiries and websit