GOHIGHLEVEL ANSWERS & PROMPTS: PLAYBOOK T04 · WEBHOOK CONCURRENCY & LEAD CAPTURE
AUTHOR: DANIEL HALLMAN
KEYWORD: ROW OVERWRITE
PLAYBOOK T04 · Webhook Concurrency & Lead Capture KEYWORD: ROW OVERWRITE

How Do You Stop Concurrent n8n Lead Webhooks From Overwriting Google Sheets Rows?

Answer: When two form submissions hit an n8n workflow within the same second, default row counting calculates the same next row number and overwrites one lead while reporting both runs green. Enable Options > Use Append in the Google Sheets node, match subsequent row updates on a unique execution or contact ID instead of a second-level timestamp, enable Retry On Fail for AI 429 errors, or write leads to GoHighLevel Contacts first where email and phone deduplication is atomic.

STEP-BY-STEP INSTRUCTIONS + ANNOTATED GHL SCREENSHOTS

Steps in GoHighLevel

  1. STEP 1
    In Automation > Workflows, capture the form submission and create or update the contact in GoHighLevel first (or assign {{$execution.id}} in n8n) so every submission gets a unique ID before touching Google Sheets.
    REAL GHL SCREEN · AUTOMATION > WORKFLOW BUILDER CANVAS ANNOTATED GHL SCREENSHOT
    Annotated GoHighLevel Workflow Builder canvas screenshot showing If/Else condition branch, priority routing steps, and Builder/Settings/Execution logs tabs
    1Add If/Else Condition & Tag Guard 2Chain Priority & Wait Steps 3Switch to Settings or Execution Logs
  2. STEP 2
    In Contacts > Smart Lists (and your Google Sheets node Options > Use Append), keep rows below your sheet table completely blank so values.append expands the table boundary cleanly, and match any follow-up score update on the unique contact_id or execution_id column rather than Timestamp.
    REAL GHL SCREEN · CONTACTS > SMART LISTS & BULK ACTIONS ANNOTATED GHL SCREENSHOT
    Annotated GoHighLevel Contacts Smart Lists screenshot showing Smart Lists/Bulk Actions tabs, Filters button, and Launch AI Campaign or Import List actions
    1Open Contacts > Smart Lists & Bulk Actions 2Click Filters to Segment by Tag or Activity 3Launch AI Campaign or Import List
  3. STEP 3
    In Automation > Workflows > Execution Logs, turn on Retry On Fail (3 tries with 2000 ms wait) on your AI scoring step so a temporary 429 rate limit never leaves a lead unscored.
    REAL GHL SCREEN · WORKFLOW > EXECUTION LOGS ANNOTATED GHL SCREENSHOT
    Annotated GoHighLevel Workflow Execution Logs screenshot showing Execution logs tab, All actions and All statuses filters, and populated contact run rows
    1Open Execution Logs Tab 2Filter by Action Type or Status 3Search Contact to Trace Runs
MODE: AGENT PROMPT
PASTE INTO CLAUDE CODE, CURSOR, CHATGPT, OR GOHIGHLEVEL ASK AI AGENT PROMPT
Prevent concurrent webhook row overwrites for sub-account <YOUR_LOCATION_ID>:
1. In Automation > Workflows, capture inbound form submissions and deduplicate on email/phone to issue a unique contact.id before syncing to external sheets.
2. In the Google Sheets integration or n8n node, enable Options > Use Append, keep cells below any formatted Table empty, and key row updates on contact_id or execution_id instead of Timestamp.
3. Enable Retry On Fail (3 attempts, 2000ms interval) on downstream AI scoring steps and verify completion in Workflow Execution Logs.
Cause
  • Parallel webhook executions that count existing rows before writing calculate the same target row when two leads submit within a second of each other, silently overwriting the first lead without firing an error workflow.
  • Even after turning on Use Append, updating that row later by matching on a Timestamp column mixes up leads that arrived in the same second, and any formatted Google Sheets Table with stray notes below it can push appended rows outside the table range.
GoHighLevel Configuration
  • Turn on Use Append with clean rows below any Google Sheets Table, generate a unique submission key (execution_id or GoHighLevel contact_id) before appending so post-scoring updates never match on a timestamp
  • and enable node retry backoff for AI 429 rate limits.
MENU PATH REFERENCE

GoHighLevel Menu Paths

Step Menu Path in GHL Action
Step 1 Automation > Workflows Capture the form submission and create or update the contact in GoHighLevel first (or assign {{$execution.id}} in n8n) so every submission gets a unique ID before touching Google Sheets.
Step 2 Contacts > Smart Lists In Contacts > Smart Lists (and your Google Sheets node Options > Use Append), keep rows below your sheet table completely blank so values.append expands the table boundary cleanly, and match any follow-up score update on the unique contact_id or execution_id column rather than Timestamp.
Step 3 Automation > Workflows > Execution Logs Turn on Retry On Fail (3 tries with 2000 ms wait) on your AI scoring step so a temporary 429 rate limit never leaves a lead unscored.
3-step diagram showing Use Append for native API row insertion, Unique Key matching updates on execution ID, and Retry 429s with node retry backoff.
VISUAL PLAYBOOK · PLAYBOOK T04 (WEBHOOK CONCURRENCY & LEAD CAPTURE) Back to Annotated GHL Screenshots ↑
DEFAULT SETUP VS. AUTOMATED WORKFLOW

Operational Comparison

Speed to Lead & Callback Safety
Default 0s Checkbox: Collides with Rep
45s Guard Workflow: Zero Collision
Caller Reply & Booking Rate
Generic 'We Missed You' SMS: 12%
Question-First Workflow SMS: 64%

Related Questions

BUILD FASTER IN GOHIGHLEVEL · FREE TRIAL BONUSES + MCP SERVER

Build this directly inside your GoHighLevel sub-account

Connect Claude Code, Cursor, or OpenAI Codex to our ghl-tools MCP Server & Rust CLI to build workflows, forms, and funnels from your editor, or start your GoHighLevel plan through our partner link to unlock $612+ in ready-to-import kits (including GHL Webhook Concurrency & Lead Sync Pack) and weekly live clinics.