Automatisiertes LinkedIn-Outreach-System mit n8n, Apollo, Apify & PhantomBuster

Haupterkenntnis: Wer Apollo-URLs per KI generiert, Leads via Apify scrapt, GPT-4o für personalisierte Icebreaker nutzt und PhantomBuster über die API triggert, baut ein vollautomatisiertes LinkedIn-Outreach-System für unter 2 Dollar pro Monat an Lead-Kosten.

Creator: Nick Saraev
Branche: Marketing
Bereich: Automation

Tags: linkedin-outreach, n8n, apollo, apify, phantombuster, lead-generation, ai-personalisierung, cold-outreach

Kurzbeschreibung

Nick Saraev baut live in n8n ein vollautomatisiertes LinkedIn-Outreach-System – von der KI-generierten Apollo-Such-URL über Apify-Scraping und GPT-4o-Icebreaker bis zum automatisierten PhantomBuster-Versand mit Google Sheets als Datenbank.

Langbeschreibung

Das Video zeigt den vollständigen, unbereinigten Live-Build-Prozess eines LinkedIn-Outreach-Systems in n8n. Ausgangspunkt ist ein Formular, in dem die Zielgruppe auf Englisch beschrieben wird. Eine KI (GPT-4.5 / GPT-4o) wandelt diese Beschreibung in eine valide Apollo-Such-URL um. Apify scrapt die Ergebnisse für ca. 1,20 USD pro 1.000 Leads. GPT-4o generiert für jeden Lead einen kurzen, personalisierten Icebreaker (max. 300 Zeichen / ~50 Wörter) auf Basis von Name, Stadt, Jobtitel und Karrierehistorie. Die angereicherten Leads werden in ein Google Sheet geschrieben, das PhantomBuster als Datenquelle nutzt, um Connection Requests mit dem Icebreaker automatisiert zu versenden. Nick gibt außerdem Einblick in seinen generellen Build-Ansatz: immer zuerst manuell validieren, dann automatisieren.

Stichpunkte

  • n8n-Formular nimmt Zielgruppe in natürlicher Sprache entgegen
  • GPT-4.5 / GPT-4o generiert valide Apollo-Such-URL aus Freitext
  • Apify scrapt Apollo-Ergebnisse für ~1,20 USD / 1.000 Leads
  • GPT-4o schreibt personalisierten Icebreaker (max. 300 Zeichen, paraphrasiert immer)
  • Leads werden in Google Sheets gespeichert (ID, Name, LinkedIn-URL, Titel, Email-Status, Foto, Icebreaker)
  • PhantomBuster wird per API-Call aus n8n getriggert und liest das Google Sheet
  • LinkedIn-Limit: ~100 Cold-Connection-Requests pro Woche → max. 10 pro Launch empfohlen
  • Wichtigste Build-Regel: immer erst manuell validieren, dann automatisieren
  • Pinning von Testdaten in n8n spart bei iterativem Entwickeln 20–40 % Zeit
  • Webhook-Tracking von PhantomBuster-Runs ist technisch möglich, aber im Video nicht vollständig implementiert

Zitate

“Never forget this step when you’re actually building out systems: make sure you can do the thing manually before you do it automatically. Otherwise you’re putting the cart before the horse.”

“The very first campaign that you guys send out is probably going to be the worst campaign you’ll ever do.”

“If you can respond to people on average within a minute, your conversion rate jumps up by something like 400%.”

Action Items

  1. Apollo-Konto anlegen und eine Beispiel-Suche (Zielgruppe + Location + Jobtitel) manuell durchführen – Such-URL kopieren.
  2. Apify-Account erstellen, Apollo-Scraper-Actor testen (Such-URL einfügen, 100 Records, CSV-Export) – Datenqualität prüfen (LinkedIn-URL + E-Mail-Coverage).
  3. GPT-4o-Icebreaker-Prompt bauen: System-Prompt mit Paraphrase-Anweisung + Template „Hey [Name], [paraphrasierter Bezug], thought I’d connect.” – auf max. 300 Zeichen testen.
  4. n8n-Workflow anlegen: Formular → GPT (Apollo-URL generieren) → Apify-HTTP-Request → Limit-Node (Test: 3 Items) → GPT (Icebreaker) → Google Sheets Append.
  5. Google Sheet mit Spalten: ID, First Name, Last Name, Full Name, LinkedIn URL, Title, Email Status, Photo URL, Icebreaker.
  6. PhantomBuster LinkedIn Auto Connect einrichten: Google Sheet URL einfügen, Spalte „LinkedIn URL” + Spalte „Icebreaker” mappen, max. 10 pro Launch.
  7. PhantomBuster API-Key erstellen, Phantom-ID kopieren, n8n HTTP-Request-Node mit curl-Import erstellen um Agent zu triggern.
  8. Kampagne mit 5–10 Requests/Tag starten, wöchentlich Message-Templates überarbeiten, Antworten innerhalb von 1 Minute beantworten.

Full Transcript

Hey, everybody. Today I’m going to show you how to build your very own LinkedIn Outreach system in NADAN. This video is perfect for anybody that wants to automate their LinkedIn Outreach with a system that creates a targeted lead list in Apollo using just natural language and riches those leads with detailed profile data. Use this AI to generate personalized messages, sends connection requests and follow-up safely, and tracks the entire campaign within a Google Sheep. My name is Nick, I’ve made over a million dollars with AI in automation, so today I’m going to walk you through building this entire system step by step. Let’s get into it. Okay, so here’s a demo of the system from start to finish. We start with a form that I fill out, which I’ll show you in a second. That form basically asks for us to define the search parameters in natural language, so I am going to get to say, I’m looking for creative agencies between one and a thousand people that are in the United States, and it will actually create an Apollo search URL for me completely autonomously. We’re then going to generate a search URL here, and then a run on Appify Actor. I’m setting a limit node here for those of you that don’t know limit node is just sort of a testing node. It allows me to set lower limits, so I don’t overwhelm an API. We’re then doing a personalization step right over here. Then I’m adding this to a Google Sheet database. You can find the Google Sheet database right over here. The Google Sheet database is very simple. We’re just logging the ID of the LinkedIn account, the first name, the last name, the full name. Sometimes I like to have that. LinkedIn URL, the title, the email status, the photo URL, and then the icebreaker. Then finally, we are aggregating all of that data so that I could send an API call to a tool called Phantom Buster. I’m going to cover all the stuff in a second, but for now, let me just show you guys what this looks like in practice and what the end result is. I’m going to test workflow. It’s going to ask me to define my audience type in plain English. I’m going to say, I’m looking for creative agencies, or I’d say 100 people, staff, across the United States. I want the decision makers, so come up with a bunch. Then I’m going to click submit. Now that I’ve done this, what’s happening is it’s going through and it’s generating a search URL. Now, the array that this works is, the service that I’m using basically takes us input a giant search string. I’m having AI generate the search string. The search string is ultimately what is going to allow us to do said search. That looks just like this. I’m going to copy this over. I paste this in. What this will do is it’ll actually go through and then get decision makers that are within my custom audience, in my case, 967 people across the United States. If we proceed with this, it will then run what’s called an apify actor. It’s a service that we’re going to be using to scrape this group of people. That apify actor I can find back over here. What this is doing is it’s going and it’s identifying who these people are. It’s extracting their email addresses completely autonomously. Then it’s also getting me a bunch of additional data on them. Okay, after we’re done with that, we then pass through a limit node. We have an AI model here, GPT4, that actually goes and creates customized icebreakers for the connection requests. Then what we do is we’ll actually dump that into a Google sheet before aggregating that and then triggering a Phantom Buster age. Phantom Buster is the tool that we’re going to be using to grab the data from this Google sheet right over here. Then actually physically produce our LinkedIn connection request over here. What that looks like on their end is we are now running this Phantom Buster Auto Icebreaker Connect. It’s actually going through and it’s simulating real human activity in order to send the message essentially and the connection request. Finally, as this proceeds down the list, we will have the actual data right over here alongside the specific status whether or not this has been sent. We have actually gone through and we’ve sent a bunch of connection requests at various times of the day to these various people using the system and it was all done 100% automatically. I want to make something super clear. As of this moment, I’ve not actually built the system yet. I wanted to show you guys what a live real build process looks like from start to finish by somebody that actually does this for a living on a daily basis. I think right now on YouTube it’s really fancy and popular to put a finished product in front of people and be like, “Here’s a system. Here’s how to put it together.” But that people don’t actually show what the live development process looks like. In reality, the live development process is filled with a lot of detours, a lot of ups and downs, a lot of guesses that don’t actually end up panning out. I want to show people how to actually build systems that make people money. I don’t just want to show people a finished sanitized version of it. That’s why you guys are going to see me do it all from scratch and that’s why I’m structuring this video and this way. It’s very important to me not just to show somebody a picture of the Eiffel Tower and then be like, “Hey, now that you’ve seen the picture, you know how to build it.” I want to show people the building process. I want to show people the schematics and the diagrams of that make sense. Because for the most part, that’s my audience. So yeah, this is the roadmap at this point in time. Basically, what I’m thinking I’m going to do is I’m going to start by scraping Apollo leads using Appify. Then I’m going to enrich leads with personalizations and then send a phantom buster for LinkedIn DMs. Now, if you don’t know what any of these platforms mean, I’ll explain them to you right now. Apollo is basically a big database that allows us to get a bunch of information based off search filters like Dentus in the United States with one to 50 staff members. Okay? The issue with Apollo is it’s a very expensive database. Instead of me just getting leads directly from Apollo, what I’m going to do is I’m going to use this tool called Appify, which is kind of a scraper, which allows us to plug in an Apollo URL and then it goes in and actually scrapes the HTML page to find us the leads. This is kind of a hack, but this is basically what everybody’s doing right now to scrape Apollo. The reason why everybody’s saying that that’s okay is because Apollo is just scraping LinkedIn sales navigator. It’s kind of like scraping the thing that scrapes the place that scrapes, you know? Anyway, so this is our scraper. I’ll show I’ll show you these platforms in a second. Then open AI is obviously like our AI tool and the reason why we’re using an AI tool here is because we need to personalize the messages that we’re going to be sending people. You know, after we find the people, we’re also going to get a bunch of information about them. We’re going to figure out where they live. We’re going to figure out their interests. We’re going to figure out the job titles and stuff. Well, if you actually just feed all that stuff into AI, you can have AI write something that seems pretty customized. Like, it’s not like hello, dear person. I would like to sell you stuff. It’s like, hey, Peter, you know, saw that you went to, I don’t know, like the U of A. That’s super cool. I love that you did X, Y and Z. And this may be totally out of left field, but I thought we should connect. Something like that, right? It’s obviously I’m going to write it way better. But just to give you guys some insight into that process, that’s basically what everybody is doing right now in any sort of cold air reach. Anyway, after we have the personalization and all the lead data and the LinkedIn profile you are on, and basically after we’ve done these first three steps, okay? What we need to do is we need to send the outreach. And so I’m going to be using a tool called Phantom Buster to do that. And finally, we need to do it, you know, on LinkedIn. So I threw in LinkedIn over here. But let me make this clear. This is a very short moment of time in which you can use all of these tools together in the way that I’m about to show you. So, you know, because we have access and availability to these tools, we can do the really cool thing that I’m about to do. If these tools didn’t exist, you could still do it. It’d just be like way harder and it’d be a lot more difficult. So I prefer to use pre-made tools wherever possible just to expedite my workflow. And that’s sort of like my guiding principle here is somebody that does an automation, okay? All right, so Apollo kind of looks like this. As you can see, it’s literally just a database on the left hand side of people, okay? So hypothetically, let’s say I want creative agencies. I’m just going to type in creative agencies a keyword. This is not the most effective way to do this by the way, but I just wanted to show you guys what it looks like. And then under job titles, maybe I’ll go owner, CEO, I’ll go founder, I’ll go partner. So, and I’m just typing in like titles of the people that I’m looking for, right? Okay, anyway, I’m just going to leave it at that. And what do I end up with? I end up with 844 creative agencies in, I think I put United States here somewhere. Maybe I didn’t. Oh yeah, location, United States. Cool. So that’s all Apollo released for. I mean, I could go into more detail about I’m not going to just for the purposes of this, but essentially we can we can generate a list of people, okay? And so once I have this list of people, the question becomes, all right, like how do I actually extract something meaningful from this? How do I actually get, I don’t know, an email address? How do I get like a LinkedIn profile? How do I actually, you know, get their phone number or whatever? So normally, you know, I would export this in Apollo, but it costs a ton of money. And so instead of what we’re doing is we’re going on a tool called Apify, which is basically a big library of scrapers that people put together. And we’re going to find a tool that allows us to scrape all these. So I’m just going to run a proof of concept first before I even build automated systems. And I’m just going to run through this whole thing manually. So let’s do it. Let’s do Apollo, pump that in there. And I’m just going to use this one here. I think I’ve used this one many times before. So I just want to verify that I’ve access to it. Yes, I do. Okay. All right. So I’m just going to paste the search URL in here. This is just how the tool works. It costs a dollar 20 per a thousand leads. So if we want to scrape a thousand leads, it’s cost you a dollar 20. I should note that you can only do a few like a hundred or 150 LinkedIn connection requests, totally cold per week per account. So like you can think of this as basically one dollar and 20 cents will give you enough money to run this LinkedIn campaign for a whole month. At least in terms of leads, you obviously don’t need to pay for the rest of the software platforms. But anyway, here we pump in some search records, so 500 search records, get work emails, get personally most fine, whatever. I’m going to click save and start. Let’s just see what happens. Okay. We’re running this manually. We’re not doing any sort of API yet. I will put the system together and add an after. But okay, cool. So as we see, it’s saying it’s found 100 results. That’s cool. Now it’s getting some more. If I go to this output tab, you can see the actual results. Pretty neat, huh? We’re getting all these people’s data and all men are there a ton of fields, right? There are a lot of fields. I’m not going to go into detail on all the fields. But I’ll just show you that you can just run these searches basically free, which is pretty cool. And yeah, we just live in a pretty specific point in time where you can actually do that. Okay. Anyway, I’m just going to manually export this. I’m going to do it as a CSV. Why? Because I would just want to visualize this in Google Sheets. And now I’m thinking, okay, like once I visualize it, I can actually go through and I can use AI to do some stuff. So this is my thought process. Just trying to narrate a live. So we see what’s going on. I built out many similar systems like this. So obviously because I built similar systems like this, I kind of have a feel for like where things are going. But I’m just going to import now. And then I’m going to go to upload and then drag and drop this file that I just exported. And the reason why is I just want to visualize it. I’m going to go append a current sheet. That’s just going to allow me to, you know, I just change the title. I don’t want to have to redo it all. Okay. Cool. So I’m going to hide these so I don’t expose every single person’s email address. But as we see here, we now have a big list with city, country, departments, department, email domain, email status, employment, employment, you know, creative agencies. Obviously all of these companies have the term creative agency in their title, which is great because I’m looking for creative agencies in this hypothetical founder and CEO, right? Then we got a ton of other ones too. I think Apollo just exports all of the fields about their job history, which is why it’s so long. So if people have had like 10 jobs, it’ll actually like export all of them. Good God. Okay. But the one we really, the one we really want is we want LinkedIn URL, which is this one right here. Okay. And as we see, we don’t get the LinkedIn URL for everybody. But how long is this list? This is 101. Okay. It’s 101 long. I’m just going to scroll up and then select all these. It looks like we got 60, I guess we’re counting that one too. So 60, I think it’s like 66 out of 100. So we get about 66 percent of these as LinkedIn profiles, which is great. You know, if I go down to email, I bet you probably get a ton of emails as well. You always going to check the source data, which is why I’m doing what I’m doing. We got 77. So actually, I’m more email addresses than we did LinkedIn profiles. That’s really interesting. But anyway, whatever. So I’m sure you guys can imagine any sort of outreach campaign that you guys run, you guys could send emails and do LinkedIn DMs, right? And that’s kind of like the golden, the golden egg, the golden goose. That’s kind of like the golden goose egg. You know, if you hit a person on more than one platform, then that’s obviously ideal. Today, I’m just going to be building a LinkedIn system that does that outreach. But I want you guys to know that I’ve built the Omni channel. Supposedly, that’s what they’re called Omni channel scrapers and systems and stuff like that. A ton of times, it’s no major issues at all. And if there’s demand for it, then I could show you guys how you like kind of combine these two. But okay, so now we have a lot of stuff, right? We have profile fields. We have everything. It’s great. So the question is, where do we go from here? Well, what I want to do now, if we go back to our little roadmap, is now that I’ve verified we can actually scrape up all the leads using appify manually. This little boot check mark is going to mean manually. The green one will be after I’m done at Tom automatically. We need to enrich the leads with personalization, okay? What is personalization? Well, we basically need to write like a really small little snippet that we could stick at the very top of our LinkedIn, okay? So that when somebody gets a connection request, you know, it’s just going to be a short little message that says, like, hey, Peter, how’s it going? Love your stuff, and really want to connect with you, okay? And that’s what we’re looking for. We’re looking for for something over here. Hello, Fahim Bernat and Anna. Hopefully you guys appreciate the views. So actually, can I just going to show a little bit more here so I could see if I can get an example of that. You see this from this lovely dude and now who I think is in my, yeah, he’s in maker school. I think I recognize him. He said, hey, Nick, I just joined a community of school. I’m excited to start this journey, okay? So we basically want to personalize this just like a knelded, although obviously you’re not going to be able to say that you joined my community, but by doing this, there’ll be a much higher conversion rate on the back end. People are all going to be a lot more likely to actually click the accept button if they see a message. Like, you know, a lot of these other guys have joined my communities and stuff like that. And that’s fine. But like, you know, how much more likely might have accepted nails because I see that he’s written me that message, right? A ton. That’s the same logic we’re going to be using. All right, all right. So where are we? So we just need to determine that we can personalize this. But I know that LinkedIn has specific limits around how long we can do this. So LinkedIn connection requests character limit. I’m just going to Google this really quickly. And it looks like we have a character limit of about 300 characters. That’s actually pretty, that’s pretty small. So, okay, so 300 characters to words. Let’s see how long that is in words. It’s between 42 and 75. So it’s probably about 50 words or so. So we actually got to make sure that our personalization snippet is super, super short, okay? Anyway, let me go to GPT-40 here and let me just define a little problem. You are a helpful intelligent writing assistant. I’ll say your task is to take as input. You guys might not be able to see all of this here just because I have my face sort of covering it. What if I can make this smaller? No, I can’t. Anyway, trust me when I say this is going to be the most banger prompt of all time. Your task is to take as input a bunch of LinkedIn profile information of a user. And then generate a very short, very punchy icebreaker that I can use as a variable in the introduction in my connection request. So I’m just asking it to do stuff like I’d ask a staff member to be honest. And I is at that point now where it’s intelligent enough to basically fully understand the context. If you go back to my previous videos from like a year ago, things have changed a lot. But now you can just ask like you would ask for anything from anybody. So return results in this format. I’m going to have it return it in JSON, JavaScript object notation. I know this may seem complicated to some people, but this just allows me to automate it later and I just want to verify I can do this. So return your results in this format. Let’s say icebreaker. Icebreaker goes here. In order to ensure icebreakers are punchy and high quality, make them follow this template. Hey, X. Hey, name. Love seeing thing about them. I’m also into other thing, plausible tie in, thought I’d connect. Okay. So now I’m just going to see the length of this. I’m going to go to a website called word counter. So this one is 12 words, right? That’s easy. And I think it’s actually going to be even better because if I just scroll down here, you see how, yeah, you see how this message is like basically also about 12 words or so. So this is going to appear right before the C more badge. I think it’s going to be great. This is going to be super, super valuable. So yeah, that’s what I’m going to do. So I’m going to, I’m going to add this in. And then I’m going to say linked in fields. And I’m actually going to give it like an example of the data that I wanted to personalize based off of. And then I’m going to see how it performs. And then assuming all the stuff is good, then I’m just going to pump it into NADN, like one shot. And it’s going to be perfect. And by the way, this kind of, this is a good opportunity for me to talk a little bit about why I’m doing all the stuff like manually is supposed to going into NADN. And the reason why is because I’m sure I could make it look really sexy and clean if I just did it all in NADN. But I don’t normally actually build systems like this. I will start by just doing it manually at least once and just verifying that kind of looks the way that I think it’s going to look and works the way that I want it to look. It works the way I want it to work. And assuming that it does, then I pump it into NADN. And then you know, I actually work through the automation bits because the way I see it, there’s the use case. And then there’s the automation of the use case. Okay. So that might provide a little bit more context. And hopefully that makes things clear. But okay, so we just need to feed in a bunch of fields here. That’d be relevant. So what are we going to do? Obviously, we’re going to need the name, right? So I’m just going to grab Danielle, who is run number four. Just go Morgan here. Then I’m just going to dump it all in and plain text. Okay. Let’s just go Fort Lauderdale. Okay. Like this, that’s probably pretty relevant. DM creative agency. It’s probably pretty relevant. Founder and CEO. So maybe I’ll go founder and CEO at DM creative agency. Cool. What else is like interesting and unique about our employment history? I guess I could include it. But let me just see if there’s anything else that might be a little bit better than employment history. I’m just going to drag this all the way to the right. Florida. Okay. So I mean, really, I don’t have too much information here. I really only have like the company name. Then what looks like a bunch of interests about the, they’re sorry, keywords about the organization. I might be able to feed that in there. Okay. Well, I think in that case, like I’m going to have to feed in some of the past employment history, right? That makes sense. In that way, my outreach can talk about like, you know, it’s I like that you went from doing like sales at whatever to being a founder of your own company. That must be interesting or I did something similar or whatever, right? Like that’s basically the vibe I want to go for. Previous experience. And now I’m just going to say out last I wear. And then sorry, and I’m jumping around a lot here, but then I will say account director. At, oh man, I cannot get these all tabs right at Red ANSI. Okay. And then I’m going to have it generate me the icebreaker now. Hey Danielle, love singer, journey from regional sales director to founder. So yeah, I’m also an creative leadership thought I connect. That’s, that’s okay. That’s okay. I don’t really like the usage of the keywords here, regional sales director. I want, I don’t want to use the variables exactly because I want to imply that I’ve actually read through it. So either I will lowercase them or I’m going to paraphrase them. Okay. Make sure to follow this template. So what I’m going to do here is I’m just going to zoom out a bit. I’m going to go over here and edit the prompt. For thing about them and plausible plausible tie in never use the exact variable. Never use the exact information provided in a linked infield instead always paraphrase. This makes it seem human written instead of just an AI or an automated message. Let’s do that. Okay. I’m going to delete this and we’ll just run it one more time. Okay. And I’m also going to provide a little bit more context next because I don’t like the result. What we had is hey Danielle loves seeing your entrepreneurial journey with DM creative agency. I’m also passionate about turning vision. It’s funny. DM creative agency. I guess it’s your name, but like I’m about to DM the hell out of this person. I’m also passionate about turning vision into reality thought I connect that seems kind of weird. I don’t like that. So what I’m going to do is I’m just going to like make it super incredibly punchy. Also make it super short. Don’t say stuff like or anything like that be extremely laconic and spartan. Okay. Let’s try that one more time. Well, let’s try that a couple more times so we figured out. Cool. Yeah. This looks pretty good, right? Spotting your creative agency journey. I’m also into entrepreneurial ventures that I connect. I mean, you know, it’s not like the best in the whole wide world, but that’s much better than before. Diving into brand innovation thought I’d connect. Cool. That’s pretty good. Let’s run this again. Startup life. That’s great. See, that’s a pretty good icebreaker. Building brands that I connect. Cool. That seems pretty reasonable. All right. Cool. So I think like four out of the five so far have been all right, fascinated by startups. All right. I think like four out of the five are pretty good. So I’m just going to leave it at that. That seems to me like a pretty good prompt, which means like my next kind of major task in the system is done, right? The last thing I’m going to do is I’m going to send this to Phantom Buster for LinkedIn DMs. Now this is kind of interesting a little bit more nuance, but basically we have to do now is we have to take all of this data and we have to like send it to the platform that we’re going to be using to actually like trigger the outreach. Now that platform is called Phantom Buster. The way the Phantom Buster works is you basically pay for some execution time. Just a fancy way of saying that you’re paying for like the amount of time it takes for the servers to run. I’m going to go over here to this specific one that I’ve put together called LinkedIn Auto Connect and when I build up the whole Internet system in a second, I’ll rename it and I’ll make it nice and sexy, but basically that it works is I go to set up. Now what I have to do is I have to define a Google sheet and I’ll actually have to go down my Google sheet. Okay. So I’m going to do that and then I’m just going to add a column here called Icebreaker. Then I’m just going to make this like one person. It’s just going to be this person that I was just doing the testing on, which I think was here. So I’m going to delete these two. Then I’m actually just going to delete all the rest of these as well because I just wanted to pull literally one record. Okay. So that’s cool. I know I have a ton of redundant fields and whatever, but that’s fine. And then under Icebreaker, what I’m going to do is I’m just going to feed in this, the data that it just generated for me. I’m going to paste that in here and then voila. Okay. Great. So now I have an Icebreaker. Now the reason why I’m doing this is because I can now grab this Google sheet and I can feed it in here. Okay. And now I can actually run this using, just feed that in. I can actually run, like I can actually go and I can do some LinkedIn outreach basically. The way that Phantom Buster works is you will connect your LinkedIn account using a little Phantom Buster Chrome extension, which they will ask you to download when you actually get up and running with the service. And then from there, I’ll just click Save. And then here is the message that I will write. Now I’m just going to write and they allow you to write a bunch of things. I mean, you could say, hey, first name, right? Then it’ll pull the first name variable. But I’ve actually just had AI write me a whole thing, right? So I’m just going to use that whole thing, which is called Icebreaker. Okay. All right. So now I’m going to click Save. I’m not going to do anything for email discovery. I don’t care about that. They just try and upsell you and stuff. Invitations descend per launch, maximum 10 per launch, then save, then launch manually whenever I click on it. And now I’m, you know, again, I’m starting at the end. Just want to make sure I can actually do the thing that I’m asking for. So I’m going to click the Start button. And once we verify that, we can worry about you know, running it completely automatically. So what do we see in? We’re seeing that I am indeed connecting to the LinkedIn, I’m connected as Nick survive. I’m going through the whole rigmarole here, signing up, opening, sending the DM and stuff like that. It’s going to take a while because it wants to basically like simulate real profile activity. It doesn’t want to think, it doesn’t want to make LinkedIn think that I’m like a like a bot or whatever. So it’s going to take I think like a minute or two per profile. Okay. And as we can see, it just updated to one invitation, already stents, still pending. That means that the invitation has actually gone out. So we are now 100% good to go. We verify that all of this system or all of what I wanted to do with the system works. Now I’m actually going to go through and I’m going to build it live in NADN. How fun and exciting is that? Never forget the step when you’re actually building out systems. Make sure you can do the thing manually before you do it automatically. Otherwise, you’re putting the car before the horse. I’ve seen a ton of people do this and just really waste all their time with it. So I haven’t added a canvas here called LinkedIn Connection Request System. If you think about it, what do we have to do? Okay. We have to start the system by scraping Apollo leads using Apify. Okay. One thing that I think is really fun that I think I’m going to do today. Just for shits and Googles is this URL here. This actually includes all the information of the search, right? So what I think I’m going to do is I’m actually just going to have AI generate this URL for me. Like that would be pretty sweet, right? I’m seeing owner, person titles, equals CEO, person titles, equal founder. I’m just going to go, what can you tell me about this URL? Feed this whole thing in here and let’s see if we can just extract all the data. Yeah. So our look at in the US owner, CEO, founder, partner, creative agency. Cool. Cool. So I mean, like, I’m just going to have AI do this. I mean, how cool would it be if you could just say, hey, I want you to find me a list of all the creative agency owners in Texas and California or something. That’ll be sweet, right? And then we just like have it done for us. Hell yeah. So I’m going to go over here and I’m actually going to start it with an NADN form input. Okay. And that’s how this is going to work. When a new NADN form input is done, let’s call this lead finder, uh, linked in lead outreach trigger. Insert a, an audience for your LinkedIn lead outreach. Let’s say LinkedIn outreach campaign here. Then here, I’m just going to do like text area. And I’m going to say, describe your audience in plain English. Make it required. And then what I want is a placeholder audience type, uh, I don’t know. Company. Let’s do like company type. Location, ETC. That should be good. Okay. Let’s test the stop now. And I’ll say I want all creative agencies in the United States with company sizes between one to 1000. That’s what I want. Okay. I’ll click submit. And now that I have this, I’m actually going to feed this into AI just right off the bat. So go open AI and we’ll go message and assistant credential. I’m going to use this February 4th YouTube from the list. Uh, I think I’ll just use, oh, sorry, I think I’m messaging an assistant. I don’t actually want to do that. I just want to do text my bed. So message a model. I think what I’m going to do here is I’ll just do GPT 4.5. I just want to see how like smart it is. Um, you’re a helpful intelligent sales assistant. So I’m defining a system prompt start. That’s where I tell the model what I think it is identifying is what I like it to identify as. Then underneath I’m going to say your task is to take as input a, a natural language description of on of a prospect audience. Turn that into an Apollo search URL. Here’s an example of an Apollo search URL. Okay. And then I’m going to go back to this and I’ll say this URL. Oh, jeez, I don’t like that. This URL describes a search for people that are, let’s do located. So I’m just telling it now that this is an example of formatting basically. You can change those fields and only those fields. Return your response in Jason using this format. Let’s do Apollo. Let’s just call it search URL. Then I’ll go search URL goes here. Nice. Then down at the very bottom of this output content is Jason. I’m not going to add another message and let’s just pin this now. And then I done. So we could do some testing with it. Go right over here and let’s see what it pops up when I when I paste this in. And let’s see if this is a valid Apollo search URL. I mean, you know, it’s kind of like the first thing that you got to figure out, right? I paste this into Apollo. Yeah, this has, wow, this even broke down like the search size. That’s very cool. United States. I’m not seeing any keywords though. That’s an issue. So I think like the way that I always do these searches with the keyword like creative agency. I think there’s something broken here. Just want to make sure if I delete all these, yeah, we’re still not getting hide filter show filters. Okay, so there’s something broken about the way that I did this list of moment ago. So let me just do this one more time. Let’s do this. Let’s just define my search a little bit more over here because I want to give it more examples. We’ll go one to 200. And then we’re going to go creative agency. And I’m going to tell it I can only. These are the fields you can change. And I’m going to say organization locations. Keywords, associated keywords. Sorry, once like keywords and person titles. Cool. Do not add or change any other fields. Return to your, okay, let’s test this now and let’s see if that maybe is a valid search. No, no, no, do not add or change any other fields. Use the above template. Well, actually, maybe this is good. Let me try. All right, yeah, that did work. Location number employees seem a little bit off though. Oh, yes, all right. I think I need to add number employees here. One more. Let’s go back to where it says number of employees up at the top. So organization num employees ranges. There we go. That was the secret sauce. Person titles and organization, non-employees ranges. Let’s just go back to my search. Just copy this in here. I’ll paste that into. Okay, now I’m going to run a test and I think I should be able to get most of what the information is that I want. If I just copy this now, I paste this on. Okay, this search correctly had the one to one thousand correctly at the United States, correctly had the term creative agency. It looks good to me, man. Cool. So we now have a system that can basically you just put in a search term for what you want. It’ll come out with an Apollo search URL. That’s sick. Okay, so now what do we have to do? You have to scrape the leads using Apify. So two components to this, right? The first is we need to, well, we need to call an Apify actor. So we basically need to replicate what I just did over here with an Apify, but we need to do it in anything. So how are we going to do that? Well, Apify has an API. So I should be able to run this using an API. So if I want to trigger a run, I’m going to have to view the API reference first. So how do we get a run actor? Run actor synchronously with input and return output. Okay, so this looks to me like basically what I want. The cool thing about NADN is it allows me to just create a request using an HTTP call. So sorry, a curl call. So that’s what I’m going to do is see it says curl over here. I’m just going to copy this whole thing, but actually before I do that, I’m actually going to put in the data. So I need an HTTP. I need a key. It looks like like an API key. So I’m going to put that in there. Then I’m going to need an actor. Okay, see this is where I’m going to put an actor. And so I’m going to go back here and you see where it’s as actors and then JJ, whatever. This is the actor ID. You’ll always find the actor ID up at the top between the term actors and then input on Apify. There’s probably another way that I get this as well, but that’s just kind of the hack that I use. So I’m going to go, sorry, I’m going to go back over here. And now what I’m going to do is in a parameter is I’m going to feed in the actor ID. Okay, then the baritoke. And I basically need an API key. So I don’t know where I get my API key. I’m already forgotten. I’ll probably get in settings, API integrations. Yeah, okay. So I’m going to create a new token. I’ll call this YouTube and create. I now have a new token. So I’m going to copy this and then I’m going to go back to the API specification, which was just docs at apify.com. Then I’m going to paste in the baritoke. Okay, that looks pretty good. It looks like I need a body. It’s this example from schema or example. So I don’t really know what that means. Just body required as an object. So what is this supposed to mean? Just looking for the term body here now. Well, it’s telling me that it’s required. So I’m just going to give this a try and see what happens, I guess. Let me just, yeah, let me just copy over all the curl. Go back here and go to HTTP request, import curl, paste this in. It should now map this. So maps it to the specific actor. That’s cool. I don’t actually have my token in here. So apologies. I kind of wasted our time. I’m just going to copy this now and feed it directly in. So this is where the API key token would go authorization. And then there’s this format, like bear token format, which is what most services use. So just make sure the bear starts at the B capital. And then there’s space and then there’s your actual token. Okay, so we need to do a post request. Good. Jason, body parameters are food and bar. I don’t really know. We’re going to feed in the body to be honest. I don’t really know about this follow redirects thing either. So I’m just going to take that out. I think we need to, we need some query parameters, right? I think maybe we don’t. I don’t know. Anyway, in situations like this, where I don’t know what I do is I just run it. And I see what happens. And then sometimes it’ll tell me what the issue is. So input dot URL is required. Okay. So we need in the body, probably, we need input. I’m just going to do this in Jason. I’m going to go input. And then I’m going to go URL. Okay. So then I’m going to go over to my sales navigator search URL. Just right over here. Nope. That kind of stuck at the ribbon. Just take that back in, paste this in here. Okay. So that should now have the URL field input dot URL. It’s still saying it’s required. So there’s probably something that I’m persistently messing up here with the format. So let me go back to my actor run. Go back here. And then sorry, where it says Jason, let me just get all this. Okay. This might be all I need. I don’t know for sure. We’re going to give it a try though. We’re going to test this. Yeah. So that is. So the Jason here is just the input because you know, it’s executing. It’s taking time now. So now I don’t actually know if it’s running, right? So let me just exit out of the stuff. I’m going to go to runs. Okay. Cool. So it is running. So now verify that I’ve just triggered it inside of inside of NADN. And now it’s running in appify. Fantastic. So basically, what I need to do is see this big URL here. Well, we don’t need that. What we need is we need this, right? So I’m going to feed this in. And total records, I mean, you know, you can put however many you want. I’m just going to do a thousand. If you leave that blank, I think you get all of them. Personally, emails work emails. I think this just means it takes a little bit longer. And while this is working, let me just do some renaming. So I’ll say run appify actor and get results. A little bit longer than usual. Uh, shit. I think I’m going to just broken this. Yeah. I think I just broke this by renaming it. Okay. Maybe you don’t rename this live. That might be bad. Anyway, um, I’m then going to call this purse, uh, not personalized. I’m generate search URL. Okay. I’m going to save this whole thing. I’m obviously going to have to rerun this now because I’ve just broken my whole thing. Kind of unfortunate. But it is what it is. Um, let’s just test this step again. And I’m just going to pin the output next time. So let’s just make sure this works. Feed that in again. Yeah. Persistently working, which is nice. You can pin this. Now let’s feed that in right over here. Test this again. So my memory limit may be an issue. We’ll see. It’s executing. So yeah, we’re running a separate, we’re running a separate query. I’m going to board the first one. I’m not going to give it 30 seconds. I don’t care. I’m aborting you. Um, cool. And now we just have to wait until this finish is basically until we get all the results. And when we get the results, it should populate on the right hand side of this. Okay. It looks like this did output, but it returned something empty. It looks like the reason why is I probably used the wrong, um, actor. I used run actor synchronously and return output. I didn’t do run actor synchronously with input and get data set items. That’s the one that you want. So what was me, um, but I’ll basically have to rerun that puppy is what it is. Um, I have the actor ID hard coded here. So I’m just going to paste this in my URL bar. Copy this over here. Paste this in here and go back that way. And then just for records, I got to do 500 because I just waited like five minutes to do a thousand. And I don’t really want to wait that long. So let’s test this again. I’m seeing that it is indeed executing. Come back over here to runs. And you know, we are, we are now doing a run, which is nice. Um, yeah, looks like the run is running. Okay, great. And that looks like it just wrapped up. We got 500 items because I went back and I changed the number of total items to 500. Um, and now we basically have everything that we need in order to proceed with. And then complete this whole flow. I mean, as you could see, not super complicated. We had one form submission, one module or node to generate a search URL and one module or node to run an app if I actor and then get the results. Now, because I never, ever want to have to do that again, I’m just going to pin this and what I’m thinking is, maybe pinning this, I’m just not going to have to run that same actor over and over again. I’m not going to have to like have those crazy wait times. That’s an important point for me to make more generally like, um, I find a lot of people, they will test stuff using like repeat manual inputs over and over and over again. So if they’re testing a form or something, they’ll actually fill out the form every time. And it doesn’t seem like that adds a lot to the process, but consider I might test a flow of 20 times over the course of my development. If I test 20 times and every time takes me additional minute to fill out the form, I basically like added 20 minutes to my whole workflow, right? And as you see, I build these pretty simple but very high ROI systems like over the course of an hour or so in a video. Um, if I were to do that, I would materially improve increase my production times, impacting them like 20, 30, maybe 40%. So I just like to pin data wherever possible, helps avoid like a lot of the BS. Okay. Now that I have this appify actor, um, output, we’ve, we’ve got a bunch of items here. I’m going to go back to my roadmap. What do you really need to do? Well, next stop is we need to reach these leads with personalization. So that’s going to be pretty easy. You know why? Because we’ve already done most of the work. I’m going to go to open AI and then I’ll go messaging model. Okay. And then if you guys remember, I already, I already wrote most of this prompts. So I’m just going to copy and paste this prompt right over here. So I’m going to select my own credential. If you don’t have a credential, make sure to set it up. You need to just copy over your own, open AI API key. I’ll select GPT 4.5. I’ll paste this in as my system prompt. And then I’ll just move down and copy all of this as my user prompt. Okay. I’ll make a couple of changes. Why? Because I don’t actually need these lines and stuff. What I can do is I can actually just take this and feed this in as an additional user prompt instead. And here I can feed in an assistant prompt. Have it give me an example. Right? Because I want it to. Then I can go back here, feed in another user prompt. And then this is going to be my actual live data, right? So what information did I put in? I put first name. So I will do first name here. Oh, that’s ugly. One sec. I’m going to go to expression, paste this in. And I’m going to call this linked in fields. You can actually add all of the information in like in Jason, if you want, but it doesn’t really make any difference. Right? And doing this, I get to save a couple of tokens, which may not make that big of a difference in isolation, but it does definitely make a big difference. If you zoom out a little bit and look at it over the course of, I don’t know, a month of running this a year of running the system. So I need to find the city. Is it city? I think it’s city. Here’s city’s grand rapids. So I’m just going to grab this year, paste this in right there. And what I need next, I need job title. I’m going to go title creative director. That’s cool. At and then the company name. What is the current company name headwind agent? See, it looks like the employer employment history zero is always that in previous experience. And then I’m going to go co-founders, CO at mission three media. That’s cool. Let’s do one more. We’ll say producer at self-employed. At least for this guy. Feed that in. Okay, great. So what does this look like now? LinkedIn fields, grand, whatever, grand rapids. Okay, nice, self-employed, beautiful, beautiful. I’m then going to output my content as Jason. Go test step. And from here, our output should generate some cool personalization that we can then also map directly because it’ll be on Jason variable. I should note that I’m using 4.5 preview for this. You don’t need to be using 4.5 preview. I just like to use the best models for stuff. Why? I don’t know. It’s a flex. I like flexing. See these muscles? Just turn around. This one’s taken a little bit longer than usual. Might be because of token usage or something on my account. I’m not entirely sure. So when I run into issues like this, see if I could stop this. That’s the way I can. Okay, cool. I did end up stopping this. Maybe I’m just going to use. Okay, let me just try re-running this now with that test data. Okay, once that’s done, we’ve enriched leads personalizations. Then we just have to send a phantom buster. And the way that we’re going to do the the sending to phantom buster is I’m going to just connect to their API. And I’ll send like an API request trigger with the with the Google sheet that I’m dumping to. So actually, there’s an intermediary step here. I need to dump stuff to Google Sheet, which I haven’t really put together. But we’ll we’ll talk about that. Maybe actually, I guess what I should do. Then I should probably dump leads to Google Sheet, right? Then four should be sent to phantom buster. Send Sheet to phantom buster for LinkedIn DMS. Trigger phantom buster for LinkedIn DMS. That’s probably what I’m going to do. And I mean, this now looks kind of weird, but copy and paste that everywhere. Yeah, this has taken it sweet as time. So I’m not really sure what’s going on with that. But as I’m sure you guys know, a lot of the time when you make an automation, there will be platform bugs or some minor issue with the nodes or the modules, I’m going to just change this model and see if that makes it snap out of it. So we’re just going to go GPT-4O. And then I’m going to test this. Actually, let’s give a much of additional new lines here. I don’t know why. I should probably remove that. Check this out here as well. No, that’s fine. How about this one? Is this one of any additional new ones? Can’t really drag it open. Just unfortunate. I just have to give it a click. No, it looks pretty good. And a problem is there. Oh, shit, man. I’m so stupid. It’s because I’m doing 500 items. Duh. Oh my god, I’m probably racking up my, man, that’s crazy. Okay. So what I need to do is I put up, put up max items here. Just set max items to one. That way, it’s only going to generate one icebreaker. I was trying to erroneously generate 500 icebreakers. Don’t be silly or stupid like me. Anyway, now that that’s done, we verify that this does in fact work. I can go back over here now and I could go and I could check and reach leads with personalizations. Next up, we need to dump this to a Google Sheet. So what am I going to do? I’m going to go to Sheets right over here. I’m going to append row and Sheet. I’m going to select my credential. I already have one called YouTube, but in your case, you might have to like connect it and do your OAuth and stuff. Then the operation is going to be append row. I’m just going to be adding these to a new sheet, right? Append or update a row. Sorry. I’m going to make a new sheet. So we’ll go Sheets.google.com. And then what I’m going to do is I’m just going to go to my account, which I know has a connection, which is this one here. I’m going to create a new one. This is just going to be called leads. I’m going to go document, look up leads. See if we can find something. I can. The sheet I’m going to choose from is just going to sheet one. I’m going to map each column manually. Can we just map automatically? That’d be great. To dump literally. Oh, no, we can’t. Because we’re only going to dump in this stuff then, right? I wonder. Can I just grab? I would like to have all of this information automatically in the Google Sheet without me having to manually add every manually add everything. Otherwise, I’m going to have to manually add everything. That’d be brutal. Yeah, that’d be kind of crazy. The columns and Google Sheets. Oh, I get it. I need to set column names here. Okay. So what I’m going to do is I’m just going to set these column names. Create a CSV of these header names. This is a string of these header names that I can paste into Google Sheets. I’m just going to paste this in. And then what I want is I’m going to link to URL. And then I also want icebreaker. And I mean, you can put in as much of this information as you want. All of these additional information. I don’t really want to. I just want to just, you know, get this up and running. So that’s what I’m going to be using as an example. So this now has all the sheets that’s telling me that one of the headers is twice. So I’m just going to go to data and then I’ll go split text to columns. So I have two. Yeah, I do have two instances of LinkedIn URL. That’s okay. I’m going to go over here and now I have my lead sheet, which is nice. I’m going to go back and now I’m going to go map each column manually. Then it’s going to match on ID. What I want to do is, can I just actually maybe I can just go map each automatically? I don’t know. I don’t know if this is right. So let’s just get this test see what happens. Just supposed to be adding a single row in here. And it’s not. And the reason why is because it’s grabbing data from the open AI node instead of the previous limit node, which is what I want. So I’m actually going to want map each column manually. It’s going to find all the ones for me. But what I want is, under this, I’m going to use ID for ID. First name is obviously going to be Frank. Last name is going to be whatever name is going to be full name, I guess. Let me see. First, then LinkedIn URL. So I need to find the LinkedIn URL somewhere. Should be right over here. Then what else did we have title? So go title, email underscore status. I don’t really know why I put that on there, but what are basically just mapping a bunch of irrelevant fields right now just to show you guys what the process would look like. Then finally, icebreaker. The icebreaker would be the message from the open AI node. Right. Okay. So now we’re going to test this. Giving it a go. You can see the icons changed here and voila. Right. We’ve now dumped in the records. That’s nice. So now that we have this Google sheet, what does this mean for us? We can actually just take the Google sheet. I’m going to go editor. Maybe I’ll change it to viewer actually. I don’t really want you to somebody always on from my YouTube. Somebody will always find some of my sheets and then come in and then just like draw dicks on them or something. It’s hilarious. Whoever you are or whatever group of people you are, keep fighting the good fight. I’m just going to I’m going to start locking these down a little bit more. Okay. So that’s that. Now that I have this Google sheet, what I do is I just go into Phantom Buster, okay. Right over here. I’m going to, you know, I go to LinkedIn solutions, LinkedIn, and then down here I go connection request or auto. It’ll be an auto connection center essentially. So I don’t know where this is somewhere here. Might be connect request auto invitation. Maybe auto connect. There we go. This one here. So I’m going to use this. What I’m going to do is I’ll change the input into a spreadsheet URL. So now I’m going to paste the spreadsheet URL in. Okay. The value of this is it’s publicly accessible. Then from here, the name of the column containing profile URLs is going to be this LinkedIn URL one. I’m going to keep all of these columns in my output file because I’m going to want them. Now I then select my LinkedIn account. So in my case, I’m going to select this one here. And I should note that if you want to send the LinkedIn messages with like the customized connection requests, I think to anybody that’s not like a second connection or something, you need a LinkedIn sales navigator subscription. Now I have everything that I need. I can just go icebreaker, right? So that’s what I’m going to be sending people. I’m going to go back to save. I’m going to click none for this behavior. I’m going to do 10 per launch. Then I’ll just leave this at manual. And I’m going to rename this now. Auto icebreaker connect. And voila. Now what I’m going to do is I’m going to grab the ID of the phantom, which is going to be up here. Okay. And now I have to do an API call basically to trigger this. So we need to go to phantom buster and check their API. How do we do this? We go up here. Sorry, up here. There we go. And I think the end. I don’t know for sure. I’m thinking it’s probably agent. And it looks like they have a V2 APS. That’s not going to use. I’ll go to agent. Agent launch probably. Yeah. Yeah. This is the one. Then I’m going to grab a curl. Is there a curl? Yeah. There’s a curl right over here. So I’m going to copy this over. But just try this. Am I going to run? Cannot validate data should ever grab property ID. Oh, yeah. ID of the agent to launch. There we are. Let’s feed this. Oh, yeah. Okay. So what I’m going to do is I’m going to go to my LinkedIn agent. And then I grab the phantom ID, which is up here. I’m going to paste it on. And that’s going to now include that data. If I click try now, should have you 200. And if I go back here, it’s probably running now, right? Yeah. It’s running. Sick. Cool. So we just verify that we can actually now run this. Now, is it possible to abort this midrun? Because I don’t actually want to connect to LinkedIn and do all that fun stuff. It is cool. So what I’m going to do now is I’m going to just recreate my HTTP curl request. I’m going to go back to the API, copy this curl request, go back to NADN, import curl, paste this in. It’s now going to automatically map all these fields. Then if I scroll down, I have my phantom Buster key. On phantom Buster, you need to create an API key. So you just go over here to API keys and you click create API key. And then voila, you have another one. And then I’m just going to delete the one afterwards. But you can only copy it once basically. So make sure to copy it when you can. Then feed it in as an x dash phantom Buster dash key API key up here. The ID of the specific agent is right over here. I mean, it’s mapped all correctly. And now I’m just going to click test up. And it’s executing. Now phantom Buster won’t return a note saying that like you’re good to go. It’s just going to return a 200 and say a container ID. The reason why is because they allow you to check on your container ID later. So you realistically could do is you could have a container ID. You could have a webhook sent to another scenario or another node, another workflow. You could check that. You could use that to update this record saying sent question mark. And then we could go down one by one. That’s what I’m going to do. So I’m just going to rename this now to trigger phantom Buster agent. Just so I have this. And then over here, it’s going to be add to Google sheet. Wonderful. This here was personalized outreach. And now that we have everything, all we need now is we need a webhook trigger that basically triggers another portion of this flow. So variety of different things we could do. What I’m going to do is I’m just going to add a separate node or a separate workflow. I’ll say trigger phantom Buster agent. So I’m going to go number one. Then I’m going to have another number two. And then number two is going to basically watch for the completed run. I’m going to start with a webhook. I’m going to paste the title in. I’ll call this two. And then instead of trigger phantom Buster agent, it’s going to be update to Google sheet with phantom Buster connected requests. This again, pretty long. So you can call this stuff whenever the hell you want. But now what I have to do is I have to figure how to send a webhook. I know that you can send a webhook somehow. So I’m going to go back to dashboard. Go back here. And I this got to be a way to send a webhook, right? Advanced settings, probably. Yes, there it is. Webhook. Cool. Custom webhook you are all. So now I’m going to go and add an add-on. I have a little webhook set up. And what I’m going to do is looks like webhooks will post a payload. When they post a payload, that just means that in order for you to receive it and then it needs to change the HTTP method to post. If it’s get, you’re not going to get anything. It’s just going to hang forever. So we’re posting the payload. It’s going to have everything here with a container ID. This is probably what we’re going to use to get the data and other than thinking about it. That’s what it’s going to look like. So we have the container ID and we’re going to do something else. All right, that’s fine. So let’s listen for a test event. And let’s just, uh, well, this is done yet. I think I have bored of this, right? Okay, well, let’s just let’s just trigger this one more time. Trigger me maybe one more time. Should get a container ID. Cool. And now just while while we’re listening for this, because this is listening right now, I believe I can just continue building this. And if you think about it, like what I need to do is once I have the web hook, I need to get the data from the container ID, right? So I’m going to go back to my API reference and then containers. Let’s just fetch, output, fetch the output of a container, right? So that’s what I want. So now I’m just going to copy over this, um, go back here, do an HTTP request, import this curl. We’re going to map it all, including the ID and everything that I need. And we’re hard coding the container ID, right? I think let me just go back to wherever that container ID was. Yeah, I think we’re, I think we’re hard coding the container ID. I’m pretty sure. And that’s going to include the output. Now the output is going to include a list of all of the records that we’ve actually sent the request to, which is nice. So from there, I should essentially be able to do everything that I need to do. Okay. So I mean, the trigger event’s taken forever. And let me just see if I could run this as a, oh, sorry, it’s going to be executing the web hook node. So let me just add a manual trigger first. And then let’s connect this. Now it’s exit out of this. No quick test workflow. Nope. Just this. Thank you. It’s saying the resource and request and could not be found. So why is that? There must not be any data. It’s probably no data. So I’m just going to see if we can get the container ID. Is there a container ID? I’m not seeing any container ID. Identity maybe? Identity ID might be container ID. Not really sure. I don’t know if that’s what that means. Well, it did work and actually went and it sent the request. That’s pretty badass. So what are we going to call? I think it might be this identity ID. Unfortunately, it doesn’t look like I can copy it. It doesn’t let me. So that sucks. How am I going to get the container ID of the thing? I guess I could just grab a different container? This one maybe? Let’s try this. Okay. Oh, what the heck is this? I don’t know what this means. This looks like a test. That’s the output. Weird. So I don’t actually know if that’s what we want. Do we want the container ID then? No, we want agents fetch output. Get the output of the most recent container of an agent. Maybe we just need this. Okay. It’s designed so it’s easy to get incremental data from an agent. Output of the most recent container. Okay. Well, I’m just going to call this then. Like, right? Yeah. Let’s just do that. Let’s not even worry about all this stuff. Let’s just get the ID of the agent. Okay. Should be right over here. Then let’s do an HTTP request. But this time, we’ll do a two fetch output. Okay. So I’m going to copy this over, paste this in the test field, try it. And now we did get a weird, we did get a really weird output. I’m not really sure what that means. Process finished. Spreadsheet is empty. Everyone has already been added. Okay. Okay. Yeah. No, we did. We did actually get the we did actually get the output. Maybe there’s something that I’m missing here because it looks like I’m fetching. I’m not fetching what I want. I’m fetching something different. Okay. So let me see if I could feed in the right container. Hmm. Basically, what we want is we just want the big list, right? So I’m going to do that. If omitted or set to do. Okay. You know what? Maybe it’s actually this. Maybe we go to agents, fetch output. Then we feed this in. Let me try it. Oh, sorry. I’m feeding in a container ID to something that wants something called an agent ID. That’s kind of killing me a little bit. All right. That’s fine. Let’s just kind of circle back. I was using a post request or a get request. Don’t remember. Let me paste this in now. Now, let me test this. Since it’s a bad request, I need to check my parameters. So why is that? Could be that the ID is not the ID of an agent. So I’m going to go back here to where I define the ID of my agent. I’ll go back here and I’ll paste the ID of my agent in. And no, we do get just this weird output file, which doesn’t actually have anything. So that makes me think that in order for me to do this, I should probably test with another lead. So not just one lead, but two leads. So why don’t we just test with another lead now? I’ll go over here. I always delete Frank. And then actually, why don’t I just test this on my real data? That’d be interesting. Let’s go back here. And then instead of a limit of one, I just do a limit of three. That’ll allow three things to move, which will allow us to generate two more rows, basically. Those two rows should dump here. So just I’m testing all this iteratively right now. So we should have two more. Okay. Now we do with the icebreakers. So the rest of the system works fine. And now we just need to send that to this fan to master agent. Okay. So let’s do it. I’m going to send to, okay, actually, this is a good opportunity for me to test my web hook, right? So why don’t I grab this, listen for this test event. Then over here, I’m going to test sending all of these results to my web hook. Looks like it’s already running, which is a problem. It is running. Interesting. I get it. I know why it’s running. It’s running because we’re just doing, we just sent three results over. We need to aggregate the results in between these two. So I’m going to use aggregate. Okay. I don’t think I need any field name at all. I think I can just aggregate these, so that these three items become one item. Let’s see. No, I guess we do need a field to aggregate. We’ll aggregate them based off of ID. No, I just want to aggregate all of them really. Let me just see if maybe there’s another field that I need to use that’s not aggregate. Could I just combine these all into one item? No, I think I do need to use aggregate. I’m just going to aggregate all item data into a single list, put it inside of this object called data. Then from here, I’m not going to have one item, and then I can just trigger this once instead of however many times I’ve done so. I’m glad that I spotted that. That otherwise would have been a catastrophic error. Let’s see how our agents doing. Looks like we’re processing two new records, which is nice. This obviously understands and is capable of mediating, modulating whatever you want to call it, the output. Just make sure this webhook is set. Oh shit, the webhook URL is not set. Save, save, save, save, save and close. Yeah, this probably ran without that webhook URL, so that makes sense. I’m kind of silly. Okay, it looks like we did, indeed, finish that run. Two invitations were sent. I’m not getting a webhook here, unfortunately, just kind of annoying, so I’m just going to leave that for at the end of the video when I do a demo. For now, I’m just going to pretend like I did get the webhook and then I’ll just continue manually triggering the rest of this flow. Yeah, because we triggered that flow at the very end there, and then if I go to my execution history, I should see a record of the flow at the very end where the error was. I don’t know what. That looks kind of weird. I don’t remember doing that. It’s probably this one here. Something is weird happening here. It’s just like mucking around with the it. Okay. It might be a bug of some kind. Anyway, I should be able to grab the idea of the agent, right? So I should then just be able to feed this directly in, which is the same as before. We should be able to test it. We should be able to get the data. But no, I’m not really getting the data. I’m really wondering, I’m really wondering why I’m not getting the data here. Looks like this is good. I mean, I sent it out, but why are we sending it in this format? I don’t want to end whatever the hell this is. I want in Jason, right? I’m just getting this always one big text string. So could I get this agents fetch output? Yeah, that’s kind of annoying. You know what? We might not actually be able to do it. It kind of sucks. I think instead of we’re going to have to do, we’re just going to have to go like when it is sent, we’re going to have to mark this xxx basically. Yeah. I mean, there’s no other way of doing so. I mean, it’s not ideal, and it’s not technically one to one, but looks like the only alternative to that would be madness. We’d have to parse out all of those people using AI, and this would not be reliable. And then it also cost way too much in order to do it. So I guess we’re going to scrap that. What we’re going to do is we’re just going to keep on with this one scenario that triggers the phantom buster agent. And then after the phantom buster agent, well, we’re not even going to have a sent call. I’m really just anybody that’s here will obviously have just made it through the phantom buster agent. So that’s what we’re going to say. And then yeah, the phantom buster agent will just run it every time we add new people to this list. And then I think we can also probably just run it once a day or something once every couple of days, because it actually automatically has the deduplication functionality inside of it. So yeah, I guess there’s no real reason to have like a like a done call them anyway. It’s not that that was a silly thought. Ideally, you should track this. But there is there is really no need to split it into I suppose. Because if it is on the sheet, phantom buster will automatically dedupe it. And so we just basically anything that goes in this sheet will eventually be taken care of, I suppose. And if you want to see how far down you are, you just go to results. And you basically just have a list of everybody that you sent to. So yeah, we do have that taken care of automatically. And as we can see, you’ve already sent some of these DMs. So I’m probably going to get like some actual connection requests from these people, which is nice. Looking forward to meeting you Frank Greg and Athena. So let me just think, is there anything else that we need to do in order to make this work? I don’t really think so. I don’t think that’s about it. Just did it with creative agencies. So now we’re just going to trigger the phantom buster agent. Have that go? Yeah. Looks pretty good. And there you have it. It is a complete AI-powered LinkedIn outreach system built entirely in NADAN. The system will save you hours of manual work every week while actually improving your response rates. And the personalization that we built in goes far beyond what most other automated tools offer as of right now. And then finally, the benefit is you own the entire workflow. There are a few important things that I’d recommend you keep in mind. I think you should start with small batches, maybe five to ten requests per day as opposed to large ones. LinkedIn imposes a message limit of about 100 outbound DMs of this form, okay, connection requests per week. So start with five to ten. Gradually increases you get more comfortable. You should also regularly check your LinkedIn account to quickly respond to any replies. I mean, if you can respond to people on average within a minute, your conversion rate jumps up by something like 400%. I’d also recommend you update your message templates just every couple of weeks to keep them fresh. Then finally, monitor your metrics closely to see what’s working and what isn’t. The cold outreach is basically all about iteration. The very first campaign that you guys send out is probably going to be the worst campaign you’ll ever do. If you guys run into any issues or you want to share your results, just drop a comment down below. I’d love to obviously hear how the system works for you and then if anybody has any questions or something that I might be able to help with, you know, I’m much more likely to respond to comments than the average YouTuber. And for those of you who are serious about building AI automation systems just like this one, I highly encourage you to check out MakerSchool. It’s my own community where over 1,400 entrepreneurs are building and scaling their AI automation agencies. Thanks for watching and peace out.