hey everybody Nick here have you ever wanted to scrape local service business email addresses I'm talking the plumber across the street maybe the flower shop down the block well in this video I'm going to show you a simple system that takes less than 20 minutes to set up that lets you scrape thousands of local service businesses in just minutes if that sounds like something you guys want to learn how to do then watch me build [Music] it now as mentioned this is a very simple system and what I've done here is I've Just Whipped up
a Whimsical this is a visual flowchart mapping software uh and I've added in the flow of information from start to finish so we're going to start by scraping local service businesses from Google Maps where they're going to feed that into an email enrichment platform called any mail finder and then we're just going to be dumping all the results into a Google sheet from a bird's eye view this looks pretty simple now I'm going to be building this make.com so it's going to be a little bit more complicated when we actually get into the nitty-gritty uh
but this is more or less all you need to know we're going to be grabbing stuff from Maps enriching it with an email enrichment platform in this case anail finder and then dumping it into a sheet pretty straightforward right first thing we need to do is we need to find a bunch of people or a bunch of businesses that we want on Google Maps so all you need to do is go maps.google.com and I'm in Calgary over here so what I'm going to do is I'm just going to type in the term plumber and I'm
going to pretend that my goal here is to just find a list of local plumbers as you can see if I zoom out from the downtown area which is where I'm in to more just the total City we have tons of plumbers and if I were just to keep scrolling down down here you know we'd find more and more and more and more eventually there'd be hundreds if not thousands I don't know how many plumbers per capita um the average city has but you know I think Calgary is a population of 1.5 mil so realistically
I think it's fair to say there's probably maybe 500 to a th000 minimum and maybe more um let's hypothetically say that this is what we wanted to do scrape plumbers from the City of Calgary Alberta where I live well what we need to do is we need to find a way to to do the scraping right and so we could theoretically build some web scraper ourselves that goes on this URL with this latitude longitude and then goes from top to bottom clicks this website link grabs the URL stores it and then adds it to a
big Google sheet for us or we could just use a simple out-of- the- boox solution that does 99% of that work for us obviously if you've watched my previous videos you know that I love simple out the box Solutions no use rebuilding a wheel if you don't have to and what we're going to be doing for this is we're going to be using a ter a platform called apify apify lets you build very reliable web scrapers fast as you can see here but probably the more important one is if you go to browse existing tools
you'll see the apfi store and this just has dozens if not hundreds of outof the- boox website scrapers it even has some email finders and stuff like that although we're not going to be using that in this video and uh basically just a ton of out-of the- boox functionality that just lets you do the 8020 of website scraping without really having to like dirty your hands with code and whatnot so what we're going to be using here is actually this first one here and I think it's only first because I've done a lot of clicking
on it recently um but you're going to want to look for Google Maps as you'll see see there are dozens of these a lot of them are from these guys called Compass um since it's a store apify basically lets different developers sell their scrapers against each other um but there's a Google map scraper Google Maps extractor a review scraper you can see there's a map scraper orchestrator whatever that means uh in our video we're just going to be using this one here at the top left hand corner but I want you to know if for
whatever reason that one doesn't work you are free to choose any one of these it doesn't actually matter what input you provide to the system as long as you have something that scrapes Google Maps listings and then gives you URLs so yeah we're going to be using this Google Maps extractor pretty simple pretty straightforward I'm just going to click a try for free and the cost here is very low which is quite nice what we're going to be doing is we're going to be putting the term plumbers the cool part about apify is it just
gives you $5 in credit just up front so you could scrape a lot of leads essentially with that $5 in credits um this is just runtime but anyway I'm just going to be typing in Plummer and then down here there's a field that says location only use one location at a time so I'm just going to be going Calgary actually you know I can probably just type Calgary AB Calgary Alberta this is probably going to be the same thing that's pumped into Google Maps right here so yeah I think if I type in Calgary that
should be fine um number of places per each search room URL if we click on this little question mark icon you can see that you can actually add in 99999999 as the limit meaning if you do that you will scrape literally every place in the whole city which is obviously fantastic if that's what you're looking to do in my case though if I were to do that that would take a fair amount of time to run so I'm just going to I'm just going to type in five and we're just going to use this as
sort of an example placeholder but just keep in mind that at any point in time you can change us to 9999 if you want to um and then you can also use it to iterate through different locations to scrape all of the plumbers in let's say I don't know the State of Florida or something if you wanted to there are a couple of additional features here deeper City scrape um basically uh if you go to the Google Maps place that we had before you'll notice that as you zoom in or zoom out of various places
um you'll see more listings or fewer listings just because they don't want to overwhelm you right so if I type in plumers here you know I see I don't know maybe 50 plumbers or so here but if I zoom way in Click search this area you'll see that now we're finding a bunch of additional plumbers that we weren't before that's what this does um so if you enable this feature it will increase the runtime by extracting more places in our case we're just doing five I'm not going to I'm not going to click deeper City
scrape just know that if you really wanted to get all of the leads you would give that you would give that a click in our though as I mentioned I want this to run quickly I want it to do I want it to be able to work in the course of a video um you have some additional features here you can Define the search area by much more precise uh parameters so you can enter the postal code you can enter the US County you could enter the state and then you could literally enter the longitude
and the latitude if you wanted to like really drill it down and then down here there are just a bunch of different categories that you could filter you could look specifically for um these types of businesses the reason why you can do this is because Google just provides these I think as parameters in the search so maybe we're only looking at beaches or something or beauticians or however the hell you say that word I don't know uh and then last but not least you could also use a Google Maps search URL so this URL right
over here you could just copy and paste this and then enter that in and essentially what would happen is that would be the source or the the input instead of this um Calgary Alberta plumber search instead okay but I'm showing you how to do this in apify what we're actually going to end up doing is we're going to end up porting this over to make.com where going to build out the flow from end to end uh but the reason why I'm showing you all of this is just because I want to get you guys comfortable
on appify and then once we know how appify Works once we verify the input and the output then we can worry about actually connecting it so that looks good to me what I'm going to do is I'm going to go down here and then press save and start this is now going to basically whip up a server for us and as you can see the memory went from 0 gigabytes to 1 Gigabyte we're a lot at 8 gigabytes because I'm on a free plan I always use free plans for my videos but I do have
like a functional appify account the reason why I use free plans is just to show you guys how much you can get done with $5 a month in usage it's a ton you can basically do all the testing you could ever possibly want you could do more or less like half of the scraping maybe all the scraping you'd ever possibly want um but yeah okay and as you saw that that was really quick right A lot of the time if you're doing 5,000 places may take you a little while longer but because we were just
doing five um we we basically did it immediately and what you see here is we get a bunch of different pieces of info we get an image which is pretty cool I don't really think we're going to need this image but I I don't know maybe you could use it in some part of your flow if you're looking to reach out to these businesses cold maybe you could feed this image into AI have it tell you something about it and say Hey you know I love how you're I love that picture where the guy is
well maybe this wouldn't be the best piece of Outreach for a plumbing company but I love that picture where the guy's doing some Plumbing I don't know maybe this one's better um you know love the fact that you guys have some smiley faces and uh a Canadian flag on your uniforms this stuff like that you get a total score this is the review score review count Street city state right tons of information here the you could use to customize your a reach which is pretty great um but really the column that we want is we
want the website so the gentlemen pros.com Calgary MF flow.com doca Franks plumbing and heating Calgary wordpress.com in order for us to do the email enrichment part we actually need a domain name we can't just feed in a business name it's going to work maybe 30 40 maybe like 20 30% of the time if we feed in a domain name it's going to work a lot more often um so basically what I'm going to be doing once we actually build up the flow is I'm going putting every single row here through a filter and the filter
is just going to check for the presence of a website if the website exists then it will go through the rest of the enrichment process if the website doesn't exist it's not going to so that seems pretty straightforward how do we actually get all the stuff inside of make.com let's do it all we need to do is um I'm going to be using Google Maps extractors just make note of this URL here this is sort of like apfi sort of API if that makes sense you can see they even allow you to copy it the
reason why is so that you can just paste it really quickly into um whatever service you're using to automate what we're going to be doing is we're going to be using this um module here and I'm just going to be calling this local service business scraper plus enrichment system okay so let's pretend there's nothing here at all this is all you see what you need to do is you need to click on this button and go to apify and what I'm going to use right now is I'm going to use the run and actor but
the actual scenario that we're using is not is not actually going to use that um and I'm doing this just to show you guys how to trigger things from inside of make.com but it's actually a little bit smarter not to do the triggering um in the same scenario that you're doing the rest of the data and I'll explain why in a moment but we're going to choose run an actor here now what you need to do next is you need to connect to appify so you'll click add and then there'll be an API token all
you need to do is just copy this paste this into your search bar and then you'll head over to your appify account with the API tokens um just paste that in and that'll do the connection for you I've already done the connection so what I'm going to be doing is I'm going to be using this account under actor here you can do two things you can map and then plug in the URL that we just did or you could look for the scraper here and you can see it actually already has the compass Google Maps
extractor which is nice you'll see there are some settings it says run synchronously um integrat will wait until the actor run is finished beware the maximum time out for the run is 120 seconds the reason why this is valuable to know and understand is because if you're searching for a ton of Records like you know you probably want to be if you're doing an actual scraping job as opposed to just a video demonstrating it you're probably going to need to um run this and then get the results in another scenario and that's what I was
referring to before about having about not using the run this actor in the same flow that you're going to be collecting the information from you know uh sometimes these are going to take like 5 10ish minutes to run obviously that's still very little time if you consider the thousands of different results that you could get but uh in our context we're going to be running this on I don't know maybe I'll increase it from five to like 30 just to show you guys what that looks like so we're going to run it synchronously but I
know that it's not going to time out so I'm going to leave it at yes for now okay now we get to the interesting part there's this field here called input Json and this is probably the most intimidating field in the entirety of appify um all you need to do in order to satisfy that is go back to the actor here then you see how at the top left hand corner there's manual and then there's Json well this Json is just a copy paste way for you to put in all of the terms that you
want um into make.com and you can see if I just hold command and press V if I just try and paste this in like normally you'll see that like the the Json looks really shitty so what I'm going to do is I'm actually going to right click and I'm going to paste in match style and that'll just make it look a lot easier for us to kind of go through top to bottom so deeper City scrape if you remember I turned this parameter to off so um in make or in Json par Lance that is
false language here's a location query here's where I type in Calgary Alberta the really cool part about this now is now that we have this in a scenario what you could feasibly do is if you had some other module behind it like a Google map uh Google uh sheets module sorry you could actually use that as the input for this flow and if your Google sheet is a bunch of cities like Calgary uh I don't know Minnesota is Minnesota a city I don't know I'm not American uh you know Cincinnati um Toronto San Diego right
you could actually have it iterate through all of those and then you could run this multiple times for each different city so that's where the Json comes really in handy the max crawled places search is five I'm just going to set that to 30 for now hypothetically let's just see what happens search strings array um and then here is basically a big array of the different search strings will feed in Plumber I don't know flower shop um HVAC right these are local service businesses and uh you can feed in basically however many you want just
by adding a comma in between and then adding your Search terms sort of like so you don't need to add a last comma here that's fine just that first uh just the one in between records but we're going to leave that here and then for build and for timeout you can just leave those blank it's not a big deal U memory just leave it all leave it all blank it'll just pick the default from appify um and then you don't need to worry about like managing any of that stuff for now okay so why did
I get you to this point um all we're now doing is we're basically going to do the exact same thing that we just did over here like physically in the appify dashboard we're just going to do it make.com and the reason why is because that's going to essentially enable us to trigger or sorry about that where the heck was I it's going to allow us to trigger it outside of appify and that's just going to open the door to a ton of other API call Shenanigans and just really cool things that we can do so
all I'm going to do is I'm going to right click this and press run this module only as you see it's taking its sweet ass time the reason why is because this is actually spinning up a web server like I was talking about before it's then pumping in all of our Json then it's going out it's actually scraping line by line getting the website it's actually just doing all that heavy lifting for us if you remember last time it also only took us I don't know 15 seconds or so now it's taking us longer and
the reason why is because I've fed in more places right I did 30 instead of five so we receive this big output here looks pretty positive we have the capital succeeded scraping finish you can view all scraped places laid down in a map on here it could take some time to fully load for large data sets that's cool then we have a bunch of other parameters meta stats options usage usage USD the one that's valuable to us is this default data set ID all we're going to do is we're going to command click C so
I'm going to copy that the reason why I'm copying this is I just want to show you what the data looks like and what we need to do is get data set items down here now appify separates the running of the actor with the actual data that we get as a result of that because the data can usually be pretty big right you don't necessarily want to put all that stuff together you want to make it accessible to people what we do next is we go to this data set ID and just paste in the
same data set from the default data set ID parameter here now if you wanted to run this as a scenario obviously you wouldn't just be hardcoding in the data set you'd actually go down and then let me just type in default you'd actually use this uh this variable here default data set ID but because what I'm doing is I'm just trying to run this next module once just to show you guys what's going on I'm actually hardcoding it you can then um select the type of data transformation you want just always click clean unless you
are doing some very specific things and then for format Json It's usually the best with a limit of 100 but keep in mind if you have other functions that you want maybe you want to like create an HTML page for the scraper or something hypothetically you could choose HTML um CSV whatever then the limit I'm going to choose 100 just use the default and now that I have the hardcoded default data seted I'm going to right click press run this module only and you'll see that I now have a giant list of every plumber that
I was looking for so about 30 plumbers total all arranged in a bundle format here now when you see 30 bundles like this what this is basically doing is it's it's allowing you to run whatever modules come next 30 times once per Dynamic uh piece of data once per Dynamic run so if we scroll down here to website albertab besome doca for instance if I pump that in here this is Plumbing website of a plumbing service that is in Calgary somewhere within my search now what we want to do is because the rest of our
our flow if you go back to local business scraper because the rest of our flow requires a URL what we're going to do is we're going to add a filter next and that next filter step is just going to filter out all of the websites that don't have URLs what we're going to do next is we're going to add that to any mail finder which is our email enrichment platform I'm going to show you how to set up the API call for that and all that fun stuff uh and then finally at the very end
we're just just going to dump to a Google sheet but know that you can actually dump to a Google sheet at any step in this process right A lot of people will probably look at what I'm doing and think huh why isn't he logging this all to a database well you can do that if you wanted you could have your next step be a Google sheet you could dump in all of the websites into sorry all of the searches into a Google sheet and then maybe you could separate it out using search filters or something
like that to only grab ones with websites just that you have all of the data you don't have to do any searches twice in my case though I'm just being as simple as humanly possible and this is really what I want the system to be like I've sold systems like this for anywhere from $1,000 to $2,000 so I just wanted to recreate exactly what that looks like for you guys okay great so we have the data set items what do we have to do next well if you think about it the next thing we have
to do is we have to send this thing over to um any mail finder which is our API now there's actually a module for any mail finder this did not used to be the case you used to not be able um used to not be able to do this you used to have to like set up the HTTP request custom so we used to have to to http go down here to make a request type in the I don't actually know if this is the API but you know it used to have to be something
like this um let's do company then we used to have to go post and then raw and then Json we used to put in a bunch of information here so this is what I personally had to do when I was setting up that system now any mfinder has a very simple um module that allows you to do all of that for us and that's just what we're going to be using in this instance what I'm going to do is I'm going to use the search for a company's emails macher right over here but I'm not
actually going to go through the rig roll of setting this up and creating the connection just yet what I'm actually going to do first is I'm I'm going to set up that filter what we want to do is we want to make sure that website exists the condition I'm going to be pumping in is I'm going to go down here to the web site field I'm going to say website I'm just going to go exists in this way if there is a bundle of these 30 um probably going to take a sweet ass time to
find one where the the website field is blank the run will stop there and then it'll go to the next one stop there next one until it finds one with a website so it's not showing the filter right now that's just due to a bug if we grab this module and kind of move it around we'll see that it now says website exists we could also just say website it's probably a little bit shorter of a way maybe a little bit more interpretable it's always easy to it's always best to make these things as short
as and as interpretable as possible and the next thing we're going to do is we're going to now route this over to any mail finder now in order to do this you need to create a connection and in order to create a connection you have to do a whole thing with like your API key so click on this it'll say my anail finder connection I'm just going to go to Nick left click. then I'm just going to pump in my API key right now uh now what we need to do is we need to search
by domain what we need to do is we just need to feed in that website parameter which we found let's see right over here now if you wanted to like if I couldn't find that I could just go curly BRAC curly brace 3. website and do the same thing as me physically looking for this but I was trying to keep it as simple as possible for people in this video going to seeme that you don't have a pre-existing bed of knowledge okay now once we have that what we want to do is we want to
add this to a Google sheet and what I'm going to do is I'm just going to create a really um quick and easy sheet just by going to sheets. new and then I'm just going to call this uh in my case I'm just going to call this plumber scraping we'll go plumber email scraping and then what I'm going to do is I'm going to add let's see what sort of data would it make sense to grab from each of these items um okay we obviously want like the business name so let's go business name then
let's go website that's the URL let's go phone number I don't know how many of these are going to have phone numbers but we should definitely check for the phone number um we could also grab the latitude and the longitude too I mean there's really no reason not to if you think about it like what is the additional work required here all we do is we map a single parameter um total score we could say review score Place ID that's meaningless to us um categories we could theoretically add the categories in here I don't really
think it's that valuable image categories and then we have a bunch of other settings down here like we could get gas prices if this is a a gas place planning service options reviews places people also search opening hours maybe need the opening hours Monday through Friday um in our case we don't I think I'm I'm probably happy with this the last thing we need to do is we need emails so I'm actually going to leave emails blank here um and the reason why is I'm going to use a formula to extract um the email array
and then I'm going to have like an email one email 2 email 3 email 4 email 5 and I'm hypothetically going to say you know there's a chance that this scraper that this um email enrichment service actually finds like five emails for us so what I'm going to do is I'm going to use uh very simple formula here to take the an array of emails that it generates for us and then split them into five and I'm just doing this off the top of my head this is what I did for the client there are
many other ways to do this you could actually do the separation inside of make.com and then have an email one email 2 email 3 I'm just going to use this email array thing um instead and I'll show you guys what that looks like okay great so business name website phone number awesome what I'm going to do is um personally I always like to make my Google Sheets very pretty one of the things that I talk about very often my community um which teaches people how to do this stuff is how important present is for the
client and I know this may seem simple and all we're doing is just changing a font and we're maybe spacing things out a little bit um but I find that when I deliver Google Sheets or Google Documents or or whatnot and I just make the formatting just a little bit different than maybe like the default um it usually comes across this a lot better and people think that the the quality of the product that I've delivered is higher one of those quick little hacks that takes you 5 Seconds to do but they can really change
the game okay now once we've added this Google sheet we actually have to add it so I'm going to go to sheets I'm going go down here and what I'm going to do is I will add a row looks good to me then what I want to do is I need to go to the specific account that has the spreadsheet what I want to do is I want to feed in Plumber email scraping that's the same sheet that I'm referencing up here the sheet name is just going to be sheet one that's just referring to
this and then table does indeed contain headers okay great so now we can actually go through and we can map all of the data that we got from here as well as the emails that we've gotten down here so first of all business name uh what was title website it's going to be website phone number phone uh you could do it unformatted too in my case I'm actually going to do it unformatted I'm going to allow myself to deal with the formatting later see how it's one plus one space 403 Dash right um I could
just do all that work myself or my client could do the work I don't need to do that work inside of make.com uh review score total score and now we can actually feed in the email array now I could just add this in and just stick it in there and that'd be fine but I actually want to show you guys what the process looks like so I'm just going to run this a couple times without the emails and we're just going to go from there now because this run an actor I I don't want to
test this whole flow from start to finish on new data I just want to use the old data what I'm going to do is I'm going to unlink this and then I'm going to drag the schedule module over here to get data set items and I don't actually want to get all the data set items in this case um actually you know what yeah I kind of do let's do 30 yeah so I'm going to leave that as is 30 uh we should have 30 bundles awesome and I'm just going to run this once without
the actual email array I just want to show you guys what it's going to look like when this populates one thing that I'll warn you guys is going to happen is if you add some formatting to the header row all of the other rows are going to be formatted kind of weirdly to start um but uh that's all right press run once we'll see that it already passed the website thing which is nice and the search for a company's emails flow was done we actually found uh it's a success true which is weird we're not
actually getting any emails from here odd anyway we're just going to run this scraper then go back over here it's not like we were getting the emails anyway and as you see I I mentioned how the formatting is going to be kind of weird so what I'm going to do is just go down here and then reset this then reset that oh and then I'm not going to bold any of this stuff so command B there you go unbolded and basically this module just takes the formatting from the previous row so from now on uh
we're not going to have to deal with that it's just going to grab whatever this format is and then just use the same one underneath it I'm going to format this a little bit differently I want this to look kind of pretty and you see that some of these Plumbing websites have sort of oops sorry about that uh they have sort of weird like uh UTM parameters and whatnot I'm not going to worry about that okay so we verified that this works so I'm going to press stop here for stop we verified that this works
to add everything except for the emails let's actually go through the email step so um I just paused this hence why there's this sort of like yellow warning sign I basically forced the stop but what I'm going to do is I'm going to look to see if there's a run with an email okay great so I see that there's one here Calgary plumbers and drains for instance there's one over here cross connection Services there's one over here with three different email addresses right um and it looks like uh I don't know maybe half of them
have email addresses looks like the first few didn't but yeah most of them do which is quite nice what we want to do is we want to deal with the case or deal with a situation in which there's more than one email essentially um so what I'm going to do is I'll go over here and then what I'm going to do is I'm going to feed in just this whole email list okay if you want to see what multiple emails actually looks like like the actual text that it's going to be outputting we'll go over
here and then in the top rightand Corner we're going to go to download output bundles and you'll see that this is basically what I'm going to be getting I'm going to be getting email list Mike Dan gy basically all of the stuff um just in like one one big string uh and let me think about this specifically this is precision [Music] plumbing.com doca then down over here for the result uh just for this test I'm going to feed in this whole email list into the email array and we're just going to see what what it
pops up as so I don't actually need to run this 30 times I only need to run this once so I'm just going to go to limit one run this from start to finish you'll see that the second time it ran much faster that's because every time it does the search it actually goes and it caches the results okay great you see how now we have Mike at Precision Plumbing Dan and precision Plumbing gy at Precision Plumbing basically um what we can do now is we can split this email array so G10 oops uh we
need to add the delimiter which in our case is just going to be this um comma and you'll see it actually automatically adds in all of the email addresses for us into the first second and third row which is quite nice I should note that this is not hardcoded as you see up here we have the split so if you wanted to hardcode it you would have to um paste it without formatting um and you'd have to paste all these without formatting but this is a very very quick and easy and simple way that you
can just very simply map across all these emails so that having a deal with a bunch of make.com BS um if you wanted to do this differently what you could do is you could add make.com logic where uh you basically get from email list the first email here and then the second email and then the third email and then the fourth email but I like the idea of not having to hardcode it in like that I like the idea of just being able to add split on this first row and then just have it automatically
iterate over every single email all the way down here like theoretically we could I don't know one website might give us like 30 emails right so this way we get to do all of that without having to just do the logic and make.com and without having to sort of I don't know account for it if that makes sense little bit more scalable of a solution that way and yeah you're probably not going to get 10 emails but uh does not does not hurt I want to say now this email array for us actually isn't very
valuable so what you can do is you could just like minimize it and make it really small if you wanted to totally up to you okay great so what I'm going to do now is I'm just going to delete um let's do this and then actually let's just delete everything um and then what you have to do in order to make this work is you just have to feed in uh g whatever the row number is and then just delimit by this you are going to get an error here um but that's okay you could
also say like if uh I don't know if uh could you do exists I don't know but you could say like if G2 doesn't equal uh like an empty string or whatever then run it I'm not going to do that right now because again I don't really care um the the dollar sign value exclamation point is fine for now and then what I'm going to do is I'm going to go back here to now collecting all of the websites instead of just one I'm going to go back over here to doing a limit of 30
and then now we're just going to test this on that one specific data set uh run which is going to be quite nice then we're going to iterate through all of these and just see how many of these emails we get see just all the data that sort of comes through now the first 10 or whatever are going to run a a lot faster now because we've actually done the execution and what anyil finder is doing under the hood is they're actually storing the email addresses that they found which is quite nice and for some
reason this isn't actually adding in what I wanted it to so hold on a sec title website phone unformatted H oh you know what it's not adding it because oh it's not adding it because you can't actually add this ahead of time sorry I lied you can't actually add all of that until you know what these are so you have to go down here so we're just going to delete all of these for now and then uh we're going to run this one more time there you go this looks a lot better okay so what
I'm going to do is I'm just going to go all the way down and then I'm going to change this formatting I'm going to reset reset that's going to stop what we had before which is a bunch of weird format and then I'm just going to unbold all this and now we don't have the the Bolding either and now that we've you know previously it was just running through rows that were cached which is why it ran all 13 of these so fast now that we're on actual data we do need to slow down a
little bit and it's going to run these sort of like one at a time I should note that you don't actually have to run it this way if you run it this way um it will be it's sort of going to take quite a while right as you see it might be like a minute or I don't know maybe 10 or 15 seconds or something per run if you were to try and iterate through thousands upon thousands of rows this make scenario would actually time out and that's where the um the API comes in handy
as opposed to using just these these pre-built modules here but anyway we're getting a bunch of data then if I go through you'll see that a bunch of these have email addresses which is pretty cool not all of them are 100% right but uh you know in scraping you can never be 100% right like some of these are WordPress for instance and the reason why it's getting WordPress emails is because this isw wordpress.com basically the top level domain here is is this wordpress.com or the root domain is wordpress.com Frank just either couldn't to have his
own website domain or just doesn't want to and that's fine what we could do as well is we could add a filter after this n email finder steps that the only rows that we're adding here have email addresses that would make our thing look a little bit prettier too I didn't do that in this case but maybe I'll do that right after this finishes running okay great so it actually just finished running and what I'll do is I'm just going to split G2 by the presence of this then I'm just going to go let's just
add all of these in you see that a bunch of these if I add a filter and then if I sort a bunch of these have um email addresses specifically it looks like of the oh oh hold on we're getting a bunch of additional rows unfortunately I think the reason why is because I did not successfully delete um the previous ones so I'm just going to go through here and just delete all these oh it doesn't look like I can okay what I'm going to do is I will go back here and I'm going to
filter out the presence of blanks okay nice so it looks like out of the I don't know 26 that we fed in we got 16 so 16 out of 26 is about 60% or so of the emails which is a reasonable good result uh not the best result but it's pretty solid so you know if if you were to feed in 10,000 or so you would get 6,000 email um 6,000 rows with the presence of at least one email it looks like we also had let's see uh nine records with more than one email oh
I guess I have to make that 15 actually not 16 because this Matt at WordPress is twice because I ran it twice um but of that we got nine with or eight with two emails and then we had a bunch of these with three emails um so really like sort of if you were to count of the number of emails that you're getting out of the 10,000 websites that you supply you'd probably get about 10,000 it's just some of these would be from the same business granted it's fine to do that uh because a lot
of the time the same like if you just send it to one person they won't reply but if you send it to two people or something like that the second person will see it talk to the first person in the local service business and be like hey did you see that email that Nick sent us um and that can actually you know sort of go to your go to your benefit if that makes sense but okay I personally don't really like the way that this looks um sort of got ahead of myself here and use
these quick hacks I don't like the fact that I have to add in that information I don't really like the fact that I didn't filter it for the presence of email addresses so what I'm going to do is I'm going to go down here and I'll say email email list one has to exist so now it's only going to dump emails in if the emails actually exist which is pretty nice and what I'm going to do is for email one I'm actually going to hard code email list we'll say get I'm actually going to hardcode
that first um email from the email list and then I'm going to proceed with my cute little formula um from the second Point onwards that's what I'll do and that way I can make it completely optional and if you don't want to have a second ugly looking email you don't have to just going to filter and unfilter to see if I have any additional rows here that I wasn't keeping track of nice good I'm going to delete all this now and now that I have this email question mark I'm just going to run this whole
puppy one more time it's going to run a lot faster now because I have the um cached responses it's pretty nice and I'm just going to now reset the formatting oh yeah I got to unbold it too one sec there we go and yeah you see that out of all of those runs we ended up with 16 uh ones with with actual email ones and then a bunch of them have more not all of them but a bunch of them have more and then if you I don't know wanted to iterate through more or something
like that you you could I believe in sheets you could also index or something so that you could start this whole process at the second row not the first but we'll just leave that blank for now we'll just pretend that you know you only wanted to get one hypothetically so I just don't have to make this very complicated for people that don't fully understand what's going on here under the seeds or under the hood okay great so that's the end to- end system but I mentioned to you earlier that there were going to be a
couple of differences here in so far that we can't use this this run because if we use this run on like a thousand rows or something then it's not it's going to take too long basically for us to be able to run this scenario so what I'm going to do is I'm actually going to separate these two I'm going to have one scenario um let's do this I'm going to separate this into two parts the first is going to run the actor the second is going to get the local service business data and then send
to enrichmond platform how do I actually do this in practice well I'm just going to open up another scenario here I'm just going to call this scenario one run local business scraper maybe we should actually say Google Maps extractor apfi scraper and then I'm just going to copy and paste this in and that is all this scenario is going to do it's going to go on a schedule maybe I want it to run every day I want it to run once a day at uh I don't know 1216 p.m. hypothetically and what this is going
to do is this is going to run that scenario and in the second scenario instead of using the run and actor we'll go back to app five what we're going to do is we're going to look at watch actor runs instead plug that in here and then we have to create a new web hook here this web Hook is going to allow us to watch that specific actor run so go to actor and then type in Google Maps extractor we'll say Google Maps extractor finished click save that looks good then we're going to go into
the get data set items and now we're actually going to map the default data set ID here then instead of a limit of 30 I'm just going to set I don't know hypothetically I'm going to pretend that we're only going to do 100 at a time and then now we have everything that we need to actually run this in reality so I'm just going to delete everything but but Alberta Pro drain Solutions just because I want the formatting to be the same when this thing runs now what I'm going to do is I'm going to
save this I'm going to run the scenario now and now I'm actually going to go here make sure this is all my data right we're going to search 30 places nice okay build time okay great and I'm actually going to run this now so this first scenario is actually going and then running the actor you'll see that because I left the sequential um run synchronously button on it's actually going and it's it's it's not finishing the the run immediately it's actually going and it's actually running it if you go to actor here then we go
to runs you'll see that this is now actually going and I think that this just finished so now if we go back here you'll see that we caught the successful run we listed all of those records and then what we did is we fed that into default data set ID here and now we're pulling in actual websites like Frank's heating Frank's plumbing and we're actually finding websites just like we were doing before as I showed you now these are going to be the same websites because I'm running a search of 30 and I'm just feeding
the same URL but you could as you saw before feed in a much deeper search by going and changing the the depth settings uh and just making them go way way deeper and then adding like 9,999 records or whatever instead so what I'm going to do is I'm going to stop both of these oops sorry about that we're going to force stop you poor little guy took them out in the back shed and put them down and I'm going to export These Blueprints let's go here then I'm going to go over here export this blueprint
too and I'm just going to name both of these what they are and then I will add that as a link to the bottom of this video description so that is that hopefully you now know everything you need to know in order to get out there and scrape hundreds of thousands of local service businesses for yourself very quickly I might add as you see this is quite an inexpensive process you could theoretically run a system like this for just a few dollars a day you just need to spend money on the make.com operations and then
the apfi um I think it's like memory or runtime or whatever they gave you the $5 in credits for I love building make.com systems on camera if you guys have any recommendations or suggestions or or requests just drop them down below as a comment and I'll add them to my queue otherwise if you guys can do all that fun YouTube stuff like subscribe get me to the top of the ELO and I'll see you on the next video