Every lead that lands on maazsiddiqui.com gets followed up within seconds, automatically, without me touching anything. A form fill at 2 a.m. fires an alert to my inbox, sends the lead a welcome email matched to how they arrived, and enrolls them in a three-week drip that knows when to shut up. I built the whole thing in n8n in June 2026. It's a 27-node workflow that runs on my own server, and the marginal cost per lead is close to zero.
This is a teardown of that system. Real architecture, real reasoning, and a template you can copy for your own business. I won't claim it doubled my bookings, because I haven't measured that and I don't make up numbers. What I can show you is the design, especially the part most DIY builds get wrong: knowing when to stop emailing someone.
The problem: leads go cold while you're busy
The research on lead response time is old but brutal. A study published in Harvard Business Review back in 2011 found that companies responding to a lead within five minutes were 21 times more likely to qualify it than companies that waited half an hour. Most businesses still take hours or days.
I'm a solo consultant. When a lead comes in, I might be deep in a client's workflow, asleep, or on a call. Manual follow-up meant some leads got a reply in ten minutes and others waited until the next morning, by which point they'd usually talked to someone else or lost interest.
I also didn't want to pay for a CRM just to send a handful of follow-up emails. As an n8n consultant, building this myself was the obvious move: I keep the data, I control the logic, and there's no monthly bill attached to it.
How does the lead capture work?
Every capture point on the site, whether it's a contact form, one of the interactive demos, or the newsletter signup, POSTs the lead to two n8n webhooks.
The first webhook stores the lead in an n8n Data Table called "Portfolio Leads". That's my system of record: name, email, source, timestamp. The second webhook kicks off the nurture workflow itself.
One small frontend detail that matters: the site sends those webhook calls with fetch and the keepalive flag. Without it, a lead who submits a form and immediately clicks away can cancel the request mid-flight, and you silently lose the lead. With keepalive, the browser finishes the POST even after navigation. It's one option on one line of code and it closes a real gap.
What happens in the first minute?
Three things, in order.
First, I get an alert email. The subject line is tagged HOT, WARM, or left neutral depending on the lead's source. Someone who filled the project inquiry form reads very differently from someone who grabbed a newsletter signup, and the tag tells me at a glance whether to drop what I'm doing. The alert also contains a one-click link that stops this specific lead's drip. More on why that exists later.
Second, the workflow checks the lead actually has an email address. Some capture points are loose about required fields, and there's no point enrolling a phone-only lead in an email sequence.
Third, the lead gets a welcome email, and this is where the build earns its keep.
Why five welcome variants instead of one template?
The workflow picks one of five welcome emails based on how the lead arrived:
- High-intent: they asked about a project. The email is short, direct, and points at next steps.
- Download: they grabbed a resource. The email delivers it and adds one practical tip.
- Demo: they played with one of the live demos. The email speaks to what they just tried.
- Newsletter: they subscribed. The email sets expectations and doesn't push.
- Default: anything else gets a sane generic version.
A person who just spent five minutes poking at a working AI demo has a completely different context than someone who typed their email into a newsletter box. Sending both of them the same "Thanks for reaching out!" message wastes the one moment you have their full attention. Matching the copy to the entry point took maybe an hour of writing and it's the cheapest improvement in the whole system.
The copy rules I held myself to: value first, plain-text feel, short, the lead's first name where I have it, no marketing-speak, and an unsubscribe link in every single email. Including the welcome.
The three-week drip, email by email
After the welcome, the lead enters a five-email sequence spread over 21 days. Each email has one job.
| Day | Its job | |
|---|---|---|
| 2 | Quick win | Give them something useful they can apply today, no pitch |
| 5 | Proof | Show real work and background so they know I'm not theoretical |
| 9 | How it works | Explain what an engagement with me looks like |
| 14 | Offer | A direct, low-pressure invitation to book a call |
| 21 | Breakup | "I'll stop emailing now" with the door left open |
The spacing is deliberate. Front-loaded enough to stay in memory while interest is warm, then stretching out so it never feels like a barrage. The breakup email matters more than people expect: it's polite, it's direct, and it ends the sequence on a respectful note instead of just trailing off into silence.
How do you stop a drip when someone books a call?
This is the centerpiece, and it's the part almost every DIY nurture build skips.
The naive version of a drip is a chain of delay nodes: wait two days, send, wait three days, send. It works right up until a lead books a call on day 3 and then gets your day 5 "here's some proof I'm legit" email anyway. Now you look like a machine, because you are one, and a badly built one at that.
My fix is a second n8n Data Table called "Nurture State". Every lead in the sequence has a status there: active or stopped. And here's the rule that makes the whole system trustworthy: every scheduled send is gated. Before any drip email goes out, the workflow looks up the lead's current status and only sends if it's still active. The delay node decides when a send might happen. The state table decides whether it happens.
Three exit paths flip the status to stopped:
- Unsubscribe. Every email carries an unsubscribe link that hits a small, separate n8n webhook workflow. One click, status flipped, no more emails. No "please allow 5 business days".
- They book a call. My Calendly syncs to Google Calendar, and a Google Calendar trigger in n8n watches for new bookings. When a lead's booking appears, the workflow matches them and stops the drip. Someone who's already on my calendar should never get a "want to hop on a call?" email.
- I stop it manually. That one-click link in my alert email. If I've already replied to a lead personally, or I can tell from the message that a drip would be wrong for them, one click pulls them out before the sequence even starts.
If you take a single thing from this case study, take the gating pattern. Delays schedule sends; state authorizes them. Separating those two concerns is what turns a spam cannon into a system you're comfortable attaching your name to.
What does it cost to run?
Almost nothing, which was half the point.
The stack is a self-hosted n8n instance, n8n's built-in Data Tables for state, a Gmail account connected over OAuth for sending, and a Google Calendar trigger for booking detection. The n8n server was already running other workflows, so the nurture engine's marginal cost is effectively zero. No CRM seat, no email platform subscription, no per-contact pricing.
One real constraint: Gmail caps sending at roughly 500 emails a day. For 1:1 nurture at consultant lead volumes, that's plenty, and Gmail-sent mail tends to land well in inboxes. But this design doesn't stretch to bulk newsletters. If I were blasting a 5,000-person list, I'd move sending to a transactional provider like Resend and keep the n8n logic exactly as is. The orchestration layer doesn't care what's underneath it.
Could this replace your CRM?
For lead nurture specifically, at small-business scale, yes. Two data tables and a workflow cover capture, segmentation by source, sequenced follow-up, and suppression. You own every record, and nothing expires when you stop paying, because there's nothing to pay.
What it doesn't give you is pipeline views, deal stages, or a team-shared interface. If you've got five salespeople working leads collaboratively, you still want a CRM, and n8n becomes the automation layer beside it rather than the replacement. That version, with n8n doing the follow-up beside the CRM your team already uses, is what I build as CRM automation. For a solo operator or a small team whose real problem is follow-up consistency, this architecture covers the part of the CRM you'd use.
How to adapt this for your business
The shape transfers to almost any service business. First you need an n8n instance to run it on. I self-host mine, but if you'd rather not manage a server, a managed n8n host like FlowEngine handles the hosting side for you. Nothing below changes either way: the nodes, data tables, and webhooks work the same on any n8n instance. The build order I'd suggest:
- Wire every capture point to a webhook. Forms, lead magnets, booking pages. Two calls: one to store, one to act. Use
keepaliveon frontend fetches. - Build the alert first. Instant notification with source tagging is the highest-value piece and takes an afternoon. Speed-to-lead starts with you knowing the lead exists.
- Write source-aware welcomes. Even two variants (high-intent vs. everything else) beat one generic template.
- Add the drip with gating from day one. Create the state table before you create the delay nodes. Check status before every send, no exceptions.
- Wire all three exits. Unsubscribe webhook, booking detection, manual stop. The system is only as trustworthy as its exits.
Swap the email copy for your offer, adjust the day spacing to your sales cycle, and the architecture holds.
Want a system like this for your leads?
I build workflows like this for clients as an AI automation consultant, and I'm Top Rated Plus on Upwork with a 100% Job Success Score across 80+ jobs. The system in this post runs my own pipeline, so when I build yours, I'm handing over something I trust with my own leads.
If you want automated follow-up that respects your leads and stops the moment they convert, book a 30-minute call. Bring your current capture points and I'll sketch the workflow with you on the call.
Frequently asked questions
Can n8n replace a CRM for lead nurturing?
For nurture specifically at small-business scale, yes. Two n8n Data Tables (one for leads, one for nurture status) plus a workflow cover capture, source-based segmentation, sequenced follow-up, and suppression, with no subscription cost. You still want a CRM if a sales team needs shared pipeline views and deal stages; in that case n8n works best as the automation layer beside it.
How do you stop a drip sequence when someone books a call?
Use a calendar trigger plus a state table. In this build, Calendly syncs bookings to Google Calendar, and an n8n Google Calendar trigger detects the new event, matches the lead, and flips their status to stopped in a Nurture State data table. Because every drip send checks that status before sending, the booked lead never receives another nurture email.
Should drip emails be sent from Gmail or a transactional provider?
A connected Gmail account over OAuth works well for 1:1 nurture volumes and is capped at roughly 500 emails per day. For bulk newsletters or large lists, switch sending to a transactional provider like Resend while keeping the same n8n orchestration logic. The workflow design stays identical; only the sending node changes.
How does the workflow personalize the welcome email?
The site passes the lead's source with the webhook payload, and the workflow routes to one of five welcome variants: high-intent inquiry, resource download, demo user, newsletter signup, or a default. Each variant's copy matches the context the lead arrived from, uses their first name, keeps a plain-text feel, and includes an unsubscribe link.
What stops the system from emailing people who unsubscribed?
Every email contains an unsubscribe link pointing at a small n8n webhook workflow that sets the lead's status to stopped in the Nurture State table. Since each scheduled drip email re-checks that status immediately before sending, an unsubscribed lead is suppressed from the next send onward, with no manual list maintenance.