AutomationFlowsEmail & Gmail › Gmail Workflow

Gmail Workflow

Gmail Workflow. Uses gmail, hubspot, stopAndError. Scheduled trigger; 9 nodes.

Cron / scheduled trigger★★★☆☆ complexity9 nodesGmailHubSpotStop And Error
Email & Gmail Trigger: Cron / scheduled Nodes: 9 Complexity: ★★★☆☆ Added:

This workflow follows the Gmail → HubSpot 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
{
  "meta": {
    "versionId": "1.0.0",
    "createdAt": "2025-09-29T07:07:51.860751",
    "updatedAt": "2025-09-29T07:07:51.860768",
    "owner": "n8n-user",
    "license": "MIT",
    "category": "automation",
    "status": "active",
    "priority": "high",
    "environment": "production"
  },
  "nodes": [
    {
      "id": "99d9377f-263b-4deb-8450-6f9ca17d77c7",
      "name": "Send outreach email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1420,
        320
      ],
      "parameters": {
        "sendTo": "={{ $json.properties.email }}",
        "message": "={{ $json.html }}",
        "options": {
          "senderName": "Mutasem from n8n",
          "appendAttribution": false
        },
        "subject": "={{ $json.subject }}"
      },
      "typeVersion": 2.1,
      "notes": "This gmail node performs automated tasks as part of the workflow."
    },
    {
      "id": "aa2d7d84-66e1-4df3-9244-9a9182cd2eb7",
      "name": "Get uncontacted HubSpot contacts",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        960,
        540
      ],
      "parameters": {
        "operation": "search",
        "authentication": "{{ $credentials.oAuth2 }}",
        "filterGroupsUi": {
          "filterGroupsValues": [
            {
              "filtersUi": {
                "filterValues": [
                  {
                    "operator": "NOT_HAS_PROPERTY",
                    "propertyName": "notes_last_contacted|datetime"
                  }
                ]
              }
            }
          ]
        },
        "additionalFields": {}
      },
      "typeVersion": 2,
      "notes": "This hubspot node performs automated tasks as part of the workflow."
    },
    {
      "id": "cecf3de5-43d8-4d63-a557-adbd1d7d0e81",
      "name": "Every day at 9 am",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        460,
        540
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.1,
      "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."
    },
    {
      "id": "faa91fac-7a22-440d-8575-a9f6ef858641",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        820,
        240
      ],
      "parameters": {
        "width": 348.2877732355713,
        "height": 526.4585335073351,
        "content": "## Search for all contacts that last contact date for is unknown\n\n1. Setup Oauth2 creds using n8n docs\n{{ $env.WEBHOOK_URL }}\n\n### Be careful with scopes. Scopes must be exactly as defined in the n8n docs"
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "edf7e39d-efc7-405c-a610-0b098f86de07",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1380,
        560
      ],
      "parameters": {
        "color": 3,
        "width": 289.74216745960825,
        "height": 402.1775107197669,
        "content": "## Record outreach in Hubspot\n\nOnce outreach is added, last contact date is updated and won't be contacted again\n"
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "07dc70c8-bf11-4dbd-9f99-1dad8d233e70",
      "name": "Set keys",
      "type": "n8n-nodes-base.set",
      "position": [
        1200,
        540
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "f3ecc873-2d60-4f2d-bc40-81f9379c725b",
              "name": "html",
              "type": "string",
              "value": "=Hey {{ $json.properties.firstname }},\n\nI'm with n8n, and we work with organizations like yours to empower you to automate away boring and difficult tasks with ease.\n\nCan you point me towards the right person on your team to chat with about this?\n\nCheers,\n\nMutasem"
            },
            {
              "id": "9f4f5b68-984b-415e-a110-a35ded22dd41",
              "name": "subject",
              "type": "string",
              "value": "Why n8n?"
            },
            {
              "id": "5362aa67-f3fa-4a6e-b6e8-4c50cc7a3192",
              "name": "to",
              "type": "string",
              "value": "={{ $json.properties.email }}"
            },
            {
              "id": "5b11e503-868d-4fca-bb44-59bb44d597a8",
              "name": "id",
              "type": "string",
              "value": "={{ $json.id }}"
            }
          ]
        }
      },
      "typeVersion": 3.3,
      "notes": "This set node performs automated tasks as part of the workflow."
    },
    {
      "id": "506b5b31-8aec-4f74-b194-474c9b09c3f1",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        240
      ],
      "parameters": {
        "color": 5,
        "width": 407.25356360335365,
        "height": 242.51175804432177,
        "content": "## Send outreach/cold email using Gmail to new Hubspot contacts\n\nThis workflow uses Gmail to send outreach emails to Hubspot contacts that have yet to contacted (usually unknown contacts), and records the engagement in Hubspot. "
      },
      "typeVersion": 1,
      "notes": "This stickyNote node performs automated tasks as part of the workflow."
    },
    {
      "id": "89afc291-e706-4930-bee7-114d556b4c59",
      "name": "Record engagement in HubSpot",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        1460,
        760
      ],
      "parameters": {
        "type": "email",
        "metadata": {
          "html": "={{ $json.html }}",
          "subject": "={{ $json.subject }}",
          "toEmail": [
            "={{ $json.to }}"
          ],
          "firstName": "Mutasem",
          "fromEmail": "mutasem@n8n.io"
        },
        "resource": "engagement",
        "authentication": "{{ $credentials.oAuth2 }}",
        "additionalFields": {
          "associations": {
            "contactIds": "={{ $json.id }}"
          }
        }
      },
      "typeVersion": 2,
      "notes": "This hubspot node performs automated tasks as part of the workflow."
    },
    {
      "id": "error-5e7c498a",
      "name": "Error Handler",
      "type": "n8n-nodes-base.stopAndError",
      "typeVersion": 1,
      "position": [
        1000,
        400
      ],
      "parameters": {
        "message": "Workflow execution error",
        "options": {}
      }
    }
  ],
  "connections": {},
  "name": "Gmail Workflow",
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": null,
    "timezone": "UTC",
    "executionTimeout": 3600,
    "maxExecutions": 1000,
    "retryOnFail": true,
    "retryCount": 3,
    "retryDelay": 1000
  },
  "description": "Automated workflow: Gmail Workflow. This workflow integrates 5 different services: stickyNote, hubspot, scheduleTrigger, set, gmail. It contains 8 nodes and follows best practices for error handling and security.",
  "notes": "Excellent quality workflow: Gmail Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation.",
  "id": "wf9bc90a975367"
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Gmail Workflow. Uses gmail, hubspot, stopAndError. Scheduled trigger; 9 nodes.

Source: https://github.com/basictechorg/n8n-productivity/blob/main/workflows/email-automation/0417_Schedule_Gmail_Send_Scheduled.json — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

Cron Workflow. Uses hubspot, mailchimp, stopAndError. Scheduled trigger; 14 nodes.

HubSpot, Mailchimp, Stop And Error
Email & Gmail

Schedule Http. Uses scheduleTrigger, stickyNote, gmail, hubspot. Scheduled trigger; 12 nodes.

Gmail, HubSpot, HTTP Request
Email & Gmail

My workflow 4. Uses rssFeedRead, gmail, todoist, stopAndError. Scheduled trigger; 8 nodes.

RSS Feed Read, Gmail, Todoist +1
Email & Gmail

Filter Workflow. Uses googleSheets, gmail, stopAndError. Scheduled trigger; 13 nodes.

Google Sheets, Gmail, Stop And Error
Email & Gmail

Email Summary Agent. Uses stickyNote, scheduleTrigger, gmail, noOp. Scheduled trigger; 10 nodes.

Gmail, Stop And Error