Integration

How to Connect Facebook Lead Ads to GoHighLevel

6 min read

GoHighLevel (GHL) is one of the most common CRMs among insurance agents, and Facebook lead ads are the most common place their leads come from. The two connect natively, and when it works, every form submission becomes a GHL contact within seconds, ready for your pipeline, your text sequence, and your first call. When it does not work, leads sit in Facebook's lead center for days before anyone notices. This guide covers the native setup, the webhook route for when native is not an option, and the four places it breaks.

What you'll need: admin access to the Facebook page that runs the ads, a GHL sub-account (any plan), and at least one lead form already published on the page. If someone else runs your ads, they need to make you a page admin first, or the page will not show up in the connection dialog.

Step 1: Connect the Facebook page to your sub-account

  1. In the GHL sub-account (not the agency view), go to Settings → Integrations.
  2. Find Facebook and click Connect. Facebook's own login dialog opens. Log in with the profile that is an admin of the page.
  3. When Facebook asks which pages to grant access to, select the page that runs your lead ads. Leave every permission on. The one GHL needs for leads is the one people most often switch off.
  4. Back in GHL, pick the page from the list and save. If the page is not in the list, your profile is not an admin of it, or you unticked it in the Facebook dialog.

Step 2: Map the lead form fields

Facebook sends every question on the form as a separate field. GHL needs to know which of those go into First Name, Phone, Email, and so on. Until you map them, the contact gets created with the pieces GHL can guess and the rest lands nowhere.

  1. Still under Settings → Integrations, open the Facebook Form Fields Mapping tab.
  2. Select the page, then select the lead form. If you run more than one form, you will do this once per form.
  3. Map each form question to a GHL field. The standard ones, which Facebook prefills from the user's profile, line up cleanly:
    • Full name or First name / Last name → the matching GHL name fields
    • Phone number → Phone
    • Email → Email
    • State, ZIP, City → the matching address fields
  4. Custom questions (age range, coverage amount, beneficiary, whether they have coverage now) need a GHL custom field to land in. Create the custom field first under Settings → Custom Fields, then come back and map it.
  5. Save the mapping.

Tip: map the phone field even if it looks obvious. On a form where the phone question was renamed or added as a custom question instead of the built-in one, GHL will not find it on its own, and every contact will come in without a number.

Step 3: Build the workflow that does something with the lead

Mapping gets the contact created. The workflow is what makes the lead worth having.

  1. Go to Automation → Workflows and create a workflow from scratch.
  2. Add the trigger Facebook Lead Form Submitted. Add a filter for the page and, if you run several forms, the specific form. Skipping the filter is fine for one form and a mess for five.
  3. Add your actions after the trigger. The ones that earn their keep for insurance agents:
    • Send SMS within a minute. Example: "Hi {{contact.first_name}}, this is [Your Name]. I got your request about final expense coverage. When is a good time to talk?"
    • Add to pipeline in a New Lead stage.
    • Internal notification to your phone so you call while they are still on Facebook.
    • Assign to user if there is a team.
  4. Save and toggle the workflow to Published. Drafts do not fire.

Step 4: Test it with a real submission

Facebook's Lead Ads Testing Tool (under Meta Business Suite tools) lets you submit a test lead on any published form without spending a dollar. Submit one, then check GHL for the contact. You should see it in under a minute with the name, phone, and every mapped custom field filled in. If the contact appears but fields are empty, the mapping is off. If nothing appears, work through the breakage list below.

The alternative: an inbound webhook

Sometimes native is not available. The page belongs to someone who will not make you an admin, the leads are generated in an account you do not control, or you want a middle layer like Zapier or Make so you can clean or enrich the lead before it lands. In those cases GHL's Inbound Webhook trigger takes any JSON payload.

  1. Create a workflow and add the trigger Inbound Webhook. GHL generates a URL that looks like:https://services.leadconnectorhq.com/hooks/abc123xyz...
  2. Paste that URL wherever the lead originates. In Zapier, that is a Facebook Lead Ads trigger followed by a Webhooks by Zapier POST action (the Zapier guide walks through it). In a lead vendor's portal, it is usually a field labeled webhook or CRM URL.
  3. Send one test payload, then in the trigger settings click Test Triggerso GHL learns the field names.
  4. Add a Create/Update Contact action and map the payload fields:
    • First Name → {{first_name}}
    • Last Name → {{last_name}}
    • Phone → {{phone}}
    • Email → {{email}}
    The exact names depend on whatever sent the payload, which is why the test step comes first.
  5. Publish. Then send a second test and confirm the contact appears.

The webhook route works, but it adds a hop. Every hop is somewhere a lead can silently stall, so if native is available, use native.

Where it breaks

Four failures cover nearly every "my Facebook leads stopped coming into GHL" ticket I have seen.

  • The phone field got renamed. Someone edited the form, replaced the built-in phone question with a custom one, or added a second form with different wording. The mapping was saved against the old field. Fix: reopen Facebook Form Fields Mapping, reselect the form, and remap phone.
  • The wrong form is selected. Ads got duplicated into a new form and the old one is still the one mapped and filtered in the workflow. New leads land on the unmapped form and go nowhere. Fix: map the new form and update the workflow filter, or remove the form filter entirely if you only run one live form.
  • The page is not connected to this sub-account. It was connected at the agency level, or in a different sub-account, or the person who connected it lost page admin and the token expired. Fix: reconnect under the sub-account's own Settings → Integrations with a profile that is still a page admin.
  • Leads Access in Meta is locked down. In Meta Business Suite, the page's Leads Access settings can restrict which CRMs and people receive leads. If someone turned that on, GHL is blocked even though the page shows as connected. Fix: open Leads Access for the page and add GHL (it may show as LeadConnector) or set access back to default.

A quick way to tell native failures apart: submit a test lead and check Facebook's lead center for the form. If the lead is there but not in GHL, the problem is on the GHL side (mapping, filter, connection, or Leads Access). If the lead is not even in Facebook's lead center, the ad or form itself is the problem.

A note on where FEXmagnet fits, since this site runs Meta campaigns for agents. Every FEXmagnet client gets each lead by text and email the moment the form is submitted, and the lead shows up in their portal, whether or not a CRM is connected. Agents who want the lead in GHL as well can connect the page natively as above, since the ads run in their own account on their own page, or have leads forwarded to a CRM webhook.

  • Need a hand? Email nickg@fexmagnet.com with a screenshot of your mapping screen and I will tell you what is wrong.

Want leads without buying leads?

FEXmagnet runs Meta ad campaigns for life insurance agents inside your own ad account. A real person builds every campaign, you approve every ad and set the budget, and you keep the page, the pixel, and every lead. Flat monthly fee, cancel anytime.

See if it fits your business

Newsletter

Like this guide? Get more in your inbox

Weekly tips on leads, sales, and scaling your final expense business. No spam.

Keep reading