what's going on everybody Nick here and in this video I'm going to run you through a laundry list of make.com hacks that'll both help you build your scenarios like three times faster at least and save a ton of money in operations these are hacks that I have painstakingly had to learn the hard way over the course of the last 3 to four years of building on make.com and I'm going to help you learn them in about half an hour instead so if that sounds like something you guys want to improve on and learn then this is the video for you stay tuned and let's get into it all right we're going to start quick and simple with a few keyboard shortcuts if you were to try and drag a module around in a scenario like I'm doing right now that's great but what if you wanted to drag a bunch together well that's where shift click comes in handy just hold shift click and then drag and you can now select a bunch of modules at the same time super quick and easy I had somebody ask me this in the community the other day so I thought I would bring it up the next is control s or command s if you are on Mac um every time you hold command and press s oress hold control and press s you see that little purple save dialogue happen in the bottom right hand corner basically what I do is every time I make a major change to my scenario whether that's add a new module change the configuration of some I just hold command press s really quickly and then I save and the reason why you want to do that is because if you go to more and then go previous versions over here you'll see that you've actually like make has actually stored a list of all of the major changes that you've made to your scenario and if you save the most recent one you'll end up with a list of all the most recent changes that you've made it just makes it really easy for you to roll back things without necessarily having to go ask yourself crap I really like the way my scenario was working a week ago what the hell do I need to do to to make it go like that right I've wasted dozens of hours trying to rebuild things from scratch when I could have just used this so hopefully that saves you guys a fair amount of time the next and probably one of the highest impact little hacks that I had to learn again the hard way was if you just right click a scenario or a module and then click run this module only it'll only run that specific module so as opposed to me trying to run all 25 modules in my flow here and waste 25 operations every time I test I can just test the specific thing that I'm curious about by right clicking and then pressing run this module only I do this a lot in you know all of my videos as you guys see if you guys are Avid Watchers of my content you'll know how to do this on your end but essentially this eliminates the the the long feedback loop like if you think about it when you're testing a make.com flow using iterative testing like I recommend you guys do uh every time that you have to run every single module in a flow you're basically wasting like 30 seconds a minute sometimes scenario take like 5 or 10 minutes to run even and if you think about the ability to learn from what is wrong and then make the change and then use that to make your scenario better that's a really really long feedback loop imagine if you could just right click press a button then with two seconds within two seconds know exactly what's wrong you're obviously going to be able to build much faster right and that's at the core of what I personally do and why I'm able to move things so quickly um essentially push the needle forward in my own business all right the next thing I want to talk about are set and get variable modules if you haven't worked with these before they can be sort of intimidating so what I'm going to do here is build a purposeful flow just to cover this concept what I have here is I have four modules if you count the router if you don't it's three and on the leftmost side we have a basic trigger module this just allows it's basically like another set variable module just allows you to start flow using this as just like a default trigger so we don't need an action module here we're just using the basic trigger next up we have a set variables module and if I give this a click you'll see that what I've done is I've set a variable whose name is equal to Peter locked if I give this a click you'll see how I did it I just wrote name and then I wrote Peter locked pretty straightforward right next I have a router I just zoom in a little too much there so let me delete this but next I have a router and the router if you only have one route in a flow or a scenario it's just going to continue along the Route it's going to pretend like nothing was here it only really ever does something if you have multiple variables or multiple modules in a flow which I'll show you how that works in a moment um but then that last thing that runs is just this get variable module and the way that it works is you pump in the name of the variable okay the variable key and then it grabs the value for you so if you think about it the output of this is basically equivalent to the output of this and most people's question is well like Nick why would you want to do this the reason why is because this gives you an extra layer of flexibility when you're designing scenarios particular scenarios that have routes take a look at this variable up here or this mod module this is set multiple variables but I I'm Now setting a name and I'm changing the value of this variable instead of Peter lock is now Jackson lock right and if I give this a quick little run you'll see that every module in my scenario ran but if I click on this down here which is what I'm curious about the value of the variable is Peter locked but pay close attention to the way that these routers work this says first this says second basically this is the the order in which the various are executed if I were to unlink this then link this back you'll see that now this is first this is second if I were to run this what do you think would happen well now because this ran before this we've essentially changed the variable value it's now Jackson locked instead of Peter locked so these are two hacks the first is how do use set and get and the second is the fact that rouers will proceed in the order in which they're connected if I unlink both of these again and then start with this that'll be first that'll be second um a lot of the time people use router as a sort of like logical way is to change the way that a flow Works depending on whether or not something is found they use filters basically so give us a click they'll say if x equals to two and then down here it'll be like if x is equal to one right and so if x is equal to one it can't be equal to two therefore you only ever execute a single route but if you don't constrain the way that a router like if you don't add filters after a router it'll just run all of these routes for you and that's where you can start doing some really cool logic so if you go back here to to this other scenario the one that I started with you'll see that I actually make use of that exact same design pattern here I will set a variable called section text the contents of which aren't very relevant and then I will route here with a 25% probability to the secondary function and 25% of the time I'll run it and then I'll set a new variable up here the other 70% of the time 75% of the time I don't actually do this at all but you'll notice that regardless I'm getting the variable so in terms of the flow it's basically um if I could explain it visually it would be 75% of the time we set a variable called section text and then we just get that same variable so nothing changes this is basically equivalent to this but 25% of the time we'll go up this route we'll set section text again and then we'll come back down here and then get that section text and this allows us a ton more flexibility in our operations it also allows us to build vertically as opposed to horizontally and this allows us to get away from some of the very long make Doom flows that I've seen that are like a 100 scenarios and you just have to continuously be dragging all the way to the right if you want to um look at at where things start and finish and I don't just think that's unseemly I think that's just kind of annoying so yeah this is a new design pattern that essentially allows you to gain a ton more flexibility and just do a lot of cool things the next thing I want to talk about is the auto align feature in make if I were to look at our old scenario here and then click Auto align you'll see that things just moved around quite a bit basically how Auto align works is they'll prioritize a flat um scenario from start to to finish and then they will put the first running flow or first running branch of uh scenario up at the top like here which is why we just swapped second and first in addition you'll see that they sort of spread them out equally here so it goes uh straight and then there's one arm that goes up another arm that goes down I don't actually like designing my flows like this and I think that the way that I do it is much better because it instantly provides uh it instantly tells you both the higher key the way that things are laid out and then like what is the main route of the flow and then what's the accessory route of the flow what I mean by this is if we go back to this previous scenario you'll see the way this works is it's basically just one long straight line path at the very bottom and then above it you have these branches and these branches come and then they continue uh straight forward and so in this way we sort of know logically that everything at the bottom is just sort of the main route and then things that Branch off from that main route these are just accessories I also think that this allows us to cram more information in in the same area if I were to try and click Auto align look at what make would do to this you see how it sort of branches it out and then adds these break modules and sticks them all the way in the corner and these angles aren't equal and personally I just think it's pretty ugly um if you were to just go back here discard these changes and this is to me is just a much simpler and easier way to do it so this is just my opinion but this is how I've built scenarios for a very long time I learned it from good friend of mine in business partner a couple years ago and I just think that this is a much more beautiful and simplistic way to do things the last thing I'll mention there is not only do you get to stack modules vertically which helps you save space but uh the way that I I spread these out is I do exactly three of these tiny bubbles in between module to module um to me this is just the simplest way of going about things so I'd recommend that if you guys were to do something similar um you just do like when you Auto align it automatically adds three little bubbles between but this just provides you enough room so that if you were to add a filter you could read the filter where it's not so much room that if you want to grasp the full scenario you constantly have to be moving left to right here from workflow perspective it's a lot cleaner all right let's talk a little bit about API calls now um some API are slow and so in order to make them work you need to space out the first and second calls a little bit and you'll notice that I do this in a lot of my videos I'll have one module then a sleep module and then another module and the two side modules will work on the same API the Sleep module in the middle just gives them a little bit of space I have here a clickup flow it's just two modules one creates a task the other gets a task this is probably not going to break in this particular instance but I've run this over a thousand times across my old writing business and what I found was something like 10% of the time there'd be some issue if you stack to create a task and get a task and put them side by side because you'll create the task and then you will get that same task that you just created um sometimes the clickup API is just a little bit slow and it doesn't have the time to actually finish creating the record before the next module runs then you end up with an error here because it's like wait a second we're trying to get an empty task right uh this is work work in this has worked in this particular scenario run but if you wanted to work across all scenario runs a very quick and easy way to do it is just go down to tools sleep and just add at least a second delay in between the two and a second is usually more than enough time to emulate 99.999% of Errors so if you've run into some inconsistencies if you run into some weird things that logically shouldn't really make sense just add a sleep module in between um especially for like business applications project management based things adding an additional second to your flow will not ruin anything it'll be perfectly fine and this just solves a lot of the common gchas that people experience when they're designing make.com flows uh for for their first time the other one is I want to talk about syntax and how you can write variables without necessarily needing those variables to be present if I go over here and add a set multiple variables module just going to Auto align this so I can see it a little better and let's just say I wanted to do the name of the record then I'm just going to grab this name task name here well have you ever experienced something where um you try and get a variable but that variable doesn't exist in the previous module and for whatever reason here on the right hand side you're just not finding that specific variable to me this happens all the time and there's actually a really quick and easy way that you can just access the same thing regardless all you need to do is you need to put the raw name in between two curly braces so what I'm doing here sorry this's a little firet track outside but what I'm doing here is I'm going to add two left curly braces and then if I just Mouse over this you see how it says raw name I'm just going to put name here you notice that that doesn't work so you have to go one step further what you have to do is go curly braces one so you have to get the number here do name and then close it out like that and it'll automatically transform it into whatever the variable is so uh you go curly brace one. name voila in Click uh in make.com all modules have their own number which is why um when I just put in name you know it was black it didn't really make any sense if I tried two. name you'll see here that I'm now selecting from a different module previously I was selecting from this one now I'm selecting from this one so you know you just need to make sure to put the number of the module that you are calling um into whatever this is and this works with any one of these so if I wanted to I don't know get this color notice how it says raw color and the parent says Raw Status so what I have to do is I have to go one and then I have to do a DOT and then write status and then underneath I have to write the child there which is color so see here now that I'm getting status color see I could click on this but I could also write uh one status type if I wanted to get type or one let's see what's this order index one. order index like this in order to get order index maybe I wanted to grab the sharing here so I'd go one. sharing. SEO optimized right uh this works even if the variable is unselectable so if I knew that there was theoretically a variable somewhere around here um that you know for whatever reason wasn't popping up in my module picker I could go one. space do uh I don't know let's just pretend there's a child of space called token value you'll see that now instead of it being filled in it's just bordered here and this tells you that hey man the module that you're calling exists and so do some of the variables but the exact like final one here we can't actually find in the test history uh so we're going to fill this in for now and then if the data is available when you run we're going to we're going to add it um but if not you're going to have some error it's going to be an empty value so yeah that's how you use this syntax you'll notice that if you do two left curly brackets and two right ones it just like disappears that's because this is just make.com way um of demarcating what is a variable or not if you go to the text and binary functions for instance and you want to put in some of these keywords if you just do the keyword surrounded by two curly brackets you'll actually be able to instantly create one of these you'll notice that this works for the keywords doesn't really work for the functions because it just looks it just thinks we're trying to call a function call or a keyword called length um if you want to do functions you have to write the variable name and then you have to do a left bracket instead just like this so notice that you know no other combination works but if I just do a little left bracket it just pattern matches that as a function that exists if you want to call a variable here like a uid um same thing uh let me just see if there's anything else here that maybe you guys could could see if you want to do mathematical operators just curly braces and then put an equal sign like this is just a string that has an equal sign but this is the actual mathematical operator and make that has the equal sign same thing if you wanted to do this um same thing if you wanted to do oh I don't think and works actually unfortunately I think you have to do an and here there you go and then I think for or you have to do a pipe so it has to be this vertical pipe um but you know the vast majority of the way that this works it's pretty self-explanatory after you figure out this value so play around with that and see what other sort of variable values uh names there are both in make and then in your previous module run histories the next thing I want to talk about is the email module and why it is vastly superior to the Gmail module so if I click on this favorites and I click add you'll notice there's an email module if I go to Gmail you also notice that there's a Gmail module most people when they're starting out in make they'll be using Gmail and they'll think well I'm just going to use the Gmail module Gmail specifically for email this is just one of those things that you're not going to know unless you use make a bunch the Gmail module is just vastly inferior to the email module in basically every way um the Gmail module is filtering just doesn't work very well I'm not going to like hit you over the head with this a million in one times I'm just going to say that um everything that you can do in the Gmail module you can do in the email module instead it's the exact same connection um it's just faster it's it's more accurate I'll find so anytime that you're going to use the Gmail module just use the email module instead as I mentioned all the same functionality exists it just tends to run a lot faster and more accurately um and then the Gmail module tends to have a bunch of issues with connections where you have to reconnect constantly and this just solves that so you're not going to have to the next thing I'm going to talk about is prioritizing acid and instant triggers as opposed to ones that are just acid or ones that are just schedule based that don't have either if I were to try and create a type form module here you notice that under responses which is a a a trigger there are a variety of different modules I can choose from there's get a response file list responses watch responses and then watch responses instant acid you're probably wondering what the difference between these two is well if I were to use this watch responses module and just give myself a little bit of space here sorry for jumping around and then zoom in and let's just hypothetically say I wanted to use one of the many forms that I've developed maybe this one right here you'll notice that um I have an ability to choose where to start so I could start from now on since a specific date I could choose all of my records or I could choose manually I could actually like reach and choose a specific one in my case I don't have any because I don't think this form has run but the difference between the instant modules and then the ones that are just acid is you'll notice that this has a um clock next to it with a schedule the reason why is because it's basically asking you hey what interval do you want us to check to see whether or not something has been put in a new form submission or a new contact record or whatever the specifics the module you're you're working with this is called polling and it's a vastly inefficient way of getting data the alternative is event driven flows which have the term instant next to them and notice how these have the exact same name watch responses and watch responses but if I move this here that schedule that little clock changes to an electricity sort of Thunder thing the reason why is because this one runs instantly whenever a new response comes in because this is event driven this is web hook driven and these are fundamentally different ways of doing the same thing if you think about it if I were to use this and this were to run every 15 minutes basically what's happening on the hood is every 15 minutes I'm checking to see if something has been entered like a new type form has been filled out and if you think about it um 15 minutes is a quarter of an hour right so it happens four times an hour and if you want to do it every single hour that's 96 times a day so if all I were doing were this then every day I'd be wasting 100 operations what if my flow looked like this well now every day I'm wasting 400 operations or I'm doing 12,000 a month right that flow in and of itself is enough to completely exhaust all of your operations for the month if you're own one of like the normal 10K a month plans whereas if you were to do something like um this instant trigger let's say you only got two form submissions a day even if you add all these up together that's only running a total of eight operations so as you can see these uh web hook driven or event D driven flows are substantially more efficient and so if you have a choice to choose between an instant and then one that's just acid always choose the instant um instant will just make your life a lot easier okay on that note if you find some piece of functionality that you need or you're looking for some type of trigger and you notice that there's no instant um thing associated with that trigger like for instance this email is watch emails you'll notice that this watch emails runs the exact same thing as that previous one did so I have to select the right folder here so let me just choose this and then I'm just going to make this uh oh I don't think my connection Works actually let me see this probably the most recent one I to guess might have to reconnect it um again because it's been about a month and I've changed my whole thing a bun okay I'm going to go to inbox here uh and then I'm going to do all emails notice that I have to choose where to start again but if I if I rightclick and press run this module only sorry I haven't chosen where to start let's just do all emails it'll actually go and it'll grab the first email in my inbox right 46 years old and starting over somebody sent me a message basically asking me for some help um quite a while back but anyway the point that I'm making is uh this is not web hook driven it's not event driven but the cool thing is make allows you to very easily convert the vast majority of things that are not instant into instant just by creating a web hook and then sort of building your own integration so web hooks here allow you to essentially create your own thing right and if I drag this uh schedule icon from here down to here you'll see that i' change into a thunder well one very quick and easy way to turn any watch emails flow into one that is vent driven is use a mail hook and I realize I I selected the wrong module there so let's go here let's go web Hooks and then we'll go custom mail hook the way that a mail hook works is it's basically a foring address address that you just forward emails to and the second that you forward an email to it it'll run immediately if I go down here and then I say new email received I now am given a URL and this U sorry an email address and this email address is an email address that I can just forward any email to and the flow will instantly start I just sent out that email if I go back here after Gmail who typically holds emails for another 5 to 10 seconds just in case you sent the wrong thing after they do that you'll see that I've now received my mail hook and it has the text it has everything I need and it ran instantly within a few seconds basically of me sending that if I were to use the watch emails module instead it would just be constantly running in the background every 15 20 or however many minutes I scheduled it for it would consume all my operations and it just also wouldn't be yeah it wouldn't be running very quickly like what if it was something some use case where I really really needed good Lord apologies what if it was some use case where I really really needed to get back to that person immediately if it was like some transactional email or if it was just some something um well if I was watching it every 15 minutes at minimum or at maximum there'd be about a 15minute delay between when I received the email and when I responded to it this way I might have 10 or 15 seconds instead all right in this next one I'm going to show you guys how to instantly create basically whatever data structure you want very easily and it's using Jason or JavaScript object notation I unfortunately learned this pretty late in my make.com career I already knew how Jason worked um conceptually and I knew what the the format was but I never really realized I could apply it to make basically Jason is just this curly brace as an opener the variable name and then a colon and then a variable value and so this is now Json that represents something very similar to what we see in make.com and the magic here is if you go to sorry if you click on this plus press Json and then look for parse Json and just add whatever the string is that contains Jason here and if you click run once the output of that module is going to be um basically like the make.com variable syntax that we can map that we're all used to so this is what we fed in and then this is what we got we actually got something where in a future module if I wanted to let's see set another variable hypothetically with that value we'll notice how now we have a a a variable called name value the one from our Jason module here um actually has this string in it um curly brace quote name quote colon quote value quote curly brace um but now we can actually just reference the value and in this way you can create arbitrarily complicated data structures very very easily so maybe I have name value maybe I have list and then I have an array item one array item two um we can add I mean as arbitrarily as many as we want but now if I were to look at this parse Json you'll see that we have a name value and then a list which is an array which has these two array items you can imagine how if you're testing something is really really really convenient because now you can basically provide the entire data structure of the flow that you are looking to do just in these two modules and then instead of you having to go and I don't know fill out a type form every time you want to test the flow or create a new task and clickup every time you want to test it um you can just do it here inside of make and so you're basically creating artificial data which makes testing your module way easier all right the next thing I want to talk about about is array indexing and how to index into an array which just means select a particular element in an array using numbers so you know how here we had this set multiple variables module right well let's say I wanted to grab a specific item from this list here you see how it says number one is array item one well if you remember there was a second array item in there called array item two I'll prove it to you if I go to the parsejson module you'll see that inside this array we have array itm 2 well the question is you know Nick if you click on this how the heck do I get array item 2 I can only see array itm 1 well the trick is if I were to click array itm 1 here and I were to run this and go back you'll see this successfully picked up array item one but you'll also notice that all of a sudden in this variable value field here there's a space the purpose of the space is to allow you to select specific elements that are ordered starting from one and then ending at however long the list is so I wanted to get get the second item I would go list and then I would go two and this is array indexing this will allow me to pick that specific element array item two from that from that array I can do the same thing arbitrarily many times so I don't know I want like five array items here's three here's four here's five if I run this and maybe I want to get the fourth one give this thing a little run you'll see that I'm now grabbing array item four if I'm doing two instead I run this now I'm getting number two uh and then if you do one or if you just don't add anything in there it'll just automatically select the first all right next up is how to scrape the HTML of a website in less than 5 Seconds this works for 99.5% of websites out there nowadays because they're all static all you have to do is create an HTTP module called make a request this is like the fifth or the sixth one down it's right over here then you just have to type in the URL of the website that you're scraping I'm going to type in my own the method needs to be get and the body type has to be raw content type Jason application Json click parse response yes give that a run and at the other side of the result you'll see that you basically just got the full HTML of that whole website the second that you have the HTML of the website it's the exact same thing that we see here the second that you have the HTML the website you can do really cool things with it so in a ton of previous videos I've shown people how to uh scrape website data by converting things into text if you go to text parser you can go HTML to text here you can convert this HTML into something that's actually readable now you have a bunch of information about a person's website you a bunch of text you could feed all of this into AI so maybe we want to use an open AI module called create a completion then we just want to write GPT 40 let's do user tell me something about this website we're going to feed in this text we want 496 tokens if I press run once it's now calling AI with the entire body that I fed in which is pretty long mind you so we're going to be using a fair number of tokens but you can imagine that you can text process this to make it shorter and the result is a very deep in-depth uh guide maybe instead you want it to Output in Json only like this and you want uh I don't know description on line description email address if there is no email leave it as blank well now what we're doing is if we add a Json parse Json module there and then feed in the output of that previous run well now we basically created our own scraping system and it only took us a few seconds sorry the reason why it didn't work that time is because it actually output a specific thing there um don't output any back ticks no your first character should be a curly brace okay and now if we run this again you'll see that we now have basically parsable data here um with a oneline description and then we even have an email address field where maybe there's an email on the website well now we can actually parse it in a second get that and then if there is an email we'll do something else if we don't do it then if we don't have one then we'll do something else okay the next thing I want to talk about is the presence of a switch module and how switch modules allow you to take a million different possibilities and then just push them all into one route instead you know how earlier we talked about if there was an email address we do one thing if there wasn't an email address we do another thing well that's where switch values come in handy if you think about it logically if I wanted to do this what most people would think is they would slap a router in there and then they'd have some function here I'm just going to use these set variables here because that's a little easier and then what they do is they'd say if email address doesn't exist then we have some top route that's no email and and then if email address exists then we have some bottom email or bottom route right and this may look okay if it's the first time that you built something like this you don't actually need any of that you don't need to split the r up like this you don't need to add a ton of complexity like uh what usually people will do in routes is they're they're just going to do the same thing there's just going to be one tiny little difference between the two and that's just going to be the presence of that variable or not um and so instead of you having to have two routes with exactly the same thing you could actually squ squish all of these together just using the the presence of a switch module which I'll show you how to do right now so basically um instead of this router we could shave this down a little bit I'm going to remove this filter and all we need to do is go to add and then type in switch you'll be taken to tools and then switches all the way down here at the bottom and the way that switch works is you basically put the input in here so the thing that you want to route based off of so the thing I want to write route based off of is this email address and then what you can do is you can supply cases and you could say hey if this then do this if that then do this then do that I me you get to do all of that right here and what you do is you get to set the output variable and make it equal to something based off of the presence of an input variable so for instance we could have a pattern where if this is empty then we want to output something I don't know maybe we want to Output just the words empty okay and notice what's going to happen I'm just going to close this notice what's going to happen if we run this now with an empty um email the output to this is now empty you'll notice that the input to this was uh the email address right but now the output is empty and so we're doing is we're switching the output based off of an input the cool part about switches is you can make them arbitrarily complex let's hypothetically say that in addition to like I just fed in a bunch of website text here right so let's actually just say nick. left click. is in the text that I'm I'm feeding to the air well now it's going to find this and it's going to add this to my email right so let's let's say that there are a bunch of other routes let's say there's one where I'm looking specifically for this and we'll say it's Nick and then there's another one where I'm looking for somebody called John I'll say it's John notice how we have three possible routes or three possible variables that we could set the value of based off of the presence of something in here um there's also this else uh option which essentially says if it doesn't fit any of these options then we want to use this and if I add in the data like this and press run anyway let's see what happens now you'll see how the output is its Nick why well because if I look at the Json we now have an email address Nick equals to left click. a and so instead of me having to route based off of the presence of an email or the lack of an email or something like that we could just switch and then use the output variable to do the things that we want it to do a common thing here is if you are doing something in clickup or something in a CRM that has IDs you could change the subsequent ID based off of the switch all right the next thing I want to talk about is a very simple design pattern that I always use in basically every flow it's what I call the trigger and the list design pattern so hypothetically let's say that we have a scenario here um that uses type form and this doesn't just work with type form this works with any sort of twep flow like this this will work with any form system basically so jot form it it'll work with like a bunch of Google Sheets things it works with basically anything the point that I'm making is um you'll have some type of action or some type of trigger rather uh like the type form watch responses module here which will trigger every time you fill it a form that you select so every time I fill out this content generator brief web hook thing it'll fire and then it'll run and then uh the vast majority of these form platforms or these inputs usually have another module that lists or searches or gets a bunch of responses and so the reason why I split these into two parts here and the reason why this is so valuable is because essentially if you're testing a big flow that requires a form to be used as the input to that flow then anytime you want to test that flow you basically have to go through and you have to fill out the entire form again so if I wanted to run this thing I would literally have to go through this content generator brief and I have to fill this out every freaking time that I wanted to run the thing and you can imagine now if I actually wanted to fill out like this form with like legitimate good-look data it would probably take me like 2 minutes every single time that I wanted to run this thing if you if it takes you 2 minutes to run a scenario just to test it and you test it even like 15 times which I would say is an average number of times that I test something you just added half an hour to your build time here instead what you do is you split this up into two parts one that watches and then another lists and when a form is submitted it runs this watch but then it also has a list and I split these with a sleep because I like to make sure that there's enough time between the two like I talked about earlier but anytime you want to test all you do is you unlink this and then you drag this to the list list and then you can just right click and press run this module only and that way you can actually just get the exact same data that you just filled out and you can just repeat that over and over and over and over and over again so instead of you having to physically go through and fill out a form every time now it takes you two seconds you just right click run this module only um you you ensure that that has the data that you want and then you just start the rest of the flow using that so very very quick and easy way of doing this um in order to make this work the best you should probably just set limit to one so I'm just going to write limit equals 1 for type form this works with Google Sheets too Google Sheets is like a search um rows module this works with the vast majority of form systems this works with basically everything and it's just a quick and easy way to ensure that when you test you test fast again the whole point of make.com is to minimize the feedback loop if you really want to do this well you just minimize the amount of time between when you test something and when you see the results of that test okay another thing I want to talk about is a second design pattern that I use which I call the split and the get design pattern and if you watched a couple of my videos you probably seen me do this so let's say that um I'm going to use this Json flow that I developed here earlier let's say that I have a full name value and the name is me Nix RVE okay I'm going to take that and then I'm going to parse it right and when I parse it what's going to happen well we're going to get a result that says Nix but let's hypothetically say I don't actually care about the full name I just want to get the first name how do I get it really quickly well I use split and get so let's do first let's also do last name just for shits the question is how do you get only the first half of this name well you use the fact that there's a white space in between to split the variable based off of the presence of a space like that now if I were to do this I'm just going to copy this in both here if I were to do this and then run what is the output of this you'll notice that the output is we now have an array with the first and the last name split into one and then two so we've already done half the battle all we have to do now is we have to select or index the specific element in the array that we want and similar to uh array indexing like I showed you earlier it's just instead of using that dot notation thing that we were doing sorry not the dot notation but the bracket notation we were doing earlier we just use the function called get we get and then we do a bracket then I move to the end here and then I select which result I want first or second so I selected the first result there if I want to do this and get the last name here what I would do is I would go to the end and then press two and now if I press on once you'll notice that I now have the first name where I want it to be the last name where I want it to be this doesn't just work on first names last names or sort of like name related things this works with basically anything um once you get the keyboard shortcuts down you'll notice that it's super easy I can do this whole thing in like one second basically split this based off the presence of a space and then get this based off of uh its position one or two that took a little longer than one second but I think you guys catch my drift all right so I remember a moment ago where I showed you guys this two-step design pattern with a watch and then a list well I have another hack that works quite similarly to this and works for instances where you're not just trying to trigger something but you just want to you just want to test a particular part of a scenario based off of data that you've cached or stored um and what I do in order to accomplish this is I use the set variables module here so if you think about it what this function here is doing is this is searching a Google sheet and it's just getting a bunch of rows and I'm getting a bunch of variables like um title word count primary keyword um and that sort of thing what I've done here is I've actually set the variables here and let me give you maybe an even better example like if I were to take all of this data okay here's why this works so well so in my particular flow what I'm doing is I'm feeding in a bunch of variables to Ai and I'm basically just doing a bunch of example content and then I'm saying hey here's the title here's the word count here's the primary keyword secondary keyword internal links intern links additional instructions well the reason why this design pattern is so valuable like if you think about it I could have just selected all this data from the Google sheet instead but I chose to do it from this the reason why this is so valuable is because anytime I want to test this flow okay I could just use the set variables module as the trigger and I do that by just dragging this all the way over here now the set variables module is currently referencing a bunch of Google sheet data but what if instead I just write what I want to do here right now it's 22 there may be more who knows um I don't know right what if I just set it all and I hardcoded here well now I can actually run my entire scenario just from this module I don't need to bother myself with any of the beginning part of this module and if you set up your scenario right you'll notice that despite the fact that I broke off arguably the most important part of this whole flow which is the beginning and the trigger there's no error in any of these subscrip modules there's no little red or orange icon that'll pop up saying hey man you're missing a module name or variable here um because what I've done is I've just made sure that everything starts here and if I fill in the variables manually like this now I can just test it using the same data and you can imagine this is really really good for Expediting the rate at which you build flows the next thing I want to talk about is storing incomplete executions and then using this break module now if you've looked at my scenarios and you're not familiar with the break the first thing that you probably asked yourself is Nick why is there a bunch of little orange pause icons on top of a few modules why are they on top of these orange modules and not on top of all the other ones well basically what this is is this is a way where if an API is rate limiting you or if there's some error in your API call there's some issue you can um store that that data and then run it in 15 or 20 minutes instead when maybe your rate limit isn't fixed or maybe when the API is back online in order to trigger this what you need to do is you need to go down to the settings icon and then click allow storing of incomplete execution so press this yes button then what you want to do is you want to go to flow control what you're looking for is you're looking for this break icon here now the only situation which you actually want to use a break icon is on an API call usually on some type of like AI large language model thing or just an API that you know is a little bit shoddy it doesn't work all the time I mean if I were to use it on this markdown HTML module this would do nothing because the markdown htl module is just a make.com built-in it basically never breaks there's just no point to do it but if you give this a click you'll see that you can select the number of attempts you want to give it to retry and then you can also set the interval between attempts you could say 15 minutes you could say up to 44640 minutes it's pretty crazy right um and basically I use this on every large language model that I run in production meaning that anytime I'm running um something on an actual client website or on my own business I will always always use the break module because there will inevitably be problems there'll inevitably be some downtime we'll inevitably hit rate limits and this just ensures that the flow doesn't completely stop and completely break it ensures that if there is an issue well 15 minutes from now it'll be resolved on that note I want to show you guys a very special variable that most people don't know exists if you go down here to the settings icon and then click show advance settings to scroll down you'll see that there's a number of consecutive errors fielded you can actually set the number of errors that you are comfortable dealing with before it deactivates the scenario for you the reason why this is valuable is because if you're running something that costs a lot of money every time it goes if it fails like once or really more than once you're going to be spending a fair amount on that right um and so you can make your scenario a little bit more fragile and you can make it actually just like forcefully deactivate if there's ever a problem I've done this before to save a few hundred a month in token costs where when I know that there's some AI module that doesn't always work and sometimes it's a little bit shitty and it's not critical to the functioning of my business but sometimes it's nice to have I will set this to one and then anytime that there is an error basically um it will automatically deactivate the scenario and send me an email that way it doesn't run on a bunch of bogus or bunk data and I get to save some money I'm not saying that you should do this I'm just saying that uh this is a lever that you could pull to give yourself a little bit more control over how make.com works for you alternatively maybe you never want it to deactivate I don't know you set it at a th000 or something like that so even if there's an error it'll continue to run um and it's not that big of a deal all right the second last thing I'm going to talk about is the iterator and the aggregator if you've seen my iterator and aggregator breakdown this is just going to be a brief rehash of this um I'm going to touch it a little lighter than I normally do but essentially what you have if I go to tools here and then if I have actually let's do this let's go to Google Sheets instead um this one right here I'm just going to paste this because I don't want to completely screw up my flow and what I'm going to do is I'm going to right click press run this module only you're seeing I'm going to get a ton of data basically on um what is in my Google sheet right um if I were to hypothetically set the maximum number of return rows to let's say three okay now I'm going to disconnect this I'm going to make this the trigger and I'm just going to have my own little mini scenario on top of here that isn't really related to this let's say I want to set a variable here and I just want to this this to be the title if I generate three results like I just allowed it to what you'll see is the first scenario is going to run once the second scenario is going to run three times that's because of the number of bundles that are output the search rows module the list form entries module the watch whatever module um a lot of the time if these will have a setting that tell that asks you how many results you want to deliver if you do more than one it'll run every subsequent module however many times you select it to based off of different data every time right so these are three different titles that I got from the first bundle second bundle and third bundle and we just changed the variable here well If instead of running it three times I just wanted it to run once what I could do is I could feed this into an array aggregator I can then aggregate all of these fields and then I could set this variable value to be the array and what this is going to do is this is going to turn multiple runs so multiple B bundles over here into one bundle with a bunch of different array items so now the variable value isn't three separate things it's one with uh the value the key name title and and then inside of title we have each of these three arrays that I've fed in um if I wanted to only grab the title I could just do title and I could run it and it would just be in a single bundle with three items right uh but that's more or less how the aggregator module works if I wanted to convert this back into something that ran on a bundle basis AKA that executed every subsequent module I I could just feed in this array to an iterator again and then I could get the results of this and then we would be right back at square one now we have three operations used three bundles um every bundle subsequently Downstream is is uh you know selected a different title iterators and aggregators are sort of beyond the scope of this video if you don't know how they work and if this is just black magic to you then please do check out my deep dive I talk a lot about how they work and how they can add a ton of value to make.com flows the last thing I'm going to touch on briefly is status code status codes are not super crazy important to know um so I'm only going to cover this very briefly but basically anytime you do any sort of HTTP request or call a website you receive this status code parameter um and this is just like a code that somebody 30 years ago decided would be equivalent to like a thumbs up like hey everything worked um there are a variety of status codes out there 200 means that things worked we'll do a patch request I'm going to right click um you're going to get a 405 method not allowed um that status code basically says hey this isn't working um the 400 series of status code just means like there's some issue 405 particularly means the method is not allowed so I tried calling a website that can only be called through get and I and I tried calling it through patch um if there's like an authorization I think there's like an authorization error status code I think that's 401 um and so uh this isn't so much as a quick hack as it is just understanding what these HTTP modules are telling you if you run scenarios that frequently access websites or try and scrape data then just spend like 5 or 10 minutes Googling htttp status codes and then spend just a few moments just like breeding up on what they all are a lot of them aren't really that useful um but generally speaking 2xx means success 3xx means redirection and then 4xx means there's some issue with the client 5xx means that there's some issue with the server but if there's like a server error if you receive a 5xx response so five something something um odds are it's like an API issue it's not necessarily related to you although I will say some apis like really suck with this they just don't have good error handling so they'll return a 5xx server error even if the real issue is something on your end but that's a topic for another video all right I hope you guys appreciated this video and our 21 or 22 quick make.com hacks I had a lot of fun putting it together because have any questions about any of the the quick little things that I talked about here you want me to dive into it a little deeper just drop a comment down below I get most of my ideas now from the video comments that I receive simply because it's sort of hard to continue producing content otherwise I really want to create content that solves part particular problems that people are s suffering from today not like theoretical Grand problems that people aren't so yeah keep them coming um otherwise we could do me a big favor and like And subscribe to my channel that would mean a lot thank you very much for watching and looking forward to the next one see you guys later