Speed matters with enquiries. The longer a lead waits, the more likely they’ve already contacted someone else. Yet in many small businesses the website form sends an email to a shared inbox, someone copies it into a spreadsheet or CRM later, and nobody notices when the form stops working.
This guide walks through a workflow that removes those gaps. We built it in n8n and tested it on n8n 2.44.5 against a mock CRM before publishing (details below). You can download it, or use the design with Zapier or Make.
What the workflow does
Website form ──► Validate and normalise ──► Valid? ──no──► Reply 400 with the errors
│
yes
▼
Confirm to visitor (200)
▼
Find contact by email in CRM
▼
Existing? ──yes──► Update contact
│no
▼
Create contact (with consent record)
▼
Create deal (service, page, message)
▼
Alert the team in chat
If any CRM step fails 3 times ──► Failure workflow alerts a person with a link to the failed run
Four design choices matter more than the tool:
- Validate before anything else. Required fields, a real-looking email, a phone number in a recognisable format, and a hidden “honeypot” field that real visitors never fill in but spam bots do.
- Confirm to the visitor early. Once the data is valid, the visitor gets their “thank you” straight away. CRM slowness never makes the form look broken.
- One contact per person. Look the email up first, then update or create. Repeat enquiries become a second deal on the same contact, not a duplicate person.
- Never fail silently. Each CRM call retries three times. If it still fails, a separate workflow alerts the team with a link to the failed run, so the lead can be added by hand.
The UAE details we handle
- Phone numbers arrive as
050 123 4567,0501234567,971501234567,00971501234567or+971 50 123 4567. The workflow normalises the common formats to+971501234567, so the CRM, WhatsApp links and dialers all work. - Email is trimmed and lowercased, so
Sara@Example.comandsara@example.commatch the same contact. - Consent: if the form has a marketing opt-in tick box, the workflow stores it with a timestamp. That’s the record you’ll want under the UAE’s data protection law. See UAE PDPL and marketing consent.
How we tested it
We ran the workflow on a self-hosted n8n 2.44.5 instance against a mock CRM and a mock chat endpoint that logged every request:
| Test | Input | Result |
|---|---|---|
| New lead | Name with spaces, mixed-case email, 050 123 4567, consent ticked |
200 to visitor. Contact created as sara@example.com, +971501234567, consent timestamp saved. Deal and team alert created. |
| Repeat lead | Same email, different service | 200. Existing contact updated (no duplicate), second deal created, alert sent. |
| Invalid input | Empty name, bad email, 12 as phone |
400 with all three errors. Nothing sent to the CRM. |
| Spam | Honeypot field filled | 400. Nothing sent to the CRM. |
| CRM down | CRM returns errors | 200 to visitor, 3 attempts, then the failure workflow posted an alert naming the failed step with a link to the run. |
We didn’t test against live HubSpot, Zoho or Pipedrive accounts. The CRM calls in the download are generic HTTP requests. Step 4 below covers connecting your real CRM.
Set it up (about an hour)
1. Import the two workflows
In n8n, choose Import from file. Import lead-failure-alert-workflow.json first, then lead-capture-workflow.json. In the main workflow’s settings, check that Error workflow is set to “Lead workflow failure alert”.
2. Change two settings
Open the Validate and normalise node. At the top:
const CONFIG = {
crmBaseUrl: 'https://api.your-crm.example', // base URL of your CRM API
alertUrl: 'https://hooks.your-team-chat.example/…', // incoming webhook of your team chat
};
Set the same chat URL in the failure workflow’s Alert the team node. Most team chats (Slack, Google Chat, Microsoft Teams) offer incoming-webhook URLs that accept a JSON message.
3. Point your website form at the webhook
Use the workflow’s Production webhook URL. Send the form as JSON with these fields: name, email, phone, service, message, page, consent, plus an empty hidden website field as the honeypot:
<input type="text" name="website" tabindex="-1" autocomplete="off"
style="position:absolute;left:-9999px" aria-hidden="true">
If your site builder can only email form submissions, most can also call a webhook on submit. Check its integrations settings.
4. Connect your real CRM
Either add your CRM’s authentication to the three HTTP Request nodes (Authentication → Predefined credential type), or swap them for n8n’s built-in CRM nodes:
| CRM | Replace “Find / Update / Create contact” with |
|---|---|
| HubSpot | Contact → Create/Update a contact (one node handles both, matching by email) |
| Zoho CRM | Contact or Lead → upsert (“create a new record, or update the current one if it already exists”) |
| Pipedrive | Person → Search, then Create or Update a person |
Then point Create deal at your CRM’s deal or lead object. Keep the retry settings on every CRM node.
5. Test with real data before going live
- Submit a test lead. Check the contact, the deal and the alert.
- Submit again with the same email in different capitals. You should still have one contact, now with two deals.
- Submit with a bad email. The form should show the error.
- Temporarily break the CRM credential and submit. You should get the failure alert.
Running costs
One form submission is one workflow execution in n8n, however many steps it has. On n8n Cloud’s Starter plan (€20 a month billed yearly for 2,500 executions, checked 23 October 2026) that covers a lot of enquiries. Self-hosted n8n has no execution limit but needs a server and maintenance. On Zapier or Make, the same flow costs several tasks or credits per lead. See n8n vs Make vs Zapier.
What to add next
- Route by service or area to the right salesperson, and include their name in the alert.
- Send the visitor an acknowledgement email or WhatsApp with what happens next, if they gave consent.
- A “no reply yet” reminder to the team if the deal hasn’t moved after an hour. See lead nurturing for service businesses.
- Document it. One page: what it does, where it’s configured, who to call when the alert fires. See how to document and hand over automations.
If you’d rather have it connected to your form and CRM and tested with your real accounts, that’s part of our CRM service.
Frequently asked questions
Can we do this with Zapier or Make instead?
Yes. The same steps exist in both: a webhook trigger, a code or formatter step for validation, a search-then-create-or-update in the CRM, a deal, and a chat message. Both platforms also have error notifications. They bill per step, so the cost per lead is higher at volume.
Do we still need the form’s email notification?
Keep it for the first few weeks as a safety net while you check that every lead reaches the CRM. Once you trust the alerts, you can turn it off or send it to an archive mailbox.
What if the visitor submits twice by accident?
They’ll be one contact with two deals. If that happens often, add a check that skips creating a deal when the same email submitted within the last few minutes.
Free download · n8n workflow (.zip)
Lead-capture workflow for n8n (tested)
Both workflows (lead capture and failure alert) as importable n8n JSON, with a README covering setup and the test we ran. Placeholder URLs, no credentials included.
Download itNo sign-up. A .zip file: unzip it and follow README.txt.
Rather have it done?
This is the kind of work our crm service covers. Tell us where you are today and we’ll reply with a plan and a fixed price.
Let’s talk