A self-hosted n8n workflow: a web form submits a lead → the lead is appended to Google Sheets → a confirmation email is sent to the customer → a notification is pushed to a Telegram chat. One workflow, four nodes, zero code.
Demo: record a 60s screen capture after importing (see below) · Source: https://github.com/yusizer/n8n-lead-automation
[ Web form ] → POST /webhook/lead
→ [ Webhook ] → [ Append to Google Sheets ]
→ [ Send confirmation email ]
→ [ Notify Telegram chat ]
A visitor fills in the form → within seconds: a new row in your spreadsheet, an auto-reply in their inbox, and a ping in your Telegram so you never miss a lead.
n8n-lead-automation/
├── workflows/
│ └── lead-to-sheet-email-telegram.json # importable n8n workflow (4 nodes)
├── form/
│ └── index.html # demo HTML form that posts to the webhook
├── docker-compose.yml # self-host n8n in one command
├── .env.example # n8n config template
└── README.md
cp .env.example .env # Windows: copy .env.example .env
# edit .env: set a strong N8N_BASIC_AUTH_PASSWORD and a random N8N_ENCRYPTION_KEY
docker compose up -d # starts n8n on http://localhost:5678Open http://localhost:5678, log in with the credentials from .env.
- In n8n: Workflows → Import from File → choose
workflows/lead-to-sheet-email-telegram.json. - Open each node and connect its credentials (created once in n8n under
Credentials → New):
- Google Sheets — OAuth2 (sign in with the Google account that owns the sheet).
- Send Email — SMTP (e.g. Gmail SMTP, Brevo, Mailgun).
- Telegram — create a bot via @BotFather, paste the token.
- In the Append to Google Sheets node, replace
PASTE_YOUR_GOOGLE_SHEET_IDwith your spreadsheet ID (the long string in the sheet URL). - In the Notify in Telegram node, replace
PASTE_YOUR_TELEGRAM_CHAT_ID(get it from @userinfobot). - Activate the workflow (top-right toggle). Copy the Webhook URL n8n shows
on the Webhook node (e.g.
http://localhost:5678/webhook/lead).
Edit form/index.html — replace WEBHOOK_URL in the <form action="..."> with
your webhook URL. Open the form in a browser, submit it, and watch:
- a new row appear in your Google Sheet,
- a confirmation email arrive in the inbox,
- a message land in your Telegram chat.
The included docker-compose.yml runs n8n anywhere with Docker. For a permanent
public webhook URL:
- Railway: create a project from this repo (or a Docker image of n8n) and set
the variables from
.env.example, withWEBHOOK_URL= your Railway domain. - VPS (Hetzner / Oracle always-free):
docker compose up -dbehind a Caddy/Nginx reverse proxy with HTTPS; setWEBHOOK_URLto your domain.
Once deployed, set the form's WEBHOOK_URL to the public webhook and the demo
works for anyone, anywhere.
- Show the form submission.
- Cut to the Google Sheet — a new row appears.
- Cut to the inbox — confirmation email.
- Cut to Telegram — the notification.
- Upload to YouTube/Imgur and link it from the portfolio card.
- This is a no-code project — the "source" is the workflow JSON + self-host config + demo form, not application code (hence no unit tests).
- The workflow JSON contains credential placeholders (
PASTE_CRED_ID,PASTE_YOUR_GOOGLE_SHEET_ID, …) — real credentials live in n8n's encrypted store, never in this repo. - n8n is MIT-licensed and free to self-host; the official cloud has a free tier too.
| Workflow graph | Form → Sheet → Telegram |
|---|---|
![]() |
![]() |
Drop screenshots in docs/ after importing.

