Hey everyone — wanted to share a project I’ve been working on that might be useful for anyone handling inbound leads, waitlists, or form → CRM pipelines.
This is a multi‑workflow architecture built entirely in n8n, designed to be modular, fast, and production‑safe. It handles intake, validation, enrichment, scoring, CRM sync, and notifications — All of this runs without a custom backend server — n8n handles the entire backend logic through modular workflows.
High‑Level Architecture
GitHub Pages Form
│ POST JSON
▼
WF‑1 Lead Intake & Validation
— Field validation
— Sanitization
— Duplicate detection
— 200 response immediately
│
▼
WF‑2 Enrichment & Lead Scoring
— Brandfetch domain enrichment
— Abstract API email reputation
— Score 0–100
— Label Hot/Warm/Cold
│
▼
WF‑3 CRM Sync & Notifications
— Create-only Airtable record
— Score-based routing
— Telegram alerts
│
▼
WF‑E Global Error Handler
— Catches failures across all workflows
— Telegram error alerts
Each workflow has a single responsibility and communicates via webhook, so they can be updated or paused independently.
Client-Side Spam Protection
The public form includes:
- HTML5 validation
- Custom JS validation
- Disposable domain blocking
- Fake domain blocking
- Invalid TLD blocking
- Keyboard‑smash detection
- Honeypot field
Invalid submissions never reach n8n.
GitHub Repo (Form Only)
The GitHub repo contains the public-facing form, validation logic, and documentation:
(This repo does not include the workflows themselves — just the form and docs.)
Production‑Ready Tips (What Made This Reliable)
A few things that made this architecture stable in production:
1. Multi‑workflow separation
Splitting the pipeline into 3 async workflows made debugging and iteration dramatically easier. No single workflow has to do everything.
2. Create‑only CRM writes
WF‑3 only creates new Airtable records — no updates.
This avoids race conditions and keeps the CRM logic simple.
3. Early deduplication
WF‑1 checks for duplicates before any enrichment or scoring.
This saves API calls and keeps downstream workflows clean.
4. Global error handler
WF‑E catches failures from any workflow and sends a Telegram alert with the execution ID.
No silent failures.
5. Client-side validation
The GitHub Pages form blocks:
-
disposable domains
-
fake domains
-
invalid TLDs
-
keyboard‑smash names
-
honeypot bots
Bad data never reaches n8n.
6. Async webhook chaining
Each workflow calls the next via webhook, which keeps the system responsive and modular.
Happy to Answer Questions
If anyone is curious about the architecture, scoring model, or how the workflows communicate, I’m happy to answer questions or talk through the design decisions.