This workflow corresponds to n8n.io template #7780 — 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": "My workflow",
"nodes": [
{
"id": "7e91ccc0-03e5-4989-8c3f-d3635313f393",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-864,
368
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 2
}
]
}
},
"typeVersion": 1.2
},
{
"id": "eea7bc1f-c4a4-4c2d-bd6f-27f977948e32",
"name": "List old inbox emails",
"type": "n8n-nodes-base.gmail",
"position": [
-640,
368
],
"parameters": {
"simple": false,
"filters": {
"q": "label:inbox older_than:45d",
"labelIds": [
"INBOX"
],
"readStatus": "read"
},
"options": {},
"operation": "getAll",
"returnAll": true
},
"typeVersion": 2.1,
"alwaysOutputData": false
},
{
"id": "d88c4116-55e9-48b8-ae1f-9d89cc39bd99",
"name": "Prep Email for AI",
"type": "n8n-nodes-base.set",
"position": [
-192,
240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5d3c4c5b-5f80-4340-82ca-fb584a1fc953",
"name": "threadId",
"type": "string",
"value": "={{ $json.threadId }}"
},
{
"id": "a33a5a8a-dc7a-4fed-9262-8c6d10434128",
"name": "messageId",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "c982f401-ce58-4d5e-ba30-a13d03971705",
"name": "Subject",
"type": "string",
"value": "={{ $json.subject }}"
},
{
"id": "c18cd58e-407a-48a4-b9e1-5877a1f90df4",
"name": "text",
"type": "string",
"value": "={{ $json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "57e6c6b6-fe9a-49ff-aac6-3687bdb3b236",
"name": "Loop Over Emails",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-416,
368
],
"parameters": {
"options": {},
"batchSize": 50
},
"typeVersion": 3
},
{
"id": "3dab757d-460d-4935-a6bc-10e761072575",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
32,
240
],
"parameters": {
"text": "=You are an assistant classifying Gmail emails. Output JSON only, no prose.\n\nOnly use these inputs:\nthreadId: {{ $json.threadId }}\nmessageId: {{ $json.messageId }}\nsubject: {{ $json.subject }}\ntext: {{ $json.text }}\n\nAssume today's date is {{ $now.toFormat('yyyy-LL-dd') }}.\n\nTasks:\n1) Extract a due date from the text if present, format YYYY-MM-DD. If none, use null.\n2) Decide if the email requires action. Action means at least one of:\n - It is an invoice or bill that expects payment\n - It explicitly requests a reply or a decision\n - It clearly contains a task or meeting to schedule\n3) Set trashable = true if any of these are true:\n - due_date is null\n - due_date is earlier than today\n - requires_action is false\n Otherwise trashable = false.\n\nReturn JSON with this exact structure:\n{\n \"threadId\": \"<string>\",\n \"messageId\": \"<string>\",\n \"requires_action\": true | false,\n \"due_date\": \"YYYY-MM-DD\" | null,\n \"trashable\": true | false,\n \"reason\": \"<short explanation>\"\n}\n",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "54867a18-8d2b-4697-92ed-b01c53cb322c",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
48,
464
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "20193ea2-1b6d-428b-9219-160ffab88242",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
176,
464
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"title\": \"SimpleEmailTriage\",\n \"type\": \"object\",\n \"required\": [\"threadId\", \"messageId\", \"requires_action\", \"due_date\", \"trashable\", \"reason\"],\n \"properties\": {\n \"threadId\": { \"type\": \"string\" },\n \"messageId\": { \"type\": \"string\" },\n \"requires_action\": { \"type\": \"boolean\" },\n \"due_date\": { \"type\": [\"string\", \"null\"], \"pattern\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}$\" },\n \"trashable\": { \"type\": \"boolean\" },\n \"reason\": { \"type\": \"string\" }\n },\n \"additionalProperties\": false\n}\n"
},
"typeVersion": 1.3
},
{
"id": "2495ccbf-8a5b-4cc3-bce3-6d961616dc16",
"name": "Completed",
"type": "n8n-nodes-base.noOp",
"position": [
-192,
48
],
"parameters": {},
"typeVersion": 1
},
{
"id": "e7a26dcc-ded8-4d74-8fff-19942a46c5cc",
"name": "If - Should archived?",
"type": "n8n-nodes-base.if",
"position": [
384,
368
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7426c831-e458-48fe-80ef-5b2fe11c897c",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.output.trashable }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "c9824337-668f-490b-a32c-0e10c6ebe7db",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
0
],
"parameters": {
"color": 5,
"width": 304,
"height": 608,
"content": "### \ud83e\udde0 AI Email Classifier\n\n\u2022 The \"AI Agent\" sends email content to OpenAI with a clear instruction set to classify the email (due date, action needed, trashable).\n\u2022 If \"trashable\" is true, the email can be archived or trashed. "
},
"typeVersion": 1
},
{
"id": "5a40520c-0d16-442f-a9ef-d13ca97d204d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-704,
112
],
"parameters": {
"color": 5,
"height": 416,
"content": "### \ud83d\udce5 Gmail: List Old Emails\n\n\u2022 This Gmail node fetches all emails in the inbox that are read and older than 45 days.\n\u2022 You can modify the search filter to change which emails are targeted (e.g., change older_than:45d to a different duration)."
},
"typeVersion": 1
},
{
"id": "0672da9a-b5bb-4709-ac87-99ddb56632cd",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-944,
112
],
"parameters": {
"color": 5,
"height": 416,
"content": "### \ud83d\udcc6 Schedule the Workflow\n\n\u2022 The \"Schedule Trigger\" by default, it's 2am everyday. \n\u2022 Modify it to your desired interval (e.g., daily, hourly) to control how often the workflow runs."
},
"typeVersion": 1
},
{
"id": "ef9dfef6-9d58-4d49-9bc6-407bd4853b35",
"name": "Archive Email",
"type": "n8n-nodes-base.gmail",
"position": [
608,
448
],
"parameters": {
"labelIds": [
"INBOX"
],
"resource": "thread",
"threadId": "={{ $json.output.threadId }}",
"operation": "removeLabels"
},
"typeVersion": 2.1
}
],
"connections": {
"AI Agent": {
"main": [
[
{
"node": "If - Should archived?",
"type": "main",
"index": 0
}
]
]
},
"Archive Email": {
"main": [
[
{
"node": "Loop Over Emails",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Emails": {
"main": [
[
{
"node": "Completed",
"type": "main",
"index": 0
}
],
[
{
"node": "Prep Email for AI",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "List old inbox emails",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Prep Email for AI": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"If - Should archived?": {
"main": [
[
{
"node": "Archive Email",
"type": "main",
"index": 0
}
],
[
{
"node": "Loop Over Emails",
"type": "main",
"index": 0
}
]
]
},
"List old inbox emails": {
"main": [
[
{
"node": "Loop Over Emails",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is for professionals, entrepreneurs, or anyone overwhelmed by a cluttered Gmail inbox. If you want to automatically archive low-priority emails using AI, this is the perfect hands-free solution.
Source: https://n8n.io/workflows/7780/ — 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