Automatic follow-up when a lead doesn't reply

If someone hasn't replied 3 days after your email, send a polite follow-up automatically.

Medium Saves ~5 hours/month Sales & CRMBy Flowngn team

Works with n8n · Make · Zapier

How it works

Trigger: Schedule — weekdays at 10:00
  1. Read your Outreach sheet (email, name, subject, sent_at, followed_up).
  2. Keep people emailed more than 3 days ago who haven't had a follow-up.
  3. Check Gmail for a reply from them in the last 5 days.
  4. If there's no reply, send a short follow-up and mark the row as followed up.

Diagram

truetrueWeekdays 10:00Schedule TriggerGRead outreach listGoogle Sheets⑂Due for follow-up?IfGCheck for a replyGmail⑂No reply yet?IfGSend follow-upGmailGMark followed upGoogle Sheets
Trigger App Logic

Build it

Pick your tool — same automation, step by step.

Copy and paste straight into an n8n canvas (Ctrl+V), or download and use Import from File. Then connect your own credentials and replace every YOUR_… placeholder.

Workflow JSON
Show code (277 lines)
{
  "name": "Automatic follow-up when a lead doesn't reply (Flowngn)",
  "nodes": [
    {
      "parameters": {
        "content": "## Automatic follow-up when a lead doesn't reply\nIf someone hasn't replied 3 days after your email, send a polite follow-up automatically.\n\n**Setup**\n1. Open each node and connect your own credentials.\n2. Replace every YOUR_… placeholder.\n3. Test once, then activate.\n\nFree template from Flowngn",
        "height": 260,
        "width": 340
      },
      "id": "34314253-a934-4153-ae4e-f6e12969f9cb",
      "name": "Setup notes",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -420,
        -60
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 10 * * 1-5"
            }
          ]
        }
      },
      "id": "34314253-a934-4153-ae4e-f6e12969f9cb",
      "name": "Weekdays 10:00",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "operation": "read",
        "documentId": {
          "__rl": true,
          "value": "YOUR_SPREADSHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "Outreach",
          "mode": "name"
        },
        "options": {}
      },
      "id": "34314253-a934-4153-ae4e-f6e12969f9cb",
      "name": "Read outreach list",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        300,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "c1",
              "leftValue": "={{ $json.followed_up !== 'yes' && $json.sent_at && DateTime.fromISO($json.sent_at) < $now.minus({ days: 3 }) }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "34314253-a934-4153-ae4e-f6e12969f9cb",
      "name": "Due for follow-up?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        600,
        0
      ]
    },
    {
      "parameters": {
        "operation": "getAll",
        "limit": 1,
        "filters": {
          "q": "=from:{{ $json.email }} newer_than:5d"
        }
      },
      "id": "34314253-a934-4153-ae4e-f6e12969f9cb",
      "name": "Check for a reply",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        900,
        0
      ],
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "c1",
              "leftValue": "={{ $json.id }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notExists",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "34314253-a934-4153-ae4e-f6e12969f9cb",
      "name": "No reply yet?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1200,
        0
      ]
    },
    {
      "parameters": {
        "sendTo": "={{ $('Due for follow-up?').item.json.email }}",
        "subject": "=Re: {{ $('Due for follow-up?').item.json.subject }}",
        "emailType": "text",
        "message": "=Hi {{ $('Due for follow-up?').item.json.name }},\n\nJust floating this to the top of your inbox — happy to answer any questions, or I'll leave you be if the timing isn't right.\n\nBest,\nYOUR_NAME",
        "options": {
          "appendAttribution": false
        }
      },
      "id": "34314253-a934-4153-ae4e-f6e12969f9cb",
      "name": "Send follow-up",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        1500,
        0
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "YOUR_SPREADSHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "Outreach",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "email": "={{ $('Due for follow-up?').item.json.email }}",
            "followed_up": "yes"
          },
          "matchingColumns": [
            "email"
          ]
        },
        "options": {}
      },
      "id": "34314253-a934-4153-ae4e-f6e12969f9cb",
      "name": "Mark followed up",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        1800,
        0
      ]
    }
  ],
  "connections": {
    "Weekdays 10:00": {
      "main": [
        [
          {
            "node": "Read outreach list",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read outreach list": {
      "main": [
        [
          {
            "node": "Due for follow-up?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Due for follow-up?": {
      "main": [
        [
          {
            "node": "Check for a reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check for a reply": {
      "main": [
        [
          {
            "node": "No reply yet?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No reply yet?": {
      "main": [
        [
          {
            "node": "Send follow-up",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send follow-up": {
      "main": [
        [
          {
            "node": "Mark followed up",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "tags": []
}

Open in the playground to edit →

Tips

  • Only one automatic follow-up — after that, a personal message works better.

Related flows