AutomationFlowsMarketing & Ads › Sync Lead Replies From Google Sheets to Ghl CRM & Create Clickup Follow-up Tasks

Sync Lead Replies From Google Sheets to Ghl CRM & Create Clickup Follow-up Tasks

ByRahul Joshi @rahul08 on n8n.io

Keep your CRM and task system perfectly in sync — automatically. This workflow monitors a Google Sheet for lead reply updates, instantly updates the corresponding contact in GoHighLevel (GHL), and creates a ClickUp follow-up task when a response is detected. It ensures your…

Event trigger★★★★☆ complexity18 nodesGoogle Sheets TriggerHigh LevelClickUpGoogle Sheets
Marketing & Ads Trigger: Event Nodes: 18 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #9411 — we link there as the canonical source.

This workflow follows the Google Sheets → Googlesheetstrigger 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
{
  "id": "UG6m2I5WqfBDRROW",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Reply Status Sync to GHL",
  "tags": [],
  "nodes": [
    {
      "id": "e78a2e67-01a7-4ac5-a8db-0816762c323e",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        1248
      ],
      "parameters": {
        "width": 400,
        "height": 300,
        "content": "## \ud83d\udd04 Auto-Sync Workflow\n\n**Purpose:** Automatically syncs lead reply status from Google Sheets to GoHighLevel (GHL) and creates follow-up tasks.\n\n**Runs:** Every minute\n\n**What happens:**\n1. Monitors Sheet for replies\n2. Updates GHL contact records\n3. Creates ClickUp tasks\n4. Marks sync status in Sheet"
      },
      "typeVersion": 1
    },
    {
      "id": "ee10373f-7df7-4acc-ab0f-96d95659b06b",
      "name": "Monitor Reply Status Changes",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -384,
        880
      ],
      "parameters": {
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hoAwuZ7Dn_VL02zs-064EKK0mOzx0oUlwbkJLZZTUzs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1hoAwuZ7Dn_VL02zs-064EKK0mOzx0oUlwbkJLZZTUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hoAwuZ7Dn_VL02zs-064EKK0mOzx0oUlwbkJLZZTUzs/edit?usp=drivesdk",
          "cachedResultName": "Reply Status Sheet"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ce448037-48d8-4cf6-8a6e-03a4776873dd",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -864,
        752
      ],
      "parameters": {
        "width": 320,
        "height": 424,
        "content": "## \ud83d\udc40 Step 1: Watch for Changes\n\nMonitors Google Sheet every minute for new/updated rows.\n\n**Triggers when:**\n- New row added\n- Existing row updated\n- 'Replied' column changes\n\n**Expected columns:**\n- Name\n- GHL_ID\n- Replied (Yes/No)\n- Email\n\n*Checks: Every 60 seconds*"
      },
      "typeVersion": 1
    },
    {
      "id": "6ca6963e-c9bf-44bd-8fa2-97fbab1373d7",
      "name": "Filter: Only Process Replies",
      "type": "n8n-nodes-base.if",
      "position": [
        -160,
        880
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json[\"Replied\"]}}",
              "value2": "Yes"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "25f544db-9ee8-45a9-bd3d-c1666479fded",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        576
      ],
      "parameters": {
        "width": 300,
        "height": 272,
        "content": "## \ud83d\udd0d Step 2: Filter Leads\n\nChecks if 'Replied' column = 'Yes'\n\n**TRUE path:** Lead replied \u2192 Continue processing\n\n**FALSE path:** No reply \u2192 Stop (do nothing)\n\n*Only processes leads who have responded*"
      },
      "typeVersion": 1
    },
    {
      "id": "d86b26b1-bfef-4909-9098-33643249f7a7",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -848,
        416
      ],
      "parameters": {
        "width": 300,
        "height": 284,
        "content": "## \ud83d\udd00 Split Processing\n\nWorkflow branches into TWO parallel paths:\n\n**Path A (TRUE - Top):**\nUpdates GoHighLevel contact\n\n**Path B (FALSE - Bottom):**\nCreates ClickUp follow-up task\n\n*Both paths run simultaneously*"
      },
      "typeVersion": 1
    },
    {
      "id": "e24a9517-64bf-4316-82f6-0c6f99129806",
      "name": "Update GHL Contact Status",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        64,
        784
      ],
      "parameters": {
        "contactId": "={{ $json.GHL_ID }}",
        "operation": "update",
        "updateFields": {},
        "requestOptions": {}
      },
      "credentials": {
        "highLevelOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "3c403ef6-8691-4b24-ac72-66455e83d5ee",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        432
      ],
      "parameters": {
        "width": 280,
        "height": 336,
        "content": "## \ud83d\udcca Path A: Update GHL\n\nUpdates contact in GoHighLevel CRM.\n\n**Uses:** GHL_ID from sheet\n\n**Updates:**\n- Contact status\n- Custom fields\n- Last activity timestamp\n\n*Keeps GHL database in sync*"
      },
      "typeVersion": 1
    },
    {
      "id": "d3164500-55a1-43d5-94a7-3874e58fa26e",
      "name": "Set GHL Success Status",
      "type": "n8n-nodes-base.set",
      "position": [
        336,
        784
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3e9b0c90-494f-4c17-b7f0-878343c39e77",
              "name": "Next_Step",
              "type": "string",
              "value": "GHL Updated \u2713"
            },
            {
              "id": "b2f8a1c3-5d6e-4f7a-8b9c-0d1e2f3a4b5c",
              "name": "Sync_Timestamp",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "6b812adc-1c9c-4383-a3de-85ed07978236",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        480
      ],
      "parameters": {
        "width": 260,
        "height": 248,
        "content": "## \u270f\ufe0f Mark GHL Complete\n\nAdds tracking fields:\n\n**Next_Step:** \"GHL Updated \u2713\"\n**Sync_Timestamp:** Current date/time\n\n*Prepares data for sheet update*"
      },
      "typeVersion": 1
    },
    {
      "id": "f477df98-457c-4d24-9527-853d4f656362",
      "name": "Create Follow-Up Task",
      "type": "n8n-nodes-base.clickUp",
      "position": [
        64,
        976
      ],
      "parameters": {
        "list": "901611225386",
        "name": "=Follow-up: {{ $json.Name }} replied!",
        "team": "90161261705",
        "space": "90165174252",
        "folderless": true,
        "additionalFields": {
          "priority": 3
        }
      },
      "credentials": {
        "clickUpApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bbc67101-4351-48ba-a2dd-398e7d6f1152",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        1152
      ],
      "parameters": {
        "width": 280,
        "height": 336,
        "content": "## \u2705 Path B: Create Task\n\nCreates ClickUp task for follow-up.\n\n**Task includes:**\n- Lead name\n- Reply notification\n- Contact details\n- GHL ID reference\n- Priority: High\n\n*Ensures timely follow-up*"
      },
      "typeVersion": 1
    },
    {
      "id": "cc263cbd-5074-45b2-842c-b823418684b3",
      "name": "Set ClickUp Success Status",
      "type": "n8n-nodes-base.set",
      "position": [
        336,
        976
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3e9b0c90-494f-4c17-b7f0-878343c39e77",
              "name": "Next_Step",
              "type": "string",
              "value": "ClickUp Task Created \u2713"
            },
            {
              "id": "c4d5e6f7-8a9b-0c1d-2e3f-4a5b6c7d8e9f",
              "name": "Sync_Timestamp",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "4d5fcaef-197c-43b9-973e-d7c22a77dd01",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        1152
      ],
      "parameters": {
        "width": 260,
        "height": 280,
        "content": "## \u270f\ufe0f Mark Task Complete\n\nAdds tracking fields:\n\n**Next_Step:** \"ClickUp Task Created \u2713\"\n**Sync_Timestamp:** Current date/time\n\n*Prepares data for sheet update*"
      },
      "typeVersion": 1
    },
    {
      "id": "78d9431a-a0f0-471c-8faf-553cbb027f78",
      "name": "Merge Both Paths",
      "type": "n8n-nodes-base.merge",
      "position": [
        656,
        880
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "5278ddb8-86be-448c-a457-4f299247dbb7",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        528
      ],
      "parameters": {
        "width": 280,
        "height": 288,
        "content": "## \ud83d\udd17 Step 3: Merge Results\n\nCombines data from both paths:\n- GHL update status\n- ClickUp task status\n- Timestamps\n\n**Result:** Single data stream with all updates\n\n*Ready for final sheet update*"
      },
      "typeVersion": 1
    },
    {
      "id": "b7d68642-c6c0-4d52-8ced-6132efa52aab",
      "name": "Update Sheet - Log Sync Status",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        944,
        880
      ],
      "parameters": {
        "options": {},
        "fieldsUi": {
          "values": [
            {
              "column": "Next_Step",
              "fieldValue": "={{ $json.Next_Step }}"
            },
            {
              "column": "Sync_Timestamp",
              "fieldValue": "={{ $json.Sync_Timestamp }}"
            },
            {
              "column": "Sync_Status",
              "fieldValue": "Completed"
            }
          ]
        },
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 595839936,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hoAwuZ7Dn_VL02zs-064EKK0mOzx0oUlwbkJLZZTUzs/edit#gid=595839936",
          "cachedResultName": "Sheet2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1hoAwuZ7Dn_VL02zs-064EKK0mOzx0oUlwbkJLZZTUzs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hoAwuZ7Dn_VL02zs-064EKK0mOzx0oUlwbkJLZZTUzs/edit?usp=drivesdk",
          "cachedResultName": "Reply Status Sheet"
        },
        "valueToMatchOn": "={{ $json.GHL_ID }}",
        "columnToMatchOn": "GHL_ID"
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "9cb0b3aa-8478-472b-b399-e20eafc3411e",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        1088
      ],
      "parameters": {
        "width": 300,
        "height": 376,
        "content": "## \ud83d\udcdd Step 4: Update Sheet\n\nWrites sync results to Sheet2.\n\n**Matches by:** GHL_ID\n\n**Updates columns:**\n- Next_Step (action taken)\n- Sync_Timestamp (when)\n- Sync_Status (\"Completed\")\n\n**Purpose:** Audit trail & prevents duplicate processing\n\n*Workflow complete! \u2728*"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8acccf7e-7fba-453e-a6a2-2254b4a28527",
  "connections": {
    "Merge Both Paths": {
      "main": [
        [
          {
            "node": "Update Sheet - Log Sync Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Follow-Up Task": {
      "main": [
        [
          {
            "node": "Set ClickUp Success Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set GHL Success Status": {
      "main": [
        [
          {
            "node": "Merge Both Paths",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update GHL Contact Status": {
      "main": [
        [
          {
            "node": "Set GHL Success Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set ClickUp Success Status": {
      "main": [
        [
          {
            "node": "Merge Both Paths",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Filter: Only Process Replies": {
      "main": [
        [
          {
            "node": "Update GHL Contact Status",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Follow-Up Task",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Monitor Reply Status Changes": {
      "main": [
        [
          {
            "node": "Filter: Only Process Replies",
            "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.

Pro

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

About this workflow

Keep your CRM and task system perfectly in sync — automatically. This workflow monitors a Google Sheet for lead reply updates, instantly updates the corresponding contact in GoHighLevel (GHL), and creates a ClickUp follow-up task when a response is detected. It ensures your…

Source: https://n8n.io/workflows/9411/ — original creator credit. Request a take-down →

More Marketing & Ads workflows → · Browse all categories →

Related workflows

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

Marketing & Ads

This workflow automates sales contact follow-ups and engagement tracking by integrating HighLevel CRM, Gmail, Slack, and Google Sheets. It fetches all contacts from HighLevel, filters inactive contact

High Level, Google Sheets, Gmail +1
Marketing & Ads

This template finds businesses on Google Maps → writes to Google Sheets → enriches + verifies email contact so your outreach stays clean and deliverable. It includes Sticky Notes** to explain the flow

HTTP Request, Google Sheets, @Verificaremails/N8N Nodes Verificaremails +1
Marketing & Ads

Description:

Google Sheets Trigger, Google Sheets, HTTP Request
Marketing & Ads

Description:

Google Sheets Trigger, Google Sheets, HTTP Request
Marketing & Ads

Discover which marketing channels actually convert with this n8n automation template. The workflow fetches all opportunities from HighLevel (GHL), filters for “Closed Won” deals, computes lead-to-sale

Google Sheets, Slack, High Level