An n8n workflow consists of nodes connected by connections. Each node performs a specific action — fetch data, transform, send, or branch. In this lesson, you'll learn the core concepts.
Nodes are the basic units of every workflow. There are three main categories:
Start the workflow. Without a trigger, nothing happens.
| Trigger | Description | Use Case |
|---|---|---|
| Webhook | Receive HTTP request | API endpoint, Slack command |
| Schedule | Time-based (Cron) | Daily report, hourly monitoring |
| Email Trigger | Receive new email | Inbox automation |
| Kafka/RabbitMQ | Message queue event | Event-driven architecture |
Perform the actual work:
Control the workflow flow:
Nodes are connected by connections. Data flows as items — JSON objects passed from node to node:
[
{ "json": { "name": "Max Mueller", "email": "max@company.com", "score": 85 } },
{ "json": { "name": "Anna Schmidt", "email": "anna@company.com", "score": 42 } }
]
Each node receives items, processes them, and outputs new items.
Expressions allow access to data from previous nodes:
{{ $json.name }} → Current item value
{{ $('HTTP Request').item.json.id }} → Value from a specific node
{{ $now.toISO() }} → Current timestamp
{{ $json.score > 70 ? 'Good' : 'Bad' }} → Conditional logic
Robust workflows need error handling. n8n offers three approaches:
A separate workflow triggered on errors in other workflows — ideal for centralized alerting (Slack, email).
Nodes can automatically retry on failure:
The workflow continues even if a node fails. The error is passed as output and can be handled in the next node.
| Mode | Description | Use |
|---|---|---|
| Manual | Execute workflow by click | Development, testing |
| Active | Workflow responds to triggers | Production |
| Queue | Executions distributed to workers | High load, scaling |
Practical tip: Enable error handling from the start. Create a central error workflow that reports failures to Slack or via email. This way, you'll know immediately when a production workflow fails.