Ensta uses a combination of Instagram's Web API & Mobile API making it a reliable choice over other third-party libraries. Also unlike other libraries, ensta always stays up-to-date.
Both authenticated & non-authenticated requests are supported.
Python 3.10 or later is required.
$ pip install enstaTap on the headings to view code:
Proxy Support
from ensta import Host host = Host(username, password, proxy={"http": "http://1.2.3.4", "https": "https://1.2.3.4"})Username Password Login
from ensta import Host host = Host(username, password) # Email can also be usedSessionData Login
from ensta import SessionHost # "session_data" is stored in "ensta-session.txt" file by default. # you can also get it using "host.session_data" host = SessionHost(session_data)2FA Login
Authenticator App
from ensta import Host # The key you got from Instagram when setting up your Authenticator App key = "R65I7XTTHNHTQ2NKMQL36NCWKNUPBSDG" host = Host( username, # or email password, totp_token=key )SMS Based
No need to configure anything. Ensta will automatically ask for SMS OTP in the runtime.
Upload Photo (Single Post)
from ensta import Host host = Host(username, password) upload = host.get_upload_id("Picture.jpg") host.upload_photo(upload, caption="Travelling π")Upload Multiple Photos (Single Post)
from ensta import Host host = Host(username, password) upload1 = host.get_upload_id("First.jpg") upload2 = host.get_upload_id("Second.jpg") upload3 = host.get_upload_id("Third.jpg") host.upload_photos([upload1, upload2, upload3], caption="Travelling π")Upload Reel
from ensta import Host host = Host(username, password) host.upload_reel( video_path="Video.mp4", thumbnail_path="Thumbnail.jpg", caption="Enjoying the winter! β" )Check Username Availability
from ensta import Guest guest = Guest() print(guest.username_availability("theusernameiwant"))Fetch Profile Data
from ensta import Host host = Host(username, password) profile = host.profile("leomessi") print(profile.full_name) print(profile.biography) print(profile.follower_count)Username to UserID, and vice versa.
from ensta import Host host = Host(username, password) username = host.get_username(427553890) uid = host.get_uid("leomessi") print(username, uid)Follow / Unfollow Users
from ensta import Host host = Host(username, password) print(host.follow("leomessi")) print(host.unfollow("leomessi"))Generate Followers / Followings List
from ensta import Host host = Host(username, password) followers = host.followers("leomessi", count=100) # Want full list? Set count to '0' followings = host.followings("leomessi", count=100) # Want full list? Set count to '0' for user in followers: print(user.username) for user in followings: print(user.username)Switch Account Type - Public/Private
from ensta import Host host = Host(username, password) print(host.switch_to_public_account()) print(host.switch_to_private_account())Fetch Someone's Feed
from ensta import Host host = Host(username, password) posts = host.posts("leomessi", 100) # Want full list? Set count to '0' for post in posts: print(post.caption_text) print(post.like_count) Add Comment on Posts
from ensta import Host host = Host(username, password) post_id = host.get_post_id("https://www.instagram.com/p/Czr2yLmroCQ/") host.comment("Looks great!", post_id)Like/Unlike Posts
from ensta import Host host = Host(username, password) post_id = host.get_post_id("https://www.instagram.com/p/Czr2yLmroCQ/") host.like(post_id) host.unlike(post_id)Fetch Post's Likers
from ensta import Host host = Host(username, password) post_id = host.get_post_id("https://www.instagram.com/p/Czr2yLmroCQ/") likers = host.likers(post_id) for user in likers.users: print(user.username) print(user.profile_picture_url)Change Profile Picture
from ensta import Mobile mobile = Mobile(username, password) mobile.change_profile_picture("image.jpg")Edit Biography, Display Name
from ensta import Host host = Host(username, password) host.change_display_name("Lionel Messi") host.change_bio("Athlete")Fetch Your Email, Gender, Birthday, etc.
from ensta import Host host = Host(username, password) me = host.private_info() print(me.email) print(me.gender) print(me.birthday)Any missing feature? Please raise an issue.
Tap on the headings to view code:
Send Message (Text)
from ensta import Mobile mobile = Mobile(username, password) # Or use email direct = mobile.direct() direct.send_text("Hello", thread_id)Send Message (Picture)
from ensta import Mobile mobile = Mobile(username, password) # Or use email direct = mobile.direct() media_id = direct.fb_upload_image("image.jpg") direct.send_photo(media_id, thread_id)We'll implement more features soon.
Host Class (Authenticated)
Requires login through username & password.
from ensta import Host host = Host(username, password) profile = host.profile("leomessi") print(profile.biography)Guest Class (Non-Authenticated)
Doesn't require login, but has limited features.
from ensta import Guest guest = Guest() profile = guest.profile("leomessi") print(profile.biography)Ask questions, discuss upcoming features and meet other developers.
If you wish to support my work, please consider visiting this link:
PayPal: @gitdiezo
- Mr. Tornado: An Instagram account which automatically updates it's biography to reflect the current weekday. (IST Timezone)
- Olgu's Ensta REST API: An unofficial Instagram REST API.
This is a third party library and not associated with Instagram. We're strictly against spam. You are liable for all the actions you take.
