Solution guide · GoHighLevel

GoHighLevel form not working: how to find the cause and fix it

GoHighLevel form not working? Find missing submissions, fix embed codes, Sticky Contact, duplicates, external form tracking, alerts and spam step by step.

GoHighLevel form not working: how to find the cause and fix it — guide thumbnail

Key takeaways

  • Start every GoHighLevel form fix by opening Sites → Forms → your form → Submissions: if the entry is there, the form works and the problem is downstream; if it is not, the problem is on the page.
  • Most “wrong contact” and “contact not created” complaints come from Sticky Contact, which uses a browser cookie, so staff testing in one browser overwrite one record.
  • Duplicate contacts from forms are controlled by Settings → Business Profile → Contact Deduplication Preferences, where Allow Duplicate Contact should be off and Email or Phone set as the primary match.
  • Forms on non-HighLevel websites are only captured if the External Tracking script is installed and the form has a real email field with a name attribute.
  • A form can save perfectly and still look broken because the Form Submitted trigger points at a different form, so check the trigger filter before you rebuild anything.

When a GoHighLevel form is not working, the form itself is rarely broken. Usually the submission arrived and something after it failed: the wrong contact got updated, a duplicate was created, the alert never went out or the workflow listened to a different form. Sometimes it never left the page because the embed code or tracking script is wrong. The fix is to find out which of those happened before you change anything.

In this guide I show you how to check whether a submission reached HighLevel, then give you the fix for each cause: embed codes, Sticky Contact, duplicate contacts, forms on other websites, notifications and workflows, and spam. It is the same order I test lead capture in when I build funnels and landing pages. Menu paths are as of November 2026.

Why a GoHighLevel form looks like it is not working

“The form isn’t working” covers several different failures. Match what you see to the table, then go to that fix.

What you see Most likely cause Go to
Form doesn’t appear on the website Broken or stripped embed code, cache Fix 1
Lead says they submitted, nothing in HighLevel Form not loading, or a non-HighLevel form without tracking Fix 1 or Fix 4
Submission landed on the wrong person Sticky Contact cookie Fix 2
Same lead appears twice Allow Duplicate Contact switched on Fix 3
Submission is there, but no alert or workflow Notification not set, wrong trigger filter Fix 5
Dozens of fake entries No CAPTCHA or phone verification Fix 6

It matters more than it looks. When the Harvard Business Review audited 2,241 US companies by sending them a web lead, only 37% replied within an hour and 23% never replied at all. A lead lost to a broken form is in that last group without you knowing it.

ChartHow fast companies replied to a web lead
  • Within 1 hour37%
  • 1–24 hours16%
  • Over 24 hours24%
  • Never replied23%

Share of 2,241 US companies by response time to a test web lead. A form that silently drops submissions puts you in the last bar.

Source: Harvard Business Review, The Short Life of Online Sales Leads (2011)

InfographicFind the lost leadin five checks
  1. 1Open the Submissions tabDid the entry reach HighLevel?
  2. 2Re-copy the embed codeFrom Integrate, into an HTML block.
  3. 3Test in incognitoRules out the Sticky Contact cookie.
  4. 4Check duplicate settingsOne contact per email or phone.
  5. 5Check the trigger filterForm is: the form you actually use.
Source: HighLevel Support Portalscalewithhunaid.com

Check whether the submission reached HighLevel

This one check splits the problem in half. If the entry is in HighLevel, the form works and the fault is downstream (Fixes 2, 3 and 5). If it isn’t, the fault is on the page (Fixes 1 and 4).

  1. Submit the form yourself from a private or incognito window, using a new email address and phone number you haven’t used before.
  2. In the sub-account go to Sites → Forms, open the form and click the Submissions tab at the top of the builder, as HighLevel’s contact form guide shows. Your test should be at the top.
  3. Open Contacts and search for the test email. HighLevel says a completed form creates a contact record automatically, so it should be there with the details you entered.
  4. Optional but useful: in the form’s Settings tab, switch on Create Conversation on Submission. HighLevel notes this has to be enabled on each form, and it only affects the Inbox, not automation. Submissions then show in Conversations, where you can filter by Last Message Channel Is Form Submission.

Write down what you found. “In Submissions, but no contact” and “not in Submissions at all” have completely different fixes.

Fix 1: the embedded form doesn’t show or doesn’t submit

When a HighLevel form is placed on a website, it is loaded by an embed code. A truncated paste, a page builder that strips scripts or a cached page are the usual culprits.

  1. Open the form and click Integrate, choose Embed Code, then Copy embed code — the steps HighLevel documents.
  2. Check the layout first. HighLevel offers Inline, Popup, Polite Slide-In and Sticky Sidebar. A popup or slide-in waits for its trigger, so it can look “missing” when it’s only waiting. For a normal contact section, choose Inline.
  3. On WordPress, Webflow, Wix or Squarespace, paste the code into a raw HTML / custom code block, not a text block, which often removes the script.
  4. Replace the whole old snippet. Don’t edit it by hand; one missing character in the form ID stops it loading.
  5. If a popup or slide-in is cut off, set a custom modal height in the embed options — HighLevel added it for those three layouts. For an inline form, change the height in the iframe code.
  6. Clear your website and CDN cache, then test in a private window on a phone and a desktop.

Fix 2: the wrong contact was updated, or no new contact appeared

This is the one that confuses people most. The submission is in the Submissions tab, but it was written onto an existing contact, often your own.

The cause is usually Sticky Contact. HighLevel explains that it uses browser cookies to remember the details someone entered and fill them into the next form, survey or calendar. If two or more people submit from the same browser, their information is written to the same contact, and when staff fill in a form for a lead, the latest submission overwrites that record.

  1. Repeat your test in an incognito window. If a new contact now appears, Sticky Contact was the cause.
  2. For forms that staff use (phone enquiries, front-desk intake, tablets at events), open the form, go to Options in the builder and turn Sticky Contact off.
  3. Tell the team to test public forms only in incognito, and never with their own browser that already holds a cookie.
  4. Keep Sticky Contact on public forms if you like the pre-filling, but know it doesn’t fill hidden or custom fields.
  5. Fix the damaged record by hand: open the overwritten contact, restore the right name, email and phone, and create the lead as a new contact.

Fix 3: forms create duplicate contacts (or merge two people)

Whether a submission creates a new contact or updates an existing one is controlled by one setting. HighLevel’s article says Allow Duplicate Contact decides how new submissions from forms, Zapier, Facebook and Instagram Messenger create or merge contacts.

  1. Go to Settings → Business Profile → Contact Deduplication Preferences.
  2. Turn Allow Duplicate Contact off, so each email or phone keeps one record and new submissions update it.
  3. Set the primary match field. I use Email for most service businesses and Phone where leads mostly call or text. Set the other one as secondary.
  4. Make the form ask for the field you match on, and make it required. If you match on email but the form only asks for a phone, every submission looks new.
  5. Merge the duplicates you already have with Manage Duplicates, which HighLevel describes as searching by email, phone or name and letting you choose the master record and the values to keep.

The reverse problem — two family members on one email merged into one contact — is the same setting working as designed. If you genuinely need separate records for a shared email, match on phone instead.

Fix 4: forms on another website aren’t reaching HighLevel

If your site is WordPress, Webflow or anything else, and the form was built there, not in HighLevel, nothing reaches the CRM unless you install HighLevel’s tracking script. HighLevel’s external forms article sets out the rules.

  1. In the sub-account, go to Settings → External Tracking and copy the script. It contains a data-tracking-id attribute; if that is missing, nothing is tracked.
  2. Add the script to every page that has a form, ideally site-wide in the header.
  3. Make sure the form is standard HTML that is present on the page, with a name attribute on each input.
  4. Include an email field. HighLevel needs one to track the submission and create or match the contact, written like <input type="email" name="email">.
  5. Name or label the other inputs to match HighLevel fields (first_name, phone) so they map. Fields that don’t match are kept as submission data, not on the contact.
  6. Submit a test, then look in Sites → Forms → Submissions for an entry labelled external form: {form_name}. If nothing shows, turn on the script’s debug mode and check the browser console.

If the form plugin can’t produce clean HTML, I connect it with a webhook or an n8n, Make or Zapier automation instead. Ad forms are a separate route; see my guide to Facebook leads not syncing to GoHighLevel.

Fix 5: the submission arrived but no alert or workflow ran

Now the form is fine and the follow-up is the problem.

No email alert. Notifications are set inside each form. HighLevel’s notification article describes two options: an email to you when someone fills in the form, and an auto-responder to the person who submitted it.

  1. Open the form and click the notifications icon.
  2. Add every address that should get the alert in the To field.
  3. Set a reply-to of {{contact.email}}, which HighLevel’s changelog supports, so hitting Reply goes to the lead.
  4. To alert the assigned user, use a workflow. A feature request on HighLevel’s ideas board reports that {{user.email}} in the form notification doesn’t send.

No workflow. The usual cause is the trigger filter. HighLevel’s setup is Add filter → Form is → select the form. Duplicate or rebuild a form and the filter still points at the old copy.

  1. Open the workflow and click the Form Submitted trigger.
  2. Re-select the form you’re really using; duplicates often share a name, so check the one in the page.
  3. Save the trigger and make sure the workflow is Published, not Draft.
  4. Submit a new incognito test and check the workflow’s Enrollment History.

If the contact still doesn’t enter, work through my full guide to GoHighLevel workflows not triggering, which covers re-entry, DND and race conditions.

Fix 6: spam submissions are flooding the form

Bots fill unprotected forms, and each fake entry can start a workflow, use an email or SMS credit and pollute your pipeline. HighLevel recommends CAPTCHA, email and phone validation, and limiting SMS permissions by geography.

  1. In the form builder, add the CAPTCHA field (under the custom field types) and place it just above the submit button.
  2. Make email and phone required so half-empty bot entries fail.
  3. For high-value forms, open the Phone field and enable Validate Phone. HighLevel texts a one-time code before the form can be completed, and records the result in a Phone Verified field. The sub-account needs a phone number set up first.
  4. Restrict SMS sending to the countries you serve, so a spam entry with a foreign number can’t trigger an international text.
  5. Review the Submissions tab weekly. If the same pattern of fake names or domains keeps getting through, tighten the form before it starts costing SMS credits or Voice AI minutes.

Mistakes that keep forms losing leads

InfographicForms thatcapture every lead

Loses leads

  • Avoid: Testing in your own browser
  • Avoid: Editing the embed code by hand
  • Avoid: Duplicates switched on
  • Avoid: No email field on site forms
  • Avoid: Trigger still on the old form

Captures them

  • Do: Incognito test with new details
  • Do: Fresh code from Integrate
  • Do: Email or phone as match field
  • Do: Tracking script and email input
  • Do: Filter re-selected and published
Source: HighLevel Support Portalscalewithhunaid.com

The one I see most is testing with your own details in your own browser. Sticky Contact quietly writes the test onto your contact, you see no new lead and conclude the form is broken. Every test should use a fresh email, a fresh phone and an incognito window.

Getting every lead into GoHighLevel

A GoHighLevel form that works end to end needs four things: a clean embed or tracking script on the page, Sticky Contact off wherever staff submit, duplicate matching on a field the form requires, and a notification and workflow pointed at the right form. Run the incognito test above every time you change a page, a form or a workflow.

If you’d rather hand it over, I build and test lead capture as part of funnels and landing pages, and wire the follow-up behind it in a GoHighLevel CRM setup. When the form is fine but the workflow isn’t, start with workflows not triggering.

Hunaid Zia

Hunaid Zia

GoHighLevel Expert, Developer & Automation Specialist

I have built GoHighLevel systems, AI agents and websites for 50+ businesses since 2020, and written this guide from that work. Questions about your own setup? Book a free call.

References

  1. How to Create a Contact Form in HighLevel: Step-by-Step Guide — HighLevel Support Portal
  2. How to Access Form Submissions in Conversations — HighLevel Support Portal
  3. How to Use Embedding Options for Forms: Triggers, Layouts, and Deactivation Settings Explained — HighLevel Support Portal
  4. Custom Modal Height for Embedded Forms, Surveys, and Quizzes — HighLevel Changelog
  5. Sticky Contact in Forms, Surveys, and Calendars — HighLevel Support Portal
  6. Allow Duplicate Contacts (Contact Deduplication Preferences) — HighLevel Support Portal
  7. How to Manage and Merge Duplicate Contacts in HighLevel — HighLevel Support Portal
  8. Capture External Form Submissions Automatically (Tracking External Forms) — HighLevel Support Portal
  9. Workflow Trigger: Form Submitted — HighLevel Support Portal
  10. How To Create Automated Email Notifications for Form and Survey Submissions — HighLevel Support Portal
  11. Extended Support for Custom Values in Form/Survey Email Notifications and Auto Responder — HighLevel Changelog
  12. Email notifications for surveys and forms need to be able to send to assigned user’s email — HighLevel Ideas
  13. How to make my form submissions secure from spammers? — HighLevel Support Portal
  14. How to Setup SMS Verification in Forms and Surveys — HighLevel Support Portal
  15. The Short Life of Online Sales Leads — Harvard Business Review

FAQ

Quick answers.

The questions people ask most about gohighlevel form not working.

Ask me directly

It is usually one of five things: the embed code on the page is broken or out of date, Sticky Contact is writing submissions onto the wrong contact, duplicate settings are merging or splitting records, an external website form is not being tracked, or the follow-up workflow is pointed at a different form. Open the form’s Submissions tab first to see which side of the problem you are on.

Go to Sites → Forms, open the form and click the Submissions tab at the top of the builder. If you switch on Create Conversation on Submission in the form’s Settings tab, each submission also appears in Conversations as a card with a View submission link.

Sticky Contact stores the last person’s details in a browser cookie. If two people, or a member of staff and a lead, submit from the same browser, HighLevel writes both submissions to the same contact. Test in an incognito window and turn Sticky Contact off on forms that staff fill in.

Go to Settings → Business Profile → Contact Deduplication Preferences, turn Allow Duplicate Contact off, and set Email or Phone as the primary match field with the other as secondary. New form submissions then update the existing contact instead of creating a second one. Merge the duplicates you already have with Manage Duplicates.

Usually the embed code was pasted incompletely, the website builder stripped the script, or a cache is still serving the old page. Copy the code again from the form’s Integrate → Embed Code panel, paste it into a raw HTML or code block, clear the site cache and test in a private window.

A form that HighLevel did not build is only captured if you install the External Tracking script from Settings → External Tracking on that site. HighLevel also needs the form to be standard HTML with an email input that has a name attribute. Turn on the script’s debug mode to see whether it detects the form.

Check the Form Submitted trigger’s “Form is” filter. If the form was duplicated or rebuilt, the filter often still points at the old copy, so the submission saves but the workflow never starts. Re-select the form you are actually using and publish the workflow.

Form email notifications are set per form, so a new or duplicated form starts without them. Open the form, set up the email notification to your inbox, and add an auto-responder for the person who submitted if you want one. For notifications to the assigned user, use a workflow instead.

Add the CAPTCHA field to the form, require valid email and phone numbers, and switch on Validate Phone so a one-time code is texted before the form can be completed. HighLevel also recommends restricting SMS permissions to the countries you actually serve.

Rather have it fixed?

I can do thisfor you.

If you would rather not work through this yourself, tell me what is going on and I will fix it — usually faster than reading the guide twice.

Spots fill fast — most weeks I take on two new builds.

Chat with Hunaid Zia on WhatsApp (+92 340 422 2101), opens in a new tab