AutomationFlowsEmail & Gmail › Email Reply Tracker and Automated Follow-up System

Email Reply Tracker and Automated Follow-up System

Email Reply Tracker and Automated Follow-Up System. Uses googleSheets, gmail. Scheduled trigger; 8 nodes.

Cron / scheduled trigger★★★★☆ complexity8 nodesGoogle SheetsGmail
Email & Gmail Trigger: Cron / scheduled Nodes: 8 Complexity: ★★★★☆ Added:

This workflow follows the Gmail → Google Sheets 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": "Email Reply Tracker and Automated Follow-Up System",
  "description": "Runs daily at 9AM. For each emailed lead, checks Gmail for replies using the stored MessageId. If a reply is found, marks the lead as Replied in Google Sheets. If no reply after 3 days, sends an automated follow-up email and marks as FollowedUp. Keeps the full outreach pipeline status in sync.",
  "nodes": [
    {
      "id": "067740a5-a7e6-408c-b299-720022be5e6a",
      "name": "Every Day at 9 AM",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        240,
        384
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      }
    },
    {
      "id": "4f3d3673-055f-48a9-aed3-336678e4e45c",
      "name": "Read Emailed Leads",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        464,
        384
      ],
      "parameters": {
        "documentId": {
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        },
        "sheetName": {
          "mode": "name",
          "value": "Sheet1"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "id": "e6c34eb8-00f1-4d86-a407-486da659df20",
      "name": "Process Each Lead",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        688,
        384
      ],
      "parameters": {}
    },
    {
      "id": "109717b7-6fe4-4e16-9532-91bb07f886bd",
      "name": "Search for Reply",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.2,
      "position": [
        912,
        208
      ],
      "parameters": {
        "operation": "getAll",
        "limit": 1,
        "filters": {
          "receivedAfter": "={{ $json.EmailedAt }}",
          "sender": "={{ $json.Email }}"
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "id": "f2712950-7db8-4dba-ad34-ac642847ba59",
      "name": "Reply Found or 3 Days?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        1136,
        208
      ],
      "parameters": {
        "conditions": {
          "combinator": "or",
          "conditions": [
            {
              "id": "1",
              "leftValue": "={{ $('Search for Reply').all().length }}",
              "rightValue": 0,
              "operator": {
                "type": "number",
                "operation": "gt"
              }
            },
            {
              "id": "2",
              "leftValue": "={{ $now.diff(DateTime.fromISO($('Read Emailed Leads').item.json.EmailedAt), 'days').days }}",
              "rightValue": 3,
              "operator": {
                "type": "number",
                "operation": "gte"
              }
            }
          ]
        }
      }
    },
    {
      "id": "dbc05c28-1112-404f-8db6-af581d43de77",
      "name": "Update Status to Replied",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        1360,
        208
      ],
      "parameters": {
        "operation": "update",
        "documentId": {
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        },
        "sheetName": {
          "mode": "name",
          "value": "Sheet1"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Status": "Replied"
          },
          "matchingColumns": [
            "Email"
          ]
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "id": "02f8fad8-28ef-4d2a-acab-5ebab154a2fa",
      "name": "Send Follow-Up Email",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.2,
      "position": [
        1360,
        400
      ],
      "parameters": {
        "sendTo": "={{ $('Read Emailed Leads').item.json.Email }}",
        "subject": "Following up on my previous email",
        "message": "<p>Hi {{ $('Read Emailed Leads').item.json.Name }},</p><p>Just wanted to follow up on my previous email. I'd love to connect and explore how we can help {{ $('Read Emailed Leads').item.json.Company }}.</p><p>Would you be open to a quick 15-minute call this week?</p><p>Best regards</p>"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "id": "859f893a-c20c-4f62-96ee-9b8f3cb34d6a",
      "name": "Update Status to FollowedUp",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        1584,
        496
      ],
      "parameters": {
        "operation": "update",
        "documentId": {
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        },
        "sheetName": {
          "mode": "name",
          "value": "Sheet1"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Status": "FollowedUp"
          },
          "matchingColumns": [
            "Email"
          ]
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Every Day at 9 AM": {
      "main": [
        [
          {
            "node": "Read Emailed Leads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Emailed Leads": {
      "main": [
        [
          {
            "node": "Process Each Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Each Lead": {
      "main": [
        [
          {
            "node": "Search for Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search for Reply": {
      "main": [
        [
          {
            "node": "Reply Found or 3 Days?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Reply Found or 3 Days?": {
      "main": [
        [
          {
            "node": "Update Status to Replied",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Follow-Up Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Status to Replied": {
      "main": [
        [
          {
            "node": "Process Each Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Follow-Up Email": {
      "main": [
        [
          {
            "node": "Update Status to FollowedUp",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Status to FollowedUp": {
      "main": [
        [
          {
            "node": "Process Each Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": true
  }
}

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.

Pro

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

About this workflow

Email Reply Tracker and Automated Follow-Up System. Uses googleSheets, gmail. Scheduled trigger; 8 nodes.

Source: https://github.com/sunshinemultiplechoice751/outreach-os/blob/main/workflows/03-reply-tracker.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

Cold Email Automation - Safe Ramp + AI Personalization + Follow-ups. Uses googleSheets, httpRequest, gmail. Scheduled trigger; 34 nodes.

Google Sheets, HTTP Request, Gmail
Email & Gmail

This workflow runs every weekday morning to find HubSpot deals with stale proposal activity, pulls the associated contact email, enforces opt-out and follow-up limits using Google Sheets, sends a valu

HubSpot, Google Sheets, Slack +1
Email & Gmail

This n8n workflow template, "Email Outreach Automation," is designed to help you set up an automated email outreach system using tools you might already be familiar with: Google Sheets and Google Docs

Google Sheets, Google Docs, Gmail
Email & Gmail

Chasing vendors for overdue Purchase Orders (POs) is a manual, repetitive task that eats up hours of procurement time. This workflow automates that entire process—intelligently.

Google Sheets, Gmail
Email & Gmail

This workflow runs daily to read estimates from Google Sheets, identify stale items that need a follow-up, generate a personalized email draft with Anthropic Claude, save it as a Gmail draft, and upda

Google Sheets, HTTP Request, Gmail