Speed up your workflow building with these tips — from quick keyboard shortcuts to advanced agent debugging techniques.

Keyboard Shortcuts & Navigation

1. Quick-Switch to Expression Mode

Instead of clicking the "Expression" toggle, just place your cursor in a fixed-value field and press = on your keyboard. It instantly switches to expression mode.

2. Pin Data on Nodes (P)

After running a node that costs money (e.g. an API call to Perplexity or OpenAI), click the node and press P to pin the output. Pinned data is reused on subsequent runs — no repeat API charges, no waiting for slow responses. Press P again to unpin.

3. Mock Data on Triggers

Click the pencil icon at the top of any trigger node to manually define test data. This is especially useful on "Execute by Another Workflow" triggers so you don't need to fire the parent workflow every time you test.

4. Navigate Between Nodes Without Closing Panels

While a node's config panel is open, hover your mouse to the far left or right edge to switch to the adjacent node's config. You can also use arrow keys to move between nodes on the canvas, then press Enter to open one.

5. Deactivate Nodes (D)

Hover over a node and press D to deactivate it (or use the three-dot menu). Handy when a broken node is blocking you from testing the rest of the workflow.

6. Add Nodes Quickly (Tab)

Press Tab anywhere on the canvas to open the node search panel immediately.

7. Zoom Controls

Press 1 to zoom out and see the full workflow, and 0 to zoom back to 100%.

Organisation & Documentation

8. Sticky Notes (Shift + S)

Press Shift + S anywhere on the canvas to drop a sticky note. Notes support Markdown formatting (headings, bold, etc.) and can be colour-coded — e.g. blue for AI nodes, green for data transformation, yellow for documentation.

9. Rename Nodes (F2)

Click a node and press F2 to rename it inline. Clear node names make complex workflows much easier to maintain.

10. Node Notes

In any node's Settings tab, you can leave written notes. These don't affect functionality but are useful for handoff or when sharing templates.

Workflow Management

11. Workflow History & Versioning

Click the clock/history icon in the top bar to browse previous versions of a workflow. You can restore, download, or clone any version — similar to Google Docs version history.

12. Error Trigger Workflows

Use the built-in Error Trigger node to listen for failures across any of your active workflows. Wire it up to send yourself an email, Slack message, or SMS whenever a production workflow errors out.

13. Workflow Variables

Inside any expression, you can access built-in context like $executionId, $workflow.name, $workflow.id, and $workflow.active. You'll find these under the Variables and Context section in the expression editor.

Working with APIs & Credentials

14. Save Credentials for HTTP Requests

Instead of pasting API keys directly into HTTP Request nodes, use the Authentication section and save your credentials (Header Auth, Query Auth, etc.). Benefits: credentials are reusable across workflows, hidden in recordings and screenshots, and stripped out when you export a template.

15. Remove n8n Attribution

Many integration nodes (Email, Telegram, Slack) append "Sent by n8n" to messages by default. To disable this:

  • Email/Telegram: Add the option Append Attribution and toggle it off.
  • Slack: Toggle off Include Link to Workflow.

The exact option name varies by integration but is almost always available.

Subworkflows & Inputs

16. Define Specific Subworkflow Inputs

On the "Execute by Another Workflow" trigger, switch from Accept All Data to Define Using Fields Below. Specify exactly which fields (e.g. phone_number, email, customer_name) the subworkflow expects — this makes mapping cleaner and self-documenting.

17. Standardise Inputs Across Channels

Different triggers deliver messages using different field names (e.g. Telegram uses json.text, the native n8n chat uses chatInput). Place a Set node between your triggers and your agent to map everything into one consistent field name. This lets a single agent serve multiple input channels.

Debugging & Agent Inspection

18. View Sub-Execution Data

When an agent calls a subworkflow tool, click on the tool node output and select View Sub-Execution. This opens the actual execution of the child workflow so you can verify it did what the agent claimed.

19. Agent Logs

Open the Agent Logs panel to see step-by-step reasoning: what the agent read from the system prompt, which tools it called, what data it sent, and what it received back. This is essential for debugging agents that report success but didn't actually complete the task.

20. Copy Execution to Editor

From a sub-execution view, click Copy to Editor to pull the live execution data into your workflow editor. You can then remap fields and re-test without re-running the parent workflow.

Error Handling

21. Continue on Error

In any node's Settings, change the error behaviour from Stop Workflow to Continue. This prevents a single failure (e.g. one bad URL out of 1,000) from killing the entire execution.

22. Error Output Branch

Take it further by selecting Continue on Error with Error Output. Failed items route down a separate branch where you can log them, send notifications, or handle them differently — while successful items continue on the main path.

Node Settings & Execution Control

23. Useful Node Settings to Know

Each node type has its own settings. Some common ones worth exploring:

  • Always Output Data — forces the node to return output even if the response is empty, so downstream nodes still execute.
  • Execute Once — runs the node only once regardless of how many items flow through.
  • Retry on Fail — configurable retry count and wait time for flaky APIs.
  • SSL Certificates — available on HTTP Request nodes for custom certificate authentication.

Data Formatting Tips

24. Current Date & Time

In any expression, type {{ $now }} to get the current date and time. Chain .format() to customise the output — for example, {{ $now.format('yyyy-MM-dd') }}.

25. Structured Agent Output

Toggle Require Specific Output on your AI agent node to enforce a JSON schema. Connect the auto-generated tool to a Structured Output Parser and your agent will return data split into individual objects — ready for downstream processing.

26. Join Array Items (.join())

When an array like ["apple", "banana", "steak"] displays as a messy string, append .join(", ") to format it cleanly. You can customise the separator — use "\n" for new lines, " and " for natural language, or anything else you need.

27. Replace Characters (.replace())

Use .replace() to strip or swap characters before passing data into JSON bodies or API calls. The most common use case is removing double quotes from user input that would otherwise break a JSON payload.

Human-in-the-Loop

28. Wait for Human Approval

n8n's Human in the Loop nodes let you pause a workflow and wait for human input via Slack, Discord, Email, or Google Chat. Options include simple approve/reject buttons, custom forms, or free-text responses. Use these for review gates, content approval, or any step requiring human judgement.