Loading...

Lead Enrichment

Instant Inbound Lead Auto-Responder & HubSpot CRM Sync

Automatically capture web form leads, sync contacts and notes to HubSpot CRM, and trigger an instant personalised email auto-reply via SMTP in under 15 seconds.

Make.comBeginnerUnder an hourUpdated September 18, 2026
How the data moves
01Form submitWebsite posts JSON to a Make webhook
02ValidateMalformed or missing email stops here
03DedupeHubSpot searched by lowercased email
04SyncContact created or updated, message logged as a note
05Auto-replyPersonalised SMTP email, typically inside 15 seconds

Make.com · HubSpot CRM · SMTP · Webhooks

1-Click Clone to Make.com

1-Click Clone to Make.com: Opens Make.com. Create a free account, then import the blueprint file below at Scenarios -> Create a new scenario -> Import Blueprint.

Download Free Blueprint (.JSON): Downloads as soon as you submit, and a copy lands in your inbox with the setup documentation.

Visual Proof

The Scenario, As It Runs

01
Form submitWebsite posts JSON to a Make webhook
02
ValidateMalformed or missing email stops here
03
DedupeHubSpot searched by lowercased email
04
SyncContact created or updated, message logged as a note
05
Auto-replyPersonalised SMTP email, typically inside 15 seconds
Module chain as exported in the blueprint file. Diagram, not a screenshot.
No Zapier task ceiling

Make prices per operation, not per task, and this scenario is six operations per lead. A thousand leads a month sits inside the Core plan rather than forcing a tier upgrade.

Deduplication by email lookup

HubSpot is searched on the lowercased address before anything is written, so a repeat enquiry updates the existing contact instead of creating a second one.

Dynamic personalisation tags

First name, company, and the submitted message are mapped into the reply, with fallbacks so a blank field never renders as "Hi ,".

The reply is sent last

If HubSpot fails, the run stops before telling the sender their message arrived somewhere it did not. Failures land in the dead-letter queue with the payload intact.

The Problem

A lead fills in your contact form and then hears nothing for six hours while the notification sits in a shared inbox. Meanwhile nobody has created the CRM record, so when someone does reply they are working from the email rather than from a contact with a history. The first response is the one that decides whether you are still in the running, and it is the one nobody owns.

Prerequisites & Tool Stack

Everything this blueprint calls. Check you have them before you start - the usual reason a build stalls halfway is a key that takes a day to get approved.

Make.com

The automation engine. Six operations per lead, so 1,000 free operations covers roughly 160 enquiries a month before you need a paid plan.

1,000 operations a month, no card

HubSpot CRM

Holds the contact and the timeline note. The free tier covers everything this blueprint does - unlimited contacts, notes, and the search API it dedupes against.

Free forever, unlimited contacts

SMTP mailbox on your own domain

Sends the auto-reply. Google Workspace, Microsoft 365, or standard webmail all work - it is a generic SMTP send, not a Gmail-specific module.

Some links above are partner links and we earn a commission if you sign up through them. It costs you nothing extra, and it does not decide what goes in a blueprint - the self-hosted option is recommended wherever it is genuinely the better call.

What It Costs To Run

Monthly, at the volumes this blueprint was tested against. Worth comparing against what the manual version of this work costs you in hours.

ComponentCostAt what volume
Make.com$0 - $10.59/moFree to 1,000 ops; Core covers ~1,600 leads
HubSpot CRM$0Free tier, unlimited contacts
SMTP$0 - $7/moA mailbox you almost certainly already pay for

The files

Download the blueprint

The scenario file imports straight into Make. It arrives in your browser immediately and in your inbox as a backup, so you still have it tomorrow when you actually sit down to build.

hubspot_lead_responder_blueprint.json - the full Make scenario

The webhook payload contract your form has to post

The HTML auto-reply template with the fallback tags already in place

SMTP settings for Google Workspace, Microsoft 365, and cPanel mail

The file downloads straight away and a copy is emailed with the setup documentation. You also join the TechZapp list - notes on new blueprints, roughly monthly, and one click unsubscribes. See our privacy policy.

Technical Breakdown

The decisions that matter, in the order you will meet them. Everything here is a thing that broke in testing before it was a rule.

01.Webhook setup: map the incoming payload

Add a Custom Webhook as the trigger and copy the URL it gives you into your form handler. Submit the form once with real values before building anything else - Make learns the payload shape from a live request, and a webhook with no data structure makes every later field mapping guesswork. Post these five fields as JSON.

json
{
  "firstname": "Dana",
  "lastname": "Whitfield",
  "email": "dana@northwind-logistics.com",
  "company": "Northwind Logistics",
  "message": "We need our order intake wired into NetSuite.",
  "source": "https://techzapp.com/contact/"
}

02.HubSpot node: search first, then create or update

Search Objects on contacts with a filter of email EQ the lowercased address, limit 1. Route on whether hs_object_id came back: create when it did not, update when it did. Then attach the enquiry as a NOTE engagement rather than writing it into a contact property - a property holds one value, so the second enquiry from the same person would overwrite the first.

text
Search Objects   -> contacts, email EQ {{ lower(trim(1.email)) }}, limit 1
Router
  Route A        -> Create Object   (filter: 3.hs_object_id does not exist)
                    firstname, lastname, email, company, lifecyclestage = lead
  Route B        -> Update Object   (filter: 3.hs_object_id exists)
                    firstname = {{ ifempty(1.firstname; 3.firstname) }}
Create Engagement -> NOTE, associated to the contact id from whichever route ran

03.SMTP node: connection, then the dynamic template

Add an Email > Send an Email module with an SMTP connection: your mail host, port 465 for implicit TLS or 587 for STARTTLS, and the full mailbox address as the username. Send from a real monitored mailbox on your own domain - a no-reply address on a domain without SPF and DKIM is the single most reliable way to land this in spam. Wrap every merge tag in a fallback.

html
Subject: Thanks {{ ifempty(1.firstname; "there") }} - we have your message

<p>Hi {{ ifempty(1.firstname; "there") }},</p>
<p>Thanks for getting in touch{{ if(length(trim(1.company)) > 0; " from " + 1.company; "") }}.
   Your message reached us and a real person is reading it - we reply within one business day.</p>
<blockquote>{{ replace(1.message; newline; "<br>") }}</blockquote>
<p>If anything else comes up in the meantime, just reply to this email.</p>

When It Goes Wrong

The difference between a demo and something you can leave running is entirely in this table. Every row is a failure the blueprint handles explicitly rather than hoping about.

FailureWhat happens
Form posts a missing or malformed emailStopped at the validation step before any HubSpot write, so no junk contact is created and no reply is attempted.
Contact already exists in HubSpotThe search finds it and the router takes the update branch. ifempty() keeps existing values where the new submission left a field blank.
HubSpot returns a 429Make retries with backoff. The auto-reply is sequenced last, so a CRM failure never sends a confirmation for a lead that was not saved.
SMTP authentication failsThe run errors after the CRM write succeeded, so the lead is safe in HubSpot and the incomplete run sits in the dead-letter queue for a manual reply.
The same form is submitted twiceSecond run finds the contact, updates rather than duplicates, and adds a second timeline note - which is the correct record of two enquiries.

Payload Example

What HubSpot holds after one run.

json
{
  "contact": {
    "hs_object_id": "70251983104",
    "email": "dana@northwind-logistics.com",
    "firstname": "Dana",
    "company": "Northwind Logistics",
    "lifecyclestage": "lead",
    "hs_lead_status": "NEW",
    "created": true
  },
  "note": {
    "engagement_type": "NOTE",
    "body": "Website enquiry - We need our order intake wired into NetSuite.",
    "associated_contact": "70251983104"
  },
  "autoreply": {
    "to": "dana@northwind-logistics.com",
    "sent_at": "2026-09-18T09:14:07Z",
    "elapsed_seconds": 11.4
  }
}
On this page

Get the files by email


Platform: Make.com

Category: Lead Enrichment

Level: Beginner — No terminal required. An afternoon.

Build time: Under an hour

Not sure this is the right platform?

Visual scenarios on a hosted platform. Fastest to a working result, priced per operation.

Browse All Blueprints

Done-For-You

Need custom HubSpot pipelines or multi-step CRM routing?

If your team uses custom enterprise properties, multiple pipelines, or is mid-way through a Salesforce to HubSpot migration, the three-module version above stops being enough quickly.

A TechZapp sprint is a fixed-scope, fixed-price week. A senior engineer builds it in your environment, hands over the repository and the runbook, and you own every part of it afterwards. No platform of ours to keep paying for.

What the sprint covers

Mapped to your custom properties and pipelines, with a dry run against a sandbox portal first

Routing by territory, product line, or lead score - assigned to the right owner on creation

Deduplication across existing records, plus the backfill for whatever is already duplicated

Sprint pricing

$497 - $1,500

48-hour fixed-fee setup sprint


Fixed scope agreed before we start

Built in your environment, not ours

Repository, infrastructure, and runbook handed over

Two weeks of support after handover included

Scope This Sprint

Tell us what you are integrating with. We reply within one business day, and we will say plainly if the blueprint above already covers it.