How I Built a Lean CRM Pipeline with FormSubmit, n8n, and Airtable
A no-code setup that runs itself — and actually works. Learn how to build a simple, self-hosted CRM using FormSubmit, n8n, and Airtable.
How I Built a Lean CRM Pipeline with FormSubmit, n8n, and Airtable
A no-code setup that runs itself — and actually works.
The challenge
All I wanted was a simple way for people to raise their hand — "I'm interested" — without forcing them through an account signup or a 10-step flow.
Calendly and other schedulers were overkill. I already self-hosted my stuff, so why not just catch the form data, log it, and automate from there?
The vision
- FormSubmit collects interest.
- n8n (self-hosted) handles logic.
- Airtable acts as a modern CRM.
- Each message has its own status — not the client.
- No unnecessary complexity, no vendor lock-in.
The stack
- FormSubmit → front-end form endpoint
- n8n (Railway) → automation layer
- Airtable → CRM-style backend
Step 1: FormSubmit webhook
Each form sends a JSON payload to my n8n webhook, like:
{
"name": "Maya",
"email": "[email protected]",
"message": "hey, quick question about your services"
}
Step 2: Clients table
Airtable's Clients table keeps:
- Name
- Email (unique)
- Source ("FormSubmit")
In n8n, the first Airtable node is Create or Update Record, matching on the Email field.
That ensures existing clients don't duplicate.
Step 3: Messages table
Next, every submission becomes a record in a Messages table linked to its client.
Fields:
- Message Text
- Status (New, Qualified, etc.)
- Source
- Contact → Linked record to "Clients"
The tricky part: getting the Contact link right.
Airtable expects an array of record IDs, not just a string.
The working fix? This expression:
["{{ $json.id }}"]
That links the new message to the correct client instantly.
The outcome
Each form submission now:
- Creates or updates the client.
- Adds a linked message with status tracking.
- Keeps history — no overwriting.
When I open a client in Airtable, I see their full message timeline. No CRM subscription, no fragile integrations.
What's next
I'm not adding verification links (yet). Instead, I'm exploring how to layer autonomous agents on top — using them to follow up, enrich lead data, and add real value automatically.
This stack is the foundation: FormSubmit catches the signal, n8n moves the data, Airtable holds the truth. Everything else can build on top of that.
TL;DR
-
FormSubmit → n8n webhook → Airtable
-
Clients table (unique by email)
-
Messages table (status + linked contact)
-
Link field uses:
["{{ $json.id }}"] -
Works beautifully — no extra nodes, no headaches
Want to replicate it? Set up a FormSubmit endpoint, drop a webhook node in n8n, connect Airtable, and you've got a CRM that's clean, fast, and 100% under your control.