Loading tutorials…
Loading tutorials…
You have n8n running. Now build one real workflow that does something useful. This walks a real trigger → action chain end-to-end with the expression-mapping detail most tutorials skip.
Who this is forOperators who just provisioned n8n (Cloud or self-hosted) and want their first useful workflow live in under an hour. If you are coming from Zapier or Make, this also shows what the n8n editor does differently.
What you'll need
Step 1
Before opening the editor, write the automation as: "When [event] in [App A], create/update [object] in [App B] with [these fields]."
Open a notes file. Write: "When [a specific event] happens in [a specific app], do [a specific outcome] in [a specific app]."
Example: "When a new starred email arrives in Gmail, post a message to #leads in Slack with the sender, subject, and a link to the email."
If the sentence contains "and also," you have two workflows or a multi-step chain. For your first workflow, do exactly one trigger and one or two downstream actions.
If you cannot write the sentence, you are not ready to build. Most workflow debt starts here.
Step 2
Workflows → Create Workflow. Name it descriptively up front. The "Untitled Workflow" trap compounds across 30 workflows.
In the n8n editor, click Workflows in the left nav → "Create Workflow."
You see a blank canvas with a "+" button. The first node you add becomes the trigger.
In the top-left, immediately rename the workflow from "My workflow" to a descriptive name: "[Trigger app] → [Action app]: [outcome]." Future-you will thank present-you when you have 30 workflows.
Use the Tags feature (top right) to categorize: `production`, `staging`, `lead-routing`, etc.
Step 3
Click "+" → search for the trigger app → choose event → set up credentials → test trigger. Pull real sample data.
Click the "+" on the canvas. The node picker appears with thousands of integrations.
Search for your trigger app (Gmail, Typeform, Shopify, Webhook). Click it.
Pick the specific trigger event. n8n is precise: "On new email" and "On new starred email" are different triggers. Read the descriptions.
Click the credential dropdown → "Create New Credential." Walk through OAuth or API key flow. Save.
Configure event-specific settings (which mailbox, which Sheet, which Webhook URL).
Click "Execute Step" or "Test Step" to pull real sample data. Confirm the output panel shows live data. If it returns empty, the trigger event has not fired recently — create one (star an email, submit a form) and retest.
Step 4
Click "+" after the trigger → choose action app/event → connect credentials → map fields using {{ $json.fieldName }} expressions.
Click "+" off the right edge of the trigger node. Add the action (e.g., Slack → Send Message).
Connect credentials. Configure channel/recipient.
Field mapping in n8n uses expressions, not drag-and-drop dropdowns like Zapier. Click the gear icon next to a field → "Add Expression." A panel opens with sample data on the left.
Drag a field from the sample data panel into the expression — n8n inserts `{{ $json.fieldName }}`. Or click into the field and type the expression by hand.
For composite fields, combine: `New lead: {{ $json.firstName }} {{ $json.lastName }} from {{ $json.company }}`.
Click "Execute Step" to test the action with real sample data. Verify the result in the destination app.
Step 5
Click "Execute Workflow" at the bottom. n8n runs trigger → action with real sample data. Verify the destination app shows the result.
In the bottom toolbar, click "Execute Workflow" (or use the workflow-level test). n8n runs the entire chain end-to-end against real sample data.
Each node lights up green (success) or red (failure). Click any node to see its actual input and output for that run.
If a node fails, the error message appears in the output panel. Most failures are field-mapping (referencing a field that did not exist in the trigger output) or auth (credential expired).
Fix and rerun. Iterate until every node turns green and the destination app shows the correct result.
Critical: this is a REAL test — it writes to production apps. If you mapped to Slack, your team sees the message. If you mapped to HubSpot, a real contact gets written. Delete junk test records.
Step 6
Toggle the workflow to "Active." Set up an Error Workflow. Watch Executions tab for the first 24-48 hours.
In the top-right toggle, switch the workflow from "Inactive" to "Active." Now the trigger watches for real events.
Open Workflow Settings → Error Workflow. Pick or create an error-handler workflow (Slack notification + retry) so failures get surfaced, not swallowed.
Generate a real trigger event (star an email, submit the form). Within seconds-to-minutes (depending on trigger type), the execution should appear under Executions → Success.
For the first 24-48 hours, check the Executions tab daily. Any red row means a failure — click in to debug.
Set up monitoring for ongoing health: a daily Slack digest of failures, or BetterStack/UptimeRobot pinging a heartbeat URL on workflow success.
Common mistakes
Skipping the sentence step and clicking straight into the editor
What goes wrong: You build something, realize halfway through it does not do what you wanted, restart. Spend 3 hours on a 45-minute task.
How to avoid: Write the one-sentence specification on paper before clicking Create Workflow. If you cannot write it, you do not know what you want to build.
Using fake sample data and breaking when real data flows
What goes wrong: Trigger sample is 'test@test.com' / 'Test User'. Action node maps these fine. Live data has special chars, missing fields, or different shape. Action fails for 30% of real events. Silent partial breakage.
How to avoid: Always pull a real (if disposable) trigger event for sample data. Star a real email. Submit a real form. The shape match matters.
No Error Workflow configured
What goes wrong: Workflow fails for a week. n8n shows red rows in Executions but no one looks. By the time you notice, 200 events were lost — no email, no Slack alert, nothing.
How to avoid: Every production workflow gets an Error Workflow attached. The Error Workflow sends a Slack message to a `#workflow-alerts` channel with the workflow name and error details.
Referencing fields that exist sometimes but not always
What goes wrong: Trigger output has `customField` in 80% of records and `null` in the other 20%. Action node fails 20% of the time with 'Cannot read property of null.' Looks intermittent, hard to reproduce in tests.
How to avoid: Use the `??` fallback expression: `{{ $json.customField ?? "default" }}`. Or add an IF node to branch based on whether the field exists.
Naming workflows "Untitled Workflow," "Untitled Workflow 2," etc.
What goes wrong: Six months in, you have 25 unnamed workflows. Finding the one to debug takes 10 minutes per incident. Decommissioning unused ones is impossible because you cannot tell which is which.
How to avoid: Name every workflow at creation time. Convention: "[Trigger] → [Action]: [outcome]." Use Tags for categorization.
Editing live production workflows during business hours
What goes wrong: You make a 'small change' to a live workflow. The change breaks field mapping. Production data writes incorrectly for 4 hours before someone catches it. Cleanup costs 4-6 hours of database work.
How to avoid: Duplicate the workflow, edit the copy, test thoroughly, then deactivate the old and activate the new. On Pro+, use Environments to promote from Staging.
Recap
Done — what's next
How to set up an n8n Cloud account
Read the next tutorial
Hand it off
Building one workflow is a tutorial. Building 10-20 production workflows that survive a year of growth is a discipline. EverestX automation specialists ship workflows that include error handling, monitoring, and documentation by default — $14-16/hr, typically $400-1,000/mo for ongoing work.
See specialist rates
Execute Step runs only the selected node against existing sample data — fast iteration during build. Execute Workflow runs the entire chain end-to-end from trigger to last action — final validation before activating.
Zapier uses a visual data picker (click to insert). n8n uses JavaScript-flavored expressions (`{{ $json.fieldName }}`) which are more powerful but have a learning curve. You can do conditional logic, math, string manipulation, and date formatting inline.
Yes. Use `{{ $('Node Name').item.json.field }}` to pull from any earlier node by name. This is one of n8n's superpowers — you can compose data from many sources in a single action.
By default, the execution stops at the failed node. If you have an Error Workflow attached, it fires with details about the failure. You can also enable per-node 'Continue on Fail' settings if you want the workflow to keep going after a non-critical failure.
Webhook triggers fire instantly (sub-second). Schedule triggers fire on their cron schedule. Polling triggers (Gmail, Sheets) fire on a 1-minute interval on Cloud. Self-hosted polling intervals are configurable per node.
n8n
Self-hosted n8n is great if you like managing Postgres. n8n Cloud is great if you like building workflows. This walks through the Cloud setup path — plan choice, environments, users, first workflow — in under an hour.
n8n
Workflows fail silently by default. By the time someone notices the missing data, the gap is unrecoverable. This walks the proper error-handling pattern — error workflow, alerts, retries, and the monitoring that catches the rest.
n8n
n8n webhooks are how your tools tell n8n something happened — Stripe payments, Typeform submissions, custom app events. They are also where most production setups quietly leak data. This walks the right pattern.
n8n
Your workflow ran fine for weeks. Now it fails — or worse, it succeeds but produces garbage. This is the diagnostic sequence specialists run to isolate the root cause in 15-30 minutes instead of an afternoon.
Zapier
You signed up for Zapier and the dashboard is staring at you. This walks through one real, working Zap end-to-end — trigger app, action app, sample data, test, turn on — without the marketing fluff.