Automation · CRM · Troubleshooting

Facebook Lead Ads to GoHighLevel Webhook: Setup & Fix (2026)

Updated October 15, 2026 · Written by The Architect, CreatorOpsMatrix

How do you connect Facebook Lead Ads to GoHighLevel, or fix leads that don’t arrive?

Quick answer: Start with the native GoHighLevel connection. Check Page access, Lead Access, the selected form and field mapping. If you need custom routing, several sub-accounts, data cleanup or execution logs, use Make’s Facebook Lead Ads trigger and send the lead to HighLevel with a scoped Private Integration Token and the v3 Contacts API. Use a direct Meta webhook only if you control a Meta developer app.

Which route fits your setup?

Pick your situation, then tap any step to see what breaks there and how to fix it.

    1. Facebook Lead Ads to GoHighLevel via Webhook: What Actually Happens

    Meta’s lead webhook does not deliver the full form. It sends a short notification with a lead ID, and your system then fetches the answers from Meta’s Graph API.

    1. Create a Meta app and subscribe the Page to lead notifications.
    2. Verify your callback URL when Meta sends its verification request.
    3. On each notification, fetch the lead by its ID using a token with lead-retrieval permission.
    4. Map the answers and send them to HighLevel with the v3 Upsert Contact call (section 5).

    No developer app? Skip steps 1–3. Make’s Facebook Lead Ads trigger handles them, and the native HighLevel connection needs no build. See the advanced webhook section.

    2. Why Facebook Lead Ads Do Not Reach GoHighLevel

    A lead ad can submit successfully while the CRM receives nothing. The cause is usually the link between the Meta Page, lead permissions, the selected form and the CRM integration, not the campaign.

    HighLevel’s own troubleshooting guide points to four checks before you replace anything:

    1. Page access
    The user connecting the integration needs the required Page access.
    2. Lead Access
    In Meta Business settings, confirm LeadConnector can access leads for the Page.
    3. Correct lead form
    The form in the ad must be the one enabled and mapped in HighLevel.
    4. Field mapping
    Standard and custom questions must map to the intended contact fields.

    Don’t disconnect a working native integration just to get more control. For one Page to one sub-account, native is enough. Make pays off when you need routing, transformation, extra destinations or external logs.

    Official steps: HighLevel’s Facebook Lead Ads integration guide.

    3. Make Architecture and API v3 That Work in 2026

    Make offers a Facebook Lead Ads integration with a New Lead trigger, a Get Lead Details action and a webhook-management action. You don’t need a Meta developer app for ordinary lead automation. See Make’s Facebook Lead Ads integration.

    A Make Custom Webhook is not the same as Make’s Lead Ads trigger. Pasting a generic Make webhook URL into Ads Manager will not make Meta send lead events to it. Use Make’s own trigger for the no-code route, or build the developer route in section 8.

    The flow: Meta Lead Ad → Make trigger → Get Lead Details → Router (optional) → HighLevel API v3 upsert.

    Private Integration Tokens and v3

    Older tutorials use the legacy API key or call the 2021-07-28 Contacts API “V2”. For a new build, HighLevel’s versioning documentation lists v3 as supported, with v3 Create and Upsert Contact at services.leadconnectorhq.com.

    Mental model: legacy API key → avoid. Private Integration Token → scoped Bearer credential. Contacts API v3 → what this guide uses.

    Private Integration Tokens can be created per agency or sub-account, are used as Bearer tokens and can be rotated in HighLevel. Give them only the scopes the workflow needs, and never put them in public code, screenshots or templates. References: Private Integrations · API Versioning

    Why Upsert, not Create: retries and reconnects can run a workflow twice. HighLevel’s v3 Upsert Contact follows the location’s duplicate-contact settings, so a repeat run updates the contact instead of duplicating it.

    4. Build the Make.com Workflow

    Step 1: Connect Facebook Lead Ads

    Create a scenario, pick the Facebook Lead Ads app and use the New Lead trigger. Select the Page and lead form, complete the permission flow, then send a real test lead and confirm the scenario receives it.

    If leads stop arriving after a few weeks: some Make users report the real-time Facebook trigger going silent while ads keep generating leads. Reported fixes are recreating the webhook and connection, or switching to Make’s Watch Lead module.

    This comes from user reports in Make’s community, not official documentation. Test it in your own scenario before relying on it.

    Step 2: Retrieve the lead details

    Use Get Lead Details to read the submitted answers instead of assuming every lead arrives as a flat object. If the data contains arrays, use Make’s Iterator to process each item.

    Step 3: Normalize the data

    Build a clean mapping before the HighLevel call: first name, last name, email, phone, campaign or form ID, custom answers, lead source and optional owner or routing value.

    Step 4: Create the HighLevel connection

    In HighLevel, create a Private Integration with minimum scopes, copy the token and store it securely in Make. Send it as:

    Authorization: Bearer YOUR_PRIVATE_INTEGRATION_TOKEN

    Step 5: Send the lead to API v3

    In Make’s HTTP module, POST to the v3 Upsert Contact endpoint:

    POST https://services.leadconnectorhq.com/contacts/upsert
    
    Authorization: Bearer YOUR_PRIVATE_INTEGRATION_TOKEN
    Content-Type: application/json
    Accept: application/json
    Version: v3
    {
      "firstName": "{{first_name}}",
      "lastName": "{{last_name}}",
      "email": "{{email}}",
      "phone": "{{phone}}",
      "locationId": "YOUR_LOCATION_ID",
      "source": "Meta Lead Ad",
      "customFields": [
        { "key": "monthly_ad_spend", "fieldValue": "{{monthly_ad_spend}}" },
        { "key": "business_type", "fieldValue": "{{business_type}}" }
      ]
    }

    The v3 Contacts documentation uses customFields objects with fieldValue. Don’t copy older examples that use field_value. Your Make variable names depend on what your Facebook connection returns, so treat this as an API-shape example.

    Step 6: Read the response

    The v3 Upsert response says whether a contact was created and returns the contact object and a trace ID. Log failed HTTP responses, because a successful trigger doesn’t mean the CRM call worked. Check each stage in order: Meta lead exists, Make received it, HighLevel accepted it, the CRM record is correct.

    5. Mapping, Routing and Duplicates

    Incoming valueNormalized fieldHighLevel target
    Full namefirst_name / last_nameContact name fields
    Email, phoneemail, phoneContact email and phone
    Custom answersmonthly_ad_spend, business_typecustomFields
    Campaign or formsource or routing variableSource, tag, owner or Router branch

    If a form question changes wording, you update the mapping layer instead of rebuilding the CRM request.

    Route leads to multiple sub-accounts

    This is where Make beats point-to-point sync. A Router can read a campaign, form, ad set or geography value and send the lead to a different HighLevel location ID.

    Make the routing rule explicit. Store the mapping (Campaign A → Location A, Campaign B → Location B) and test every branch before sending live traffic.

    HighLevel’s contact API supports assignedTo when you already know the user ID. For complex ownership rules, send the contact to the right location and let HighLevel’s workflows assign the rep.

    Prevent duplicate contacts

    Recommended pattern: receive lead → normalize → route → Upsert Contact → inspect response → log trace ID.

    6. Troubleshooting and Current Rate Limits

    SymptomCheck firstLikely fix
    No leads ever arrivedPage access, Lead Access, selected formFix permissions and form selection before rebuilding.
    Worked, then stoppedFacebook authorization and Page permissionsReconnect the native connection or recreate the Make connection.
    Make receives nothingFacebook connection inside MakeReconnect and verify the Page and form.
    HighLevel returns 401/403Bearer token, scope, Version headerUse a valid scoped token and Version: v3.
    HighLevel returns 429API request rateThrottle, serialize and retry using the rate-limit headers.
    Duplicate contactsTwo live routes or Create ContactRun one production path and use Upsert.
    Custom answers missingNormalization and mappingBuild the customFields array explicitly.

    Native fix didn’t solve it, or you need to route leads by campaign? Make’s Lead Ads trigger plus a Router covers that without a custom Meta app, and the Free plan is enough to test it.

    HighLevel API rate limits

    HighLevel documents a burst limit of 100 requests per 10 seconds and 200,000 requests per day, counted per Marketplace app and resource such as a Location or Company. Treat the response headers as the authority instead of a fixed sleep value:

    X-RateLimit-Limit-Daily
    X-RateLimit-Daily-Remaining
    X-RateLimit-Interval-Milliseconds
    X-RateLimit-Max
    X-RateLimit-Remaining

    For bulk migrations, control concurrency and retry failures. See the current rate-limit documentation.

    7. Advanced Meta Webhook Setup

    This route is for developers who want Meta’s Page webhook to call their own endpoint. It normally needs a Meta developer app, webhook verification, a leadgen subscription for the Page and the permissions required to retrieve lead data. It is different from adding Make’s Custom Webhook module.

    Use this only when you need it. For a normal no-code workflow, Make’s Lead Ads trigger is simpler and needs less maintenance.

    Keep these stages separate so a failure is easy to locate: webhook delivery, lead-detail retrieval, normalization and validation, HighLevel delivery, error handling and replay.

    8. Production Test Checklist

    Don’t switch a live campaign from native sync to Make until each layer is verified.

    ✓ Test lead submitted
    Use a unique email and phone.
    ✓ Make trigger fired
    The lead appears in the execution.
    ✓ Lead details resolved
    Standard and custom values are present.
    ✓ Router correct
    The right location branch was chosen.
    ✓ HighLevel success
    Inspect the HTTP response and Upsert result.
    ✓ CRM record checked
    Email, phone, custom fields and owner.
    ✓ Duplicate test
    Replay the lead and confirm Upsert behavior.
    ✓ Old route controlled
    Only one live route creates contacts.

    9. What Make Costs in 2026

    Make bills in credits. Its pricing page lists a Free plan with 1,000 credits per month and a Core plan at $12 per month for 10,000 credits. Usage depends on modules and processing, and arrays that create extra bundles consume extra credits, so don’t price this by module count alone. Check Make’s current pricing before you model production cost.

    Use native GoHighLevel

    One Facebook Page to one location with standard CRM processing.

    Use Make + GoHighLevel

    Conditional routing, transformations, extra systems or execution logs.

    Frequently Asked Questions

    Why are my Facebook Lead Ads not syncing to GoHighLevel?

    Check Page access, Lead Access, the correct lead form and Facebook form-field mapping before replacing the integration.

    Do I need Make.com to connect Facebook Lead Ads to GoHighLevel?

    No. One Page to one location can use the native integration. Make helps with routing, transformation and multiple destinations.

    What is the current GoHighLevel API version?

    HighLevel’s versioning documentation lists v3 as a supported named version, which this guide uses.

    Is the old GoHighLevel API v1 still supported?

    HighLevel states API v1 reached end-of-support on December 31, 2025. New builds should use the current API and authentication model.

    Why use Upsert Contact instead of Create Contact?

    Upsert follows the location’s duplicate-contact settings, so retries update a contact instead of duplicating it.

    Can one Facebook Page send leads to multiple GoHighLevel sub-accounts?

    Yes. A middleware workflow such as Make’s Router can send leads to different HighLevel locations based on a routing value.

    Do I need a Meta developer app to use Make with Facebook Lead Ads?

    Not for Make’s standard Facebook Lead Ads trigger. A Meta developer app is only needed for a direct custom webhook architecture.

    What should I do when HighLevel returns 429?

    Check the documented rate limits and response headers, reduce concurrency and retry instead of relying on a fixed delay.

    Do HighLevel Private Integration Tokens expire like access tokens?

    They are static credentials that do not refresh automatically and can be rotated manually in Private Integrations.

    Official Documentation Used for This Guide

    Build the workflow when you actually need the extra control

    For a basic one-account setup, fix the native connection first. When you need routing, normalization, duplicate protection or a multi-step automation layer, Make + GoHighLevel gives you a workflow you can inspect and maintain.

    Related: GoHighLevel + Make

    Routing, conditional logic and multi-location automation.

    Open the integration guide →

    Related: Make token errors

    Fix invalid refresh tokens and reconnection problems.

    Open the troubleshooting guide →

    Related: No-Code Blueprint

    Reusable Make workflow structures and webhook patterns.

    Open the blueprint →

    Related: Facebook CAPI

    Server-side event routing and conversion tracking.

    Open the CAPI guide →

    Affiliate disclosure: Some links on CreatorOpsMatrix may be affiliate links. If you purchase through one, we may earn a commission at no additional cost to you. Editorial content is not determined by whether a company offers an affiliate program.

    Technical disclaimer: APIs, authentication, permissions, pricing and interfaces change. This guide reflects the documentation reviewed for the October 15, 2026 update. Test the workflow in your own environment before using it with production lead traffic.

    Scroll to Top