Create Stunning AI Presentations in 2 Minutes with Gamma App and N8N

Michael Elliott shows how to build an automated presentation generator using Gamma's API and N8N. He walks through form setup, API integration, and prompt engineering to create professional slides in minutes, with potential to monetize the workflow.
What's going on, guys? Michael Elliott here, owner of multiple seven figure companies, including one in the AI space. And today I'm going to be giving away a incredible flow using Gamma. They've recently released their API the end of July and it allows a flow as simple as this one to be able to produce documentation presentations as detailed as this one using one or two sentences. So you could literally produce this for anything. Quotations, presentations for businesses. I've personally sold this flow, what, five businesses. Now, there is a limitation on the API of 50. No one cares about that. What we really care about is actually getting inside and building it. So let's go. So here we are. There's two reasons you're watching this video. One's that you want to make money using AI. Well, this is a saleable flow. You can go and sell for fifteen hundred dollars, two thousand dollars easily to businesses. The presentation quality that it spits out, which looks like this is incredible, the flexibility to do it off of two sentences and time saved is ridiculous. And you know, you could probably sell it for more or you're a business owner who's looking to implement this into your business and therefore you should be able to take this. I will include a link below so you can download the actual file. I'll remove my API keys, not that I don't delete them anyway, but there's too many AI videos out there which build things that don't make money. Well, we're about to build something which makes some money and I'm going to hit it off and build it all with you, literally step by step. And it starts with a trigger node. So because it's step by step, you're gonna have to bear with me when I'm filling in things like forms. But we want to add a form submission. Presentation form submission. Okay, that's in caps. That's a bit aggressive. But I'm going to leave it because I don't want to rewrite it. Generate presentation is what we're going to call it. Bit of pr. We could do some of that. Form description. Yeah, form type, form description. Generate any presentation you want. We need two form elements. That's it. Presentation, title, Enter presentation. You think I'd be able to spell presentation after I've written it about 55 times in the last 10 minutes? Presentation description. Okay, what do you want the presentation to be about? Okay. And I'm going to make them both required fields. Not really necessary, but the flow would break if they didn't have them. So let's, let's let's do that. So now we're going to hit command S. If you watch my other videos, you'll save it. And we're going to execute the step and what we're going to do is the presentation title is going to be Michael Elliot's 2025 Q4 YouTube. That Q is annoying me. I do apologize. My sort of OCD or whatever kicking in. Q4 YouTube strategy subscriber growth strategy. Growth. Growth strategy. Yeah. Okay. Presentation description. Please produce a professional. A professional presentation for Michael that has an intro and outro page researching and analyzing hot topics and best practices for YouTube subscriber growth. Growth in the AI industry in 2000 in Q4. 2025. Okay, submit. That's done. We can see the information to come across. It's in test, but we've got presentation title. We're. We've got the presentation description of what we're looking for. Now if you've seen any of my previous videos, you'll even know the importance of pinning data. You've got to pin data. So literally click the node and press P. Now this is really simple from here. The only thing we have to do though, and what I'm going to do with you is I'm going to generate the prompt. I'm going to create a system prompt for you or with you so that you can do the same thing when you're doing things like this. So we want to search for whatever that word was. I have no idea. But basic LLM chain. And the basic LLM chain, we need to change the Connect to Chat trigger node to define below. And what we want is presentation title. And we're going to drag this across, make sure that you are on the schema section of this presentation title. Drag that across, pop that in, make sure there's no spaces in between that and then presentation description and drag that across. Do the same thing. There you go. Great. Amazing. Now we have, we've dynamically pulled over that data. So every time that form got submitted. Now, as a fresh flow, which is important, when we were producing more later, it will dynamically pull in the title and the description. That's why we've done that. It's an expression. That's why we're using it that way. We need to do a couple of things in here. So we need to require a specific output format. Okay. And we do need to give it a prompt, but let's exit out of that. So hit escape. Let's choose a model. I'm going to use Gemini flashed 2.5 use whatever you want, you know, the more powerful, the better you'll get. But the output parser is basically just a way to be able to explain to the LLM that it wants the output to be in a structured format, whatever format that is. So obviously in this particular case we want to return the data in a defined JSON format so it's easier for us to use. Now what we're going to do is we're going to do something here which is something that you may not have seen before, depending on your skill level. Well, the beautiful thing about this flow is it's going to be so easy for you to build if you, if you follow along. Right, I'll put the URLs to the API information inside of it. Everybody hears, Everybody hears about APIs and using APIs and things. Oh my God, like how am I going to do it? You don't need to, you don't need to panic because in most cases you can just import a curl anyway, so it doesn't make any difference. It's literally so easy, you've just got to fetch your API key. It's not always true, but in this particular case it is. And like, this is like a flow I could build in five minutes if somebody wasn't watching and I wasn't explaining. So to go back to this, this is given an example, this is the basic JSON example that it will use. Well, I'm going to go one step further and I'm going to go into the Gamma API developers, Gamma app docs. How does the generation API work? I'm going to put this in the description, so if you need it, pause the video, grab it now. But I'm going to copy this, this JSON. But importantly, I'm not copying the whole curl because I don't want that yet. I just want this here, this JSON from where this curly bracket starts to where those curly brackets end. That's all we need and I'm going to stick it in here and that gives it the exact. That's we're now, because we're now providing the LLM with specific information about the output. You can see here, this is what Gamma requires in order for it to, to be able to produce a presentation right via API. There's a few things make title catchy, exports PDF, the tone, all of these things that we can change. Now it shows you how the A, the AI images are generated, etc. And we're just in a good position here when it comes down to providing information and logic based around what we have. So that's the only reason we do it. I put it in there to give it the correct information. It's good practice to follow. If you were using something else and it had its own documentation, make sure that you put it in there. That's my two pence anyway. The traditional, the traditional basic format is normally good enough, but I'm giving it exactly what, what it needs and it will resonate with what we're about to produce in the form of the, the LLM. So we have the title and information, the user message. So we have what the mess, what the information the LLM is going to receive. What we don't have yet is a prompt, system prompt. And this needs a system prompt. It needs to know what we're, what we're going to do. Now I'm going to be in a position here where I'm not going to write the best possible prompt ever because I'm going to do it with you live in AI Studio and I'm trying to keep speed to obviously keep you engaged, to make sure that you continue. But if you want a full end to end flow build, then this is how you do it. So I'm going to copy all of this and I'm going to go to chat. Only the, the, the, the JSON by the way, in case you didn't follow that, I actually caught the comma at the bottom but I'm just pulling the JSON, I'm not pulling the headers. We'll use that later, you'll see how easy it is. And let me close that now. So you're I need a system, a system prompt for a basic LLM chain inside of Nan Nan that is going to be taking input text, which is the fields that we've just put in, taking input text, expanding on the user's brief, brief example, expanding on the input. So in order to provide a more detailed output for the for the next node bracket gamma HTTP request, please do not get too caught up on the below. But as an example curl you can see the variables we might be able to change and what you should identify from the input slash research you do. I'm going to change that to and research you do and then I'm just literally going to paste in the curl below. Well paste in the JSON. Now it's actually Jason, I'm going to turn the temperature to zero. You should always, always use zero temperature. Never use anything else unless you wanted to go crazy wild. Now this is thinking it's going to generate a system Prompt and this system prompts job is simply just to be able to provide the LLM, the information of how it needs to take the data that we're giving it from a form, repurpose it, rejig it, expand on it, and then pass that information to the next node. How good of a prompt this is going to be is up for debate because I haven't spent any time, obviously, actually prompt engineering. I've literally just written a few sentences, but you can see that this is what it's spat out with this. So let's do this. You're an expert AI assistant, let's just take it. I'm going to copy all of it and I'm going to put it in. I'm not going to worry too much because you shouldn't worry too much. We'll see what is ultimately generated. Let me, let me bring that out and let me load this up and paste a merge style so that it looks a bit cleaner. It's not input text. I mean, that's the presentation description. That's where it misunderstood. You see, it misunderstood the, the, the requirement where, where I gave it the curl. This is why you've got to be careful because it actually would have broken there because it was waiting for that input text. We've actually given it its information above, so I could, I could delete it, but I'm not going to, I'm going to keep it because we're going to just literally freestyle this. Okay, so now what do we do? Well, let's, let's execute. Don't know why I've just done that. Apologies. Literally execute. We've got the form pin, so it'll pull the information. Let's have a look at the output, shall we? So if we look at the, if we look at the output, we can see a professional, comprehensive presentation for focusing on hot topics, best trends. And you'll see that because we gave it the curl, it's given us everything else, like number of cards etc. This is not important right now, but this is what the, this is what Gamma is expecting to receive to produce presentations such as these ones. It's expecting, it's expecting that, that level of input, it's expecting to receive that information. So what we've done by providing the AI LLM, the curl is actually. Now it's going to give us every single option, which we're not going to map them all in the next phase, but we could do. And I'll show you how and why. Now we need two HTTP request nodes. Okay? And this is where things get really easy. Everybody panics about APIs, don't they? Like, you know, everybody panics literally. Oh, how do I connect this API? Well, guess what we're going to do? We're gonna import curl, we're gonna go to this document developers, gamma, dot, whatever and this time we're going to copy the whole thing and we're going to come back inside of Nan and we're going to paste the curl, going to import it and absolutely everything is done for you. So you have everything inside of here. Okay. You have the all of the correct structure, sending of the body, the JSON, the headers. The only difference is, is that you need your API key. So if we go into gamma and we went to where is the settings in here and even been in here. Settings and members API keys create an API key new Nan. Do you know what? I've just shown you how to find it. Settings and members API keys. You go up there and you, and you can see it and you'll be able to create the, the, the API key. I'm just going to go and quickly, very quickly grab my API key that's already in here just because I'll be deleting it after. So it makes sense. Now hopefully this generation request with this pull through works because in the above one I did put two authenticators in, but all I did is paste in my API key, right? That's all I've done. The rest of the import is done, there's nothing else left. From a perspective of pulling those, those in, it already gives you the URL, it gives you the method, everything is done because you're actually, you're actually in the middle of creating this. So I'm going to rename the node generate presentation so we have that, so we know, so we can go back and reference it. Reference the post request. Now the only thing left is that if I used what they had, it would generate a presentation, but it would do it on the best hikes in the United States, which is to be a good use case. I could, I could do it and show it you, but what we actually want it to do is we want it to use our input text, don't we? So we actually want to remove that. Best hikes in the United States and we want to drag our input text here. It's going to make it a mess. I know it was going to do that. Let me just copy this. Let's copy this. Come up here. Oops. Paste it in. Sometimes needs must my friends. So paste it in well now it's going to create, it's going to use all of this, it's going to use all of this other information, but it's going to use my input text to generate the, the presentation. So now the theme of the presentation is going to change. Like the whole context of the presentation is going to change because we're using a variable and every time we submit that form it will change. Okay, well I'm going to keep these, but because we gave it the curl before you can see how you can do this. You could pull the number of cards over, you could pull the format mode. Like presentation is still the same. Make titles catchy will keep that. The professional and inspiring will keep that. But you could drag and drop all of these numbers and you could also in your prompt ask for them to be different. So you could be like, I want a five card pitch deck for this client. That what we want to quote this amount and you just send it. Or you want a lovely brochure for your caravan park or whatever. Like you can do all of these things. So you know. Yeah, very, very powerful. But I've just shown you how you would, how you would do it. Let's hit it and see if it works, right? See what happens. So we've got a generation ID back. So that means that the presentation has been generated. Now if we go inside of. If we go inside of Gamma. Have I lost you? Gamma, where are you? Gammas? You'll see here. This is the one that I've just created. Okay. But it's not yet finished rendering, which is why there's a wait node later. So when I come back, we will see that. Okay, But I'm gonna continue with the build because what we now need to do is we now need to fetch the. Well, we need to get the, get the request. If you're trying to do it automatically. That right there is a gener. Is apologies is a generation of a, of a presentation. But if you add a node now and we go another HTTP request and we do exactly the same thing except for instead of using this curl which is the generate API, it is in beta. So we do have to. It did actually break on me the other day when I was messing around with something. You can see here. Literally this is the curl. There's no button for me to copy that. So I'm just gonna go try it. Will that copy me? No, RAM needs an API key. So we'll copy this. Okay. And we will come inside of, back inside of N8N and we will Import the curl and we will paste that in. Now I don't think this requires a header for my authentication, but we're gonna find out right now. Authorization failed. Okay, so simple to solve. Don't panic. We go back to the previous node. You can see if you go left and right on your screen you can click these nodes. I mentioned these little tricks, tips and tricks and couple of times previously. So it's X API key in caps. We go back in here, we add a parameter to the header. We've already got a header which application JSON application JSON API key. We paste in our API key from Gamma we execute step generation id. Not found the generation id. You know why that is? Common mistake. Something really important. We've got, we've got the imported, we've got the imported form, but we've got the imported URL. Sorry, but we didn't use the generation ID that we actually received. So now if I execute it will pull it or it won't. Must contain letters and numbers. Input validation is wrong. Stanley contain letter and numbers. Let's try it now. There was a space behind the, behind the JSON. So we now have the Gamma URL. Right? And we have the status. The status is completed, but that was pending. So if we go back to Gamma and load this up, it should load. You'll see that this has produced a YouTube growth hack, sort of. I'm not going to read it, it doesn't really matter because that's where the prompt engineering comes in. But you can see that it's completed where it wasn't when we first looked. Right. And you can see some of the stuff is actually incredible. So we have the ability to be able to do this. But what we're looking for from a saleable aspect for a client is we're looking to be able to do this, do this fluidly as I did previously. So this is now fetch. Fetch the fetch presentation. Get. Get presentation. Get the presentation. And what we need to do is we simply after we have to get presentation, we simply add an if node. Okay. And an if is basically true or false. That's all it is. And what we do in here is we have status is equal to completed, right? That is it. The status is equal to completed. So I'll come out of here now and we've got an if node and that if node has a status is equal to completed. So it will not pass, it will not go through. Is the presentation complete? That should now make more sense when you look at it. And it's how it should. When you, when you download this, you'd be able to see it. Is the, is the presentation complete? JSON status is equal to completed. So we come out of here now. Well, we've got a couple of, a couple of things to sort of. To sort of get here, haven't we? So we need to. If it's false, we need to add a wait node and I'm going to add a wait node. I'm just going to as 10 seconds because it tends to be around a minute long. So 10 seconds is. Is. Is fine. We have that and then what we do is we actually drag this back around here. I'm going to rename this. Wait 10 secs. Wait 10 seconds and we drag it back around here and it will continue to loop around that. If, if the status is not. If the status does not equal completed, it will run back through. If I ran it now, it would pass because the status is completed because we've allowed it to generate. But it, but it hasn't. If I stick at the end of here now. So just to finish this off and showcase this to you live. Nam form. Form ending. Form ending. And we wanted to, I don't know, redirect to a URL and pull it to the gamma URL. Let's just say that that's what we wanted it to. To do. Let's see if that will. What will actually work. Redirect to the, to the gamma URL. Might be the, might be the export URL. I think it's the gamma URL. So we have this now. Looping. We're getting the presentation. I'm going to save this. Going to unpin this data. Right. And I'm going to, I'm going to do. I want to execute this, execute the workflow presentation title. I shouldn't have opened that. I should have copied it and pasted it. So we had some more. But please landscape. No, I don't know. Back at YouTube. Nan's growth. Growth trajectory in 2025. I want a comprehensive professional document that highlights the potential growth nan has in 2025. Yeah, whatever. Like something. It could literally be at anything. That spelling was that bad that it didn't. It wouldn't even have an autocorrect. So now we're going to submit it. Okay. We submit the form. The flow is running. The LLM is doing its thing. And watch this go around the weight. It's going to go around the weight because it's in 10 seconds, it's not going to have a status of completed. It's going to have a status of pending. So it's going to keep going. That's why the. If node exists, you see. So it will keep going until it hits it. It'll probably do it on the, on the fourth or fifth time. Maybe it'll hit and it will go through and it should redirect us, should redirect us to the. To the Gamma URL. But we will, we will, we will find out if not it doesn't really matter. You can do it. You can literally go back in there, change it to whatever. Whatever URL Gamma literally send you back to Gamma app. Put the presentation. This seems to be taking a little while. Better be pulling out some incredible presentation but I'm going to let you watch it hopefully without that ugly forming the way too much in the way. But I want to keep it there for the redirect, see what happens. We're 60 seconds in so yeah, I'm probably going to come back to you if this doesn't happen. Once this is. Once this is done. And there you go. So the form was. Was submitted and it redirects us to the four. It redirected us in here to the. To the form unleashing the flows. Nan's Journey 2025 all of these individual models gives you the path of what they're on. It gives you incredibly professional documentation and it does it all inside of here. Imagine you could just give. All you have to do is give the user all you have to do for a business, right? This won't work some it's because it's not live production URL. All you have to do is give the business this presentation. This presentation, sorry this form submission for the presentation and they literally receive this automatically. The power that Gamma has is absolutely ridiculous. Not only can you. Can you build those, those flows, you can manipulate this. You could have it sent off as emails, you could add them to Google Sheets. You could continue this flow and build out whatever you wanted to do. But the fact of the matter is, is that we're in a position where you can now produce presentations of ridiculous quality and you can do them at the drop of a hat, providing value to businesses. You could go one step deeper. I only change the input text, but you can look at Gamma's templates and use different templates. You can have it dynamically insert them the same way we did with the text. You can do just about anything to make this. To make this ridiculously powerful. One of the things which you can also do is brand up the form that's something that I always do for clients. You brand up the form form that they that they get to submit in N8N that is ridiculously easy. But I'm giving away gold here. Like this video comment. Let me know what you thought. Let me know about how use cases, how you would use it. Think outside the box. You know, you have quotations that you could potentially use them for. You have them for guides. You have them for anything new staff members, business introductions, pictures for funding. There's nothing that you can't use them for. My name is Michael Elliott. Thanks for watching. Like, subscribe and I'll catch you next time. Cheer.










