Creating an Automated Instagram Image Uploader with Python using instagrapi (Easy)

Aalap Davjekar
3 min readJul 18, 2024

--

Robotic hands hold a phone and navigate the Internet.
Say goodbye to manual posting. Build your own social media sidekick with Python.

This is a fun little project I wanted to build. I’ve been an avid Python user for several years now and recently I got a little irritated with having to manually post images on my Instagram (the simple reason being, I’ve wanted to quit social media), unfortunately, I’ve had to post for work.

To get around this, I built a very simple Python program that can publish posts for me. This project is perfect for those looking to automate their social media presence or experiment with API interactions.

Let’s break down the process step-by-step.

Download the source code (optional) from my GitHub.

Setting Up Your Environment (Optional)

Using a virtual environment is crucial as it keeps your project dependencies isolated, preventing conflicts with other Python projects or system-wide packages.

To learn more about Python virtual environments please read the docs.

Create a Virtual Environment

Open your terminal and run:

python -m venv instapy_env

This creates a new virtual environment named instapy_env.

Note that this is best done outside of a system folder. A common practise I have is to create the virtual environment in the same folder as the project files.

Activate the Virtual Environment

  • On Windows: instapy_env\Scripts\activate
  • On macOS and Linux: source instapy_env/bin/activate

Installing Dependencies

With our virtual environment active, let’s install the necessary package:

python -m pip install instagrapi

We’re using instagrapi, a powerful and unofficial Instagram API client for Python.

The Code Breakdown

Let’s examine our script section by section:

Imports and Setup

import os
import traceback
from instagrapi import Client

We import necessary modules and the Instagram client.

Authentication

The code on my GitHub uses environment variables for security. It’s a common practise to never hardcode your credentials! However, for the sake of this tutorial, you can use the following code block. Simply replace [USERNAME] and [PASSWORD] with your account’s username and password.

USERNAME = [USERNAME]
PASSWORD = [PASSWORD]

Main Execution Block

This structure ensures proper error handling and logout, but the error handling is not required and you can simply write the code without a try-except mechanism.

try:
cl = Client()
cl.login(username=USERNAME, password=PASSWORD)
# ... (rest of the code)
except Exception as e:
print(f"An error occurred: {str(e)}")
traceback.print_exc()
finally:
cl.logout()

Image Handling

We specify an ‘images’ folder and list its contents.

image_folder = 'images'
images = os.listdir(image_folder)

Note that the program currently only uploads a single image at a time. Future functionality will include uploading multiple images and scheduling posts.

Posting Function

This function handles the actual posting process. Again, the error handling is not required and you can simply write the code in the try block without a try-except mechanism.

def post_image(image_path, caption):
try:
cl.photo_upload(path=image_path, caption=caption)
except Exception as e:
print(f"Error uploading image: {str(e)}")
traceback.print_exc()

Posting Logic

We post the first image from the folder.

if images:
test_image = images[0]
caption = "your caption and hashtags go here"
post_image(os.path.join(image_folder, test_image), caption)

Important Considerations

  • Security: Using environment variables for credentials is crucial for protecting your account information (in case you decide to make the code public).
  • Error Handling: Robust error handling ensures your script doesn’t crash unexpectedly and provides useful debugging information.
  • API Limitations: Be aware of Instagram’s API limits and terms of service to avoid account restrictions.
  • Ethical Use: Ensure you have the right to post the images and that your automation complies with Instagram’s policies.

Conclusion

This script provides a foundation for automating Instagram posts. It can be expanded to include features like scheduling, multiple account handling, or integration with other services. Remember to use such tools responsibly and in compliance with platform guidelines.

Hope you learned something useful today!

--

--

Aalap Davjekar

Technical writer and web developer based in Goa, India. Passionate about working at the intersection of art and technology.