How I Built a Lean CRM Pipeline with FormSubmit, n8n, and Airtable

6 min readTech

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:

  1. Creates or updates the client.
  2. Adds a linked message with status tracking.
  3. 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.