TCPA-Compliant Lead Routing in GHL

Build a compliant lead qualification and call routing system in GoHighLevel.

Introduction

30 Second Summary

Every time a sales team calls someone who never gave consent, the company risks a $500 to $1,500 fine per call. High-volume call centers in financial services handle thousands of leads a day, so a single compliance gap can cost millions.

In this project, you will architect a complete lead qualification and call routing system inside GoHighLevel that enforces TCPA compliance at every stage. You will build the pipelines, workflows, and telephony configuration that a CRM Systems Architect delivers for agencies handling debt settlement or mortgage leads.

What You'll Build

A production-ready revenue operations system with automated lead scoring, consent-first call routing, DND enforcement, and a KPI dashboard for operational visibility.

By the end of this project, you'll have:

  • A 6-stage sales pipeline with custom fields for lead score, consent status, lead source, and call disposition.
  • A TCPA-compliant lead capture form connected to an automated qualification workflow that scores leads and routes them to the correct pipeline stage.
  • A compliance automation system that enforces DND, handles opt-outs, and verifies consent before any outbound communication.
  • Secret Mission: Add an AI-powered conversational SMS sequence that pre-qualifies leads before routing them to a live agent.

Are there any prerequisites?

You need an active GoHighLevel sub-account with access to workflows and pipelines. You will also purchase one local phone number inside your sub-account (approximately $1.15 per month via LC Phone).

Purchase and Configure Your Phone Number

Every outbound call center system starts with a phone number. Your number is the entry point for inbound leads and the identity behind every outbound call your team makes.

In this step, you will purchase a local US phone number inside your GoHighLevel sub-account and configure it with compliance-first settings. These settings include call recording announcements, whisper messages for agents, and call routing.

In this step, get ready to:
  • Purchase a local US phone number with Voice and SMS capabilities.
  • Configure compliance settings including call recording and a two-party consent announcement.
  • Set up call routing so inbound calls ring a live agent.
Purchase a local phone number

GoHighLevel uses LC Phone as its built-in telephony system. Under the hood, LC Phone is powered by Twilio infrastructure, so you get enterprise-grade voice and SMS without needing a separate Twilio account.

  • In your GHL sub-account, click Settings in the bottom-left sidebar.
  • Select Phone Systems from the settings menu.
  • Click + Add Number in the top-right corner.
  • Select Add Phone Number from the dropdown.
  • Choose United States as the country.
  • Click Filters and set the Capabilities filter to include both SMS and Voice.
  • Set the Number Type filter to Local.
  • Select any available number from the list.
  • Click Proceed to Buy to complete the purchase.

Why a local number instead of toll-free?

Local numbers have higher answer rates for outbound calls because they look familiar to recipients. In a call center environment, this directly impacts your connect rate and pipeline conversion.

What about identity verification?

If your sub-account has not completed identity verification, GHL may prompt you to verify via Persona (government-issued ID and a live selfie). This is a one-time check. Follow the on-screen prompts to complete it before proceeding.

Your new number should now appear under the Manage Numbers tab in Phone Systems. You will see it listed with its area code and capabilities.

Don't see any available numbers?

Phone number availability depends on Twilio's current inventory. If no numbers appear for your preferred area code, click Refresh Results or try a nearby area code. Any US local number will work for this project.

Help me find an available phone number in GoHighLevel

Configure compliance and call settings

A raw phone number without compliance settings is a liability. In regulated industries like financial services, every outbound call must announce recording and every inbound call needs proper routing.

  • In the Manage Numbers tab, find the number you just purchased.
  • Click the three dots icon beside your number.
  • Select Edit Configuration from the popup menu.

The configuration panel opens with all the settings you need. Work through these one by one.

  • In the Name Your Number field, enter Main Sales Line.
  • Toggle Call Recording to enabled.
  • Toggle Play Call Recording Message to enabled. This plays a legally required announcement informing callers the call may be recorded.
  • In the Whisper Message field, enter Inbound lead call - press 1 to connect.
  • Set the Incoming Call Timeout to 20 seconds.

What does each setting do?

Call Recording automatically records every call for compliance auditing and quality assurance. Play Call Recording Message plays a "this call may be recorded" announcement to satisfy two-party consent laws in states like California and Illinois.

The Whisper Message plays to your agent before connecting the call. It tells the agent what type of call is coming in so they can prepare. The 20-second Incoming Call Timeout routes unanswered calls to CRM voicemail instead of ringing forever.

Whisper messages only play on forwarded calls

The whisper message only plays when calls are forwarded to an external phone number. If you answer calls through the GHL web app, mobile app, or desktop app, the whisper message will not play. This is expected behavior.

Configure call routing

Without call routing, inbound calls have nowhere to go. You need to assign at least one user so the phone actually rings when a lead calls in.

  • Scroll down to the Ring Incoming Calls to Selected Users section in the same configuration panel.
  • Select your own user account (or a test user) from the dropdown.
  • Click Save to apply all your configuration changes.

How does simultaneous ring work?

When a call comes in, all selected users' phones ring simultaneously until someone answers or the 20-second timeout expires. You can assign up to 7 users to a single number. For this project, assigning yourself is enough to test the system.

After saving, your phone number configuration should show the name "Main Sales Line" with Call Recording enabled, the recording announcement active, your whisper message set, and routing assigned to your user.

Settings not saving?

Make sure you scroll all the way down and click Save at the bottom of the configuration panel. If the page refreshes without saving, check that the Whisper Message field does not contain special characters.

Help me save my phone number configuration in GoHighLevel

Why LC Phone instead of standalone Twilio?

LC Phone IS Twilio infrastructure under the hood. GHL sub-accounts use Twilio for all voice and SMS. You get the same telephony architecture experience (call routing, recording, compliance) without managing a separate Twilio account.

In an interview, you can speak to Twilio's role in the stack because you are already using it.

Your phone line is live and configured for compliance. Next up, you will architect the sales pipeline and custom fields that give your system structure.

Architect the Pipeline and Custom Fields

Your phone number is live and configured for compliance. Now you need the data architecture that powers every automation in this system.

Before a single lead enters your CRM, you need custom fields to track their score, consent status, and source. You also need a pipeline with defined stages so leads flow through a predictable sales process. Finally, you need tags that your workflows can apply and check against. Think of this step as laying the foundation that every later automation builds on.

In this step, get ready to:
  • Create four custom contact-level fields for lead scoring, consent tracking, source attribution, and call disposition.
  • Build a 6-stage sales pipeline to manage lead lifecycle from capture to close.
  • Create five tags that your compliance and routing workflows will use for automation logic.
Create custom fields for lead management

Custom fields store structured data on each contact record. Your workflows will read and write these fields to score leads, verify consent, and track call outcomes.

  • In your GoHighLevel sub-account, click Settings in the bottom-left sidebar.
  • Click Custom Fields in the left menu.
  • Click Add Field to create your first custom field.

You will create four fields total. Start with the Lead Score field.

  • Set the field name to Lead Score.
  • Set the field type to Number (Numerical).
  • Make sure the object type is set to Contact so this field lives on the contact record.
  • Click Save.

What is Lead Score used for?

Your qualification workflow will write a numeric value here based on the service the lead selects. Higher scores route leads to more advanced pipeline stages and trigger faster follow-up.

Now create the Consent Status field. This is the field your compliance workflows will check before any outbound communication.

  • Click Add Field again.
  • Set the field name to Consent Status.
  • Set the field type to Dropdown.
  • Add three dropdown options: Pending, Consented, and Revoked.
  • Click Save.

Why track consent as a custom field?

TCPA violations carry fines of $500 to $1,500 per call. By storing consent status as a field, your workflows can check it before every outbound action. If a contact's status is anything other than Consented, no call or SMS goes out.

Next, create the Lead Source field to track where each lead came from.

  • Click Add Field.
  • Set the field name to Lead Source.
  • Set the field type to Dropdown.
  • Add five dropdown options: Facebook Ad, Google Ad, Website Form, Referral, and Inbound Call.
  • Click Save.

Finally, create the Call Disposition field to record the outcome of each call attempt.

  • Click Add Field.
  • Set the field name to Call Disposition.
  • Set the field type to Dropdown.
  • Add five dropdown options: No Answer, Voicemail, Qualified, Not Qualified, and Callback Requested.
  • Click Save.

You should now see all four custom fields listed on your Custom Fields page: Lead Score, Consent Status, Lead Source, and Call Disposition.

Don't see all four fields?

Make sure you clicked Save after each field creation. If a field is missing, click Add Field and recreate it. Also confirm the object type is set to Contact for each field.

Help me troubleshoot my custom fields in GoHighLevel

Create the sales pipeline

A pipeline defines the stages a lead moves through from first contact to close. Your workflows will create opportunities and advance them through stages based on lead score and qualification status.

  • Click Opportunities in the left sidebar.
  • Click Pipelines at the top of the page.
  • Click Create New Pipeline.
  • Enter Main Sales Pipeline as the pipeline name.

Now add six stages in the exact order below. The order matters because leads will progress through these stages sequentially.

  • Add stage 1: New Lead.
  • Add stage 2: Qualified.
  • Add stage 3: Booked Call.
  • Add stage 4: Proposal Sent.
  • Add stage 5: Closed Won.
  • Add stage 6: Closed Lost.
  • Click Save.

You should now see your Main Sales Pipeline displayed with all six stages arranged left to right.

Why these six stages?

This is a standard B2C high-ticket pipeline used in financial services (debt settlement, mortgage, personal loans). Each stage represents a meaningful progression: the lead is captured, qualified by score, booked for a call, sent a proposal, and then closed.

Having both Closed Won and Closed Lost gives your KPI dashboard clear conversion metrics. You can measure exactly where leads drop off.

Stages in the wrong order?

You can drag and drop stages to reorder them. Make sure New Lead is first (leftmost) and Closed Lost is last (rightmost).

Help me fix my pipeline stage order in GoHighLevel

Create tags for workflow automation

Tags are lightweight labels that workflows can add or check in conditional logic. Each tag you create here will be applied automatically by the workflows you build in later steps.

  • Click Settings in the bottom-left sidebar.
  • Click Tags in the left menu.
  • Create a tag named TCPA-Consented.
  • Create a tag named DNC-Requested.
  • Create a tag named Speed-to-Lead.
  • Create a tag named Hot Lead.
  • Create a tag named Callback-Queue.

You should now see all five tags listed on your Tags settings page.

What will each tag do?

  • TCPA-Consented marks contacts who have given explicit consent for outbound calls and SMS.
  • DNC-Requested flags contacts who have opted out of all communication.
  • Speed-to-Lead identifies missed-call contacts who need immediate follow-up.
  • Hot Lead marks high-scoring leads (score 80+) for priority routing.
  • Callback-Queue holds contacts who requested a callback at a later time.

Your data architecture is locked in. You have custom fields for scoring, consent, source, and disposition. You have a pipeline with clear stages. You have tags ready for automation logic. Next up, you will build the lead capture form that feeds data into this system.

Build the TCPA-Compliant Lead Capture Form

Your pipeline and custom fields are ready to receive leads. Now you need a way to actually capture those leads while staying on the right side of federal law.

The TCPA (Telephone Consumer Protection Act) can cost your organization $500 to $1,500 per violation for every unauthorized call or text. In this step, you will build a lead capture form that collects explicit, documented consent before any outbound communication happens.

In this step, get ready to:
  • Create a lead capture form with contact and service interest fields.
  • Add TCPA-compliant consent checkboxes for calls and SMS separately.
  • Configure the form submission to map consent to your custom fields.
Create the lead capture form

Your form is the front door of your entire system. Every lead that enters your pipeline starts here, so you need to capture the right information for scoring and routing.

  • In your GoHighLevel sub-account, click Sites in the left sidebar.
  • Click Forms from the submenu.
  • Click Create Form in the top right corner.
  • Give your form a name. Enter TCPA-Compliant Lead Capture as the form name.

You should now see the form builder with a blank form ready for fields.

  • Add a First Name field by dragging it from the field options into your form.
  • Add a Last Name field.
  • Add a Phone field.
  • Add an Email field.
  • Add a Dropdown field. Set the label to What service are you interested in?.
  • Add three options to the dropdown: Debt Relief, Mortgage Refinance, and Personal Loan.

Why these specific service options?

These options represent high-ticket financial services where TCPA compliance is critical. Debt relief, mortgage, and personal loan leads are exactly the type of leads that high-volume call centers handle.

The dropdown value will feed into your lead scoring workflow in the next step. Different services will receive different scores based on their qualification potential.

Add TCPA-compliant consent checkboxes

This is the most legally critical part of your form. TCPA requires explicit prior written consent before any automated calls or texts. A single missing checkbox or vague consent language can trigger violations.

  • In the form builder, add a Custom Checkbox element to your form. This is your call consent checkbox.
  • Enter the following TCPA-compliant consent language as the checkbox label text:

"By checking this box, I provide my express written consent to be contacted by [Your Company Name] and its agents at the phone number provided above, including through automated telephone dialing systems, artificial intelligence, or pre-recorded messages, for purposes of marketing, appointment scheduling, and service updates. I understand that my consent is not a condition of purchase. View our Privacy Policy."

What makes this consent language TCPA-compliant?

TCPA-compliant consent must include four elements. First, explicit disclosure that calls may use AI or automated systems. Second, a clear statement of purpose (marketing, appointments, or service updates).

Third, a reference to your privacy policy. Fourth, a statement that consent is not required to make a purchase. Missing any of these elements can invalidate your consent record.

  • Mark this checkbox as Required in the field settings.
  • Confirm the checkbox is NOT pre-checked. The learner must actively click it to give consent.
  • Add a second Custom Checkbox element below the first. This is your SMS consent checkbox.
  • Enter the SMS consent label: "By checking this box, I consent to receive text messages from [Your Company Name] at the phone number provided. Message frequency varies. Message and data rates may apply. Reply STOP to opt out at any time."
  • Mark this SMS checkbox as Required as well.
  • Confirm this checkbox is also NOT pre-checked.

Why separate checkboxes for calls and SMS?

TCPA best practice requires separate consent for each communication channel. A contact might consent to phone calls but not text messages, or vice versa. Bundling them into one checkbox weakens your legal standing if a complaint is filed.

Don't see the Custom Checkbox option?

Look in the form builder's element panel for "Checkbox" or "Custom Fields" section. In some GHL versions, you may need to scroll down in the elements list or check under the "Custom" category.

Help me find the Custom Checkbox element in GoHighLevel's form builder.

Configure the form submission action

Your form collects consent, but that consent needs to flow into the contact record so your workflows can check it before any outbound communication.

  • Click on your call consent checkbox field in the form builder to open its settings.
  • In the field mapping options, map this checkbox to your Consent Status custom field.
  • Set the value to Consented when the checkbox is checked. This updates the contact record automatically on submission.
  • Click Save to save your form.
  • Click Publish to make the form live and available for your workflow triggers.

You should see a confirmation that your form is published. The form is now ready to receive submissions and feed data into your pipeline workflows.

Why map consent at the form level?

By mapping the consent checkbox directly to a custom field on submission, you create an immediate, auditable record of consent on the contact. Your workflows in the next step will check this field before allowing any outbound calls or SMS. No consent record means no outbound communication.

Form won't publish?

Make sure all required fields are properly configured and that your consent checkboxes have label text entered. GHL may block publishing if a required field has no label or if the dropdown has no options defined.

Help me troubleshoot why my GoHighLevel form won't publish.

Your form is live and legally sound. Next up, you will build the workflow that takes each form submission, scores the lead, and routes it to the correct pipeline stage based on their service interest and consent status.

Build the Lead Qualification and Routing Workflow

Your pipeline, custom fields, tags, and lead capture form are all in place. Now you need the brain that connects them together.

In this step, you will build a workflow that fires every time someone submits your lead capture form. The workflow scores the lead based on their service interest, routes them into the correct pipeline stage, and verifies consent before authorizing any outbound communication.

In this step, get ready to:
  • Create a workflow triggered by your TCPA-compliant form submission.
  • Build lead scoring logic that assigns different scores based on service interest.
  • Add consent verification that blocks outbound calls and SMS for non-consented contacts.
Create a new workflow with the form submission trigger

Workflows in GoHighLevel are event-driven automations. You define a trigger (the event that starts the workflow) and then add actions that execute in sequence.

  • In your GoHighLevel sub-account, click Automation in the left sidebar.
  • Click Workflows.
  • Click Create Workflow in the top right corner.
  • Select Start from Scratch.
  • Click Add New Trigger inside the workflow builder.
  • Search for and select Form Submitted as the trigger type.
  • In the trigger configuration panel, select your TCPA-Compliant Lead Capture Form from the form dropdown.
  • Click Save Trigger.

What does this trigger do?

Every time a contact fills out your lead capture form and hits submit, this workflow fires. The form data (name, phone, email, service interest, and consent checkbox values) flows into the workflow as contact properties you can reference in later actions.

You should see the trigger node appear in your workflow canvas with "Form Submitted" displayed on it.

Don't see your form in the dropdown?

Make sure your form is published. Go to Sites > Forms and confirm the form status shows as active. Unpublished forms do not appear in the workflow trigger dropdown.

Help me troubleshoot my form trigger

Build the lead scoring and routing logic

Lead scoring assigns a numerical value to each contact based on how likely they are to convert. Higher-value services get a higher score, which determines whether the lead goes straight to a sales rep or stays in a nurture queue.

  • Click the + button below your trigger to add a new action.
  • Search for and select If/Else (under Logic).
  • In the first branch condition, set the field to What service are you interested in? and the value to Debt Relief.
  • Under this branch, add an Update Contact Field action. Set the field to Lead Score and the value to 80.
  • Add a second branch to the same If/Else. Set the condition field to What service are you interested in? equals Mortgage Refinance.
  • Under this branch, add an Update Contact Field action. Set Lead Score to 90.
  • Add a third branch (or use the Else/default path) for Personal Loan. Add an Update Contact Field action setting Lead Score to 60.

Why these score values?

Mortgage Refinance leads score highest (90) because they typically represent the highest deal value in financial services. Debt Relief scores 80 because of high volume and urgency. Personal Loan scores 60 because these leads often require more nurturing before conversion.

The threshold of 80 means Debt Relief and Mortgage Refinance leads route directly to a sales rep, while Personal Loan leads enter a longer qualification process.

Now add the second If/Else branch that routes leads into the correct pipeline stage based on their score.

  • After all three scoring paths converge, add a new If/Else action.
  • Set the condition to: Lead Score is greater than or equal to 80.
  • In the "Yes" branch (score >= 80), add an Add Tag action and select the tag Hot Lead.
  • Below the tag action, add a Create/Update Opportunity action. Select Main Sales Pipeline, set the stage to Qualified, and set status to Open.
  • In the "No" branch (score < 80), add a Create/Update Opportunity action. Select Main Sales Pipeline, set the stage to New Lead, and set status to Open.

What is an opportunity in GoHighLevel?

An opportunity is a deal record that lives inside your pipeline. Each opportunity is tied to a contact and sits in a specific stage. Moving opportunities between stages is how you track a lead's progress from first touch to close.

Your workflow canvas should now show the form trigger, the service-interest If/Else with three scoring paths, and the score-based If/Else that creates opportunities in either the Qualified or New Lead stage.

Not sure where to place the second If/Else?

The second If/Else must come after all three scoring branches merge back together. In the workflow canvas, look for where the paths reconnect after the Update Contact Field actions. Place your new If/Else at that convergence point so every lead passes through the score check regardless of which service they selected.

Help me structure my workflow branches

Add consent verification and routing

The final piece ensures your system never makes an outbound call or sends an SMS to a contact who has not explicitly consented. This is the compliance safeguard that separates a professional system from one that racks up TCPA violations.

  • After the opportunity creation actions (below both the Yes and No branches of your score If/Else), add a new If/Else action.
  • Set the condition to: contact field Consent Status equals Consented.
  • In the "Yes" branch (consent granted), add an Add Tag action and select TCPA-Consented.
  • Below the tag, add an Internal Notification action. Set the notification text to New qualified lead ready for outbound call and assign it to the user who should receive the alert.
  • In the "No" branch (consent missing), add an Add to Workflow or Send Email action that places the contact into a nurture email sequence only. Do not add any call or SMS actions on this branch.

Why email only for non-consented contacts?

TCPA violations carry fines of $500 to $1,500 per call. If a contact did not check the consent boxes on your form, you cannot legally call or text them using automated systems. Email is the safest channel for nurturing these contacts until they provide explicit consent through another touchpoint.

  • Name your workflow by clicking the title area at the top. Enter Lead Qualification and Routing.
  • Click Save in the top right corner.
  • Toggle the workflow status from Draft to Published using the switch at the top right.

Your published workflow should show a green "Published" status. The canvas should display the full flow: Form Submitted trigger, service-interest scoring branch, score-based routing branch, and consent verification branch.

Workflow won't publish?

GoHighLevel requires every branch to have at least one action. Check that both the "Yes" and "No" paths on each If/Else contain at least one action node. Empty branches prevent publishing.

Also confirm your trigger is saved. Click on the trigger node and verify it shows your form name. An unconfigured trigger also blocks publishing.

Help me debug my workflow publishing issue

Your lead qualification engine is live. Every form submission now gets scored, routed to the correct pipeline stage, and verified for consent before any outbound communication. Next up, you will build the compliance automations that handle opt-outs and enforce DND across the entire system.

Build Compliance Automations

Your lead qualification workflow routes contacts into the right pipeline stage and checks for consent before triggering outbound communication. But what happens when a contact revokes their consent after they have already entered your system?

A single outbound call to a contact who has opted out can cost your agency $500 to $1,500 in TCPA fines. In this step, you will build the automations that enforce compliance in real time: a DND opt-out workflow that instantly revokes consent, messaging compliance settings that include opt-out language in every SMS thread, and a missed-call speed-to-lead workflow that responds within 60 seconds while still respecting consent boundaries.

In this step, get ready to:
  • Create a DND opt-out workflow that revokes consent and removes contacts from all active automations.
  • Configure messaging compliance with automatic opt-out language and periodic reminders.
  • Build a missed-call speed-to-lead workflow that creates an opportunity and follows up instantly.
Create the DND opt-out workflow

When a contact enables Do Not Disturb, your system needs to immediately stop all outbound communication. GoHighLevel automatically skips communication steps for DND contacts, but you also need to update your custom fields and notify your team so no one manually reaches out.

  • Navigate to the Automation section in your left sidebar.
  • Click Workflows.
  • Click Create Workflow, then select Start from Scratch.
  • Name this workflow DND Opt-Out.

Now add the trigger that fires whenever a contact enables DND.

  • Click Add New Trigger.
  • Search for and select Contact DND.
  • Set the Direction filter to Outbound.
  • Set the DND Flag filter to Enabled DND for All Channels OR Enabled DND for Specific Channels (select SMS and Calls).
  • Click Save Trigger.

What is DND in GoHighLevel?

DND (Do Not Disturb) is a contact-level flag that stops all automated outreach immediately. GoHighLevel automatically skips communication steps in workflows that conflict with DND settings. Your workflow adds extra protection by updating your custom fields and alerting the team.

With the trigger in place, add the actions that lock down the contact record.

  • Click the + button below your trigger to add a new action.
  • Search for and select Update Contact Field.
  • Select the Consent Status field.
  • Set the value to Revoked.
  • Click Save Action.
  • Add another action: Add Contact Tag.
  • Select the tag DNC-Requested.
  • Save the action.
  • Add another action: search for Remove from All Workflows.
  • Select it and save. This stops the contact from receiving any further automated messages from any workflow in your account.
  • Add a final action: Internal Notification.
  • Set the notification type to Email or In-App.
  • Enter a message like: Contact {{contact.full_name}} has opted out of all communications. DND enabled, consent revoked..
  • Save the action.
  • Click Save in the top right to save the workflow.
  • Toggle the workflow to Published using the switch at the top of the workflow builder.

Why remove from all workflows?

GoHighLevel skips DND contacts in communication steps automatically. But the contact may still be sitting inside a workflow waiting for a non-communication action (like a tag update or field change). Removing them entirely ensures your system treats their opt-out as absolute.

Don't see the Contact DND trigger?

Make sure you are creating a workflow from scratch, not using a template. The Contact DND trigger is available in the trigger search when building custom workflows. If you still cannot find it, check that your sub-account has phone system access enabled.

Help me find the Contact DND trigger in my GoHighLevel workflow builder.

Configure messaging compliance settings

Every SMS thread your system sends must include opt-out language. GoHighLevel has a built-in messaging compliance feature that automatically appends this language to your messages at a configurable interval.

  • Click Settings in the bottom left of your sidebar.
  • Click Phone Numbers.
  • Select the Messaging tab at the top.
  • Click the Messaging Compliance sub-tab.

You should see the compliance configuration panel. Configure each setting as follows.

  • In the Opt-Out Message field, enter: Reply STOP to unsubscribe.
  • In the Sender Information field, enter your business name (for example, NextWork Financial Services or your own agency name).
  • Toggle Periodic Opt-Out to enabled.
  • Set the interval to 30 days. This automatically re-sends the opt-out language and sender information in active SMS threads every 30 days.
  • Click Save.

What does Periodic Opt-Out do?

In a high-volume call center, SMS conversations can stretch over weeks or months. Periodic Opt-Out ensures that even long-running threads periodically remind the contact how to unsubscribe. This protects your agency if a contact claims they were never given the option to opt out.

Don't see the Messaging Compliance sub-tab?

Make sure you are on the Messaging tab (not the Manage Numbers tab) inside Settings > Phone Numbers. The Messaging Compliance sub-tab appears within the Messaging section.

Help me find the Messaging Compliance settings in GoHighLevel.

Build the missed-call speed-to-lead workflow

Speed-to-lead is one of the most important metrics in outbound sales. Research consistently shows that responding to a lead within 5 minutes dramatically increases conversion rates. This workflow catches every missed inbound call and triggers an immediate follow-up sequence while still checking consent before sending any SMS.

  • Navigate back to the Automation section and click Workflows.
  • Click Create Workflow, then Start from Scratch.
  • Name this workflow Missed-Call Speed-to-Lead.

Set up the trigger to fire on missed or unanswered calls.

  • Click Add New Trigger.
  • Search for and select Call Status.
  • Set the status filter to No Answer or Missed.
  • Save the trigger.

Now add the actions that create an opportunity and prepare for follow-up.

  • Add a new action: Create/Update Opportunity.
  • Select Main Sales Pipeline as the pipeline.
  • Set the stage to New Lead.
  • Set the status to Open.
  • Save the action.
  • Add another action: Add Contact Tag.
  • Select the tag Speed-to-Lead.
  • Save the action.
  • Add a Wait action.
  • Set the wait time to 0 minutes. This ensures the next actions fire immediately without delay.
  • Save the action.

Why add a 0-minute wait?

A 0-minute wait acts as a processing checkpoint in GoHighLevel workflows. It ensures the previous actions (opportunity creation, tag assignment) have fully completed before the workflow evaluates the next condition. Without it, the If/Else branch might execute before the contact record is fully updated.

Now add the consent check. The workflow must verify the contact has consented before sending any SMS.

  • Add an If/Else condition.
  • Set the condition to: Consent Status equals Consented.
  • Save the condition.

Inside the "Yes" branch (consent confirmed), add the SMS and notification actions.

  • In the Yes branch, add a Send SMS action.
  • Enter the following message:
Hi {{contact.first_name}}, sorry we missed your call! A team member will call you back within 5 minutes. Reply STOP to opt out.
  • Save the SMS action.
  • Add one more action in the Yes branch: Internal Notification.
  • Set it to notify the assigned user with a message like: Missed call from {{contact.full_name}} - speed-to-lead SMS sent. Call back within 5 minutes..
  • Save the action.

Why include 'Reply STOP' in the SMS?

Even though you configured Periodic Opt-Out at the system level, including opt-out language directly in triggered SMS messages is a best practice. It provides the contact with an immediate way to opt out of this specific communication. If they reply STOP, GoHighLevel's DND system activates and your DND Opt-Out workflow handles the rest.

  • Leave the "No" branch empty. Contacts without consent will still get an opportunity created (from the earlier actions) but will not receive any outbound SMS.
  • Click Save in the top right to save the workflow.
  • Toggle the workflow to Published.

Workflow not saving or publishing?

Check that every action in your workflow has been individually saved (each action card should show a green checkmark). GoHighLevel will not publish a workflow that contains unsaved or incomplete action cards. Also verify that your If/Else condition references the exact custom field name Consent Status with the value Consented (case-sensitive).

Help me troubleshoot why my GoHighLevel workflow won't publish.

You now have three layers of compliance automation working together. Your DND workflow catches opt-outs and revokes consent immediately. Your messaging compliance settings ensure every SMS thread includes opt-out language. Your speed-to-lead workflow demonstrates that even time-sensitive follow-ups respect consent boundaries. Next up, you will build a KPI dashboard to track how this entire system performs.

Build the KPI Dashboard

Your compliance automations are live. The system now enforces DND, tracks consent status, and triggers speed-to-lead follow-ups automatically.

A revenue operations system is only as good as the visibility it provides. Without a dashboard tracking pipeline conversion, call outcomes, and response times, you cannot prove the system works or identify where leads are dropping off.

In this step, you will build a KPI dashboard that gives you real-time operational visibility into your pipeline, call performance, and lead response metrics.

In this step, get ready to:
  • Create a new reporting dashboard in GoHighLevel.
  • Add pipeline funnel, value, and stage duration widgets.
  • Add call reporting metrics and document speed-to-lead measurement.
Create the reporting dashboard

GoHighLevel's Reporting section lets you build custom dashboards with drag-and-drop widgets. You will create a dedicated dashboard for your sales operations metrics.

  • In your GHL sub-account, click Reporting in the left sidebar.
  • Click Dashboards.
  • Click Create New Dashboard.
  • Enter Sales Operations KPIs as the dashboard name.
  • Click Save to create the empty dashboard.

You should now see your new dashboard open with a blank canvas ready for widgets.

Don't see the Dashboards option?

Make sure you are in the Reporting section (not the Opportunities section). The Dashboards tab appears at the top of the Reporting page.

If you still don't see it, confirm your sub-account plan includes reporting features.

Help me find the Dashboards section in GoHighLevel Reporting.

Add pipeline widgets

Pipeline widgets show you where leads are converting and where they are getting stuck. You will add three widgets that give you a complete picture of pipeline health.

  • On your Sales Operations KPIs dashboard, click Add Widget (or the + icon).
  • Select the Pipeline Funnel widget type.
  • Configure it to display conversion rates between your stages: New Lead, Qualified, Booked Call, and Closed Won.
  • Save the widget.

What does the Pipeline Funnel show?

The funnel visualizes the percentage of contacts that move from one stage to the next. If 100 leads enter as New Lead but only 40 make it to Qualified, you have a 40% conversion rate at that transition.

This is the single most important view for a call center manager because it reveals exactly which stage is the bottleneck.

  • Click Add Widget again.
  • Select the Pipeline Value widget type.
  • Configure it to show total deal value broken down by stage.
  • Save the widget.
  • Click Add Widget one more time.
  • Select the Stage Duration widget type.
  • Configure it to show average time contacts spend in each stage of your Main Sales Pipeline.
  • Save the widget.

Why track stage duration?

Stage duration tells you how long leads sit in each phase before moving forward or dropping off. If contacts spend an average of 7 days in "Qualified" but only 1 day in "Booked Call," it means your team is slow to book appointments but fast to present once they do.

This insight drives operational decisions like adding more callers or adjusting follow-up cadence.

Your dashboard should now display three pipeline widgets. The data will populate as contacts flow through your system.

Add call and response metrics

Pipeline data alone does not tell the full story. You also need visibility into call activity so you can track whether your team is actually connecting with leads.

  • Click Add Widget.
  • Select the Call Reporting widget type.
  • Filter the widget to your Main Sales Line phone number.
  • Configure it to display total calls, answered vs. missed breakdown, and average call duration.
  • Save the widget.

What does the Call Reporting widget track?

This widget aggregates call data for your specific phone number. Total calls shows volume. The answered vs. missed breakdown reveals whether your team is picking up. Average call duration indicates conversation quality.

A high missed-call rate paired with your Speed-to-Lead workflow means the system catches what your team misses.

Now you need to document one metric that GHL's native reporting cannot calculate automatically: speed-to-lead response time.

  • Open your dashboard's settings or description field.
  • Add a manual tracking note in the description explaining the following: speed-to-lead time is measured by comparing the timestamp of opportunity creation to the timestamp of first outbound contact.
  • Note in the description that for advanced analytics, this metric would be tracked using a Make.com integration that exports timestamps to a spreadsheet for calculation.
  • Save the dashboard.

Why document this limitation?

GHL's native reporting does not automatically calculate the time between opportunity creation and first outbound call. In a production environment, a Systems Architect would solve this with a Make.com or Zapier workflow that logs timestamps to a Google Sheet or data warehouse.

Documenting this in your dashboard description shows you understand the platform's limitations and know how to solve them. This is exactly the kind of systems thinking interviewers look for.

Your completed dashboard should now show four widgets: Pipeline Funnel, Pipeline Value, Stage Duration, and Call Reporting.

Widgets showing no data?

This is expected if you have not submitted any test contacts through your system yet. The widgets will populate once contacts enter your pipeline and calls are made through your Main Sales Line number.

To test, submit a contact through your TCPA-compliant form and verify the opportunity appears in your pipeline. The funnel and value widgets will update within a few minutes.

My KPI dashboard widgets are empty even after submitting test contacts.

Secret mission

Add AI-Powered Conversational Pre-Qualification

Your lead qualification workflow routes contacts based on form data alone. But what if you could have an automated SMS conversation that asks follow-up questions and scores leads based on their replies? Build a conversational pre-qualification sequence that engages leads via text before routing them to a live agent.

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely.

Cost warning

Your purchased phone number costs approximately $1.15/month via LC Phone. You will also pay small per-use fees for any calls or SMS messages sent (pennies per message or minute).

If you do not plan to demo or use this system, choose Pause or Delete below to avoid ongoing charges.

Resources you used:

  • Phone number (~$1.15/mo via LC Phone in your GHL sub-account).
  • Main Sales Pipeline with 6 stages.
  • Custom fields (Lead Score, Consent Status, Lead Source, Call Disposition).
  • Tags (TCPA-Consented, DNC-Requested, Speed-to-Lead, Hot Lead, Callback-Queue).
  • TCPA-compliant lead capture form.
  • Workflows (Lead Qualification, DND Opt-Out, Missed-Call Speed-to-Lead).
  • Sales Operations KPIs dashboard.

Keep everything running

No action needed. Choose this if you are still actively building or plan to demo the system during interviews.

  • The phone number costs $1.15/mo and you only pay for actual call/SMS usage (pennies per message or minute).
  • Your workflows will continue to fire on form submissions and missed calls.
  • This is ideal if you want to record a Loom walkthrough showing the live system in action.

Pause - I'll come back to this later

Unpublish your workflows to stop automations from firing, but keep the architecture intact for screenshots and recordings.

  • Go to Automation > Workflows.
  • For each workflow (Lead Qualification, DND Opt-Out, Missed-Call Speed-to-Lead), toggle the workflow status to Draft/Unpublished.
  • Your pipeline, custom fields, tags, form, and dashboard all remain intact.
  • The phone number will still cost $1.15/mo while it remains purchased, but no automations will fire.

Delete - I don't want to use this again

Remove all project resources and stop all charges.

  • Go to Settings > Phone Systems, select your phone number, and release it. You will not be charged after releasing the number.
  • Go to Automation > Workflows and delete each workflow you created.
  • Go to Opportunities > Pipelines and delete the Main Sales Pipeline.
  • Go to Sites > Forms and delete your TCPA-compliant lead capture form.
  • Go to Reporting > Dashboards and delete the Sales Operations KPIs dashboard.
  • Optionally, go to Settings > Custom Fields and remove the fields you created (Lead Score, Consent Status, Lead Source, Call Disposition).
  • Optionally, go to Settings > Tags and remove the tags you created.

That's a Wrap!

That's a Wrap!

Nice work. You just built a production-grade revenue operations system that most GoHighLevel users never attempt.

You've learned how to:

  • Architect a TCPA-compliant lead qualification and call routing system with lead scoring, consent verification, and conditional pipeline routing.
  • Build compliance automations that enforce DND opt-outs, track consent status, and prevent outbound communication to non-consented contacts.
  • Configure telephony with call recording, whisper messages, and speed-to-lead response workflows. Plus build a KPI dashboard for operational visibility into pipeline conversion and call performance.
  • Added an AI-powered conversational SMS pre-qualification sequence that scores and routes leads before they reach a live agent.

This system is your portfolio piece. Record a Loom walkthrough showing the architecture, the workflow logic, and the compliance safeguards. That Loom is your application.

Ready to quiz yourself?