Guide · Make.com · Leads · HubSpot · Slack

Make lead automation: forms to CRM and Slack

Short answer: Most lead automations in Make are the same five steps, whatever the form tool:

By Flowpaja · Published

This guide contains affiliate links, marked “affiliate link”.

A form with an instant trigger, an email dedupe step on the cleaned address, and one Slack alert per new person in #sales-hot
Five steps for any form tool: intake, clean, dedupe, save and alert, plus failure alerts.
Disclosure: everything in this guide works with plain Make.com and the apps it connects. At the end we mention our own Make templates and our Make scenario fix service on Fiverr. Module names, settings and limits were checked against Make's webhooks help and Make's HubSpot CRM docs in October 2026. Menus and limits change, so check them if something looks different.
  1. Intake: a trigger for your form (instant where possible).
  2. Clean: stop rows without a valid email; lowercase and trim the email.
  3. Dedupe: check whether you've seen this person (email) or this exact delivery (request ID) before.
  4. Save: create or update the contact in your CRM or sheet.
  5. Alert: post to Slack, with hot leads in their own channel, plus an alert when a step fails.

This page shows each step once and links to the detailed guide for your tools. A typical lead costs 3–5 credits. What decides whether it fits the Free plan is mostly the trigger: instant triggers cost nothing while waiting, while a sheet checked every 15 minutes uses about 2,880 credits a month before any lead arrives.

Step 1: Pick the trigger for your form

Form or sourceMake triggerWaiting costDetailed guide
Google FormsGoogle Sheets › Watch New Rows on the response sheet, or Google Forms › Watch Responses (both scheduled)1 credit per checkGoogle Forms to HubSpot and Slack, Google Forms to Slack
Typeform (affiliate link)Typeform › Watch Responses (instant)0Typeform to HubSpot, Typeform to Google Sheets
Tally (affiliate link)Tally › Watch New Responses (instant)0Tally to HubSpot, Tally to Google Sheets
Facebook Lead AdsFacebook Lead Ads › New Lead (instant)0Facebook Lead Ads to Sheets without duplicates
WebflowWebflow › Watch Events, or a Custom webhook0Webflow form submissions to HubSpot
Any site or app that can send a webhookWebhooks › Custom webhook (instant)0Make webhook tutorial

Still choosing a form tool? Fillout vs Tally vs Typeform compares free plans, native integrations and Make triggers.

For webhook triggers, decide early between parallel runs (Make's default) and Process data in order in the scenario settings. In order is safer for dedupe and rotation, because two submissions from the same person can't be checked at the same moment.

Step 2: Clean and check the email

Right after the trigger, add a filter: the email exists and contains @. Everything else stops there for 1 credit (the trigger), or goes to a review alert if you'd rather see it.

Then use the cleaned value everywhere, in searches and in writes: {{lower(trim(1.email))}} (click your form's email field instead of typing 1.email). A lookup for jamie@example.com doesn't find a row that says Jamie@Example.com .

Step 3: Dedupe on the right key

There are two kinds of duplicates, and they need different keys:

DuplicateExampleKeyWhere Flowpaja shows it
Repeat deliveryThe sender retries after a timeout, a double click sends the form twiceThe request or lead IDWebhook to Sheets with a duplicate check (free, request_id)
Repeat personSomeone fills in the form again next weekThe cleaned emailLead Capture to Sheets + Slack (free), Lead Router ($19)

An email check catches both kinds, which is what you want for a contact list and a "new lead" Slack channel. Use the ID instead when every enquiry should be its own row, for example in a log of submissions.

Where to check:

  • Google Sheets: Search Rows on the key column, then a router on Total number of bundles: = 0 → new, > 0 → existing. Search Rows with no match still outputs one empty bundle, so never route on an aggregator's length. (Search Rows returns nothing)
  • HubSpot: Create or Update a Contact matches on email by itself. Or Search for Contacts with Email equal to first, when new and returning leads need different steps.
  • Data store: a record per key, if you'd rather not scan a sheet. The Free plan includes one 1 MB data store.

Step 4: Save the contact

HubSpot. Use Create or Update a Contact when every lead is handled the same way (1 credit), or search first and route to Create a Contact / Update a Contact (2 credits) when you need to know who's new. Two things go wrong most often:

Pipedrive: search the person by email first; see Pipedrive + Make.

Google Sheets only: Add a Row on the new route, Update a Row (with the found row number) on the existing route.

Map only the fields the form should own. A resubmission shouldn't overwrite the owner your sales team set by hand.

Step 5: Qualify with the answers you already have

Keep it to one to three answers the lead gave you, such as budget, company size or timeline. You don't need enrichment or AI to start.

Simplest: route on one answer. A router after the save step: Budget equal to $10k+ → #sales-hot, everything else → #leads. This is exactly what Lead Router does.

A points column, if you use more than one answer. In a Google Form response sheet, put this in the first empty header cell (here column H) and adjust the columns and answers to your form:

={"Score"; ARRAYFORMULA(IF(A2:A="", "", IF(F2:F="$10k+", 2, 0) + IF(E2:E="50+", 1, 0)))}

Then filter in Make on Score greater than or equal to (Numeric) 2 for the hot route. The formula lives in the sheet, so changing the rules doesn't mean editing the scenario. (Formula syntax is Google Sheets, where text in quotes is correct.)

Want a written summary of each lead too? Google Sheets + ChatGPT in Make shows the credit and token cost.

Step 6: Alert and assign

  • Slack › Send a Message with name, company, the qualifying answers and email. If the channel is private, the Slack user who connected Make must be a member, or you'll get channel_not_found (fix).
  • One alert per person: put Slack only on the new route of your dedupe router, so a repeat submission updates the record without a second ping.
  • Taking turns between reps: a counter and a router assign each new lead to the next person: Round-robin lead assignment in Make.

Step 7: Make failures visible

A lead that fails silently is worse than one that never came in, because everyone thinks it was handled.

  • Right-click each CRM and Sheets module → Add error handler → Slack › Send a Message to #automation-alerts with the error and the lead's email → Skip (formerly Ignore). The run continues and you know which lead to check. For temporary errors, Retry (formerly Break) tries again later; it needs Store incomplete executions on, which is available on the Free plan.
  • A scenario with an instant trigger is switched off after its first unhandled error. A scheduled one is switched off after 3 consecutive errors by default.
  • With Process data in order on, an unresolved incomplete execution holds new webhook requests in the queue. Check the queue if leads stop arriving after an error.

Details: Make error handling, Scenario stopped or disabled, Make error cheat sheet.

Step 8: Budget the credits

Make's Free plan includes 1,000 credits a month and 2 active scenarios, with a 15-minute minimum interval for scheduled scenarios.

What uses creditsCredits
Instant trigger while no leads arrive0
Scheduled check, every 15 minutes, 30 daysabout 2,880
Scheduled check, hourly, 30 daysabout 720
Scheduled check, daily, 30 days30
Each lead (trigger, check, save, Slack)about 3–5
Routers and filters0

Measured examples from Flowpaja's templates: Lead Capture uses 4 credits for a new lead with Slack, 3 for a repeat and 1 when the email is missing; Lead Router uses 1 credit per scheduled check plus about 3 per lead. So 100 leads a month through an instant trigger is roughly 400 credits, while the same leads through a 15-minute sheet check would blow the Free plan on checks alone. Work out your own in the Make credits calculator and see Make credits explained.

Before you switch it on

Test with fictional names and @example.com emails:

  1. A brand-new lead → one record, one Slack alert.
  2. The same email again, in capitals with a trailing space → the same record updated, no second alert.
  3. A hot answer (e.g. $10k+) → the hot channel.
  4. A submission without an email → stopped by the filter.
  5. A forced error (e.g. a Slack channel that doesn't exist) → an alert in #automation-alerts, and the scenario still on.

Templates for this flow

TemplateWhat it doesPrice
Lead Capture → Sheets + Slack, with dedupeCustom webhook → email dedupe in Sheets → one Slack alert per new email; repeats update the rowFree
Webhook to Sheets with a duplicate checkSaves each webhook request once, keyed on request_idFree
Google Form to SlackPosts each new Google Form response to one Slack channelFree
Lead RouterGoogle Form → exact-email search in HubSpot → create or update → $10k+ budgets to #sales-hot, the rest to #leads → failure alerts to #automation-alerts$19, 30-day money-back guarantee

Lead Router doesn't do round-robin or owner assignment; it routes by channel. Add rotation with the round-robin guide if you need it.

No Make account yet? Create a free Make account (affiliate link). Flowpaja may earn a commission if you sign up through it, at no extra cost to you. Links marked "affiliate link" include our partner code for Typeform, Tally or Make.

FAQ

Can I start with only Google Sheets and Slack?
Yes. A sheet with an email column is enough for dedupe and alerts. Add a CRM when the team needs owners, notes and pipelines. The free Lead Capture template is that setup.
Instant or scheduled trigger?
Instant whenever your form tool offers one: leads arrive in seconds and waiting is free. Make's Google Forms setups run on a schedule (Watch New Rows on the response sheet, or Google Forms › Watch Responses), so pick an interval that fits your credits.
Should I dedupe by email or by submission ID?
By email for contacts and alerts: it catches repeat people and repeat deliveries. By submission ID when you want every enquiry as its own row.
How many scenarios does this need?
One per form is typical. The Free plan allows 2 active scenarios, so with more forms either upgrade or send several forms to one webhook and tell them apart with a field.

Lead flow not behaving?

Send the exported blueprint and the failed run's error text to our Make scenario fix service on Fiverr. No logins needed.

Stuck on an error in your own Make scenario? Make scenario fix / debugging on Fiverr, from $25: send the exported blueprint and a description of the error, no logins needed.

← All guides · All templates

Make, HubSpot, Pipedrive, Slack, Google, Google Forms, Google Sheets, Typeform, Tally, Meta, Facebook and Webflow are trademarks of their owners. Flowpaja is independent and not affiliated with or endorsed by them. Menus, limits and prices change; check the providers' current help.