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 →
{
"nodes": [
{
"id": "0bacf032-53d6-4ba6-ab71-e01625c49cc4",
"name": "On schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1960,
160
],
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 1
}
]
}
},
"typeVersion": 1.1
},
{
"id": "2e0d9aef-0a60-4506-9c11-c6c2cccb16ea",
"name": "Derive last request time",
"type": "n8n-nodes-base.dateTime",
"position": [
-1740,
160
],
"parameters": {
"duration": 1,
"timeUnit": "minutes",
"magnitude": "={{ $json.timestamp }}",
"operation": "subtractFromDate",
"outputFieldName": "last_request_time"
},
"typeVersion": 2
},
{
"id": "f726c448-b4c4-4159-8ca5-c94c092127b7",
"name": "Get emails from label and last request time",
"type": "n8n-nodes-base.gmail",
"position": [
-1520,
160
],
"parameters": {
"filters": {
"labelIds": [
"Label_9178764513576607415"
]
},
"operation": "getAll",
"returnAll": true
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "9b86331f-d33b-4266-ba34-bc0491a0da24",
"name": "Create database page",
"type": "n8n-nodes-base.notion",
"position": [
-620,
60
],
"parameters": {
"title": "={{ $('If database page not found').item.json.Subject }}",
"blockUi": {
"blockValues": [
{
"type": "heading_3",
"textContent": "Snippet"
},
{
"textContent": "={{ $('If database page not found').item.json.snippet }}"
},
{
"text": {
"text": [
{
"text": "See more",
"isLink": true,
"textLink": "=https://mail.google.com/mail/u/{{ $json.emailAddress }}/#all/{{ $('If database page not found').item.json.id }}",
"annotationUi": {}
}
]
},
"richText": true
}
]
},
"options": {
"icon": "https://avatars.githubusercontent.com/u/45487711?s=280&v=4",
"iconType": "file"
},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "list",
"value": "e606a7c1-e93d-47fd-8b8d-8000cd6e7522",
"cachedResultUrl": "https://www.notion.so/e606a7c1e93d47fd8b8d8000cd6e7522",
"cachedResultName": "Gmail"
},
"propertiesUi": {
"propertyValues": [
{
"key": "Thread ID|rich_text",
"textContent": "={{ $('If database page not found').item.json.id }}"
},
{
"key": "Email thread|url",
"urlValue": "=https://mail.google.com/mail/u/{{ $json.emailAddress }}/#all/{{ $('If database page not found').item.json.id }}"
}
]
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "d7198578-4c83-4f57-8eba-5b5a9b89195c",
"name": "Try get database page",
"type": "n8n-nodes-base.notion",
"position": [
-1360,
220
],
"parameters": {
"filters": {
"conditions": [
{
"key": "Thread ID|rich_text",
"condition": "equals",
"richTextValue": "={{ $json.id }}"
}
]
},
"options": {},
"resource": "databasePage",
"operation": "getAll",
"returnAll": true,
"databaseId": {
"__rl": true,
"mode": "list",
"value": "e606a7c1-e93d-47fd-8b8d-8000cd6e7522",
"cachedResultUrl": "https://www.notion.so/e606a7c1e93d47fd8b8d8000cd6e7522",
"cachedResultName": "My Gmail Tasks"
},
"filterType": "manual"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "f8188ab9-9a80-4aa9-b773-73cd90b8dbd3",
"name": "If checked off",
"type": "n8n-nodes-base.if",
"position": [
-1740,
460
],
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json.Complete }}",
"value2": true
}
]
}
},
"typeVersion": 1
},
{
"id": "bfcfeeb1-ad8b-47fb-8a09-b58e7b649a25",
"name": "On updated database page",
"type": "n8n-nodes-base.notionTrigger",
"position": [
-1960,
460
],
"parameters": {
"event": "pagedUpdatedInDatabase",
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"databaseId": {
"__rl": true,
"mode": "list",
"value": "e606a7c1-e93d-47fd-8b8d-8000cd6e7522",
"cachedResultUrl": "https://www.notion.so/e606a7c1e93d47fd8b8d8000cd6e7522",
"cachedResultName": "My Gmail Tasks"
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "dc2c59b8-6e0d-46b3-946a-e48b0461c48f",
"name": "Remove label from target email",
"type": "n8n-nodes-base.gmail",
"position": [
-1520,
460
],
"parameters": {
"labelIds": [
"Label_9178764513576607415"
],
"messageId": "={{ $json['Thread ID'] }}",
"operation": "removeLabels"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "0f693c2f-ce89-4a2f-a85f-9230b7bcb94d",
"name": "Not yet checked off, do nothing",
"type": "n8n-nodes-base.noOp",
"position": [
-1520,
660
],
"parameters": {},
"typeVersion": 1
},
{
"id": "bf792470-fc0a-45a2-b655-df5c977faa97",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
-1220,
100
],
"parameters": {
"mode": "combine",
"options": {},
"joinMode": "enrichInput1",
"mergeByFields": {
"values": [
{
"field1": "id",
"field2": "property_thread_id"
}
]
}
},
"typeVersion": 2.1
},
{
"id": "f910c34c-4c3d-481f-8223-a8aae710dbbd",
"name": "If found, do nothing",
"type": "n8n-nodes-base.noOp",
"position": [
-840,
260
],
"parameters": {},
"typeVersion": 1
},
{
"id": "7086cd15-9f2e-40e4-be3b-47d117dde670",
"name": "If database page not found",
"type": "n8n-nodes-base.if",
"position": [
-1060,
160
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.property_thread_id }}",
"operation": "isEmpty"
}
]
}
},
"typeVersion": 1
},
{
"id": "86ce380c-0810-4edb-94e4-fb67b0ca422c",
"name": "Find my email address",
"type": "n8n-nodes-base.httpRequest",
"position": [
-840,
60
],
"parameters": {
"url": "https://gmail.googleapis.com/gmail/v1/users/me/profile",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "gmailOAuth2"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 4.1
},
{
"id": "f576f785-49e4-4ed2-b83e-400b001b6c3a",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2540,
100
],
"parameters": {
"width": 501.0810810810809,
"height": 545.405405405404,
"content": "## Send labeled email to a Notion database\nThis workflow sends the contents of an email to a Notion database. The email must be labeled with a specific label for the workflow to trigger. The email subject will be the title of the Notion page, and a snippet of the email body will be the content of the Notion page. The email link will be added to the Notion page as a property.\n\n### How it works\nOn scheduled intervals, find all emails with a specific label. For each email, check if the email already exists in the Notion database. If it does not exist, create a new page in the Notion database, otherwise do nothing. When the task in the Notion database is checked off, the label will be removed from the email.\n\n### Setup\nThis workflow requires that you set up a Notion database or use an existing one with at least the following fields:\n- Title (title)\n- Thread ID (text)\n- Email thread (URL)\n\n\nAdditionally, create a label that will be used to trigger the workflow in Gmail. In this workflow, the label is called \"Notion\"."
},
"typeVersion": 1
}
],
"connections": {
"Merge": {
"main": [
[
{
"node": "If database page not found",
"type": "main",
"index": 0
}
]
]
},
"On schedule": {
"main": [
[
{
"node": "Derive last request time",
"type": "main",
"index": 0
}
]
]
},
"If checked off": {
"main": [
[
{
"node": "Remove label from target email",
"type": "main",
"index": 0
}
],
[
{
"node": "Not yet checked off, do nothing",
"type": "main",
"index": 0
}
]
]
},
"Find my email address": {
"main": [
[
{
"node": "Create database page",
"type": "main",
"index": 0
}
]
]
},
"Try get database page": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Derive last request time": {
"main": [
[
{
"node": "Get emails from label and last request time",
"type": "main",
"index": 0
}
]
]
},
"On updated database page": {
"main": [
[
{
"node": "If checked off",
"type": "main",
"index": 0
}
]
]
},
"If database page not found": {
"main": [
[
{
"node": "Find my email address",
"type": "main",
"index": 0
}
],
[
{
"node": "If found, do nothing",
"type": "main",
"index": 0
}
]
]
},
"Get emails from label and last request time": {
"main": [
[
{
"node": "Try get database page",
"type": "main",
"index": 0
},
{
"node": "Merge",
"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.
gmailOAuth2notionApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow automates the transfer of labelled emails from Gmail into a Notion database, saving you hours of manual data entry by turning incoming messages into structured records with details like sender, subject, and content. It's ideal for teams managing customer support tickets, project updates, or lead tracking, where emails need organised storage for easy searching and collaboration. The key step involves fetching emails with a specific label since the last run, then creating or updating corresponding Notion pages, ensuring seamless integration between your email inbox and database.
Use this workflow when you receive high volumes of labelled emails that require logging in Notion for reporting or follow-up, such as daily sales inquiries or feedback forms. Avoid it for real-time processing needs, as the scheduled trigger processes in batches rather than instantly; opt for a webhook-based alternative if immediacy is crucial. Common variations include adding custom fields to the Notion page for attachments or filtering emails by additional criteria like sender domain.
About this workflow
Send Labeled Email To A Notion Database. Uses scheduleTrigger, dateTime, gmail, notion. Scheduled trigger; 14 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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 sends the contents of an email to a Notion database. The email must be labeled with a specific label for the workflow to trigger. The email subject will be the title of the Notion page,
Streamline your Net Promoter Score (NPS) survey process by automating survey delivery, response tracking, and structured data storage. This workflow integrates GoHighLevel, Gmail, and Notion to ensure
YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.
14310 Send Overdue Invoice Payment Reminders With Ifirma Gmail Postgrid And Slack. Uses httpRequest, stopAndError, slack, gmail. Scheduled trigger; 53 nodes.
Addendo — Blog Automatico Don Jacinto Nahual. Uses httpRequest, redis, github, gmail. Scheduled trigger; 51 nodes.