AutomationFlowsAI & RAG › Automatic Invoice Detection & Reminder Creation with Gmail & Google Tasks

Automatic Invoice Detection & Reminder Creation with Gmail & Google Tasks

ByMatt Chong | n8n Creator @mattxchong on n8n.io

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Cron / scheduled trigger★★★★☆ complexityAI-powered13 nodesAgentOpenAI ChatOutput Parser StructuredGoogle TasksGmail
AI & RAG Trigger: Cron / scheduled Nodes: 13 Complexity: ★★★★☆ AI nodes: yes Added:

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 →

Download .json
{
  "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
          }
        ]
      ]
    }
  }
}
Pro

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 →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

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

Agent, OpenAI Chat, Airtable Tool +7
AI & RAG

Created by: Peyton Leveillee Last updated: October 2025

OpenAI Chat, Google Sheets, HTTP Request +5
AI & RAG

SEO Blog Article Generation Workflow. Uses outputParserStructured, httpRequest, agent, lmChatOpenAi. Scheduled trigger; 56 nodes.

Output Parser Structured, HTTP Request, Agent +4
AI & RAG

This workflow was born out of a very real problem.

Output Parser Structured, OpenAI Chat, Memory Buffer Window +11
AI & RAG

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

Gmail, Typeform Trigger, WhatsApp Trigger +8