Growing an audience is an expensive and painful task. And if you'd like to build an audience that's relevant to you, and shares common interests, that's even more difficult. I always saw Instagram has a great way to promote my photos, but I never had more than 380 followers... Every once in a while, I decide to start posting my photos on Instagram again, and I manage to keep posting regularly for a while, but it never lasts more than a couple of months, and I don't have many followers to keep me motivated and engaged.
The objective of this project is to build a bigger audience and as a plus, maybe drive some traffic to my website where I sell my photos!
A year ago, on my last Instagram run, I got one of those apps that lets you track who unfollowed you. I was curious because in a few occasions my number of followers dropped for no apparent reason. After some research, I realized how some users basically crawl for followers. They comment, like and follow people - looking for a follow back. Only to unfollow them again in the next days.
I can't say this was a surprise to me, that there were bots in Instagram... It just made me want to build one myself!
And that is why we're here, so let's get to it! I came up with a simple bot in Python, while I was messing around with Selenium and trying to figure out some project to use it. Simply put, Selenium is like a browser you can interact with very easily in Python.
Ideally, increasing my Instagram audience will keep me motivated to post regularly. As an extra, I included my website in my profile bio, where people can buy some photos. I think it is a bit of a stretch, but who knows?! My sales are basically zero so far, so it should be easy to track that conversion!
Just what the world needed! Another Instagram bot...
After giving this project some thought, my objective was to increase my audience with relevant people. I want to get followers that actually want to follow me and see more of my work. It's very easy to come across weird content in the most used hashtags, so I've planed this bot to lookup specific hashtags and interact with the photos there. This way, I can be very specific about what kind of interests I want my audience to have. For instance, I really like long exposures, so I can target people who use that hashtag and build an audience around this kind of content. Simple and efficient!
My gallery is a mix of different subjects and styles, from street photography to aerial photography, and some travel photos too. Since it's my hometown, I also have lots of Lisbon images there. These will be the main topics I'll use in the hashtags I want to target.
This is not a "get 1000 followers in 24 hours" kind of bot!
So what kind of numbers are we talking about?
I ran the bot a few times in a few different hashtags like "travel blogger", "travelgram", "lisbon", "dronephotography". In the course of three days I went from 380 to 800 followers. Lots of likes, comments and even some organic growth (people that followed me but were not followed by the bot).
To be clear, I'm not using this bot intensively, as Instagram will stop responding if you run it too fast. It needs to have some sleep commands in between the actions, because after some comments and follows in a short period of time, Instagram stops responding and the bot crashes.
You will be logged into your account, so I'm almost sure that Instagram can know you're doing something weird if you speed up the process. And most importantly, after doing this for a dozen hashtags, it just gets harder to find new users in the same hashtags. You will need to give it a few days to refresh the user base there.
But I don't want to follow so many people in the process...
The most efficient way to get followers on Instagram (apart from posting great photos!) is to follow people. And this bot worked really well for me because I don't care if I follow 2000 people to get 400 followers.
The bot saves a list with all the users that were followed while it was running, so someday I may actually do something with this list. For instance, I can visit each user profile, evaluate how many followers or posts they have, and decide if I want to keep following them. Or I can get the first picture in their gallery and check its date to see if they are active users.
If we remove the follow the action from the bot, I can assure you the growth rate will suffer, as people are less inclined to follow based on a single like or comment.
Why will you share your code?!
That's the debate I had with myself. Even though I truly believe in giving back to the community (I still learn a lot from it too!), there are several paid platforms that do more or less the same as this project. Some are shady, some are used by celebrities. The possibility of starting a similar platform myself, is not off the table yet, so why make the code available?
With that in mind, I decided to add an extra level of difficulty to the process, so I was going to post the code below as an image. I wrote "was" because meanwhile, I've realized the image I'm getting is low quality. Which in turn made me reconsider and post the gist. I'm that nice! The idea behind the image was that if you really wanted to use it, you would have to type the code yourself. And that was my way of limiting the use of this tool to people that actually go through the whole process to create it and maybe even improve it.
I learn a lot more when I type the code myself, instead of copy/pasting scripts. I hope you feel the same way!
The script isn't as sophisticated as it could be, and I know there's lots of room to improve it. But hey... it works! I have other projects I want to add to my portfolio, so my time to develop it further is rather limited. Nevertheless, I will try to update this article if I dig deeper.
This is the last subtitle!
You'll need Python (I'm using Python 3.7), Selenium
, a browser (in my case I'll be using Chrome) and... obviously, an Instagram account! Quick overview regarding what the bot will do:
- Open a browser and log in with your credentials
- For every hashtag in the hashtag list, it will open the page and click the first picture to open it
- It will then like, follow, comment and move to the next picture, in a 200 iterations loop (number can be adjusted)
- Saves a list with all the users you followed using the bot
If you reached this paragraph, thank you! You totally deserve to collect your reward! If you find this useful for your profile/brand in any way, do share your experience below :)
In order to use chrome with Selenium, you need to install chromedriver. It's a fairly simple process and I had no issues with it. Simply install and replace the path above. Once you do that, our variable webdriver will be our Chrome tab.
In cell number 3 you should replace the strings with your own username and the respective password. This is for the bot to type it in the fields displayed. You might have already noticed that when running cell number 2, Chrome opened a new tab. After the password, I'll define the login button as an object, and in the following line, I click it.
If you're wondering what those weird strings are, don't be scared! On my article about web scraping a real estate website, I've been through a similar task, which consisted in inspecting the web pages in order to tell the bot where to look. You can do that very easily, simply by right-clicking the element you want to map, and selecting Inspect.
Once you get in inspect mode find the bit of HTML code that corresponds to what you want to map. Right-click it and hover over Copy. You will see that you have some options regarding how you want it to be copied. I used a mix of XPath and CSS selectors throughout the code (it's visible in the find_element_ method). It took me a while to get all the references to run smoothly. At points, the css or the xpath directions would fail, but as I adjusted the sleep times, everything started running smoothly.
In this case, I selected "copy selector" and pasted it inside a find_element_ method (cell number 3). It will get you the first result it finds. If it was find_elements_, all elements would be retrieved and you could specify which to get.
Once you get that done, time for the loop. You can add more hashtags in the hashtag_list. If you run it for the first time, you still don't have a file with the users you followed, so you can simply create prev_user_list as an empty list.
Once you run it once, it will save a csv file with a timestamp with the users it followed. That file will serve as the prev_user_list on your second run. Simple and easy to keep track of what the bot does.
Update with the latest timestamp on the following runs and you get yourself a series of csv backlogs for every run of the bot.
The code is really simple. If you have some basic notions of Python you can probably pick it up quickly. I'm no Python ninja and I was able to build it, so I guess that if you read this far, you are good to go!
The print statement inside the loop is the way I found to be able to have a tracker that lets me know at what iteration the bot is all the time. It will print the hashtag it's in, the number of the iteration, and the random number generated for the comment action. I decided not to post comments in every page, so I added three different comments and a random number between 1 and 10 that would define if there was any comment at all or one of the three. The loop ends, we append the new_followed users to the previous users "database" and saves the new file with the timestamp. You should also get a small report.
And that's it!
After a few hours without checking the phone, these were the numbers I was getting. I definitely did not expect it to do so well! In about 4 days since I've started testing it, I had around 500 new followers, which means I have doubled my audience in a matter of days. I'm curious to see how many of these new followers I will lose in the next days, to see if the growth can be sustainable. I also had a lot more "likes" in my latest photos, but I guess that's even more expected than the follow backs.
It would be nice to get this bot running in a server, but I have other projects I want to explore, and configuring a server is not one of them! Feel free to leave a comment below, and I'll do my best to answer your questions.