AutomationFlowsEmail & Gmail › Gmailtrigger Workflow

Gmailtrigger Workflow

Gmailtrigger Workflow. Uses gmailTrigger, gmail, splitOut, noOp. Event-driven trigger; 20 nodes.

Event trigger★★★★☆ complexity20 nodesGmail TriggerGmailStop And Error
Email & Gmail Trigger: Event Nodes: 20 Complexity: ★★★★☆

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
{
  "nodes": [
    {
      "id": "8141ffad-df2a-403b-a869-799c036f9733",
      "name": "Gmail trigger",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        -600,
        580
      ],
      "parameters": {
        "simple": false,
        "filters": {},
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "notes": "This gmailTrigger node performs automated tasks as part of the workflow."
    },
    {
      "id": "6d9aa398-e2de-4fd0-b939-2a12d0c9fe14",
      "name": "Get message content",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -340,
        580
      ],
      "parameters": {
        "simple": false,
        "options": {},
        "messageId": "={{ $json.id }}",
        "operation": "get"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1,
      "notes": "This gmail node performs automated tasks as part of the workflow."
    },
    {
      "id": "cd86bc09-8c7f-4c85-9cb3-6dbd42420672",
      "name": "Set label values",
      "type": "n8n-nodes-base.set",
      "position": [
        300,
        580
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "labels",
              "type": "arrayValue",
              "arrayValue": "={{ $json.labels }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2,
      "notes": "This set node performs automated tasks as part of the workflow."
    },
    {
      "id": "329435a6-51d1-416e-9aa9-5fe9a8dce74f",
      "name": "Get all labels",
      "type": "n8n-nodes-base.gmail",
      "position": [
        580,
        460
      ],
      "parameters": {
        "resource": "label",
        "returnAll": true
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1,
      "notes": "This gmail node performs automated tasks as part of the workflow."
    },
    {
      "id": "7ae2dd15-472d-4a4b-b036-f80ebd7e3c28",
      "name": "Split out assigned labels",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        580,
        700
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "labels"
      },
      "typeVersion": 1,
      "notes": "This splitOut node performs automated tasks as part of the workflow."
    },
    {
      "id": "744c7afa-75b1-4b3b-8ccb-e2106c01f387",
      "name": "Merge corresponding labels",
      "type": "n8n-nodes-base.merge",
      "position": [
        860,
        580
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "mergeByFields": {
          "values": [
            {
              "field1": "name",
              "field2": "labels"
            }
          ]
        },
        "outputDataFrom": "input1"
      },
      "typeVersion": 2.1,
      "notes": "This merge node performs automated tasks as part of the workflow."
    },
    {
      "id": "e47424dc-f43e-41a9-b1e5-ab3e08cbf395",
      "name": "Aggregate label IDs",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1120,
        580
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "label_ids",
              "fieldToAggregate": "id"
            }
          ]
        }
      },
      "typeVersion": 1,
      "notes": "This aggregate node performs automated tasks as part of the workflow."
    },
    {
      "id": "22ba8297-8efc-463e-8ae0-385fd94a205f",
      "name": "Add labels to message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1340,
        580
      ],
      "parameters": {
        "labelIds": "={{ $json.label_ids }}",
        "messageId": "={{ $('Gmail trigger').item.json[\"id\"] }}",
        "operation": "addLabels"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1,
      "notes": "This gmail node performs automated tasks as part of the workflow."
    },
    {
      "id": "7ebb1aad-00ad-43fa-9e07-e5f324864a74",
      "name": "Assign labels for message",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -80,
        580
      ],
      "parameters": {
        "prompt": "={{ $json.text }}",
        "messages": {
          "messageValues": [
            {
              "message": "Your task is to categorize the message according to the following labels.\n\nPartnership - email about sponsored content, cooperation etc.\nInquiry - email about products, services.\nNotification - email that doesn't require response. \n\nOne email can have more than one label. Return only label names in JSON format, nothing else. Do not make things up. "
            }
          ]
        }
      },
      "typeVersion": 1.3,
      "notes": "This chainLlm node performs automated tasks as part of the workflow."
    },
    {
      "id": "2f82db6a-422c-4697-a629-cc782d88209d",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1100,
        400
      ],
      "parameters": {
        "color": 4,
        "width": 420.4803040774015,
        "height": 240.57943708322733,
        "content": "## Add AI labels to Gmail messages\nWith this workflow you can automatically set labels for your Gmail message according to its content. \n\nIn this workflow available are 3 labels: \"Partnership\", \"Inquiry\" and \"Notification\". Feel free to adjust labels according to your needs. \n\n**Please remember to set label names both in your Gmail account and workflow.**"
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "4a10fb2b-aebb-4735-bbdb-7f07f1136d95",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1100,
        660
      ],
      "parameters": {
        "width": 421.0932411886662,
        "height": 257.42916378714597,
        "content": "## \u26a0\ufe0f Note\n\n1. Complete video guide for this workflow is available [on my YouTube]({{ $env.WEBHOOK_URL }} \n2. Remember to add your credentials and configure nodes (covered in the video guide).\n3. If you like this workflow, please subscribe to [my YouTube channel]({{ $env.WEBHOOK_URL }} and/or [my newsletter]({{ $env.WEBHOOK_URL }}\n\n**Thank you for your support!**"
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "76e62351-d502-4377-9df2-fe92df00fe03",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -660,
        400
      ],
      "parameters": {
        "width": 238.4602598584674,
        "height": 348.5873725349161,
        "content": "### Gmail Trigger\nReceive data from Gmail about new incoming message. \n\n\u26a0\ufe0f Set polling interval according to your needs."
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "c10702db-211f-4638-bcf0-fbbe18251cb7",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        60,
        780
      ],
      "parameters": {
        "width": 241.53974014153226,
        "height": 319.3323098457962,
        "content": "###\n\n\n\n\n\n\n\n\n\n\n### JSON schema\nEdit JSON schema and label names according to your needs.\n\n\u26a0\ufe0f **Label names in system prompt and JSON schema should be the same.**"
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "cb6e3573-3d4d-4313-a97e-86a017438399",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        420
      ],
      "parameters": {
        "width": 226.14233872620645,
        "height": 347.0476323933831,
        "content": "### Merge labels\nCombine labels retrieved from Gmail account and assigned by AI together."
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "8cfb4341-98e6-4944-b26c-15e39184f468",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1060,
        420
      ],
      "parameters": {
        "width": 452.48413953150185,
        "height": 347.0476323933831,
        "content": "### Aggregarte labels and add to message\nCreate array of label IDs and add to the desired email message in Gmail."
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "bb9766e8-0b72-47f8-9a8e-0b291609e814",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        400
      ],
      "parameters": {
        "width": 238.4602598584674,
        "height": 348.5873725349161,
        "content": "### Get message content\nBased on Gmail message ID retrieve body content of the email and pass it to AI chain."
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "48630cbd-8336-4577-928e-37341f09ef9b",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -140,
        400
      ],
      "parameters": {
        "width": 378.57661273793565,
        "height": 348.5873725349161,
        "content": "### Assign labels\nLet the AI decide which labels suit the best content of the message.\n\n\u26a0\ufe0f **Remember to edit system prompt** - modify label names and instructions according to your needs."
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "60a9d75e-1564-4b1d-b3f2-acc2e3bf2411",
      "name": "JSON Parser",
      "type": "n8n-nodes-base.noOp",
      "position": [
        140,
        800
      ],
      "parameters": {
        "jsonSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"labels\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\",\n \"enum\": [\"Inquiry\", \"Partnership\", \"Notification\"]\n }\n }\n },\n \"required\": [\"labels\"]\n}\n"
      },
      "typeVersion": 1,
      "notes": "This outputParserStructured node performs automated tasks as part of the workflow."
    },
    {
      "id": "2bdf3fed-8a7f-411a-bad4-266bfea5cede",
      "name": "OpenAI Chat",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -120,
        800
      ],
      "parameters": {
        "model": "gpt-4-turbo-preview",
        "options": {
          "temperature": 0,
          "responseFormat": "json_object"
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."
    },
    {
      "id": "error-f8d22ce7",
      "name": "Error Handler",
      "type": "n8n-nodes-base.stopAndError",
      "typeVersion": 1,
      "position": [
        1000,
        400
      ],
      "parameters": {
        "message": "Workflow execution error",
        "options": {}
      }
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": null,
    "timezone": "UTC",
    "executionTimeout": 3600,
    "maxExecutions": 1000,
    "retryOnFail": true,
    "retryCount": 3,
    "retryDelay": 1000
  },
  "connections": {
    "2bdf3fed-8a7f-411a-bad4-266bfea5cede": {
      "main": [
        [
          {
            "node": "error-handler-2bdf3fed-8a7f-411a-bad4-266bfea5cede-73b8bd8b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "name": "Gmailtrigger Workflow",
  "description": "Automated workflow: Gmailtrigger Workflow. This workflow integrates 11 different services: stickyNote, gmailTrigger, splitOut, chainLlm, merge. It contains 20 nodes and follows best practices for error handling and security.",
  "meta": {
    "versionId": "1.0.0",
    "createdAt": "2025-09-29T07:07:42.004155",
    "updatedAt": "2025-09-29T07:07:42.004183",
    "owner": "n8n-user",
    "license": "MIT",
    "category": "automation",
    "status": "active",
    "priority": "high",
    "environment": "production"
  },
  "tags": [
    "automation",
    "n8n",
    "production-ready",
    "excellent",
    "optimized"
  ],
  "notes": "Excellent quality workflow: Gmailtrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."
}

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.

About this workflow

Gmailtrigger Workflow. Uses gmailTrigger, gmail, splitOut, noOp. Event-driven trigger; 20 nodes.

Source: https://github.com/Zie619/n8n-workflows/blob/main/workflows/Aggregate/1324_Aggregate_Gmail_Send_Triggered.json — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →