~ / guides / Open-Source Instagram Scrapers on GitHub (instagram-scraper, Instaloader & More)

Open-Source Instagram Scrapers on GitHub (instagram-scraper, Instaloader & More)

LH
Lena Hoff
Instagram data engineer · about the author
the short version
  • Instaloader is the open-source Instagram scraper I reach for first: MIT-licensed, ~12.6k GitHub stars, still shipping (v4.15.1, March 2026). It pulls profiles, posts, comments, stories, and hashtags from the command line or as a Python library.
  • instagrapi (~6.3k stars, Python 3.10+) wraps Instagram's private API. It needs a logged-in account and the maintainers themselves call private-API use fragile in production.
  • The classic arc298/instagram-scraper CLI is gone: the GitHub repo now returns 404. Several other popular repos (instascrape, drawrowfly) are archived or last touched in 2023.
  • Every public tool hits the same wall: Instagram throttles anonymous requests hard and returns 401 or 429 within a few calls. For volume I send one HTTP request to a scraper API and let it handle login, proxies, and retries.

I spent a week installing the open-source Instagram scrapers people actually star on GitHub, then ran each one against live profiles like nasa and instagram from my own machine. Some still pull clean data. Some throw 401 on the second request. One of the most famous ones, arc298/instagram-scraper, has vanished from GitHub entirely.

This guide is the result: which open-source Instagram scraper on GitHub works in June 2026, the exact install and run commands, what each tool returns, and the point where every one of them hits Instagram’s rate limits. I tested the repo states with the GitHub API and ran the code locally, so the version numbers and failures below are what I actually saw on screen.

Which open-source Instagram scrapers on GitHub actually work in 2026?

The open-source Instagram scrapers on GitHub still worth installing in 2026 are Instaloader and instagrapi for Python. Both are maintained, both have thousands of stars, and both ran for me. The older command-line favorites are mostly dead: arc298/instagram-scraper returns a 404, and chris-greening/instascrape and drawrowfly/instagram-scraper are archived or stuck on 2023 commits.

Here is the live state of the repos I checked through the GitHub API on June 16, 2026, sorted by how usable they are today.

GitHub repoLanguageStarsLast pushedLicenseStatus
instaloader/instaloaderPython~12,570Apr 2026MITMaintained, works
subzeroid/instagrapiPython~6,330Jun 2026MIT-styleMaintained, needs login
drawrowfly/instagram-scraperNode/TS~843Mar 2023MITStale, partial
chris-greening/instascrapePython~661Apr 2023MITArchived
arc298/instagram-scraperPythonn/an/an/aRemoved (404)

Star counts and dates come straight from each repository’s GitHub API record. The pattern is clear: the Python projects with an active maintainer survived Instagram’s tightening, and the unattended CLIs did not. The next sections walk through each tool that still installs, starting with the one I recommend first.

How do you scrape Instagram with Instaloader?

You scrape Instagram with Instaloader by installing it from PyPI, then either calling the instaloader command for a quick download or importing it as a Python library for structured data. Instaloader downloads pictures and videos “along with their captions and other metadata from Instagram,” per the project site, and that covers public and private profiles, hashtags, stories, feeds, saved media, comments, geotags, and captions.

Install is one line:

pip3 install instaloader

The fastest test is the CLI. This downloads a public profile’s posts and metadata into a folder named after the account:

# Download every public post + metadata for one profile
instaloader profile nasa

For structured data you can parse in code, use the Python library. Here is the exact pattern I ran to pull profile metadata and the most recent post captions:

import instaloader

L = instaloader.Instaloader(download_pictures=False, download_videos=False)

profile = instaloader.Profile.from_username(L.context, "nasa")
print(profile.username, profile.followers, profile.mediacount)
print(profile.biography)

# Most recent 5 posts: caption, likes, shortcode
for i, post in enumerate(profile.get_posts()):
    if i >= 5:
        break
    print(post.shortcode, post.likes, "-", (post.caption or "")[:60])

Profile.from_username(), get_posts(), get_followers(), and post.get_comments() are the workhorse methods. The object fields map to what Instagram exposes: followers, mediacount, biography, and per-post shortcode, likes, and caption. The same library also downloads a single reel or story and the metadata attached to it, and it needs no Instagram API key to read public posts. Instaloader is MIT-licensed and free, which is why it sits at the top of most “python instagram scraping library” searches.

Login is optional. Anonymous runs work for a while, then Instagram starts answering with 401. That failure is the subject of two sections down, because it is the ceiling every open-source tool shares. First, the library that takes the opposite approach and logs in by design.

How do you scrape Instagram with instagrapi?

You scrape Instagram with instagrapi by logging into an Instagram account through its Client object, after which you can request users, media, hashtags, stories, comments, and insights. instagrapi describes itself as “the fastest and powerful Python library for Instagram Private API,” and that private-API design is the key difference from Instaloader. It speaks Instagram’s mobile and web API flows as an authenticated client, so it logs in and then asks the API for data the way the mobile app does.

Install needs Python 3.10 or newer (the maintainers dropped 3.9 in version 2.5.0):

pip3 install instagrapi

Login comes first, and saving the session avoids re-authenticating on every run:

from instagrapi import Client

cl = Client()
cl.login(USERNAME, PASSWORD)        # use a throwaway account
cl.dump_settings("session.json")    # reuse this next time

user_id = cl.user_id_from_username("nasa")
info = cl.user_info(user_id)
print(info.username, info.follower_count, info.media_count)

medias = cl.user_medias(user_id, amount=5)
for m in medias:
    print(m.pk, m.like_count, "-", (m.caption_text or "")[:60])

The method names that matter are login(), user_id_from_username(), user_info(), user_medias(), and hashtag_medias_top(). Because instagrapi acts as a real logged-in client, it reaches data Instaloader cannot, including direct messages, notes, and account insights, plus it can post and upload.

The cost is risk. The instagrapi README states plainly that private-API automation is “fragile in production,” and the project now recommends a hosted provider (HikerAPI) for production private-API traffic. In my testing, an account doing rapid user_medias() calls drew a challenge prompt fast. Use an account you can afford to lose. The blocking behavior that pushes people toward hosted infrastructure is the same wall the next section measures directly.

Why do open-source Instagram scrapers get blocked or return 401?

Open-source Instagram scrapers get blocked because Instagram throttles requests by IP reputation and account behavior, then returns 401 Unauthorized or 429 Too Many Requests once you cross an invisible, shifting limit. This is not a bug in Instaloader or instagrapi. It is Instagram refusing the connection, and it hits every public tool the same way.

The two failure responses I saw map to specific causes:

ResponseWhat it meansCommon trigger
401 Unauthorized (“Please wait a few minutes before you try again”)Instagram locked anonymous or low-trust accessUnauthenticated calls from a datacenter or cloud IP
429 Too Many RequestsRate limit exhausted, temporary banRestarting the tool repeatedly, parallel runs, high cadence
Checkpoint / challenge_requiredAccount flaggedA logged-in client moving too fast

The Instaloader troubleshooting docs are blunt about the environment: services “that offer promiscuous IP addresses, such as cloud, VPN and public proxy services, might be subject to significantly stricter limits for anonymous access.” They also warn that “restarting or reinstantiating Instaloader often within short time is prone to cause a 429.” A long-running GitHub issue (#2501) tracks the 401 "Please wait a few minutes" response coming back for unauthenticated get_posts() calls, which matches exactly what I hit from a cloud box.

The Scrapfly engineering team, which maintains its own Instagram scraper, puts the anonymous ceiling at roughly 200 requests per hour per IP before a 429 appears, and notes that Instagram rotates its internal GraphQL doc_id identifiers every few weeks, which is what silently breaks unmaintained scrapers. Two levers move this outcome: the IP the request comes from, and whether you are logged in. Residential IPs and a slow cadence help, which leads to the workaround most teams settle on.

How do you scrape Instagram at scale without managing logins and proxies?

You scrape Instagram at scale by sending one HTTP request to a scraper API that handles the login, residential proxy rotation, and 401/429 retries on its servers, then returns parsed JSON. This removes the part of the open-source tools that breaks: you stop babysitting sessions, doc_ids, and proxy pools, and you get a profile or post back as structured data.

The request is a single call with your target and an API key:

curl "https://chocodata.com/api/v1/instagram/profile?username=nasa&api_key=$CHOCO_API_KEY"

The Python version is the same shape, so it drops into an existing Instaloader or instagrapi script as the fallback when you start seeing 401s:

import requests, os

resp = requests.get(
    "https://chocodata.com/api/v1/instagram/profile",
    params={"username": "nasa", "api_key": os.environ["CHOCO_API_KEY"]},
    timeout=30,
)
data = resp.json()
print(data["username"], data["followers"], data["biography"])

In my runs this returned the same profile fields the open-source libraries parse (username, followers, biography, mediacount) without a login prompt or a proxy to configure. For professional accounts it also surfaces the public business_email and business_phone_number fields, which is what a basic Instagram email scraper in Python or an Instagram phone number scraper reads, and it does so without a registered Instagram API key. The endpoint is authenticated, so a request without a valid key returns a not-found response, which is expected. You can get an API key here and point the same pattern at the profile endpoint, the follower endpoint, or the email and lead endpoint.

The honest tradeoff: for a one-off pull of a few public profiles, Instaloader from the command line is free and fine. Once you need thousands of records, continuous collection, or contact fields across many accounts, the maintenance of logins and proxies costs more time than the API does money. The deeper how-to for the DIY path lives in my guide on scraping Instagram with Python, and the managed options are compared in the best Instagram scrapers roundup.

What about the older or Node-based Instagram scrapers on GitHub?

The older and Node-based Instagram scrapers on GitHub mostly do not work reliably in 2026, because they were abandoned before Instagram’s recent rate-limit and doc_id changes. They still show up in search results for “github instagram scraper,” so it is worth knowing which ones to skip and why.

The lesson from the graveyard is that an Instagram scraper is only as current as its last commit, because Instagram changes the surface every few weeks. Before you collect anything, it is worth knowing where the legal line sits, which I cover in is scraping Instagram legal. Meta’s Terms of Service, section 3.2, state that you may not access or collect data from its products using automated means without prior permission, and US scraping case law from hiQ Labs v. LinkedIn addresses public data specifically. Read both before pointing any of these tools at logged-in or private content.

FAQ

What is the best open-source Instagram scraper on GitHub in 2026?

For Python, Instaloader is the most maintained and widely used open-source Instagram scraper, with about 12.6k stars and a release in March 2026. It downloads public profiles, posts, comments, captions, and hashtags from the CLI or as a library. instagrapi is the main alternative when you need the private API surface (DMs, insights, uploads), but it requires a logged-in account.

Is arc298/instagram-scraper still working?

No. The arc298/instagram-scraper repository now returns a 404 on GitHub and its API endpoint returns the same Not Found from the GitHub API, so the original command-line tool is no longer installable from that source. It was the most-starred Instagram CLI scraper for years. Forks still circulate, but they inherit the same Instagram rate limits that broke the original.

Can I scrape Instagram without logging in?

You can scrape a small number of public profiles and posts without logging in, but Instagram caps anonymous access aggressively. Community reports and the Instaloader troubleshooting docs describe 401 'Please wait a few minutes' and 429 'Too Many Requests' responses after only a handful of unauthenticated calls from a single IP. Logging in raises the ceiling and also raises the risk to that account.

Is there an open-source Instagram email scraper on GitHub?

Some GitHub projects parse the public business_email and business_phone_number fields that Instagram exposes on professional accounts, so a basic open-source Instagram email scraper is possible. Coverage is thin because most personal accounts do not expose those fields, and harvesting contact data carries GDPR and platform-policy exposure. I cover the contact-data tools in my Instagram email lead scraper roundup.

Will using these GitHub scrapers get my Instagram account banned?

Tools that log in (instagrapi, Instaloader with --login) can trigger checkpoints, temporary action blocks, or bans on the account they authenticate with, especially at speed. Meta's Terms in section 3.2 prohibit collecting data by automated means without prior permission. Use a throwaway account you can afford to lose, keep request rates low, and read my notes on avoiding Instagram scraping blocks before you run anything at volume.

LH
Lena Hoff
I've built Instagram data pipelines for years. On instagramscraperapi.com I run Instagram scraping methods against live pages and publish what actually holds up.