Conversion tracking guide

Track GoHighLevel form submissions with Meta CAPI without creating a mess.

A clean form setup needs one defined conversion, one exact form, and one event identity that can survive the move from the page to GoHighLevel and then to Meta.

Updated July 2026 7 min read Practical setup guide
Quick answer

What to do

Use the live form submission as the trigger, send one Lead event for that form, preserve the original landing-page information before submission, and use the same event name and event ID when both the Meta Pixel and CAPI report the conversion.

Choose the exact form and conversion

Do not create a generic workflow that treats every form in the account as the same conversion. Select the exact form and decide what the submission means to the business.

For most quote, contact, application, or estimate forms, Lead is the clearest starting event. Later stages such as QualifiedLead or Schedule should fire only when those actions actually happen.

  • Use the specific form-submitted trigger.
  • Name the workflow after the form and event.
  • Avoid sending Lead again from several unrelated workflows.
  • Keep client datasets separated by sub-account.

Capture attribution before the form submits

The form is the end of the visit, not the beginning. Store useful values when the visitor arrives so redirects, multi-step pages, and delayed submissions do not remove them.

Useful values can include FBCLID, FBC, FBP, UTMs, landing page, referrer, user agent, and a stable event ID. Only send values you actually captured and are permitted to process.

  • Original landing page
  • Meta click and browser identifiers when available
  • UTM campaign values
  • Email and phone from the submitted form
  • A unique event ID for that submission

Keep Pixel and CAPI tied to one conversion

When the browser Pixel and server CAPI both send Lead, Meta needs to recognize that they describe the same form submission. Use the same event name and event ID on both paths.

If the page script creates one ID and the workflow creates another, Meta may treat them as separate conversions. That is how a simple form starts reporting two leads for one person, because software enjoys multiplying paperwork.

  • Generate the event ID once.
  • Send it with the browser Lead event.
  • Carry it into the form or server request.
  • Reuse it for retries of the same submission.
Before you publish

GoHighLevel Meta CAPI check

01Select one exact GoHighLevel form

02Use Lead only when the form represents a real lead

03Capture attribution before the submit action

04Share one event ID between browser and server

05Verify one browser event and one server event in Meta

Frequently asked questions

Common questions about this setup

Should every GoHighLevel form fire a Meta Lead event?+

No. Track forms that represent a meaningful conversion. Support requests, newsletter forms, and internal forms may need different events or no ad conversion event.

Can I use a GoHighLevel workflow only, without page code?+

Yes, but the workflow can only send information that reached the contact record. Page-level capture is often needed for stronger attribution and browser context.

What if the form is embedded on another website?+

The iframe boundary changes what the outer page can read. Use an implementation that can capture the submission inside the form context or send the event from the CRM workflow.

How do I test it?+

Submit the published form with a fresh contact while Meta Test Events is open, then compare the browser and server event details.

Official references

Use these official references when checking the current Meta setup and account screens.

Keep learning

Related conversion tracking guides

Simple CAPI workspace

Turn the answer into a working Meta conversion.

Choose Lead or Schedule, paste one protected script on the intended page, and verify the real conversion.

Create your script