GOHIGHLEVEL ANSWERS & PROMPTS: PLAYBOOK T22 · WORKFLOWS & AUTOMATION
AUTHOR: DANIEL HALLMAN
KEYWORD: WORKFLOW
PLAYBOOK T22 · Workflows & Automation KEYWORD: WORKFLOW

Why is my GoHighLevel Inbound Webhook not creating or updating contacts?

Short Answer: Fetch a real sample request inside your Inbound Webhook Trigger (never use the 'Test Workflow' button), add a native Format Data -> Format Phone Number (E.164) step first, and map the formatted phone and email into Create/Update Contact.

Fixing GoHighLevel Inbound Webhook Contact Could Not Be Created or Updated Email or Phone Error
VISUAL PLAYBOOK · PLAYBOOK T22 (WORKFLOWS & AUTOMATION) Follow the 3 Simple Steps Below ↓
SIMPLE STEP-BY-STEP INSTRUCTIONS

How to Set This Up in GoHighLevel (Under 2 Minutes)

  1. STEP 1
    Lock a Real Webhook Sample: Open your Inbound Webhook Trigger, click 'Fetch Sample Requests', send one real POST payload to the webhook URL, select that request in the dropdown, and click Save Trigger (do not use the top-right 'Test Workflow' button).
  2. STEP 2
    Format the Phone to E.164 First: Add a native 'Format Data -> Format Phone Number' action as Step 1 of your workflow, select your inbound phone token from 'Inbound Webhook Request', and set the output format to E.164 (+1XXXXXXXXXX).
  3. STEP 3
    Map Cleaned Tokens in Create/Update Contact: Add 'Create/Update Contact' right after Format Data, map Phone to '{{format_data.phone}}' and Email to '{{inboundWebhookRequest.email}}', and publish the workflow.
What Usually Happens

When an external form or webhook sends JSON into a HighLevel Inbound Webhook Trigger, Create/Update Contact fails with 'Contact could not be Created/Updated as no differentiation field value was provided (Email or Phone)' if you clicked 'Test Workflow' (which sends blank tokens), passed an unformatted phone string, or mapped the wrong nested JSON key.

How We Fix It in HighLevel

Lock a real live POST payload inside the Inbound Webhook Trigger settings, run a native Format Data step to normalize the phone number to E.164 (+1XXXXXXXXXX), and map that cleaned output directly into Create/Update Contact right below it.

MODE: AGENT PROMPT
PASTE THIS PROMPT INTO CLAUDE CODE, CURSOR, CHATGPT, OR YOUR GHL ASSISTANT SAFE READ-FIRST WORKFLOW
Fix our GoHighLevel Inbound Webhook workflow that fails with "Contact could not be Created/Updated as no differentiation field value was provided (Email or Phone)":
1. Inspect the Inbound Webhook Trigger payload structure to verify the exact paths for phone and email (e.g. inboundWebhookRequest.phone vs inboundWebhookRequest.body.phone).
2. Insert a native "Format Data — Format Phone Number" action before "Create/Update Contact" to normalize the incoming phone string into E.164 (+1XXXXXXXXXX).
3. Map the formatted phone token and raw email token into the "Create/Update Contact" action and verify deduplication settings match Phone first, then Email.

Similar GoHighLevel Questions & Fixes

RUN THIS IN 30 SECONDS · GHL-TOOLS MCP + OPERATOR COMMUNITY

Want your AI agent to inspect and build this inside GoHighLevel automatically?

Connect Claude Code, Cursor, or OpenAI Codex to our ghl-tools MCP Server & Rust CLI for 30-second sub-account doctor checks, --dry-run previews, and snapshot diffs—or start/upgrade your GoHighLevel plan through our partner link to unlock up to $612+ in implementation kits (including GHL Workflow Recipe Pack ($47 — or Free with Trial)) and our weekly live engineering clinics.