How to connect GoHighLevel to any website: WordPress, Wix, Lovable (2026)

By / Published Nov 4, 2026 / Updated Nov 4, 2026

Heads up: the trial buttons on this page use my affiliate link. If you sign up through it I get a commission. It doesn't cost you more.

To connect WordPress to GoHighLevel, install the free LeadConnector plugin (Plugins > Add New, search "LeadConnector", activate, then sign in to your HighLevel account), switch on the chat widget in its settings and drop your forms and calendars into pages with its blocks or shortcodes. Any other site, like Wix, Squarespace, Webflow or Lovable, connects with embed code: copy it from the form's Integrate tab, the calendar's Share menu or Sites > Chat Widget > Get Code, and paste it into the site's custom code box.

This comes up all the time, because a lot of clients like their website and don't want a new one. They just want the automations. I've done it on a client's WordPress site where the form and the chat widget in the corner are HighLevel and the site isn't, and every lead lands in the CRM and runs the same follow-up as if the site were built in HighLevel. Below are the three ways to connect a site and when to use each, steps for every platform, and the stuff that breaks: Lovable embeds, iPhones and duplicate contacts.

The video version

Short version

  • 01Three ways in: paste embed code (any site), the LeadConnector plugin (WordPress), or send the site's own form to an Inbound Webhook or through Zapier.
  • 02Embed code and the plugin keep HighLevel's attribution and fire the normal Form Submitted and Customer Booked Appointment triggers. The webhook route keeps the site's own form design but you map every field yourself.
  • 03To keep a site's existing form without any code changes, install HighLevel's External Tracking script. It picks up standard HTML forms (Gravity Forms, WPForms, Contact Form 7, custom forms) and creates the contacts.
  • 04Most breakages come from a script that never runs (Lovable and other React sites), a form nested inside another iframe (Wix HTML boxes), or two routes feeding the same form, which makes duplicates.

Connect WordPress to GoHighLevel, step by step

  1. 01

    Install the LeadConnector plugin

    In WordPress go to Plugins > Add New, search "LeadConnector", click Install Now, then Activate. It's HighLevel's own plugin: version 4.0.6, updated Aug 24, 2026, with 20,000+ active installs on wordpress.org as of Nov 4, 2026. If the site is on HighLevel's own WordPress hosting, it's already installed.

  2. 02

    Sign in to the right sub-account

    Open the LeadConnector tab in the WordPress menu, click sign in and log in to HighLevel. Pick the client's sub-account, not your agency account, or leads go to the wrong place. The status should read Connected.

  3. 03

    Turn on the chat widget

    Build the widget first in HighLevel under Sites > Chat Widget. Then in the plugin's settings tick Enable Chat Widget and save. No code in the header needed.

  4. 04

    Add forms, surveys and calendars

    Use the plugin's WordPress blocks or shortcodes to place a HighLevel form, survey or calendar on any page or post. Or paste the embed code into a Custom HTML block, which works on any WordPress site with or without the plugin.

  5. 05

    Optional: put funnel pages and custom values on the WordPress domain

    LeadConnector > Funnels > Add New lets you pick a HighLevel funnel step and give it a WordPress slug, like yourdomain.com/special-offer. Custom values work as shortcodes, for example [lc_custom_value key="business_phone"], so changing the phone number in HighLevel updates it across the site.

  6. 06

    Build the follow-up workflow

    In Automation > Workflows add a Form Submitted trigger and filter it to the form you embedded (or Customer Booked Appointment filtered to the calendar). HighLevel doesn't care which website the form sits on. As long as it's the same form, the workflow fires.

  7. 07

    Test it like a customer

    Clear the site's cache (WP Rocket, W3 Total Cache and the host's cache), then submit the form and book a slot from your phone. Check the contact, the opportunity and the texts that go out.

The three ways to connect a website to GoHighLevel (and when to use each)

In my video I call it four ways, because I count forms, calendars and the chat widget separately, plus Zapier. They boil down to three routes. The one you pick decides your attribution and how the form looks, and it's where duplicate contacts come from.

Embed code is the default. You make the form, calendar or chat widget in HighLevel and paste a snippet into the site. You give the snippet to the client's developer, or if they built the site themselves they stick it wherever they want the form and replace their old one. The WordPress plugin is the same thing with a nicer install. The third route is keeping the site's own form and sending its data in, either with an Inbound Webhook, Zapier or Make, or HighLevel's External Tracking script.

RouteUse it whenAttributionStylingDuplicates
Embed code (form, calendar, chat widget)Any site where you can paste code: Wix, Squarespace, Webflow, Shopify, Duda, customFull. First and latest attribution and UTMs are recorded on the contactHighLevel's form builder, inside an iframe. Custom CSS is possible but the site's theme doesn't reach itLow. Follows the sub-account's deduplication setting
LeadConnector WordPress pluginWordPress sites, especially when the client edits pages themselvesSame as embed codeSame as embed codeLow
Inbound Webhook, Zapier/Make, or the APIThe client won't give up their form (Typeform, Wix Forms, a Lovable form) or the data comes from another appWeak. Zapier contacts show as Third-Party, and UTMs only arrive if you send themKeeps the site's own form exactly as designedHighest. You map the fields, and running it next to another route doubles contacts
External Tracking script (keep the site's form)Standard HTML forms: Gravity Forms, WPForms, Contact Form 7, custom HTML, many no-code buildersGood. Captures UTMs, page URL and session dataKeeps the site's own formLow, if it's the only route on that form

From HighLevel's help docs on form embedding, the LeadConnector plugin, External Tracking, Inbound Webhook and attribution, read Nov 4, 2026.

Embedding a GoHighLevel form on another website

Go to Sites > Forms, open the form and click the Integrate tab (it replaced the old Integrate button). Under Embed, pick the type: Standard sits inside the page, Popup opens as an overlay, Popover opens from a floating button, and Sidebar slides in from the side. Set the size and button, check the live preview, then Embed code > Copy code and paste it into the site.

Paste the whole snippet. It's an iframe plus a script (form_embed.js), and the script is what resizes the form, runs popups and passes the page's URL parameters and UTMs into the form. An iframe on its own will show the form, but those things stop working.

Then wire the follow-up: a workflow with the Form Submitted trigger, filtered to that form. The Connections section in the Integrate tab shows which workflows already use it. Every form, survey and calendar booking that comes through this way gets HighLevel's attribution on the contact, which the webhook route doesn't. The full workflow builder walkthrough is in GoHighLevel workflows.

Adding the GoHighLevel chat widget to any site

Go to Sites > Chat Widget, click New and pick the type: All-In-One, SMS/Email, Live Chat, Facebook, Instagram, WhatsApp or Voice AI. Style it, then use Get Code and paste the snippet into the site's head or footer so it loads on every page. A lot of people don't know about this one, and it's the easiest lead source on the site.

Two things to set up before you call it done. If it's the SMS/Email type, the sub-account needs a phone number and a finished A2P registration, or the text replies don't send. And add a workflow with the Customer Replied trigger filtered to Reply Channel = Chat Widget, with an internal notification, so someone actually sees the message. HighLevel suggests putting {{message.body}} in the notification so the message is right there in the text.

Want it to answer on its own? Turn on Conversation AI inside the widget. How I train the bot so it doesn't sound like a bot is in Train Conversation AI. One limit: the widget's messaging is the same on every page, but you can make more than one widget per sub-account.

Embedding a GoHighLevel calendar

Go to Calendars > Calendar Settings, click the three dots on the calendar, choose Share, then the Embed Code tab, and copy it. Paste it into a custom code block on the page. The Share menu also gives you a plain booking link if you'd rather send people to it.

When someone books on the client's site, the appointment lands in HighLevel and the Customer Booked Appointment trigger fires. Filter it to the calendar you embedded and run your confirmations and reminders from there.

If the business runs Facebook lead ads, the same calendar link can go in the Instant Form's Book time button so people book straight from the thank you page. HighLevel's doc says to use the LeadConnector-domain link there, because branded-domain links may open in a browser instead.

The tracking code: keep the site's own forms

This is the newer option, and super underrated. Go to Settings > External Tracking, copy the script and paste it before the closing body tag on every page of the external site. It then detects normal HTML forms on the page and sends each submission into HighLevel as a contact, with the UTMs, page URL and session.

It works with WordPress forms like Gravity Forms, WPForms and Contact Form 7, custom HTML forms and many no-code builders. The form needs a real <form> element, fields with name attributes and an email field. Password, payment and hidden fields are never captured.

Submissions show under Sites > Forms > Submissions > External Forms, and you get two workflow triggers: Page View and Form Submission, with filters for domain, page, form name and UTMs. As of late October 2026 there's also a Labs version with per-domain switches, your own field mapping, and a two-snippet setup for forms inside cross-domain iframes.

Pre-filling forms with URL parameters

Each form field has a query key in its settings. Add those keys to the page URL and the field fills itself, for example yoursite.com/book?first_name=Sam&email=sam@example.com. On an external site this only works when the full embed snippet is on the page, because form_embed.js is what reads the page's URL and hands it to the form.

Where this pays off is follow-up texts and emails. Put a link like ?first_name={{contact.first_name}}&email={{contact.email}} in a workflow message and the person never retypes their details. Match the keys exactly, encode spaces as %20 and & as %26, and test the link before it goes out.

Two related settings. A Source element in the form records a contact source, and adding ?source=google-profile to the link overrides it, so one form can tell you which link people came from. Sticky Contact (Form Settings) fills in details for returning visitors on the same browser, but turn it off if staff fill in forms for customers on one device, or submissions update the wrong contact.

Platform-by-platform steps

Same idea everywhere: site-wide code (chat widget, External Tracking) goes in the header or footer, and forms and calendars go in a code block on the page where you want them.

PlatformChat widget / tracking scriptForm or calendar on a pageWatch out for
WordPressLeadConnector plugin > tick Enable Chat WidgetPlugin blocks or shortcodes, or a Custom HTML blockCaching plugins hiding the widget; reconnect the plugin after regenerating the API key
WixSettings > Advanced > Custom Code > Add Custom Code, All pages, Load code once, Head+ > Embed > Embed HTML (or Embed a Widget) > Code > paste > UpdateThe HTML box is an iframe, so a form inside it is nested; certain Wix HTML embeds can't be tracked
SquarespaceSettings > Developer Tools > Code Injection > Header or FooterAdd an Embed block > Code Snippet > ApplyForms aren't supported on checkout pages
WebflowSite settings > Custom code > Footer code, then publishDrop a Code Embed element on the page and paste the snippetTest on the published site, and check the custom code box is available on the client's Webflow plan
ShopifyOnline Store > Themes > three dots > Edit code > theme.liquidSame file: paste in the <head> or footer of theme.liquidEdit a duplicate of the live theme first so a typo doesn't take the store down
Lovable (or any React site)Ask Lovable to put the script in index.html, in the headPaste the full embed code and tell it to add it exactly as givenLovable rebuilds the form in React unless told not to, and that copy sends nothing to HighLevel
AI Studio (HighLevel)Ask it to add a chat widget; it builds one into the siteAsk it to "connect forms to my CRM" and pick the form or calendar on the card it showsForms are only a design until you connect them; Live Chat and SMS/Email widgets only

From HighLevel's help docs for each platform and the LeadConnector plugin, read Nov 4, 2026. Platform menus change, so follow the builder's current labels.

The webhook route: when the client keeps their own form

Say the client loves their Typeform or the form Lovable built, and they won't swap it. In Automation > Workflows, create a workflow, add the Inbound Webhook trigger and copy the URL it gives you. Point the form's webhook (or a Zapier, Make or n8n step) at that URL, send one test submission, and pick it as the mapping reference. Then add a Create Contact or Update Contact action and map name, email, phone and anything else. Then add the follow-up.

In my video I do it with Zapier: the trigger is a new Typeform entry, the action is LeadConnector (that's what HighLevel is called inside Zapier) > Create Contact, and you map first name, phone and so on. Whenever a lead submits on the client's non-HighLevel site, the contact shows up in the CRM like any other.

Inbound Webhook is a premium trigger. Each sub-account gets 100 free lifetime executions, then it's $0.01 per execution, or a Workflow Pro plan at $10, $25 or $50 a month for 10,000, 30,000 or 65,000 executions (HighLevel's help doc, read Nov 4, 2026). If the webhook URL ever leaks, delete the trigger and add a new one to get a new URL.

The catch is attribution. Contacts created through Zapier show the Third-Party source, and none of HighLevel's page tracking comes along. If you report on lead source, send the UTMs in the webhook payload and map them to fields, or use the External Tracking script instead.

What usually breaks (and the fix)

Form embeds in Lovable and other React sites. Two things go wrong. Lovable often rebuilds your form as its own React form, which looks right and sends nothing. And a <script> tag inside a React component doesn't run, so the iframe shows without the script that sizes it and passes URL parameters. Fix: paste the full embed code into the Lovable chat, say it's a HighLevel embed that must be added exactly as given, and ask for form_embed.js to be loaded in index.html. If you'd rather keep Lovable's own form, have it post to your Inbound Webhook URL, or make it a real <form> with name attributes and install the External Tracking script. Always test on the published URL.

Safari and iPhone. People report iPhone users who can't open a survey and quizzes that misbehave outside Chrome. HighLevel's embeds are iframes from another domain, and Safari blocks cross-site tracking by default, which is where a lot of these start. Test every embed in Safari on an actual iPhone before handing it over. Use the Standard form type for anything long, never nest the embed inside another iframe (like a Wix HTML box), and if a survey still won't load, link the button to the hosted form page instead of embedding it. You can't ask customers to change their Safari settings.

Duplicate contacts from Wix forms. This usually means two routes feed the same form, for example Zapier from Wix Forms plus the tracking script, or the sub-account allows duplicates. Pick one route per form. Then go to Settings > Business Profile > Contact Deduplication Preferences, turn Allow Duplicate Contact off, and match on email first and phone second. Existing duplicates can be merged. If it's duplicate pipeline cards, check that Allow Multiple Opportunities per Contact (Settings > Objects > Opportunities) is off and that only one workflow creates the opportunity.

Chat widget not showing on WordPress: it's almost always the cache. Clear the caching plugin, the host's cache and do a hard refresh. Plugin says Disconnected: someone regenerated the API key, so sign in again.

Or just move the site into GoHighLevel (or AI Studio)

In my video I said it straight: design-wise WordPress might be better than HighLevel, but forms, chat widgets, surveys and calendars are what make a website functional. If the client is happy with their site, there's no need to move them. Connect it and run the automations.

When the site is old, slow, or nobody has the login anymore, I'd rebuild it in AI Studio. You describe the site, it writes it, and forms, calendars and chat widgets connect to the CRM from the chat. No embed codes, no second platform. I show the build in youtube.com/watch?v=lE83w3EmBfA, and the full setup with costs is in AI Studio tutorial. HighLevel also hosts WordPress sites and has a migration guide if the client wants to stay on WordPress.

How to sell this to a local business

Don't sell "I'll connect your website to a CRM". Nobody wants that. Sell a website that books jobs: every form gets a text back in seconds, the chat answers after hours, and the booking calendar is on the page. That's one of the first things I'd offer a local business, because the owner gets it straight away and you can see the gap on their site before you ever call them: no booking, a contact form that goes to an inbox nobody checks, no chat.

Send one real inquiry through their current form and see how long the reply takes. Then show them the same thing on a demo site. You could build this for a local business and charge a setup fee plus a monthly fee you set, and the monthly part is the follow-up that keeps running. More on pitching it in Sell AI to local businesses.

Start the 30-day trial and connect your first site →
Start your 30-day free trial →

30 days through my link (normally 14). How the trial works

Not ready for a trial?

Get the weekly HighLevel updates in your inbox

Every week I go through HighLevel's changelog and send you what actually changes things for agencies, plus new guides when they go up. One email a week.

FAQ

Is there a GoHighLevel plugin for WordPress?

Yes, LeadConnector, HighLevel's own free plugin in the wordpress.org directory. It adds the chat widget with a checkbox, puts forms, surveys and calendars on pages with blocks or shortcodes, hosts funnel steps on WordPress slugs, and shows custom values with shortcodes.

Can I embed a GoHighLevel form on a Wix site?

Yes. Copy the code from the form's Integrate tab, then in the Wix editor click + > Embed > Embed HTML, paste it into Code and click Update. For the chat widget, use Settings > Advanced > Custom Code and load it in the head on all pages.

Do workflows run when someone fills in a form on an external site?

Yes. HighLevel doesn't care which website the form or calendar sits on. Use Form Submitted or Customer Booked Appointment, filtered to that form or calendar. For forms captured by the External Tracking script, use its Form Submission trigger. For AI Studio sites, use AI Studio Form Submitted.

Why isn't my GoHighLevel form working in Lovable?

Usually Lovable rebuilt the form in React (it sends nothing) or the embed script never ran. Paste the full embed code, tell Lovable to add it exactly as given, and load form_embed.js in index.html. Or send Lovable's own form to an Inbound Webhook.

Does the chat widget need A2P registration?

The SMS/Email chat type does: HighLevel says the sub-account needs a phone number and completed A2P registration for SMS replies to send. Live Chat replies stay inside the widget.

How do I stop duplicate contacts from website forms?

Use one route per form, then turn Allow Duplicate Contact off under Settings > Business Profile > Contact Deduplication Preferences, matching on email first and phone second. New submissions then update the existing contact.

Can I pre-fill a GoHighLevel form from a link?

Yes. Add each field's query key to the URL, like ?first_name=Sam&email=sam@example.com. On external sites the full embed snippet must be on the page so the parameters reach the form.

Sources / last checked Nov 4, 2026

  • HighLevel help docs. How to Install HighLevel's Chat Widget, Getting Started with Chat Widget, chat widget for Wix and Squarespace, How to Add Chat Widgets in AI Studio, Embedding HighLevel Calendars using HTML Code, The Complete Guide to the LeadConnector (LC) WordPress Plugin, Embedding HighLevel Forms on Non-HighLevel Websites, Integrate Tab in Forms, Surveys & Quizzes, Tracking External Forms, Field Mapping and iFrame Form Tracking, Connect Forms and Calendars in AI Studio, Sticky Contact, Source Field, Understanding Attribution Source, Allow Duplicate Contacts, Multiple Opportunities per Contact and Enabling Cross-Site Tracking on help.gohighlevel.com, read Nov 4, 2026.
  • HighLevel webhook and pricing docs. Workflow Trigger - Inbound Webhook, How to use the Inbound Webhook Workflow Premium Trigger, and Workflows Pro Plan - New Pricing Tiers, read Nov 4, 2026.
  • wordpress.org and HighLevel's embed script. LeadConnector plugin listing (version, last update, installs) and HighLevel's live form_embed.js (how embeds pass URL parameters and UTMs), read Nov 4, 2026.
  • My videos. "Connect HighLevel Automations to Any Existing Website" (Feb 2024) for the embed, calendar, chat widget and Zapier routes, and "GoHighLevel Just KILLED Lovable" (Apr 2026) for the AI Studio build.
Hamza Baig (Hamza Automates)

Author

Hamza Baig / Hamza Automates

Founder, Hexona Systems

I run Hexona Systems on GoHighLevel. HighLevel gave it the SaaSpreneur Platinum award in 2024 and Diamond in 2025 and 2026, and I spoke at their LevelUp event in 2026. Everything on this hub is something I use myself or have shown on camera.

Platinum SaaSpreneur
2024
Diamond SaaSpreneur
2025, 2026
LevelUp speaker
2026
YouTube subscribers, Oct 2026
34,200

Keep reading

Start your 30-day free trial →

Affiliate link. I get a commission, it doesn't cost you more.