25 Hidden n8n Features That Save Hours of Work

Dr. Violet Howard walks through 25 n8n workflow automation tips, from keyboard shortcuts like Tab and F2 to error handling, mock data, and sub-workflow management. Learn to use expressions, pin data, add sticky notes for organization, and set up human-in-the-loop nodes to automate faster.
Chapters
All right, here are 25 N8N hacks that I wish I knew when I started building with N8N last year. We're gonna start simple and get progressively more advanced, and hopefully these are gonna help your productivity explode. All right, starting off with number 1. Hopefully we all know the difference between a fixed value and an expression value. And what you can see right here is that we have the word "hi" and it's fixed. And typically if you wanted to make this an expression, you would have to come over here and hit expression. But what you can do is if something's fixed and before you start typing in there, you can just hit the equal sign on your keyboard and it will switch to an expression. Okay, number 2 is the ability to pin data. So let's say I'm running this Perplexity search where I'm looking for what is N8N. Once I got this output, this costed me money. So what I want to do is pin it. That way, when I want to run the workflow later, I don't have to resubmit another call to Perplexity's API or any API. This is really helpful for any nodes that are going to cost you money every time you run them, or if they take a long time to run. Because now I have this data, and let's say I want to map out the rest of the process. Now that it's pinned, I could basically— and let me just steal this manual trigger real quick. I could basically continue to run this over and over, and it's not gonna make a new call to Perplexity every time. And then we're able to use all of this data over here to continuously map out the different variables for the rest of the workflow. Number 3 is mock data. So we have the ability to basically set data within any sort of node or a trigger like this, where I could click on this little pencil mark in the top, and I could basically fill this in with data to test through the rest of the workflow. So this is very similar to pinning data, where I could now say we're gonna have a field called query, the value in there is gonna be test, and you can see it's pinned. And now we can use this to map the rest of our process. This is especially useful when you're doing a when executed by another workflow trigger, because then you don't have to use the main workflow to trigger this sub-workflow every time you wanna test it out. And another quick hack when it comes to pinning data is you can just click on the node and hit P to pin it or unpin it, as you can see. All right, number 4 is the ability to move between nodes. So let's say you're in the configuration panel of a certain node, and you don't wanna have to, you know, click outta here and click into another one every time. If you move your mouse to the right end or the left end, you can basically just switch between your node configurations without ever having to leave one. So this will hopefully save you some time. And also, if you're just looking at your workflow from this view, you can see that I have node number 1 selected right now. I can use the arrow keys to move between them, and then I can hit Enter to open one of them up. Okay, number 5 is being able to deactivate nodes. So what you can do is you can click on these 3 dots and click on Activate, or if you highlight over the node, you can just hit D, and that's like basically just the keyboard shortcut to deactivate stuff. And if you've ever been in a workflow and you're trying to test it out and you get a little error that says you know, resolve outstanding issues before you can trigger the workflow, then you just click on this one, hit deactivate, and then you should be able to test the rest of the workflow. Number 6 is organization. So there's 2 aspects here. The first one is using sticky notes, which we can get to by coming up here and adding a sticky note like that, or anywhere in your workflow you can just hit Shift+S and it will pop up a sticky note. And once you're in that sticky note, it says double-click to edit me. And as you can see in here, we're using Markdown. So you can change, you know, bold or header 1, header 2, header 3 based on Markdown. So whenever I'm trying to create a sticky note, like those setup guides, I have ChatGPT create those for me. You can even see right here it says you can style with Markdown. You can also change the color of your sticky notes just to keep your workflow organized. Sometimes I like to do, you know, AI nodes in blue and data transformation nodes in green and notes in yellow, whatever you want to do. And then another aspect of organization is just naming your nodes. So you could of course click into them and then come up here to rename your node. Or if you want to be more quick about it, you just click on the node and hit F2 and then you'll be able to change the name right there. Number 7 is about workflow history. Same way on a Google Doc or Google Sheet, you can see previous versions and you can restore those if you want. So all you have to do is click on this this little, you know, timer-looking thing with an arrow, and it will pop up different versions of this workflow. And then you're able to go in here and restore a workflow if you want. You can download it, you can clone it to a new one, whatever you want to do. As you can see here with the previous version, I have the option to restore it. All right, number 8 is just another quick keyboard shortcut. So if you're anywhere in your workflow and you want to add another node, you can just hit Tab and it will pull that up so you can start typing right away. Number 9 is with editing attribution. So let me just quickly reactivate all these nodes and tell you what I mean by that. When you're sending an email or a Telegram message or a Slack or any of these different integrations, A lot of times at the bottom it will say this message was sent by NNN. So what you want to do is in this node, if you add an option, you can click on Append NNN Attribution and you can just flick that off. And now you won't get that message. It's the exact same thing in Telegram where you add the Append NNN Attribution and you turn that off. But in Slack it's a little different where you come into here and it says Include Link to Workflow, and that's the one you turn off in Slack. So every integration is a little bit different with their terminology, but you can pretty much always turn off that attribution. And by the way, did you guys see how quick I activated all those nodes earlier? Anyways, number 10 is current date and time. So let's say you have an AI agent or any sort of node where you want to give it the current date and time, or maybe you just want to send over a timestamp to your Google Sheets. All you have to do is make sure you're in an expression, and then you're going to do two curly braces, and then you'll see right here is a $now function. And now your agent or your node has access to the current date and time. You can also go ahead and format that by typing.format, and then you can play around with how you want to see the date and time. Number 11 is really cool. It's the ability to save your credentials when you're making API calls. So Perplexity is something I use a lot. Tably is something I use a lot. OpenAI's image generation is something I use a lot. So why would I want to go copy that API key every time I was setting up this HTTP request? I don't want to. So what you're gonna do is when you come in here, you can do your authentication. You choose generic. If you know it's a header auth, you choose header. If it's query auth, you'll choose query, whatever type of authentication it is. And then you can see it pulls up all the header auths that you have saved in here. and it's basically the same way you would set up a header auth right here and you'd type in like authorization and then bearer space your API key. You would pretty much just do that in here. As you can see, that's exactly what I did. And now it does two things. This is saved every time I want to use Perplexity later. And if I'm making a recording like this, it's not going to expose my API key, especially if you're like downloading your template and sending it to someone else. You won't have your API key actually there because this will just reset. And as you can see, I did the exact same thing with OpenAI right here and with Tavily. And by the way, because I'm not exposing my credentials here, this entire workflow, if you want to access it, will be available for download in my free school community. The link for that is down in the description if you want to play around with some of these hacks. And if you're wondering how I did this, I hit 1 to zoom out and I hit 0 to zoom back in. That was a little bonus hack for you guys. Anyways, number 12 is error workflows. You can use this native integration error trigger and you can link it up to any of your active workflows, and this trigger will basically go off whenever that active workflow errors. This way you can send yourself email notifications, text notifications, whatever you want if one of your main workflow errors. And I actually did a full video on this one, which you can check out right here. Okay, number 13 is workflow variables. And what do I mean by that? Let me show you. You can access stuff like execution ID, workflow name, workflow ID, workflow active yes or no. You can access this kind of stuff with the workflow variables. So if I just grab this trigger, hook it up, and hit test workflow, when we come back in here, we can see there's a little section right here that says variables and context. and it has stuff like $now, $today, execution variables, and workflow variables. All right, number 14 is you can specify inputs when you're sending data from one workflow to a sub-workflow. So what you'll do is you'll click into that actual trigger. You can see that what you typically would do is maybe just click on Accept All Data, and this would put all of the incoming data into a field called Query. But what you can do is you can come in here and say I want to define using fields below, and then I can say, you know, I want this workflow to receive, you know, phone number, I want it to receive email and I want it to receive, uh, customer name and that's it. So it's going to be already put into those 3 fields for you to map later, which makes it a lot easier. And of course, if you wanted to use some mock data, you could hit this pencil and set those 3 fields so that you can map the rest of the workflow. All right, number 15, 16, and 17 all sort of go hand in hand. So let's take a quick look. What we have in here is this AI agent's going to send an email to nate@example.com asking if he enjoys playing with sand. So I'm gonna real quick grab this manual trigger so we can actually fire this off, hook it up there, and hit Test Workflow. Okay, so what this is gonna do is it's going to use this email agent, which is a sub-workflow, and it's gonna say, hey, okay, we sent that message for you. So number 15 is looking at sub-execution data. So what we would do is we'd click on this tool that it called, and then right here we click on View Sub-Execution. So this pulls up that actual execution of the workflow that we just called, and this is how we can see if it actually did what we wanted or not. And what you may notice is that it didn't actually call that send email tool. and we only would've known that because we looked at the sub-execution data. Because if we come back into the agent itself, it tells us, I've sent an email to Nate asking if he enjoys playing with the sand. So we would now think that it's been done when in reality it has not been done. So looking at hack number 16 is agent logs. We would come into the agent logs, we'd basically see what it did. First of all, it used its brain to read through the system prompt and then take action. There's no system prompt for this agent as you can see, so there wasn't much to read. Then we can see it called the email agent. and then we can see exactly what it sent over to that tool and what it got back. And so because it sent over a full email and not really any directions, that's why that sub-workflow was kind of confused. And then it sent us back this response, which was the email. And then the main brain gets back that response from the tool, and that's why it thinks, okay, we sent that off, so I'm gonna let the human know that we did. And then finally, when it comes to viewing this sub-execution data, you can copy stuff to the editor. So if I go back into that sub-workflow execution right here, what I can do is click copy to editor. And this is going to pull in the live data that we just saw in that execution. And now we're able to play with it. So you can see this is the query that was sent over from our main agent, and we'd be able to remap stuff in here and test it out to make sure we're good. All right, number 18, we have Human in the Loop nodes. So if I can just reactivate these real quick, and if I hit Tab, you can see right here we have Human in the Loop nodes, which basically says wait for approval or human input before continuing. And you can do this with Discord, email, Google Chat, all these things, all these integrations. And basically what that means is we have this operation where we send off something in something like Discord, and we wait for the human to respond. So let's take a look at what that looks like in Slack real quick. In this case, we can send just an approval, which would just be a button that says yes. We could change the type of approval to have an approval and a disapprove button rather than just an approve button. We could also do a custom form or free text, and that way we're able to actually get feedback from a human that's text-based rather than just a yes or no button. I made a full video breaking down this operation in n8n, so if you wanna watch that, check it out right here. All right, number 19 is we have the ability to standardize inputs. So let me just activate these two nodes real quick, and let me explain what's going on. So we have an AI agent that's listening for a field right here called json.message.text. And if we were to hit test workflow and now our Telegram trigger's listening for us, and I pop this up and I say, hi, we can see that the agent's gonna get that message and it's able to process it because it comes through Telegram in a field called json.message.text. But if we were to open up the native N8N chat and say hi, this is going to error out because there's no prompt specified. Because what comes through in the native chat is a field called chat input. So the idea here is to standardize the input so you can have multiple forms of communication with an agent. So all I have to do is hook up this set node that I built, hook that into our N8N AI agent. And what that's going to do is take this message and put it in a field that matches this field and we'll be good to go. So if I say hi, now we can see the agent's going to be able to process it because it comes through in a field called json.message.text. Okay, number 20 is the option to continue on error. So what we have right here is 3 URLs within this code node: McDonald's, Chipotle, and a fake URL. So if we hit test workflow, we can see that it's going to loop through each of those, and it's going to finish out and basically say, okay, here is the, you know, HTML content from that first one, here's the third one, and then here's that last one. But what you didn't see is that that third run of the false URL didn't actually work. We got a 404 error, but the first 2 are coming back with actual HTML. And so the reason this didn't stop the whole workflow is because in this node, in the settings, we're telling it to continue on error rather than stopping the entire workflow. So if I change it back to stop workflow, what it's gonna do is it's just gonna break and then the automation's never gonna finish. As you can see, even though the third one didn't work, but the first two still did. So imagine you had a lead list of 1,000 people that you were trying to process and the 1,000th one failed. You would lose pretty much all that data. Well, you really wouldn't because as we know, you can copy it to the editor and still access it. but it would be annoying. And then just to stem right off of that, you can also have it continue on error with an error output. So that's just another option in the settings. As you can see, using error output. So that would basically mean anything that errored would go off down this other branch. So we could basically say, okay, anything that's good, we'll send back this way. But if it errors, we're just gonna send ourselves an email and say, hey, this URL errored. And it doesn't have to be just like an HTTP request or an AI agent node. Pretty much every node has this functionality within n8n. Okay, so moving on to some other settings that you can play around with in these nodes. They're all a little bit different based on the node you're playing with, so definitely just take a look when you're setting up these workflows. But in your settings, you can have SSL certificates if it's with an HTTP request. You can have it always output data because sometimes it might just like not return anything, but you still want the process to continue on. You can have it only execute once, and I've actually had some workflows where I didn't really know this was there, so I would just have 3 items coming through, I'd limit it to 1, and then I'd continue on. But but all I'd have to do is click on Execute Once. You can also have stuff retry on fail, and you get to specify, you know, like what to do, how many times, how much you wait. But like I said, each node has kind of different settings. So in here we have, you know, we don't have the SSL certificates one, obviously. In here we have one called Duplicate Item, so you can basically, you know, tell it how many times to duplicate stuff. And I think this is primarily used for testing and debugging. And then of course you can leave notes down here, which don't actually change anything about the functionality of the node. It's just in case you're, you know, sending over a template or someone on your team has to look at this workflow, you can leave some important notes right there. Okay, number 23 is that we can have structured outputs with our agents. So right here, I'm telling this guy to output 4 stories, and we're gonna see it outputs 4 different scenes all in one item, all in one object. So as you can see right here, these are our 4 different stories. The Missing Key, The Last Leaf, Midnight Bakery, Quantum Leap. What I can do is right here, I turn this switch on, which says require specific output, and it creates this new little tool for us. And I drag that into my structured output parser, which basically says output stuff like this. And you can have ChatGPT generate the JSON example that you need. And now if I run this guy, it's going to output it in 4 different little objects. So there we go, just finished up. And now we can see we have 4 scenes, and now I can sort of like split those out and process them individually or whatever I want to do with them. Okay, so number 24 is a little function we can do with an array. So in here we have a list of foods, which is apple, banana, steak. And then if I come into here, if we're basically outputting that, it comes through in a weird, ugly way called apple, banana, steak. So if I open this up, what I can do with an array is at the end I do.join, and now you can see it's going to separate them by commas. But what we can do is within this little parentheses, we can tell it how do we want this array to be separated. So I just have to put two quotes and all of a sudden they've been combined. So I could put a space, I could put two spaces, I could say and, and then I could put more spaces. And you can see that's how we can split up these items. You can also do a slash and an n to create a new line, and you can also do multiple, so you can have them like really spaced out if you want. As you can see. All right, and then last but not least, we have the ability to replace things. So the most common example I use is replacing double quotes with something else. So right here we can see we have the query pineapples on pizza and we're trying to surf the web for pineapples on pizza. But as you may know, it's not going to work to have, you know, basically double quotes inside double quotes in the JSON body. So all I want to do is I'm going to go in here and I'm going to grab this function real quick, go back into the HTTP request. Open up our expression and paste that at the end. And that's basically just removing those double quotes, as you can see. So now if I run this, it would actually be able to search the web for pineapples on pizza. And there you go, you can see we got our answer back from Tavily. And there you have it, those were 25 N8N hacks that are hopefully going to increase your productivity. If you enjoyed this one or you learned something new, leave a like, it definitely helps me out a ton. And as always, I appreciate you guys sticking around to the end of this one for hack number 25. I'll see you guys in the next one. Thanks.










