Skip to content
v2.0 · Native macOS · MIT License

ig-scopé

Enter any public Instagram handle. Click Start. Get a CSV of every follower and who they follow. Native Mac app — no browser, no terminal.

No API keys. No paid tools. No accounts to create. Double-click and go.

Why This Exists

I built the first version of this during an active federal housing investigation. I needed the follower and following lists of two property management Instagram accounts — 1,500+ users combined — as evidence for court filings. The tools that exist either cost money, require API access Instagram no longer grants, or break every other week.

So I vibe coded it. With AI. Through a lot of trial and error.

v1 was a Python script that opened Chrome to localhost and ran a web UI. It worked, but running a browser tab as a GUI for a terminal script felt wrong and ate 2GB of RAM doing it.

v2 rewrites the whole thing as a native macOS SwiftUI app. Same features, same dark aesthetic — but now it's an actual application. Double-click and go. No Chrome, no Terminal, no Python runtime hogging memory. The entire conversion from Python to Swift was done in a single Claude Code session.

I'm releasing it free because access to information shouldn't require a PI firm or an e-discovery vendor billing $300/hour.

What It Does

📋

Export Lists

Pull followers and/or following for any public account. Pick your fields: username, full name, bio, private/public status, profile URL. CSV or JSON — your call.

🔀

Overlap Comparison

Run two or more accounts and see who follows both. Shared followers, unique to each — separate output files generated automatically.

📊

Live Controls

Progress bar with ETA. Adjustable rate limiting mid-export — change delay, batch size, cooldown without restarting. Pause, resume, stop with partial saves.

What Changed in v2

v1 was a Python script. It embedded an entire HTML/CSS/JS web UI, spun up a local HTTP server on port 5151, and opened Chrome to render the interface. You had to keep Terminal open, install two pip packages, and watch Chrome eat memory running what was essentially a fancy localhost page.

v2 is a native SwiftUI app. One main.swift file, compiled with swiftc. No browser window. No terminal babysitting. No instaloader. It talks directly to Instagram's GraphQL API via URLSession — the same API Instagram's own web app depends on — which makes it more stable than wrapping a third-party library that can break when Instagram changes something.

It also supports five browsers now — Safari, Chrome, Firefox, Edge, and Opera — instead of the original three.

v1 (Python)v2 (Swift)
UIHTML/CSS/JS in ChromeNative SwiftUI
Instagram APIinstaloader (pip)Direct GraphQL via URLSession
Dependencies2 pip packages1 pip package
Runs asTerminal + browser tabStandard .app
BrowsersSafari, Chrome, FirefoxSafari, Chrome, Firefox, Edge, Opera
Min macOS10.1513.0

What It Doesn't Do

  • It won't work on private accounts you don't follow
  • It can't bypass Instagram's rate limits — it works within them
  • It doesn't store credentials — it reads your existing browser cookies
  • It doesn't phone home, track anything, or touch anything beyond the CSV on your Desktop

Output Format

Choose CSV, JSON, or both. Toggle fields on or off before export.

usernamefull_namebiois_privateprofile_url
janedoeJane DoeDog mom. Coffee addict.Falseinstagram.com/janedoe
jsmithJohn SmithTrueinstagram.com/jsmith

Platform

macOS 13.0+ only. Built on a Mac, for Mac users, because Mac users have the fewest free tools like this available. It's a native .app — double-click it like any other application on your Mac.

Setup

1

Install one package

pip3 install browser_cookie3

Python 3 ships with macOS. This is the only dependency — it handles cookie extraction from all five browsers so you don't have to.

2

Log into Instagram

In Safari, Chrome, Firefox, Edge, or Opera. The app reads your existing session cookie — no credentials entered, nothing stored.

3

Open the app

Double-click ig-scopé. Select your browser, enter accounts, pick your options, hit Start. Timestamped CSVs land on your Desktop.

Keychain access: macOS will ask for permission to read browser cookies on first run. Click Always Allow. It won't ask again.

Why browser_cookie3? We tried going fully zero-dependency in Swift — custom Safari binary cookie parser, Chrome AES-128-CBC decryption via CommonCrypto, Keychain reads via Security framework, SQLite3 for cookie DBs. Three iterations of debugging IV mismatches, TCC permission blocks, and encoding failures later, we ripped it all out and shelled out to browser_cookie3. Sometimes the right engineering decision is knowing when to stop engineering.

Rate Limiting

The defaults are tuned to avoid Instagram's rate limits for accounts with a few thousand followers. For larger accounts, bump the delays up from the app — delay, batch size, and cooldown are all adjustable mid-export without restarting.

If Instagram blocks you, wait 10–15 minutes and try again. Your session isn't burned — they just throttle temporarily.

Use Cases

Legal Discovery Document social media connections for litigation
Journalism Map follower overlap between accounts of interest
OSINT Open source intelligence gathering
Research Export audience data for analysis
Competitive Analysis Understand brand audience overlap
Accountability When the receipts matter

Tech Stack

Deliberately minimal.

  • Swift — single main.swift file, compiled with swiftc
  • SwiftUI — native macOS interface, dark-themed to match the original aesthetic
  • URLSession — direct Instagram GraphQL API calls, no third-party wrappers
  • browser_cookie3 — reads session cookies from Safari, Chrome, Firefox, Edge, Opera

One file. ~1,000 lines of Swift. One pip dependency.

Built Under Pressure, Rebuilt Because It Bothered Me

v1 was built with Claude by Anthropic during an active federal investigation. Two hours of yelling at an AI that added Flask nobody asked for, broke a .command file, pointed at Safari when it blocks localhost, and guessed wrong on the session bug three times. A dev shop would've billed 8 hours. An e-discovery vendor would've billed 40 and delivered the same CSV.

v2 exists because running a Chrome tab as a GUI for a Python script bugged me. The Python worked. The evidence shipped. But a browser eating 2GB of RAM to render some buttons and a progress bar? No. So I had Claude Code rewrite the whole thing as a native Mac app in a single session. Same features, same aesthetic, none of the Chrome.

This tool is one small piece of a larger operation. Across federal court filings, NLRB evidence packages, DOJ witness prep, and OSINT work, Claude has replaced an estimated 170–230 hours of attorney-equivalent work$68,000–$92,000 at standard rates, pre-discovery.

They operate on billable hours. We operate on internet time.

Kaleb Gilvin — Candyland Consulting LLC
@kag_land · kg@candylandconsulting.com

Shipped under pressure. Rebuilt because it bugged me. Free forever.

Get ig-scopé

macOS 13.0+. MIT License. Native SwiftUI app.

Free to use, modify, and distribute.