I stumbled across InstaPy last week and have been eager to get some time to give it a go. Simply put, it’s an Instagram Like, Comment and Follow Automation Script. Reading through TimG’s post was kind-a inspiring. Through his script, he’s managed to get 2,500+ real followers on Instagram in 4 months, for only ~$5 p/month on hosting fees.

Needless to say, I wanted to see how well it could work for a side project of mine.

Ashamedly, I spent about 1.5hrs fumbling my way through getting it working — primarily because I had no Python experience at all. Eventually I got it up and running, so here’s a guide to help you.

1. Setup a Server

  • Spin up a standard Ubuntu DigitalOcean $10 droplet
    – Important — Chrome (a dependency of InstaPy) didn’t like running on anything less than 1GB ram
    – This literally takes about 2mins with DigitalOcean!
    – Make sure you add your computer’s SSH key, so that you don’t need a username/password
  • SSH into your new box, via ssh root@<IP ADDRESS>
  • Issue the following commands to get the server ready:
# Check for any server updates before we start
sudo apt-get update
# Install unzip, so we can unzip .zip packages
apt install unzip
# Install screen to let scripts run in the
# background, when we close SSH
apt-get install screen
# Install XVFB, for InstaPy
apt install xvfb
# Install Python's package manager
sudo apt-get install python3-pip
# Install Google Chrome, for InstaPy
cd /tmp && wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt-get -f install
# Make python accessible to the command line
sudo ln -s /usr/bin/python3 /usr/bin/python

2. Install InstaPy

  • Create a home for the InstaPy at ~/instapy
mkdir ~/instapy && cd ~/instapy
  • Clone the repo from Git
cd ~/instapy
git clone https://github.com/timgrossmann/InstaPy.git .
  • Run the installer: python setup.py install
  • Download the Chromedriver, placing it into /assets:
cd assets && wget https://chromedriver.storage.googleapis.com/2.33/chromedriver_linux64.zip
#Unzip the package
unzip chromedriver_linux64.zip

3. Create your own InstaPy script

We’ll create our custom script as index.py:

nano ~/instapy/index.py

I wanted to make use of Clarifai’s API, to find Instagram images that may not have actual text defining what it is. Clarifai just know by the photo, what’s in the photo. Cool haha?! Jump over to (you get 5000 API-calls free/month) https://developer.clarifai.com/signup/ and create a free account, once you’re logged in go to https://developer.clarifai.com/account/applications/ and create a new application. You can find the Client ID and Secret there.

Read through the InstaPy docs to see what’s possible, but here’s a default for you to get started:

from instapy import InstaPy
# Config
insta_username = ''
insta_password = ''
comments = [u':thumbsup:', u':punch:', u':raised_hands:', u':point_up:', u':fire:', u':smiley:']
# Setup
session = InstaPy(username=insta_username, password=insta_password, nogui=True)
# Comments
session.set_do_comment(True, percentage=33)
# Follows
session.set_do_follow(enabled=True, percentage=100, times=1)
# Ignore these
session.set_dont_like(['terrible', 'horrible', 'girl', 'hot'])
# Like Posts
session.like_by_tags(['puppy', 'puppylove', 'puppies'], amount=100)
# Unfollow Users
session.set_dont_unfollow_active_users(enabled=True, posts=5)
session.unfollow_users(amount=100, onlyInstapyFollowed = True, onlyNotFollowMe=True, onlyInstapyMethod = 'FIFO', sleep_delay=20)
# end the bot session
  • Test the script: python index.py
    – You can tell it’s working if you start getting output to tell you what it’s doing (eg. Logged in successfully, liked #food etc)

4. Run the Script

Now, let’s keep the script always running in the background, so that we can get back to enjoying life, while InstaPy gets to work.

  • Start a new background screen: screen
    – This will look as though it cleared the terminal, but in fact, it’s essentially opened a new terminal, which will remain open even if you close it
  • Start the InstaPy within the new screen: python ~/index.py
  • Stay with it enough to make sure it’s running, then press “Ctrl+a+d” to detach from the screen. To get back into the screen at any time, simply type the following command screen -r

InstaPy will run through all the commands you’ve set consecutively. Once it’s done that…it’s finished. I saw that my InstaPy script configuration ran for around 22hrs in total. So I needed a way to start it again, when it finished. To do this, I setup a cron (a script which runs at a certain time) to start InstaPy again every 24hrs.

  • Create a shell script: nano ~/instapy/cronstart.sh with the following contents (it literally does the above):
/usr/bin/screen -S <running_screen_id> -X stuff ' python ~/instapy/index.py'`echo -ne '\015'`

*You can get <running_screen_id> with the screen -list command — it’ll show all running screens — just get the numbers before the first . — eg. 1703.pts-0.ubuntu-1gb-sgp1–0

  • Then create a cron, with crontab -e and place the following at the very bottom (this starts the script again at 1am every day):
0 1 * * * /bin/bash ~/instapy/cronstart.sh > ~/instapy/cron.log 2>&1

That’s it. I’ll report back with any findings!

Matt Mcnamee

Author Matt Mcnamee

More posts by Matt Mcnamee