Advertisement
Verified Partner
Enterprise Cloud Infrastructure, GPU Clusters & AI APIs
Deploy high-throughput inference and quant trading pipelines with ultra-low latency.
Explore Platform →

n8n for Beginners: Your First Automation Workflow, Step by Step

By Marcus Sterling • Beginner • 13 min read • Updated 2026-10-23

What You Will Master in This Tutorial

  • Understand what n8n is and choose between Cloud and self-hosted.
  • Build a working 5-node workflow: schedule, HTTP request, set fields, IF branch, send.
  • Test, pin data and debug with the executions log — then activate the schedule.

1. What n8n is, in plain terms

n8n is a workflow automation tool: you draw a flow of boxes ("nodes") on a canvas, each node does one small job — watch a schedule, call an API, reformat a piece of data, decide yes or no, send a message — and data travels along the wires between them. It is open source, it has a visual editor that non-programmers can genuinely use, and it has become the default glue in the AI-agent world precisely because agents need exactly this: triggers, tool calls, branching and logging around the model.

This tutorial builds your first complete workflow from an empty canvas: every hour it fetches a sample task from a public test API, formats a reminder message, checks a condition, and sends the message to Telegram only when it should. Small on purpose — but every node in it is a node you will reuse in the serious builds, including both agents in our AI agents series.

Advertisement
Verified Partner
Quantitative Trading Systems & 30 AI Business Blueprints
Build predictable monthly recurring revenue with retainers & automated bots.
View Blueprints →

2. Cloud or self-hosted: pick your running mode

  • n8n Cloud is the vendor's hosted version: you sign up, get an editor URL, and workflows run on their infrastructure. Zero installation, free trial available, and the sensible choice for this tutorial — you are here to learn the tool, not to administer a server.
  • Self-hosted means running the open-source version yourself with Docker on your machine or a small VPS. That buys you full control and no per-execution limits on your own hardware, at the cost of updates, backups and uptime becoming your job.

Either way, the editor and every step below are identical. Pick Cloud for today; self-host later if a project needs it.

3. The workflow you are building

Five nodes in a line with one branch:

  • Schedule Trigger — starts the workflow every hour.
  • HTTP Request — fetches one task from JSONPlaceholder, a free public test API that needs no account: https://jsonplaceholder.typicode.com/todos/1 returns a small JSON object with id, title and completed fields.
  • Edit Fields (Set) — builds a clean reminderText field from that data.
  • IF — checks completed: if the task is already done, a reminder makes no sense, so only the not-completed path continues. (Task #1 in the test API is not completed, so the send branch will fire in your test.)
  • Telegram — sends the reminder to your chat. No Telegram? Swap this node for n8n's Email node with your own mailbox settings — the rest of the flow is unchanged.

4. Build it node by node

  1. Create the workflow. In the editor, start a new workflow and name it "My First Automation – Task Reminder". Naming things like an adult is the first debugging skill.
  2. Add the Schedule Trigger. Add node → Schedule Trigger. Set the trigger interval to hours, every 1 hour. This node is the clock; while you test, you will run it manually instead of waiting.
  3. Add HTTP Request. Connect it after the trigger. Method GET, URL https://jsonplaceholder.typicode.com/todos/1, no authentication. Click "Execute step": you should see the task JSON on the right-hand output panel. If you do, the node works — that panel is how n8n shows you the truth.
  4. Add Edit Fields (Set). Add a manual mapping: create a field named reminderText with the value =Task #{{$json.id}}: {{$json.title}} (done: {{$json.completed}}). The = makes it an expression, and $json refers to the incoming item. Leave the node's "include other fields" option on, so completed survives for the IF node. Execute the step and confirm the formatted text appears.
  5. Add the IF node. Add a condition on the field completed: boolean, "is true". Wire the flow so the reminder only leaves on the FALSE output (not completed). Execute and check which output carries your item.
  6. Add the Telegram node on the false branch. Create a bot with Telegram's @BotFather (it gives you a token), start a chat with your bot, and use your chat ID in the node. Set the text to ={{$json.reminderText}}. (Or use the Email node instead.)
  7. Test end to end, then activate. Click "Execute workflow" — a message should land in your Telegram. Then flip the workflow to Active: from now on the schedule runs it without you.

5. The same workflow as importable JSON

n8n workflows are JSON under the hood. Copy the export below, and in the editor use the menu's "Import from File" (or paste it on the canvas) to recreate this exact workflow. Before testing the imported copy, replace YOUR_CHAT_ID and add your own Telegram credential to the last node.

N8N WORKFLOW JSON
{
  "name": "My First Automation - Task Reminder",
  "nodes": [
    {
      "parameters": { "rule": { "interval": [ { "field": "hours", "hoursInterval": 1 } ] } },
      "name": "Every Hour",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [240, 300]
    },
    {
      "parameters": { "url": "https://jsonplaceholder.typicode.com/todos/1", "options": {} },
      "name": "Fetch Task",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [460, 300]
    },
    {
      "parameters": { "assignments": { "assignments": [
        { "id": "a1", "name": "reminderText",
          "value": "=Task #{{$json.id}}: {{$json.title}} (done: {{$json.completed}})",
          "type": "string" } ] }, "includeOtherFields": true, "options": {} },
      "name": "Build Message",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [680, 300]
    },
    {
      "parameters": { "conditions": { "options": { "caseSensitive": true },
        "conditions": [ { "id": "c1", "leftValue": "={{$json.completed}}",
          "rightValue": true, "operator": { "type": "boolean", "operation": "true", "singleValue": true } } ],
        "combinator": "and" } },
      "name": "Already Done?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [900, 300]
    },
    {
      "parameters": { "chatId": "YOUR_CHAT_ID",
        "text": "={{$json.reminderText}}", "additionalFields": {} },
      "name": "Send Reminder",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [1120, 220]
    }
  ],
  "connections": {
    "Every Hour":   { "main": [ [ { "node": "Fetch Task", "type": "main", "index": 0 } ] ] },
    "Fetch Task":   { "main": [ [ { "node": "Build Message", "type": "main", "index": 0 } ] ] },
    "Build Message": { "main": [ [ { "node": "Already Done?", "type": "main", "index": 0 } ] ] },
    "Already Done?": { "main": [ [], [ { "node": "Send Reminder", "type": "main", "index": 0 } ] ] }
  },
  "settings": {},
  "staticData": null
}

6. Test and debug like a grown-up

  • Execute step by step. Every node has its own execute button and shows its input and output. A workflow is debugged one node boundary at a time, never by staring at the whole canvas.
  • Pin data. On a node's output panel you can pin the data, freezing it so downstream tests do not re-call the API on every run while you are adjusting expressions.
  • Read the Executions list. Every run — manual, scheduled, failed — is logged with the data each node saw. When a production workflow misbehaves at 3 a.m., that log is the difference between a five-minute fix and a mystery.
  • Change one thing per test. Two changes plus a failure equals not knowing which one broke it. This rule feels slow and is, in practice, the fastest way to finish.

7. Beginner mistakes (all classics, all avoidable)

  • Forgetting to activate. A workflow that tests beautifully does nothing on a schedule until it is switched Active.
  • Expressions without the =. A field containing literal text like {{$json.id}} means the expression marker was missed — the most common first-hour error in n8n.
  • Hardcoding secrets into fields. API keys and tokens belong in n8n's credentials store, never typed into node parameters where exports and screenshots leak them.
  • No failure path. Real workflows add an error branch or an Error Trigger workflow early; an API that fails silently at night is tomorrow's angry client.
  • Building the mega-flow first. Five nodes that run beat fifty that almost run. Grow the canvas one working node at a time.

8. Where to go next

You now own the pattern — trigger, fetch, format, decide, send — that sits underneath almost every automation on this site. The direct sequel is n8n AI Agents: Build Business Automations That Sell, which adds AI nodes and turns workflows into services clients pay for. Then put the skill to work in the series that motivated this tutorial: the AI sales agent and the AI receptionist agent are both wired with this exact pattern at production scale.

Knowledge Check: Test Your Understanding

1. Your reminder arrives as the literal text "{{$json.id}}" instead of the task number. What went wrong?

Frequently Asked Questions

Is n8n free to use?
n8n is open source and can be self-hosted at no license cost on your own machine or server — you pay only for the hosting itself. The vendor's Cloud version is a paid hosted service with a free trial. For this tutorial, the trial or a local install are both fine; the editor works the same.
Do I need to know how to code for n8n?
No for workflows like this one: nodes and expressions cover the whole build. Light expression syntax (the {{$json...}} references) is the only code-like element, and this tutorial shows it in place. Programming helps later for custom logic, but it is not a prerequisite to start.
Can I use email instead of Telegram for the last step?
Yes. Replace the Telegram node with n8n's email node (for example Gmail or SMTP with your own mailbox credentials) and put the same reminderText expression in the message body. The trigger, fetch, format and IF nodes do not change at all.

Get 1 AI agent blueprint every week

Join the free PVT newsletter: one practical AI agent or automation you can build and sell, every week. No spam.