Introduction
By now you have explored n8n's interface, understood nodes, and experimented with triggers and actions individually. This lesson is where everything clicks into place. You will build a complete, working workflow from scratch — one that has a real trigger, processes data through multiple steps, and produces a tangible output. The goal is not just to make it run once, but to activate it so it runs automatically without you touching it.
The workflow you will build in this lesson: when a new entry is submitted to a form (or arrives via webhook), the data gets transformed, a conditional check is applied, and a notification is sent to a Slack channel. This pattern — receive, process, decide, act — appears in roughly 80% of real automation use cases, so mastering it once gives you a reusable mental model.

Setting Up the Trigger
Start with a new workflow in n8n. Click the canvas and add a Webhook node as your trigger. Set the HTTP method to POST and note the generated webhook URL — you will use this to send test data.
In the Webhook node settings, set "Response Mode" to "Last Node" so n8n waits for the full workflow to finish before responding to the caller. This matters when the webhook caller expects a confirmation.
To send a test payload, use a tool like curl or any HTTP client:
Click "Listen for Test Event" in n8n before running the curl command. Once the payload arrives, n8n pins the data to the node — every downstream node can now reference it during your build session.
Transforming Data with the Set Node
Raw webhook data is often not in the exact shape you need downstream. Add a Set node after the Webhook node to reshape or enrich the incoming data.
In this example, you want to normalize the name to uppercase and add a computed field that labels the score as a grade:
Configure the Set node to keep only the fields you need (name, email, score, grade) by toggling "Keep Only Set" to on. This keeps the data clean as it flows to the next node and avoids accidentally passing unexpected fields to external APIs.
After saving, use "Execute Node" to verify the output. You should see the transformed item with the grade field populated.
Adding Conditional Logic with the IF Node
Not every submission should trigger the same action. High scorers might get a congratulations message while others get an encouragement message. The IF node handles this branching.
Add an IF node after the Set node. Set the condition to check the grade field:
The IF node outputs two branches: "true" (grade is A) and "false" (everything else). Connect a Slack node to the true branch and a second Slack node — or an Email node — to the false branch. This is how n8n handles conditional paths: you wire both outputs explicitly rather than writing if/else code.
Connecting the Output Action
Add a Slack node to the true branch. You will need a Slack credential configured in n8n (Settings → Credentials → New → Slack OAuth2). Once connected, configure the node:
For the false branch, duplicate the Slack node and change the message:
Run the full workflow using the "Execute Workflow" button. Check your Slack channel to confirm the message appears with the correct content. If you see a Slack API error, the most common causes are a missing channel scope in your OAuth app or the bot not being invited to the channel.
Testing, Fixing, and Activating
Before activating, run the workflow at least twice with different payloads — one that triggers the true branch and one that triggers the false branch:
Inspect each node's output by clicking on it after execution. The execution log panel at the bottom shows which path was taken and the data at each step. This is your primary debugging tool.
Once both paths work correctly, name your workflow something descriptive (top-left title field), then flip the Active toggle in the top-right corner. The webhook URL is now live — n8n will execute the workflow automatically for every incoming POST request without you needing to click anything.
A few things to double-check before calling it done: confirm the webhook URL is the "production" URL (not the test URL), verify your n8n instance is reachable from the internet if external services need to call it, and check that your credentials are not using test/sandbox tokens if you are connecting to real services.
Summary
You just built a complete four-node workflow: a Webhook trigger, a Set node for data transformation, an IF node for branching logic, and Slack nodes for output. More importantly, you activated it — it now runs on its own. The receive-process-decide-act pattern you practiced here is the backbone of nearly every automation you will build going forward. From here, swapping in different triggers (schedules, emails, database events) or different output actions (Google Sheets, HTTP requests, internal APIs) is straightforward because the structure stays the same.
Lesson Checkpoint
Review what you learned and get feedback on your work.