Blogs
/
Build a GoHighLevel AI Voice Agent That Calls Every Lead in Under 60 Seconds

Build a GoHighLevel AI Voice Agent That Calls Every Lead in Under 60 Seconds

12
 MIN READ
October 5, 2026
Build a GoHighLevel AI Voice Agent That Calls Every Lead in Under 60 Seconds
BACK TO BLOGS
Add Retell AI as a preferred source on Google
ON THIS PAGE
Back to top

Speed to lead automation means a new lead gets a phone call the moment they submit your form, gets qualified, and gets booked before they have time to call a competitor. (If you want the case for why speed to lead matters, start there.) This guide builds the system with GoHighLevel and Retell AI: a GoHighLevel form fires a workflow, the workflow starts an outbound call, and an AI voice agent books straight onto your GoHighLevel calendar.

The example is a fictional HVAC company, Comfort Air Demo. A homeowner requests an AC replacement estimate, the phone rings within seconds, and the agent asks what is wrong with the unit, whether they own the home, and when they want it replaced. Then it checks real availability and books a 30 minute consultation. Every prompt used in the build is on this page, ready to copy, so you end up with an automated lead follow-up system that runs on calls, not just texts and emails.

Watch the GoHighLevel and Retell AI build

The video below is the same build, start to finish. The steps and prompts on this page match it, so you can keep this open in a second tab and copy as you go.

How does a speed-to-lead AI voice agent work?

Five systems hand off to each other in a fixed order:

  1. A lead submits a form built in GoHighLevel AI Studio. GoHighLevel creates the contact.
  2. A GoHighLevel workflow triggers on that form submission and checks the contact has a phone number.
  3. The workflow sends a Custom Webhook to Retell's create phone call API with the lead's number, name, service, and GoHighLevel contact ID.
  4. Retell places the call. The agent qualifies the lead, checks open slots on your GoHighLevel calendar, and books the one the lead picks.
  5. After the call, a post-call step writes the summary and outcome back to the same GoHighLevel contact as a note.

Nobody on your team touches it. The lead's first contact with your business is an AI outbound call that ends with a booked appointment. It is the same pattern ISpeedToLead runs at scale; see how ISpeedToLead scaled 24/7 lead response.

What you need to build a speed-to-lead agent in GoHighLevel

  • A GoHighLevel sub-account where you have admin access.
  • A Retell AI account with a phone number set up for outbound calls. Start free if you do not have one. Verifying the number helps keep your calls from showing as spam.
  • Your Retell API key, which the GoHighLevel workflow uses to start calls.
  • About 45 minutes, most of it testing.

Set up the GoHighLevel calendar your AI agent books into

The agent books into a real calendar, so create that first. In GoHighLevel, open Calendars → Calendar Settings and create a new calendar for the appointment you want booked. Set the meeting length (30 minutes in this build), the booking URL, and your availability.

Availability matters more than it looks. The agent can only offer slots this calendar shows as open, so if your hours are narrow, every caller hears the same three times.

Build the lead capture form with GoHighLevel AI Studio

You can build the form by hand, but GoHighLevel AI Studio builds the form and its landing page from one prompt. Open AI Studio and paste this, with your own business details swapped in:

Create or update a lead-capture page for Comfort Air Demo, a fictional HVAC business. If this project already has a page, keep its existing design.

Use the heading Request an AC Replacement Estimate. Include First Name, Phone, ZIP Code, and Service Needed, with AC replacement as the demo selection. Require first name and phone. Add a US phone display mask and ensure the contact phone used for outbound calls includes the country code. Label the button Request My Estimate.

Connect the form to my GHL sub-account through the supported CRM connection flow. Show how all four fields map to the contact. After submission, show: Thanks! Our AI assistant will call you shortly about your request.

Do not show a calendar picker or a second booking step. Keep the existing Hvac booking calendar intact; the Retell agent will book during the call. Do not add a site webhook receiver. I will configure the GHL-to-Retell call workflow separately.

Identify any manual connection steps and tell me how to publish and test the form. Report what is verified and what still needs testing.

The line that matters most is the country code. Retell dials numbers in E.164 format, like +15551234567. A form that saves (555) 123-4567 will fire the workflow and the call will still fail.

Keep consent language on the form. The form in the video says that by submitting, the lead agrees to receive a callback about their estimate. AI calls to leads fall under the TCPA in the US, so read the TCPA rules for AI outbound calls before you point this at real traffic.

AI Studio asks whether to connect the form to your CRM. Say yes, so submissions create GoHighLevel contacts. Publish the page and open its standalone URL to confirm the form works.

Connect GoHighLevel to Retell AI with a Private Integration token

Retell connects to GoHighLevel with two values: a Private Integration token and the sub-account's Location ID. The Retell GoHighLevel integration page covers everything the connection supports.

  1. In Retell, open Integrations, find GoHighLevel, and click Connect. It asks for an API key and a Location ID.
  2. In your GoHighLevel sub-account, go to Settings → Private Integrations and create a new integration. Name it something like Retell AI.
  3. Select scopes. GoHighLevel shows the token only once, so copy it immediately and paste it into Retell's API key field.
  4. Go to Settings → Business Profile in GoHighLevel, copy the Location ID, and paste it into Retell.
  5. Click Add Account. A green connected status means it worked.

In the video every scope is selected to keep the demo short. For a real account, grant only what the build uses:

ScopeWhat it covers
contacts.readonly, contacts.writeThe connection test, contact lookups, and the post-call note
calendars.readonlyCheck Availability, and listing your calendars when you set up the tools
calendars/events.readonly, calendars/events.writeBooking, rescheduling, and cancelling appointments
locations/customFields.readonlyReading custom fields such as Service Needed and ZIP Code

The full scope list is in the GoHighLevel connection docs. If a tool's setup dialog comes up empty later, a missing scope is almost always why.

Generate the outbound AI voice agent with one Conductor prompt

Conductor, Retell's AI copilot, builds the agent for you. You describe the agent, it proposes a plan, and nothing changes until you approve it. Open Conductor and paste:

Create a new draft outbound conversation-flow voice agent named Comfort Air Demo Speed to Lead for a fictional HVAC company. It follows up with people who just submitted a GHL form requesting an AC replacement estimate. Its goal is to qualify the request and book a 30 minute phone consultation on our estimate calendar.

Use these incoming dynamic variables: {{first_name}}, {{service_requested}}, {{zip_code}}, and {{ghl_contact_id}}. Use America/New_York as the demo timezone, and confirm the lead's timezone before booking. If a variable is missing, ask naturally instead of reading its placeholder aloud.

Start with: Hi {{first_name}}, this is Alex, the AI assistant with Comfort Air Demo. You just requested help with {{service_requested}}. Is now a good time for a couple of quick questions?

Keep responses short and ask one question at a time. Find out what is happening with their AC, whether they own the home, and when they want to replace it. Use information already provided. If they are interested in an estimate consultation, ask their preferred day and time, check real availability, offer available options, and book only after they choose a slot. Confirm the exact date, time, and timezone only after the booking tool succeeds.

Let callers interrupt and change their preferences. If it is the wrong person, apologize and end the call without revealing more lead details. If they decline or ask not to be called again, stop the pitch and record that outcome. If a requested slot is unavailable, offer alternatives. If booking fails, explain that it is not confirmed and record the need for follow-up. Never invent prices, appointments, or completed actions.

Configure voicemail to end the call for this demo.

Create a clear flow with labeled conversation and function steps. Show the proposed changes for review. Identify any missing tool connections or manual settings. Leave the agent as a draft and do not initiate phone calls.

The four dynamic variables are how the agent knows who it is calling. The GoHighLevel workflow fills them when it starts the call, so the agent opens with the lead's name and the service they asked for.

Conductor replies with a plan: the call flow, how it will handle example calls, and the data fields. Reply to proceed and it builds a draft agent with a Book Consultation subflow. Its booking tools are placeholders at this point, so they get swapped for the real GoHighLevel tools next.

Wire GoHighLevel Check Availability and Book Appointment into the agent

Conductor's first draft uses placeholder custom functions for availability and booking, because it cannot assume which calendar you use. Open the agent's functions and add the native GoHighLevel tools:

  • Check Availability, set to the calendar you created for bookings.
  • Book Appointment, set to the same calendar. Name the contact ID input ghl_contact_id so it matches the dynamic variable.

Then hand the rest of the wiring back to Conductor:

Replace the placeholder check_availability and book_appointment custom functions in the Book Consultation subflow with the GoHighLevel Check Availability and Book Appointment tools I just added, both set to my Hvac booking calendar. Book Appointment must use {{ghl_contact_id}} as the contact ID. Remove the placeholder record_outcome custom function; outcomes should come from post-call analysis instead.

Add post-call analysis fields for call_outcome (booked, declined, wrong_person, do_not_call, voicemail, follow_up_needed), ac_issue, owns_home, replacement_timeline, and appointment_booked. Set appointment_booked true only for a successful booking. Configure a post-call workflow using Create Note to save the call summary and outcome on the same GHL contact. Preserve wrong-person and do-not-call outcomes for the external workflow to handle.

Show the proposed changes. If you cannot configure any native tool, calendar selection, field mapping, or post-call step directly, give me the exact manual steps. Clearly identify anything still unconnected. Do not invent credentials or use dummy endpoints.

Review the changes and accept them. The post-call note uses GoHighLevel's Create Note tool as a post-call function, so every call leaves a summary on the lead's contact record. The outcome fields come from post-call analysis.

Test the AI voice agent with simulated calls before it dials a real lead

Simulation testing runs the agent against an AI caller playing a scenario, so you find broken paths before a real lead does. Ask Conductor:

Create and run a simulation test suite for this agent with these six cases: homeowner books successfully, lead changes preferred day mid-call, wrong person answers, do-not-call request, booking tool error, and no available slots. For each case, state what a pass looks like before running it. Show me the results as a table, and for anything that fails or errors, explain the cause and propose the fix for review.

In the recorded build, five of six passed on the first run:

Test caseFirst run
Homeowner books successfullyPass
Lead changes preferred day mid-callPass
Wrong person answersPass
Do-not-call requestPass
Booking tool errorPass
No available slotsError

The error was a real gap: the flow had no path for an empty availability response. The fix prompt:

The No available slots case errored. Add a path for when Check Availability returns no open slots: tell the caller nothing is open in that window, offer to check a different day, retry at most 3 times, then offer a callback from the team and record follow_up_needed. Show the change for review, then rerun only that test.

Simulation runs are billed by LLM usage, and Conductor asks before starting them. See testing with Conductor for how suites are built and priced. When every case is green, publish the agent.

Trigger the AI call from a GoHighLevel workflow webhook

The last piece starts the call. In GoHighLevel, open Automation → Workflows and click Build with AI. Paste this, replacing the two placeholders in angle brackets:

Create a draft workflow named "Comfort Air Demo: Form to Retell Call."

When someone submits my existing Comfort Air Demo estimate form, immediately send one outbound-call request to Retell using that contact's details.

Use AI Studio Form Submitted, filtered to my exact project and estimate form. If this form uses External Tracking, use its verified submission trigger instead. If you cannot identify the form, leave that selection unresolved and tell me what to select.

Add one Custom Webhook action named "Start Retell Call": URL https://api.retellai.com/v2/create-phone-call, method POST, Content-Type application/json, Authorization Bearer token; leave the credential for me to enter. Use the JSON body below.

Map Service Needed and ZIP Code using the actual contact fields in my account. Do not invent field keys. Only proceed when the contact has a phone number. Allow re-entry so I can repeat the demo with my own number.

Retell will qualify the lead and book into my existing Hvac booking calendar. Keep this workflow unpublished. Show me every field or credential I must finish manually, and do not claim it has been tested.

The webhook body:

{
  "from_number": "<YOUR_RETELL_NUMBER_E164>",
  "to_number": "{{contact.phone}}",
  "override_agent_id": "<YOUR_AGENT_ID>",
  "retell_llm_dynamic_variables": {
    "first_name": "{{contact.first_name}}",
    "service_requested": "<INSERT_GHL_SERVICE_FIELD>",
    "zip_code": "<INSERT_GHL_ZIP_FIELD>",
    "ghl_contact_id": "{{contact.id}}",
    "system_timezone": "America/New_York"
  }
}

from_number is a number you own in Retell and override_agent_id is the agent you published after testing. Use GoHighLevel's variable picker for the Service Needed and ZIP Code fields so they resolve to real values, not literal text. All dynamic variable values must be strings.

Pick the trigger that matches your form. A form built with GoHighLevel's Sites form builder uses the Form Submitted trigger. A form built in AI Studio uses AI Studio Form Submitted, or the external tracking trigger if the form reports submissions that way. The rest of the workflow is identical.

The finished workflow has three parts: the form trigger, a phone number check, and the webhook that starts the call.

Fix the GoHighLevel webhook errors that stop the call

A red exclamation point on the webhook action. GoHighLevel's AI builder fills in the JSON body but leaves the webhook URL field empty. Paste https://api.retellai.com/v2/create-phone-call into URL, set Authorization to Bearer with your Retell API key, and save. The error clears.

"Failed, Retry Limit Reached" in the execution log. Open the workflow's Execution History, click the failed run, and open the webhook step to read Retell's response. The usual causes, in order:

  • The phone number is missing +1.
  • from_number is not a number on your Retell account.
  • The agent ID is wrong, or the agent was never published.
  • The API key is wrong or was rotated.

Fix one at a time and resubmit the form. Because the workflow allows re-entry, you can keep testing with your own number.

Test the full speed-to-lead flow with your own phone number

Publish the workflow, open the form, and submit it with your own number. The phone should ring within a minute. Answer as a homeowner, pick a slot, and then check three places: the appointment on your GoHighLevel calendar, the call recording and transcript in Retell's call history, and the note on the contact in GoHighLevel.

If all three are there, every new lead from that form now gets a call before they can fill out a competitor's form.

What to add to your speed-to-lead agent next

  • Tag the outcome to fire your existing follow-up. GoHighLevel's Add Contact Tags tool can tag a lead booked or follow-up, and your existing GoHighLevel workflows trigger on tags.
  • Go deeper on qualification. The AI appointment setter guide builds the inbound version of this agent with explicit disqualify branches.
  • Use it on every inbound channel. The same agent pattern handles AI lead qualification on inbound calls, not only form fills.
  • Follow up on leads that did not book. Retell's AI lead follow-up calls back the follow_up_needed outcomes, and there is a version built for AI lead follow-up for home services.

See the Retell and GoHighLevel integration for everything the connection supports, or AI appointment booking for the other calendars Retell books into.

GoHighLevel AI voice agent FAQ

How fast does the AI call a new lead?

Within a minute, and usually seconds. The workflow fires the moment the form is submitted, and Retell starts dialing as soon as the webhook arrives. In the recorded demo the phone rang before the confirmation message had finished loading.

Do I need GoHighLevel's own Voice AI for this?

No. This build uses GoHighLevel for the form, contact, calendar, and workflow, and Retell AI for the voice agent and the call. GoHighLevel's built-in Voice AI is a separate product. Teams pick a Retell agent when they want a node-by-node conversation flow, simulation tests before launch, and post-call analysis fields they define themselves, while keeping GoHighLevel as the CRM.

Can the agent book into a GoHighLevel calendar?

Yes. Retell's native GoHighLevel tools check availability and book appointments on a calendar in the connected sub-account. The appointment is linked to the contact and created with status confirmed.

What happens if the wrong person answers or the lead says stop calling?

The agent apologizes and ends the call without sharing lead details, or stops the pitch on a do-not-call request. Both outcomes are recorded in post-call analysis and written to the contact note, so your team can act on them.

Does this work for businesses other than HVAC?

Yes. Change the business name, service, and qualifying questions in the Conductor prompt and the form fields in the AI Studio prompt. The workflow and webhook stay the same for any service business that books consultations.

ROI Calculator
Estimate Your ROI from Automating Calls

See how much your business could save by switching to AI-powered voice agents.

All done! 
Your submission has been sent to your email
Oops! Something went wrong while submitting the form.
   1
   8
20
Oops! Something went wrong while submitting the form.

ROI Result

2,000

Total Human Agent Cost

$5,000
/month

AI Agent Cost

$3,000
/month

Estimated Savings

$2,000
/month
Live Demo
Try Our Live Demo

A Demo Phone Number From Retell Clinic Office

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Read Other Blogs

Revolutionize your call operation with Retell