Back to Blog

Multi-Source Lead Routing in GoHighLevel

๐Ÿ“… April 18, 2026 โฑ๏ธ 10 min read GoHighLevel

The exact architecture for unifying Facebook Lead Ads, Google LSAs, and web forms into one pipeline with sub-2-minute response.

The problem most GHL setups don't solve

Lead generation is a multi-source game now. A typical home-services or real-estate business is pulling leads from:

Each source has a different payload format. A different speed-to-lead expectation. A different cost per acquisition. And โ€” in most GHL setups I audit โ€” each is going into a different pipeline, with no unified view.

Reps end up checking 3-4 places. Owners can't answer "which channel made me money this month?" Duplicate leads slip through. Some leads sit untouched for 30 minutes while others get called twice in 5 minutes.

This article is about how to fix that.

The architecture: one pipeline, many sources

The pattern that scales is one unified pipeline with source-specific intake bridges. Every lead, regardless of where it came from, lands in the same pipeline. The source is preserved as a tag and custom field, never as a separate pipeline.

Why one pipeline beats one-per-source

Source-specific intake bridges

Each source needs a different intake method. Here's what works for each:

Facebook Lead Ads

Use GHL's native Facebook integration. Map every form field to a custom field in GHL. Critical fields to capture: lead source identifier (ad set name or campaign), UTM parameters (if you use a custom thank-you redirect), and consent checkbox state.

Common pitfall: leaving the native integration on default settings. It'll capture the lead but won't preserve which ad set or creative produced it. Always pass the ad_id through to a custom field.

Google Local Service Ads

Google LSA leads come in as phone calls and messages. Google doesn't push these directly to GHL. Options:

Tag every LSA-sourced lead with source: google-lsa and the specific service category.

Website forms

Direct webhook integration. Every form on your site should post to a GHL inbound webhook. Preserve all UTM parameters (utm_source, utm_medium, utm_campaign, utm_content) as custom fields.

If your forms are on WordPress, Webflow, or another framework โ€” use the native HTTP request capability or a Gravity Forms / WS Form bridge.

Call tracking

CallRail and CallTrackingMetrics both push to GHL via webhook on call completion. Include call duration, recording URL, and source tracking number in the payload.

Source normalization: the step most setups skip

Different sources send different field names. Facebook calls it full_name. Your website might send name. LSA sends customer_name.

Don't let those land in different custom fields. Normalize in a workflow step before the lead enters the pipeline.

The pattern:

  1. Each source has its own dedicated intake workflow
  2. Each intake workflow maps source-specific fields to a normalized set of fields (e.g., full_name, phone_e164, email, source, source_detail)
  3. Once normalized, all leads flow into the main routing workflow regardless of origin

For phone numbers specifically, normalize to E.164 format (+15551234567). This avoids deduplication misses and makes A2P SMS reliable.

Routing logic: territory + availability + round-robin

Once normalized, the routing workflow assigns the lead. The combination that works for most multi-rep businesses:

Filter 1: Territory

Check the prospect's ZIP code (or service area) against rep coverage. Each rep has a custom field listing their ZIP codes. The lead is only eligible for reps whose territory includes the prospect's location.

Filter 2: Business-hours awareness

If a lead comes in outside business hours, don't assign to anyone โ€” drop it in a "Pending Assignment" stage. Assignment happens at the start of the next business day.

If it's during business hours, only assign to reps who are currently on shift (use a custom field currently_available that reps toggle via SMS or app, or tie it to a shift schedule).

Filter 3: Round-robin within eligible set

From the reps who passed filters 1 and 2, assign to whoever's next in the round-robin queue. GHL's native round-robin works fine for this once the eligible set is determined.

Speed-to-lead: the sub-2-minute target

Industry research consistently shows that calling a lead within 5 minutes of inbound is 9-10ร— more effective than calling at 30 minutes. The realistic target for a well-tuned setup is under 2 minutes.

To hit that:

A2P compliance: the part that breaks if you ignore it

If you're auto-firing SMS within seconds of form submission, you're using A2P 10DLC infrastructure. Your brand and campaign must be registered before any of this works at scale.

I've written a separate complete guide to A2P 10DLC registration โ€” read that before you launch a multi-source routing system.

Attribution all the way to closed-won

This is the payoff. Every lead carries source tags through every stage. When an opportunity moves to Won, you can finally answer:

These are the questions that let you reallocate ad spend instead of guessing.

Common pitfalls

Pitfalls to Avoid
  • Multiple pipelines for multiple sources โ€” kills attribution, fragments reporting
  • Skipping source normalization โ€” duplicate detection fails, custom fields multiply
  • No business-hours guard โ€” leads get assigned to off-shift reps and sit untouched
  • Pre-checked SMS consent boxes โ€” A2P compliance issue, can trigger TCR rejection
  • Trusting the native Facebook integration's defaults โ€” without custom field mapping, you lose ad-level attribution
  • No deduplication on phone or email โ€” same prospect can enter multiple times from different sources

Implementation order

If you're building this from scratch, the order that works:

  1. Build the unified pipeline first (just stages, no automation yet)
  2. Set up normalized custom fields (source, source_detail, phone_e164, UTM fields)
  3. Build the central routing workflow (territory โ†’ availability โ†’ round-robin)
  4. Build source-specific intake workflows one at a time โ€” start with the highest-volume source, get it routing correctly, then add the next
  5. Verify A2P 10DLC is registered before adding SMS dispatch
  6. Add SMS dispatch to the routing workflow
  7. Add reporting (Looker Studio or native GHL reports) to surface source attribution and conversion data

Each step takes 1-3 days. Full build is realistically 2-3 weeks for a typical multi-source setup.

When it's working

You'll know it's working when (a) every lead lands in the same pipeline within 60 seconds, (b) rep response time is consistent across sources, (c) you can pull a "revenue by source last 90 days" report without asking anyone to compile it manually, and (d) reps stop checking multiple inboxes.

Taimoor Akhtar
Taimoor Akhtar AI Automation Engineer & GHL Backend Expert ยท 4+ years ยท 65+ companies served

Need help putting this into production?

I work with home services operators, real estate brokerages, and marketing agencies on the exact systems described in this article. Most projects start at $300โ€“$1,200 depending on scope.