n8n Complete Beginner's Guide: Build Your First Automation in 30 Minutes
Automate14 min read·April 20, 2026·--

n8n Complete Beginner's Guide: Build Your First Automation in 30 Minutes

n8n is the most powerful free automation tool available. This guide takes you from zero — installing n8n, understanding workflows, and building your first real automation that saves hours every week.

@
@kivorablog
April 20, 2026
Share

Why n8n Instead of Zapier or Make


Featuren8n (self-hosted)ZapierMake (Integromat)
Monthly cost$0 (self-hosted)$20–$100+$9–$60+
ExecutionsUnlimited750–100,0001,000–10,000
Custom codeYes (JavaScript)NoLimited
AI nodesYes (built-in)Yes (limited)Yes (limited)
Self-hostingYesNoNo
PrivacyFull (your server)Their serversTheir servers
ComplexityMediumEasyMedium

The verdict: n8n has a steeper initial setup than Zapier but is completely free when self-hosted, handles unlimited automation runs, and lets you write custom JavaScript for anything the visual builder can't do.




Step 1: Install n8n


Option A: Quick Cloud Test (No Setup, 14-Day Free Trial)

Go to n8n.io and start a cloud trial. Good for learning, not for permanent use.


Option B: Self-Host on Railway (Recommended — $5/month)


  • Go to railway.app
  • Click New ProjectDeploy from Template
  • Search "n8n" and click Deploy
  • Railway gives you a URL like https://n8n-production-xxxx.up.railway.app
  • Set these environment variables in Railway:
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=your-username
N8N_BASIC_AUTH_PASSWORD=your-strong-password
N8N_HOST=your-railway-url.up.railway.app
WEBHOOK_URL=https://your-railway-url.up.railway.app/

Option C: Self-Host on Your Own Server (Cheapest Long-Term)

# On a VPS (DigitalOcean $4/month, Hetzner €3.79/month)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

npm install -g n8n

# Start n8n (runs on port 5678)
n8n start

# For production: use PM2 to keep it running
npm install -g pm2
pm2 start n8n --name n8n
pm2 save
pm2 startup

Understanding n8n Concepts

Nodes

Every action in n8n is a node. A node can be:

  • A trigger (what starts the workflow): Schedule, Webhook, Email received
  • An action (what the workflow does): Send email, Update spreadsheet, Call API
  • A transformation (modify data): Set field, Filter, Merge

Workflows

A workflow is a series of connected nodes. Data flows from left to right. Each node receives the output of the previous one.

Expressions

n8n uses {{ }} syntax to reference data from previous nodes:

ExpressionMeaning
`{{ $json.email }}`Email field from the current node's JSON
`{{ $node["Node Name"].json.name }}`Name from a specific node
`{{ $now.format('YYYY-MM-DD') }}`Current date formatted
`{{ $items().length }}`Count of items from previous node

Your First Workflow: New Form Submission → Email Notification → Google Sheets

What This Does

  • Someone fills in a contact form on your website
  • n8n receives the submission via webhook
  • Sends you a notification email
  • Adds the contact to a Google Sheet for tracking

Step 1: Set Up the Webhook Trigger

  • Create a new workflow
  • Add Webhook node
  • Set Method: POST
  • Copy the webhook URL (something like https://your-n8n.com/webhook/contact-form)
  • Set this as your form's action URL

Step 2: Send a Notification Email

Add a Send Email node (use Gmail or SMTP):

  • To: your@email.com
  • Subject: New contact: {{ $json.body.name }}
  • Body:
New contact form submission:

Name: {{ $json.body.name }}
Email: {{ $json.body.email }}
Message: {{ $json.body.message }}
Time: {{ $now.format('MMMM D, YYYY h:mm A') }}

Step 3: Add to Google Sheets

Add a Google Sheets node:

  • Operation: Append Row
  • Sheet: Your tracking spreadsheet
  • Column mapping:

- A (Name): {{ $json.body.name }}

- B (Email): {{ $json.body.email }}

- C (Message): {{ $json.body.message }}

- D (Date): {{ $now.format('YYYY-MM-DD HH:mm') }}

Click Save and Activate. Your automation is live.


Workflow 2: Daily News Summary to WhatsApp

Automatically sends you a morning briefing every day at 7am.

Nodes Required

  • Schedule Trigger: Every day at 7:00 AM
  • HTTP Request: GET https://newsapi.org/v2/top-headlines?country=ng&apiKey=YOUR_KEY
  • Code: Format the articles into a readable message
// In the Code node
const articles = items[0].json.articles.slice(0, 5)
const message  = articles.map((a, i) =>
  `${i + 1}. *${a.title}*\n_${a.source.name}_\n`
).join('\n')

return [{ json: { message: `📰 *Morning News Brief*\n\n${message}` } }]
  • Twilio (WhatsApp): Send the formatted message to your number

Workflow 3: AI-Powered Customer Support Triage

When a customer emails your support address, n8n:

  • Reads the email
  • Uses AI to classify it (billing, technical, general, urgent)
  • Routes to the right team/label in Gmail
  • Sends an auto-reply based on category
// Groq classification node (HTTP Request)
// Method: POST
// URL: https://api.groq.com/openai/v1/chat/completions
// Headers: Authorization: Bearer YOUR_GROQ_KEY
// Body:
{
  "model": "llama-3.1-8b-instant",
  "messages": [
    {
      "role": "system",
      "content": "Classify this customer email into ONE category: billing, technical, general, urgent. Return only the category word."
    },
    {
      "role": "user",
      "content": "{{ $json.text }}"
    }
  ]
},

Then use an If node to route based on {{ $json.choices[0].message.content }}.


Workflow 4: Social Media Auto-Poster

Write posts in Notion → n8n picks them up → auto-posts to Twitter, LinkedIn, and Instagram.

Setup

  • Create a Notion database with columns: Content, Platform, Post Time, Status
  • Notion Trigger: Watches for rows where Status = "Ready to Post"
  • Switch Node: Routes by Platform field
  • Twitter node: Posts text content
  • LinkedIn node: Posts professional update
  • HTTP Request → Instagram Graph API: Posts image + caption
  • Notion node: Updates Status to "Posted"

Best n8n Practices

PracticeWhy It Matters
Name every node clearlyImpossible to debug unnamed nodes in complex workflows
Add error handlingUse the Error Trigger node to get notified when workflows fail
Use environment variables for API keysNever hardcode credentials in nodes
Test with sample dataUse the "Execute Step" button on each node before going live
Add retry logic for API callsExternal APIs fail intermittently
Document complex workflowsFuture you will not remember what you built
Read more on Kivora Blog

Read more on Kivora Blog

Get started →