Ensta
🔥 Fast & Reliable Python Package For Instagram API - 2024
Install / Use
/learn @diezo/EnstaREADME
Ensta - Simple Instagram API

Ensta is a simple, reliable and up-to-date python package for Instagram API.
Both authenticated and anonymous requests are supported.
<!-- ### Python & Instagram Automation Services I'm available for freelance work in Python development with a focus on Instagram automation. If you have a project that requires expertise in automating tasks on Instagram, feel free to contact me at **sonniiii@outlook.com** or message me on discord [**@gitdiezo**](https://discordapp.com/users/1183040947035062382). -->Revive the Project! 🌟
Contribute to ensta and help revive the project for future updates and maintainance.
<img src="https://raw.githubusercontent.com/diezo/Ensta/master/assets/coffee.svg" width="170"/>
Installation
Read the pre-requisites here.
pip install ensta
Example
Fetching profile info by username:
from ensta import Mobile
mobile = Mobile(username, password)
profile = mobile.profile("leomessi")
print(profile.full_name)
print(profile.biography)
print(profile.profile_pic_url)
Features
These features use the Mobile API.
<details> <summary>Using Proxies</summary><br>When to use a proxy:
- You're being rate limited.
- Ensta is not working because your Home IP is flagged.
- You're deploying Ensta to the cloud. (Instagram blocks requests from IPs of cloud providers, so a proxy must be used)
from ensta import Mobile
mobile = Mobile(
username,
password,
proxy={
"http": "socks5://username:password@host:port",
"https": "socks5://username:password@host:port"
}
)
Ensta uses the same proxy settings as the requests module.
</details> <details> <summary>Username-Password Login</summary><br>Username is recommended to sign in. However, email can also be used.
from ensta import Mobile
# Recommended
mobile = Mobile(username, password)
# This also works
mobile = Mobile(email, password)
</details>
<details>
<summary>Change Profile Picture</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.change_profile_picture("image.jpg")
</details>
<details>
<summary>Fetch Profile Information</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
profile = mobile.profile("leomessi")
print(profile.full_name)
print(profile.biography)
print(profile.follower_count)
</details>
<details>
<summary>Follow/Unfollow Account</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.follow("leomessi")
mobile.unfollow("leomessi")
</details>
<details>
<summary>Change Biography</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.change_biography("New bio here.")
</details>
<details>
<summary>Switch to Private/Public Account</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.switch_to_private_account()
mobile.switch_to_public_account()
</details>
<details>
<summary>Username to UserID / UserID to Username</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.username_to_userid("leomessi")
mobile.userid_to_username("12345678")
</details>
<details>
<summary>Like/Unlike Post</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.like(media_id)
mobile.unlike(media_id)
</details>
<details>
<summary>Fetch Followers/Followings</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
followers = mobile.followers("leomessi")
followings = mobile.followings("leomessi")
for user in followers.list:
print(user.full_name)
for user in followings.list:
print(user.full_name)
# Fetching next chunk
followers = mobile.followers(
"leomessi",
next_cursor=followers.next_cursor
)
</details>
<details>
<summary>Add Comment to Post</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.comment("Hello", media_id)
</details>
<details>
<summary>Upload Photo</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.upload_photo(
upload_id=upload_id,
caption="Hello"
)
</details>
<details>
<summary>Upload Sidecar (Multiple Photos)</summary><br>
from ensta import Mobile
from ensta.structures import SidecarChild
mobile = Mobile(username, password)
mobile.upload_sidecar(
children=[
SidecarChild(uploda_id),
SidecarChild(uploda_id),
SidecarChild(uploda_id)
],
caption="Hello"
)
</details>
<details>
<summary>Fetch Private Information (Yours)</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
account = mobile.private_info()
print(account.email)
print(account.account_type)
print(account.phone_number)
</details>
<details>
<summary>Update Display Name</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.update_display_name("Lionel Messi")
</details>
<details>
<summary>Block/Unblock User</summary><br>
from ensta import Mobile
mobile = Mobile(username, password)
mobile.block(123456789) # Use UserID
mobile.unblock(123456789) # Use UserID
</details>
<details>
<summary>Upload Story (Photo)</summary>
from ensta import Mobile
mobile = Mobile(username, password)
upload_id = mobile.get_upload_id("image.jpg")
mobile.upload_story(upload_id)
</details>
<details>
<summary>Upload Story (Photo) + Link Sticker</summary>
from ensta import Mobile
from ensta.structures import StoryLink
mobile = Mobile(username, password)
upload_id = mobile.get_upload_id("image.jpg")
mobile.upload_story(upload_id, entities=[
StoryLink(title="Google", url="https://google.com")
])
</details>
<details>
<summary>Send Message (Text)</summary>
from ensta import Mobile
mobile = Mobile(username, password) # Or use email
direct = mobile.direct()
direct.send_text("Hello", thread_id)
</details>
<details>
<summary>Send Message (Picture)</summary>
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)
</details>
<details>
<summary>Add Biography Link</summary>
from ensta import Mobile
mobile = Mobile(username, password) # Or use email
link_id = mobile.add_bio_link(
url="https://github.com/diezo",
title="Diezo's GitHub"
)
</details>
<details>
<summary>Add Multiple Biography Links</summary>
from ensta import Mobile
from ensta.structures import BioLink
mobile = Mobile(username, password) # Or use email
link_ids = mobile.add_bio_links([
BioLink(url="https://example.com", title="Link 1"),
BioLink(url="https://example.com", title="Link 2"),
BioLink(url="https://example.com", title="Link 3")
])
</details>
<details>
<summary>Remove Biography Link</summary>
from ensta import Mobile
mobile = Mobile(username, password) # Or use email
mobile.remove_bio_link(link_id)
</details>
<details>
<summary>Remove Multiple Biography Links</summary>
from ensta import Mobile
mobile = Mobile(username, password) # Or use email
mobile.remove_bio_links([
link_id_1,
link_id_2,
link_id_3
])
</details>
<details>
<summary>Clear All Biography Links</summary>
from ensta import Mobile
mobile = Mobile(username, password) # Or use email
mobile.clear_bio_links()
</details>
Deprecated Features (Web API)
Features still using the Web API:
<details> <summary>Upload Reel</summary><br>from ensta import Web
host = Web(username, password)
video_id = host.upload_video_for_reel("Video.mp4", thumbnail="Thumbnail.jpg")
host.pub_reel(
video_id,
caption="Enjoying the winter! ⛄"
)
</details>
<details>
<summary>Fetch Web Profile Data</summary><br>
from ensta import Web
host = Web(username, password)
profile = host.profile("leomessi")
print(profile.full_name)
print(profile.biography)
print(profile.follower_count)
</details>
<details>
<summary>Fetch Someone's Feed</summary><br>
from ensta import Web
host = Web(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)
</details>
<details>
<summary>Fetch Post's Likers</summary><br>
from ensta import Web
host = Web(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)
</details>
They'll be migrated to the Mobile API soon.
Supported Classes
<details> <br> <summary><b>Mobile Class</b> (Authenticated)</summary>[!IMPORTANT] The Web Class is deprecated and it's features are being migrated to the Mobile Class. It'll be removed from Ensta upon completion.
Requires login, and has the most features.
from ensta import Mobile
mobile = Mobile(username, password)
profile = mobile.profile("leomessi")
print(profile.full_name)
print(profile.biography)
prin
Related Skills
node-connect
328.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
81.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
328.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
81.0kCommit, push, and open a PR
