WorkflowsTutorial

Build a lead-to-CRM automation with Make in an afternoon

Wire a new lead into your CRM and fire an instant text and email, automatically. A speed-to-lead build with Make and GoHighLevel, step by step.

RunbookJune 17, 20268 min read
~/runbook $ cat make-com.md[tutorial]
>_// Workflows
31 lines · workflows.md0x6015

Some links below are partner links. We may earn a commission at no extra cost to you. How we make money.

By the end of this build you will have leads flowing from a form straight into your CRM automatically. A new lead from a web form or a lead ad lands, gets cleaned and tagged by where it came from, drops into your CRM as a contact, and triggers an instant text and email back to that person. The stack is Make as the glue and GoHighLevel as the CRM that sends the follow-up. Budget an afternoon to set it up, then it runs on its own.

Speed is the whole game here. A lead who hears back in the first few minutes is far more likely to book than one who waits an hour. Most small teams lose that window because someone has to notice the lead, open the CRM, and type a reply. This build removes the human from that loop.

What you'll build

One scenario in Make and one workflow in GoHighLevel that hand off to each other:

  • A webhook that catches every new lead the moment it submits.
  • A cleaning and tagging step in Make, so a phone number from a Facebook lead ad and one from your site form both arrive in the same shape, labeled by source.
  • A push into GoHighLevel that creates or updates the contact.
  • A follow-up workflow that fires an SMS and an email back to the lead within seconds.

The source can be anything that sends data: a website contact form, a landing page, a Facebook or Instagram lead ad, a Typeform. As long as it can send the submission to a URL, Make can catch it. For where these high-intent leads come from in the first place, the branded-demand build covers the capture moment.

Stack

Three tools. You build on the first two, and the third is an interchangeable alternative for the glue layer.

The stack

Make logoMakecatches the lead, cleans and tags it, pushes it onward
GoHighLevel logoGoHighLevelstores the contact and fires the instant SMS plus email
Zapier logoZapierthe swap-in alternative if your form lives somewhere odd
  • Make is the automation glue. You build a visual scenario that runs every time a lead arrives. It prices by operations, which changes how cost scales as volume climbs.
  • GoHighLevel is the CRM and the follow-up engine. It holds the contact record, the tags, and the workflow that sends the text and email.
  • Zapier is an alternative for the glue layer if you would rather build there. The shape of the build is identical.

You need an account on both Make and GoHighLevel. Plan pricing on each moves often, so check the current rate on the provider's own pricing page before you commit. Checked June 2026.

Steps

Build the GoHighLevel side first, because you need its webhook URL before the Make scenario has anywhere to send the lead.

The build, in order

1

Create the follow-up workflow in GoHighLevel

In GoHighLevel, go to Automation > Workflows, click Create Workflow, and choose Start from Scratch. This empty workflow is where the lead will land and where the instant follow-up fires.
2

Add the inbound webhook trigger

Click Add New Trigger, search for Inbound Webhook, and select it. GoHighLevel generates a unique webhook URL. Copy it. This URL is the address Make will POST every new lead to. Leave this tab open.
3

Capture a sample so GoHighLevel learns the fields

Click into the trigger and use Fetch Sample Request. GoHighLevel now waits for a test payload. You will send one from Make in a later step, which teaches GoHighLevel the field names (name, email, phone, source) so you can map them.
4

Add the contact and follow-up actions

Below the trigger, click the + to add actions in order: Create/Update Contact (map name, email, phone from the webhook fields), Add Contact Tag (set a tag like the lead source), then Send SMS and Send Email with your first-touch reply. Click Save, then Publish the workflow.
5

Build the catching scenario in Make

In Make, click Create a new scenario. Add the Webhooks app and pick the Custom webhook trigger module. Click Add, give the webhook a name like "new-lead", and save. Make generates its own URL. This is the address your form or lead ad sends submissions to.
6

Listen for a real lead to learn its structure

With the Custom webhook module selected, click Re-determine data structure. Make starts listening. Now submit a real test lead through your form or trigger your lead ad. Make catches it and locks in the field structure, so every later module can reference name, email and phone.
7

Clean and tag the lead

Add a Tools > Set multiple variables module after the webhook. Trim whitespace, lowercase the email, and set a "source" variable based on which form fired. If a Facebook lead ad and a site form both feed this scenario, this is where you label them so the CRM knows where each lead came from.
8

Push the lead into GoHighLevel

Add an HTTP > Make a request module. Set the method to POST, paste the GoHighLevel webhook URL you copied, set the body type to Raw with content type application/json, and map your cleaned fields into the JSON body. Run the scenario once. This is the test payload that GoHighLevel was waiting for in step three.
9

Turn it on

Map the fields inside the GoHighLevel trigger now that it has your sample. Save and publish there. Back in Make, toggle the scenario ON and set its schedule to run immediately. Every new lead now flows end to end on its own.

Once both sides are live, point your real forms and lead ads at the Make webhook URL. Where you paste it depends on the source: a form builder has a webhook or integration field, a Facebook lead ad needs the URL added through a connector, and a landing page form can POST to it directly.

The part that breaks

The order is the trap. People try to map the contact fields in GoHighLevel before any data has reached it, so the dropdowns are blank. The same thing happens in Make if you skip Re-determine data structure and the webhook has never received a payload. Both tools are reactive. They learn the shape of a lead by catching one, not by you describing it.

So the working order is always the same. Open the listener (the GoHighLevel webhook trigger and the Make webhook module), send a single real submission through, then go back and map the fields once they appear. If a field still shows up empty, the test payload did not include it, so send another with that field filled.

The second thing that breaks budgets is firing on junk. A blank or bot submission still triggers the whole chain and still sends a text. Add a filter in Make right after the webhook that only continues when an email or phone exists. It costs nothing and stops your follow-up going out to garbage.

Copy this

A sample JSON body for the HTTP > Make a request module that pushes the cleaned lead into GoHighLevel. Replace the values in braces with your mapped Make variables:

{
  "first_name": "{{name}}",
  "email": "{{email_lowercased}}",
  "phone": "{{phone_trimmed}}",
  "source": "{{lead_source}}",
  "tags": ["new-lead", "{{lead_source}}"],
  "consent": true
}

Keep the field names consistent with what you map inside the GoHighLevel trigger. The "source" value is what lets your follow-up read differently for a paid lead ad versus an organic form fill. The "consent" flag matters: only text and email people who agreed to hear from you, or your messages land in spam and your sender reputation suffers. The email deliverability build covers why that reputation is worth protecting.

Upgrade path

Once the core loop runs, layer on:

  • A second follow-up step in GoHighLevel that waits an hour, checks if the lead replied, and sends a nudge if not. Speed wins the first reply. Persistence wins the booking.
  • Enrichment in Make before the push, so a lead arrives with their company or location already attached. Add an HTTP call to a lookup service between the cleaning step and the GoHighLevel push.
  • Routing by source, so a lead from a paid ad goes to one workflow and an organic form fill to another. The "source" tag you set already makes this a single branch away.

If your forms live in an unusual place that Make struggles to catch, Zapier covers more obscure apps and follows the same pattern. For the paid-traffic side that feeds this build, the Meta Advantage+ build shows how to keep lead ads sending you qualified people, and the automation hub tracks the rest of the no-code stack.

Your move this week

Build the GoHighLevel workflow and the Make scenario, then send one real test lead through end to end. The moment a test submission triggers an instant text back to your own phone, you have a speed-to-lead loop running while every competitor still checks their inbox by hand.

For the next build, the AI recommendations build shows how to turn those follow-ups and reviews into the signal that gets you recommended by the assistants people now ask first.

Frequently asked questions

How fast does this automation respond to a new lead?

Make runs the scenario the moment the webhook receives a lead, usually within a few seconds. GoHighLevel then sends the SMS and email instantly through its workflow, so a new lead gets a reply in well under a minute instead of hours later.

Do I need to know how to code to build this?

No. Make is a no-code visual builder where you drag modules onto a canvas and connect them. GoHighLevel workflows are built the same way, by adding a trigger and actions from menus. The only thing you paste in is a webhook URL and a sample data structure.

Can I use Zapier instead of Make for this build?

Yes. Zapier follows the same pattern: a webhook or form trigger, a formatting step, then a Create Contact and tag action in your CRM. Make prices by operations rather than by task, which differs at higher volume, and Zapier has wider app coverage if your form lives somewhere unusual.

What happens if the same lead submits the form twice?

GoHighLevel matches incoming contacts by email or phone, so a second submission updates the existing contact instead of creating a duplicate. You can also add a filter in Make to skip rows that are missing an email or phone before they ever reach the CRM.

About Runbook

AI tools and automation builds for marketers. What to use, how to wire it, and the workflow to copy this week. How we work

// keep_reading

Related builds

~/runbook $ cat semrush.md[briefing]
// Writing & SEO

> Build an AI-Overview-proof traffic system in a week

81 lines · writing-seo.md0xf0e5
Writing & SEObriefing

Build an AI-Overview-proof traffic system in a week

Google answers most informational searches on the page now. Build the branded, local and buying-intent setup that still sends clicks, step by step.

The move. Stop building for clicks that are vanishing. Build a system that owns your branded search, ranks buying-intent pages, and wins local on Maps.

Jun 13, 2026 · 6 min readRead →
~/runbook $ cat gohighlevel.md[briefing]
// AI Tools

> Set up a default Advantage+ campaign that does not leak

91 lines · ai-tools.md0xcbea
AI Toolsbriefing

Set up a default Advantage+ campaign that does not leak

Meta merged manual and Advantage+ into one flow, so AI sets targeting, placements and budget by default. Build the creative, exclusion and capture setup around it.

The move. AI now owns targeting and budget. Build around the two levers you still control: varied creative and the right exclusions, then capture the lead before it cools.

Jun 13, 2026 · 6 min readRead →
~/runbook $ cat gohighlevel.md[briefing]
// AI Tools

> Use the 3 Performance Max controls Google quietly returned

19 lines · ai-tools.md0xba44
AI Toolsbriefing

Use the 3 Performance Max controls Google quietly returned

Performance Max used to be a black box. In 2026 you can see search terms, block placements account-wide, and add negatives. Set up all three this week.

The move. Turn on the three controls Google added: campaign negatives, account-level placement exclusions, and the search terms report. Then fence off your brand spend.

Jun 11, 2026 · 5 min readRead →