Home/Blog/n8n Tutorial for Beginners: Build Your First Workflow
Tools & Stack9 MIN READ

n8n Tutorial for Beginners: Build Your First Workflow

A no-fluff guide to n8n for non-developers who want to automate real work without code.

AV
Antonio Vranješ· 12 May 2026 · 9 min read
n8n Tutorial for Beginners: Build Your First Workflow

Why n8n beats Zapier for anyone who wants control

I switched to n8n after watching Zapier charge me $240/month for workflows that were 80% "wait five minutes then check this again."

n8n is free and open-source. You host it yourself (or use their cloud). You see every piece of data moving through your workflow. And you can loop, branch, write JavaScript, and call APIs without hitting a paywall.

If you've never opened n8n before, this tutorial will walk you through your first working automation—no prior coding required.

Dark navy canvas with floating translucent panels showing abstract node connections, cyan highlights marking trigger poi

What you need before you start

n8n runs on your computer or a server. For learning, the easiest path is n8n.cloud (their hosted version, free tier available) or Docker Desktop on your Mac/PC.

Here's the 30-second local install if you have Node.js:

npx n8n

That command downloads n8n and starts it at http://localhost:5678. Open that URL in your browser. You'll see a blank canvas and a sidebar full of nodes.

A node is one step in a workflow. "Fetch a row from Google Sheets" is a node. "Send a Slack message" is a node. "Wait 10 minutes" is a node.

You string nodes together left-to-right like a flowchart. When the first node (the trigger) fires, data flows through the chain.

How to read the n8n canvas

The canvas is where you drag and drop nodes. The sidebar on the left lists every integration and function n8n supports—over 400 at last count.

Click the + button (or hit Tab) to add a node. Type a few letters to filter. Click the node you want, and it appears on the canvas.

Every workflow needs exactly one trigger node at the start. That's what kicks off the sequence. Common triggers:

  • Webhook – an external service POSTs data to a URL n8n gives you.
  • Schedule – runs every hour, every Monday at 9am, etc.
  • Manual – you click "Execute Workflow" to test.

After the trigger, you add action nodes (Google Sheets, Airtable, HTTP Request, etc.) and logic nodes (IF, Switch, Loop, Merge, etc.).

Data flows from left to right. Each node receives the output of the node before it.

Geometric data stream visualization in dark navy with branching pathways, glowing cyan decision points splitting into mu

Your first workflow: new form submission → Slack message

Let's build the simplest useful automation: when someone fills out a web form, post their details to Slack.

Step 1: Add a Webhook trigger

  1. Click + on the canvas.
  2. Search for "Webhook" and select the Webhook trigger node.
  3. Click the node to open its settings panel.
  4. Under HTTP Method, choose POST.
  5. Leave Path blank (n8n will generate a unique URL).
  6. Click Execute Node in the top-right. n8n will show a "Waiting for webhook call…" message and display a Test URL and a Production URL.

Copy the Test URL. It looks like https://yourinstance.app.n8n.cloud/webhook-test/abc123.

For now, we'll send a test payload using a tool like Postman, or just curl:

curl -X POST https://yourinstance.app.n8n.cloud/webhook-test/abc123 \
  -H "Content-Type: application/json" \
  -d '{"name":"Alice","email":"alice@example.com"}'

Hit enter. The Webhook node will light up green and show the JSON it received.

Step 2: Add a Slack node

  1. Click + again (or click the small + dot on the right edge of the Webhook node).
  2. Search "Slack" and choose Slack.
  3. In Resource, pick Message. In Operation, pick Post.
  4. Click Create New Credential to connect your Slack account. n8n will walk you through OAuth. Pick the channel where you want messages to land.
  5. In Channel, type the channel name (e.g. #leads).
  6. In Text, click the Expression tab. You'll see a picker that shows {{ $json.name }} and {{ $json.email }} because those fields came from the Webhook.

Build a message like:

New lead: {{ $json.name }} ({{ $json.email }})
  1. Click Execute Node. If your credential is valid, n8n will post a message to Slack with Alice's name and email.

Click Save in the top-right to name and store your workflow. Then toggle Active so it runs every time the Production webhook URL is hit.

Now replace the test URL in your web form's submit handler with the Production URL, and you have a live automation.

Understanding expressions and data mapping

n8n's superpower is expressions. Any text field can reference data from previous nodes.

When you click the Expression tab, you get access to:

  • {{ $json }} – the output of the previous node.
  • {{ $node["Node Name"].json }} – output of a specific node.
  • {{ $now }}, {{ $today }} – current timestamp and date.
  • JavaScript functions: {{ $json.email.toLowerCase() }}, {{ $json.price * 1.2 }}.

If the Webhook received {"price": 50}, you can write:

Total with tax: {{ $json.price * 1.15 }}

And n8n will render "Total with tax: 57.5" when the workflow runs.

This is where n8n outgrows Zapier. You can transform, filter, and compute inside the same node instead of burning an extra "Formatter" step.

Every extra step in Zapier costs you a task credit. In n8n, logic is free.

Close-up abstract of interlocking mechanical shapes in dark navy, cyan and violet gradient accents highlighting connecti

Adding conditional logic with the IF node

Real workflows need branching. "If the email domain is @gmail.com, send to Sales. Otherwise, send to Support."

  1. After your Webhook node, add an IF node.
  2. Click Add ConditionString.
  3. Set Value 1 to {{ $json.email }}.
  4. Set Operation to Contains.
  5. Set Value 2 to @gmail.com.

The IF node will output two branches: true and false.

Drag a Slack node onto the true output and configure it to post to #sales. Drag another Slack node onto false and point it at #support.

Now the workflow routes leads based on email domain. You can nest IF nodes, combine them with Switch nodes (like a case statement), or use Filter nodes to stop execution entirely if a condition isn't met.

When to use HTTP Request vs. native integrations

n8n has 400+ native nodes (Google Sheets, Notion, HubSpot, etc.). But sometimes you need an API that doesn't have a node yet.

That's when you reach for the HTTP Request node. It's a raw REST client. You set the method (GET, POST, PUT, DELETE), URL, headers, and body. n8n sends the request and gives you back the JSON response.

Example: if your CRM has a public API, you can POST new contacts with:

  • Method: POST
  • URL: https://api.yourcrm.com/contacts
  • Authentication: Bearer Token → {{ $env.CRM_API_KEY }}
  • Body: JSON → { "name": "{{ $json.name }}", "email": "{{ $json.email }}" }

If you're choosing between the two, prefer the native node—it handles auth and schema changes. Use HTTP Request when there's no native option or you need more control.

For Slack and Notion specifically, n8n's native nodes are excellent. We've shipped custom n8n Slack automation and N8n Notion workflows for clients in under two weeks because the nodes cover 95% of use cases out of the box.

Looping over lists with SplitInBatches and ItemLists

A common beginner question: "I have 50 rows in Google Sheets. How do I send one Slack message per row?"

By default, n8n processes all items in a single execution. If the previous node outputs an array of 50 objects, the next node receives all 50 at once.

To handle them one-by-one, insert a SplitInBatches node:

  1. Add SplitInBatches after your Google Sheets node.
  2. Set Batch Size to 1.
  3. Add your Slack node after it.
  4. Connect the Slack node's output back to the SplitInBatches loop input (there's a small arrow icon).

Now n8n will run the Slack node 50 times, once per row, then continue.

For simpler cases—like filtering or transforming an array—use the ItemLists or Code node. The Code node lets you write JavaScript:

return items.map(item => ({
  json: {
    fullName: `${item.json.firstName} ${item.json.lastName}`
  }
}));

This replaces Zapier's "Formatter" steps with a single, readable transform.

Error handling and retries

Workflows break. APIs rate-limit you. Credentials expire.

n8n gives you two safety nets:

  1. Error Trigger – a special trigger node that fires when any workflow fails. You can use it to log errors to a Slack channel or a database.
  2. Retry on Fail – open any node's settings → Settings tab → Retry On Fail. Set max retries and wait time. n8n will retry the node before marking the execution as failed.

For critical workflows, I add a Set node after the Webhook that writes workflowStart: {{ $now }} and another at the end with workflowEnd: {{ $now }}. If the gap is ever >5 minutes, the Error Trigger pings me.

How to test workflows without triggering real actions

Before you go live, test every branch.

  1. Use Manual Trigger while building. You click "Execute Workflow" and paste in sample JSON.
  2. Use Webhook in "Test URL" mode—it only listens while the canvas is open.
  3. Add Sticky Notes (yellow post-it icon) to document what each section does.
  4. Use the No Operation, do nothing node (search "NoOp") as a placeholder—useful when you want to map out the workflow structure before adding credentials.

I test in this order:

  • Happy path: all data present, API succeeds.
  • Missing field: webhook arrives without email.
  • API error: manually set the HTTP node to a bad URL and confirm retry logic fires.

Only after all three pass do I activate the workflow.

Finding tasks worth automating

If you've made it this far, you can build in n8n. The harder question is what to build.

I use the Repetitive Task Cost Calculator to put a dollar figure on manual work. If someone spends 30 minutes a day moving data between a form and a spreadsheet, that's 10 hours/month. At $30/hour loaded cost, that's $3,600/year.

A two-hour n8n workflow pays for itself in the first month.

For clients who don't know where to start, I point them to the Automation Opportunity Scanner. You paste in your company's URL, and it ranks the three highest-ROI automations based on typical friction points in that industry.

Common beginner wins:

  • Form submission → CRM + Slack
  • New email attachment → save to Google Drive + log in spreadsheet
  • Daily Airtable export → email CSV to stakeholders
  • Support ticket opened → check for known keywords → auto-reply or route to human

Start with one task that you do at least three times a week. Build it in n8n. Let it run for a month. Then build the next one.

When to build custom vs. use a template

n8n's template library has hundreds of pre-built workflows. They're a great way to see how nodes fit together.

But templates are generic. They assume a structure that might not match your data.

I use templates as inspiration—open one, study the node chain, then rebuild it from scratch with my actual field names and logic.

If you're exploring n8n for a team and want something production-ready in days (not weeks), we build custom AI automation workflows scoped to your exact use case. Every build ships in 2–3 weeks with direct access to me, no project manager in the middle.

Getting unstuck: docs, forum, and AI

When you hit a wall:

  1. n8n documentation – https://docs.n8n.io – search by node name.
  2. n8n community forum – https://community.n8n.io – someone has already asked your question.
  3. Expression tester – in any field, click Expression and use the preview pane to test JavaScript snippets in real time.
  4. Ask an LLM – paste the error message + the node config JSON. Claude and GPT-4 both know n8n syntax.

The most common beginner mistake: forgetting that {{ $json.fieldName }} only works if fieldName exists in the previous node's output. Use the execution view (click a finished node) to inspect the exact JSON structure.

Next steps: credentials, environments, and version control

Once you have a few workflows running, you'll want:

  • Environment variables – store API keys in Settings → Variables, reference them as {{ $env.API_KEY }}.
  • Separate instances – run one n8n for staging, one for production. Copy workflows as JSON and import them.
  • Git backup – n8n stores workflows in a SQLite or Postgres database. Use the CLI (n8n export:workflow --all) or connect your instance to GitHub for version control.

You don't need any of this on day one. But by week three, you'll want it.

Start with one workflow this week

Pick one task you did manually today. A form that emailed you. A Slack message you copied into a spreadsheet. A lead you added to your CRM by hand.

Open n8n. Add a Webhook or Schedule trigger. Add two nodes: one to fetch data, one to write it somewhere else. Click Execute. Watch it work.

That's the loop. Every workflow you build makes the next one faster.

If you'd rather hand off the build and get a working system in two weeks, book a scoping call. I'll map your workflow, build it in n8n, and deliver it with documentation and a walkthrough video. No agency overhead, no multi-month engagement, just one operator who ships.

// Free scan

Automation Opportunity Scanner

Five questions, two minutes. We rank the three highest-ROI automations for your specific business.

Run your free scan →

Related integrations.

All integrations →

Keep reading.

All posts →