Skip to content

Python guide

Export Instagram followers
to CSV with Python.
One script. No Instagram login.

An Instagram follower export in one Python script: every follower’s handle, name and private and verified flags, page by page into a CSV. One API key. No Instagram login, cookies or browser extension.

  • 10 creditsper page
  • 25followers on each recorded page
  • 0Instagram logins
import csv
import os
import requests

API_URL = "https://www.monocrawl.com/v1/instagram/profile-followers"
HEADERS = {"x-api-key": os.environ["MONOCRAWL_API_KEY"]}


def get_followers(handle, max_pages=40):
    params = {"handle": handle, "limit": 50}
    for _ in range(max_pages):
        body = requests.get(API_URL, params=params, headers=HEADERS, timeout=60).json()
        if not body.get("success"):
            raise RuntimeError(body["error"]["message"])
        data = body["data"]
        if data.get("is_sample"):
            print("Instagram shares a sample of this account's followers, not the full list")
        yield from data["items"]
        if not data.get("has_more") or not data.get("cursor"):
            break
        params = {"handle": handle, "limit": 50, "cursor": data["cursor"]}


with open("followers.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["handle", "name", "private", "verified", "url", "id"])
    for follower in get_followers("fruttoforastero"):
        writer.writerow([follower["handle"], follower["name"], follower["private"],
                         follower["verified"], follower["url"], follower["id"]])

$ python followers.py

GET /v1/instagram/profile-followers handle=fruttoforastero · page 1

✓ 25 followers · 10 credits · has_more: true

✓ pages 2–3: 50 more followers · 20 credits · no repeats

↻ following the cursor until has_more is false or max_pages

✓ followers.csv · up to 40 pages ≈ 1,000 followers for 400 credits (estimate)

Replay of a real call, recorded 26 Sep 2026

Four steps

Copy, paste, run.
See what each step returns.

Terminal
export MONOCRAWL_API_KEY="mn_your_key_here"
pip install requests

What you get

MONOCRAWL_API_KEY=mn_••••••••Free plan · 1,000 credits a month · No card

What comes back

One importer.
Real followers.

Frutto Forastero imports green coffee to Barcelona and Buenos Aires, and has 5,628 Instagram followers. Three recorded pages returned 75 of them, 25 a page, with no repeats. At least 24 are businesses: roasters, cafés, importers and suppliers. 10 of them are below.

  • handleThe follower’s username
  • nameTheir display name, if they set one
  • privateTrue when their own account is private
  • verifiedTrue for a verified account
  • urlTheir profile on instagram.com
  • idInstagram’s numeric account id
  • avatar_urlTheir profile picture
  1. MALPORTADOS COFFEE ROASTERS 🔥

    @malportadocoffee

    PublicVerified
  2. Copack Coffee Packaging

    @copackcoffee

    Public
  3. Rastro Coffee

    @rastrocoffee

    Public
  4. JavaAromaTrade

    @javaaromatrade

    PublicVerified
  5. OPUESTO

    @opuesto.tostadores

    Public
  6. La Mampana | Café de Especialidad

    @lamampanaroasters

    Public
  7. Cumbres Tostadores - Café de especialidad

    @cumbrestostadores

    Public
  8. Drippin' Coffee Roasters

    @drippin.coffeeroasters

    Public
  9. Montreal Coffee Brokerage

    @montrealcoffeebrokerage

    Public
  10. Servicio Técnico De Máquinas

    @cafeteria.tecnica

    PublicVerified
Show the JSON
{
  "success": true,
  "data": {
    "has_more": true,
    "cursor": "mlc1.…",
    "is_sample": false,
    "items": [
      {
        "handle": "malportadocoffee",
        "name": "MALPORTADOS COFFEE ROASTERS 🔥",
        "verified": true,
        "private": false,
        "url": "https://www.instagram.com/malportadocoffee/",
        "image": "/guides/instagram-followers/malportadocoffee.webp",
        "page": 2
      },
      {
        "handle": "copackcoffee",
        "name": "Copack Coffee Packaging",
        "verified": false,
        "private": false,
        "url": "https://www.instagram.com/copackcoffee/",
        "image": "/guides/instagram-followers/copackcoffee.webp",
        "page": 1
      },
      {
        "handle": "rastrocoffee",
        "name": "Rastro Coffee",
        "verified": false,
        "private": false,
        "url": "https://www.instagram.com/rastrocoffee/",
        "image": "/guides/instagram-followers/rastrocoffee.webp",
        "page": 1
      },
      {
        "handle": "javaaromatrade",
        "name": "JavaAromaTrade",
        "verified": true,
        "private": false,
        "url": "https://www.instagram.com/javaaromatrade/",
        "image": "/guides/instagram-followers/javaaromatrade.webp",
        "page": 1
      },
      {
        "handle": "opuesto.tostadores",
        "name": "OPUESTO",
        "verified": false,
        "private": false,
        "url": "https://www.instagram.com/opuesto.tostadores/",
        "image": "/guides/instagram-followers/opuesto-tostadores.webp",
        "page": 1
      },
      {
        "handle": "lamampanaroasters",
        "name": "La Mampana | Café de Especialidad",
        "verified": false,
        "private": false,
        "url": "https://www.instagram.com/lamampanaroasters/",
        "image": "/guides/instagram-followers/lamampanaroasters.webp",
        "page": 3
      },
      {
        "handle": "cumbrestostadores",
        "name": "Cumbres Tostadores - Café de especialidad",
        "verified": false,
        "private": false,
        "url": "https://www.instagram.com/cumbrestostadores/",
        "image": "/guides/instagram-followers/cumbrestostadores.webp",
        "page": 3
      },
      {
        "handle": "drippin.coffeeroasters",
        "name": "Drippin' Coffee Roasters",
        "verified": false,
        "private": false,
        "url": "https://www.instagram.com/drippin.coffeeroasters/",
        "image": "/guides/instagram-followers/drippin-coffeeroasters.webp",
        "page": 3
      },
      {
        "handle": "montrealcoffeebrokerage",
        "name": "Montreal Coffee Brokerage",
        "verified": false,
        "private": false,
        "url": "https://www.instagram.com/montrealcoffeebrokerage/",
        "image": "/guides/instagram-followers/montrealcoffeebrokerage.webp",
        "page": 2
      },
      {
        "handle": "cafeteria.tecnica",
        "name": "Servicio Técnico De Máquinas",
        "verified": true,
        "private": false,
        "url": "https://www.instagram.com/cafeteria.tecnica/",
        "image": "/guides/instagram-followers/cafeteria-tecnica.webp",
        "page": 1
      }
    ]
  }
}

Cost

10 credits a page.
Nothing for failures.

Every page of followers costs 10 credits; each recorded page returned 25. That is about 400 credits per 1,000 followers. Slide to see what an export costs.

400credits, 10 per page
$0a month: the free plan covers it, no card
2exports like this a month on the free plan

Estimated at 25 followers a page, as on every recorded page. Failed calls are free.

Two more lists

Who they follow,
and each follower’s profile.

Who the account follows

The same loop exports the accounts it follows: call instagram/profile-following with the same handle and cursor, 10 credits a page.

following.py
FOLLOWING_URL = "https://www.monocrawl.com/v1/instagram/profile-following"

body = requests.get(FOLLOWING_URL, params={"handle": "fruttoforastero", "limit": 50}, headers=HEADERS, timeout=60).json()
for account in body["data"]["items"]:
    print(account["handle"], account["verified"])

Follower counts and bios

A follower row carries the handle, name and flags. For a follower’s own follower count, following count and bio, call instagram/profile with their handle, 1 credit each.

profiles.py
PROFILE_URL = "https://www.monocrawl.com/v1/instagram/profile"

with open("followers.csv", encoding="utf-8") as file:
    handles = [row["handle"] for row in csv.DictReader(file)]

for handle in handles[:10]:
    body = requests.get(PROFILE_URL, params={"handle": handle}, headers=HEADERS, timeout=60).json()
    profile = body["data"]
    print(handle, profile["followers"], profile["following"], profile["bio"])

Errors and rate limits

A failed call returns success: false with an error type and message, and costs nothing. On HTTP 429, wait and try again.

Rate limits by plan
followers.py
import time

def get_page(params, attempts=5):
    for attempt in range(attempts):
        response = requests.get(API_URL, params=params, headers=HEADERS, timeout=60)
        if response.status_code != 429:
            return response.json()
        time.sleep(2 ** attempt)
    raise RuntimeError("Still rate limited; try again later")

Other platforms

Same loop.
Swap the endpoint.

The same key exports followers on other platforms. Each endpoint’s reference lists its fields and paging.

Questions

Exporting Instagram followers,
answered.

Do I need an Instagram account, cookies or a browser extension?

No. You call Monocrawl with your API key and get the followers back as JSON. Your own Instagram account is never involved.

Can I export any account’s followers?

Any public account. Regular accounts page through in full: all 3 recorded pages for Frutto Forastero came back with has_more set to true and no repeats. For verified and very large accounts, Instagram itself shares only a sample of followers, and the response marks it with is_sample: true.

What does it cost?

10 credits for each page of followers. At 25 a page, that is about 400 credits per 1,000 followers, so the free plan’s 1,000 credits a month cover about 2,500 followers. All 5,628 of Frutto Forastero’s followers would be about 2,260 credits. Failed calls are free.

Does each follower come with their follower count and bio?

A follower row has the handle, name, private and verified flags, profile URL and picture. For counts and bio, call instagram/profile with each handle, 1 credit each.

Can I export who an account follows?

Yes. instagram/profile-following takes the same handle and cursor, 10 credits a page.

Does Instagram have an official API for this?

Meta’s Instagram API gives a professional account its follower count and audience breakdowns, not a list of follower usernames. Our Instagram data API comparison sets out the official routes and the main providers side by side.

Start free

Followers from any public Instagram account.
10 credits a page.

1,000 free credits every month. No card required.

Get a free API key