al-kilic/WhoUnfollowed

Privacy-first Instagram follower analysis. Upload your own data export, see who doesn't follow back. No password, no server.

TypeScript

2

267 commits

updated Sep 29, 2026

See the code

See what people are saying

SourceMessageScoreDate

Update on WhoUnfollowed, my no-password Instagram unfollower tracker: now with Threads support and an account health dashboard (r/SideProject)

Posted this here a while back. Small update since then: it now reads Threads exports as well as Instagram and I added a paid dashboard called Radar. Health score, growth chart over time, how long you've been following people who never followed back, pending requests sorted by wait time. Also picked…

1

Sep 30, 2026

README

WhoUnfollowed

See who doesn't follow you back on Instagram. Open source, so you can check that for yourself.

Upload the data export Instagram already gives you. Your browser reads it locally and shows the full picture in seconds. No password, no server, no login.

Web app license: AGPL-3.0 Core license: MPL-2.0 Built with Next.js 15 TypeScript strict Self-hosted

whounfollowed.co · How it works · Privacy · Self-hosting


Why this exists

Most Instagram follower trackers ask for your password. That breaks Instagram's terms of service, puts your account at risk, and hands your credentials to a stranger.

WhoUnfollowed takes a different path. Instagram's Download Your Information feature (mandated by GDPR) gives you a ZIP of your own follower and following data. WhoUnfollowed reads that file entirely inside your browser. There is no upload, no server round trip, and no account required on the free plan.

You export data you already own. We just read it. And unlike every closed-source tracker in this space, you don't have to take that claim on faith: the web app is AGPL-3.0 and the parser that touches your data is MPL-2.0, both public in this repository. Read the code instead of trusting a privacy policy.

What you get

  • The complete list of accounts you follow that don't follow you back
  • A Radar health score with follow ratio and a growth timeline
  • Snapshot comparison to see exactly who unfollowed you between two dates
  • One-click CSV export of any list
  • On the free plan, zero bytes ever leave your device

How it works

  1. Request your data from Instagram (Followers and Following, JSON format, all time)
  2. Download the ZIP that Instagram emails you, usually within minutes
  3. Drop it on whounfollowed.co
  4. The browser parses it in roughly two seconds and renders the full report
Typical parse time~2 seconds
Data sent to a server (free plan)0 bytes
Instagram API calls0
Passwords required0

Step-by-step export guide: How to export your Instagram data.

Features

Free, no signup

  • Full non-followers list from a single export
  • CSV export
  • Runs entirely client-side

Pro

  • Unlimited snapshot history
  • Radar: health score, follow-age tracking, pending-follow detection
  • Snapshot comparison across any two dates
  • Follower growth charts
  • Triage workflow
  • Encrypted cloud sync (in progress)

Mobile (planned)

  • iOS and Android, included with Pro
  • Works offline
  • Share results as an image

Tech stack

A TypeScript monorepo managed with Turborepo and pnpm workspaces.

LayerTechnology
FrameworkNext.js 15 (App Router, Turbopack)
LanguageTypeScript 5 (strict)
UIReact 19, Tailwind CSS v4, Framer Motion
ComponentsBase UI, Lucide, Recharts
Client stateZustand
Local storageDexie (IndexedDB)
ToolingTurborepo, pnpm, ESLint, Prettier, Husky
InfrastructureHetzner Cloud, Docker, Caddy, PostgreSQL 16

Requires Node ≥ 20 and pnpm ≥ 9.

Repository layout

WhoUnfollowed/
├── apps/
│   └── web/            # Next.js 15 web app (AGPL-3.0)
├── packages/
│   ├── core/           # ZIP parsing and follower-diff engine (MPL-2.0)
│   └── ui/             # Shared component library
├── docs/               # Format notes and architecture docs
├── turbo.json          # Turborepo pipeline
└── pnpm-workspace.yaml # Workspace definition

Getting started

Prerequisites

  • Node.js ≥ 20
  • pnpm ≥ 9 (npm install -g pnpm)

Install and run

git clone https://github.com/al-kilic/WhoUnfollowed.git
cd WhoUnfollowed
pnpm install

# Start every app in dev mode (Turbopack)
pnpm dev
# Web app: http://localhost:3000

Common scripts

pnpm build       # Build all packages and apps
pnpm typecheck   # Type-check the workspace
pnpm lint        # Lint
pnpm test        # Run the test suite (Vitest)
pnpm clean       # Remove build artifacts

Privacy

The privacy model is short enough to fit here in full:

  • The ZIP is read by JavaScript inside your browser tab.
  • On the free plan, nothing is stored and nothing is sent anywhere.
  • On Pro, only the snapshots you explicitly save are stored, encrypted, so you can compare them across devices.
  • No Instagram login. No third-party API calls. No credential storage.

The parsing engine lives in packages/core under the MPL-2.0 license, so anyone can read exactly what happens to their data.

Full policy: whounfollowed.co/privacy.

Self-hosting

The full web app is open source. Clone the repo, copy the variables from .env.example, and run pnpm dev (or build the Docker image for production).

Included out of the box: the entire free tier, plus Radar, snapshot comparison, the triage workflow, and CSV export, all running locally.

Requires backend infrastructure: Pro features depend on a server by design. Cross-device snapshot history, email alerts on new unfollowers, and long-term trend charts store data server-side and will not work in a purely local build unless you run the backend yourself.

Roadmap

  • Single-snapshot non-follower analysis
  • CSV export
  • Radar health score
  • Snapshot comparison (who unfollowed between dates)
  • Follower growth charts
  • Light and dark themes
  • Mobile-responsive layout
  • Encrypted cloud sync for Pro snapshots
  • iOS app
  • Android app

Release notes: whounfollowed.co/changelog.

Contributing

The project is under active development. Issues for bugs and feature requests are welcome, and so are pull requests. For anything substantial, please open an issue first so we can align on direction.

License

This repository uses an open-core model:

  • Web app (apps/web): AGPL-3.0. If you run a modified version as a network service, you must publish your source.
  • Core engine (packages/core): MPL-2.0. Use it freely in any project. Modifications to the licensed files stay open, the rest of your code does not have to.

Contact

Built by Alan Kılıç · aekilicc@gmail.com

Not affiliated with Instagram or Meta.

client-side
follower-tracker
gdpr
instagram
nextjs
open-core
privacy
self-hosted
typescript
unfollowers

al-kilic/WhoUnfollowed

Privacy-first Instagram follower analysis. Upload your own data export, see who doesn't follow back. No password, no server.

TypeScript

2

267 commits

updated Sep 29, 2026

See the code

See what people are saying

SourceMessageScoreDate

Update on WhoUnfollowed, my no-password Instagram unfollower tracker: now with Threads support and an account health dashboard (r/SideProject)

Posted this here a while back. Small update since then: it now reads Threads exports as well as Instagram and I added a paid dashboard called Radar. Health score, growth chart over time, how long you've been following people who never followed back, pending requests sorted by wait time. Also picked…

1

Sep 30, 2026

README

WhoUnfollowed

See who doesn't follow you back on Instagram. Open source, so you can check that for yourself.

Upload the data export Instagram already gives you. Your browser reads it locally and shows the full picture in seconds. No password, no server, no login.

Web app license: AGPL-3.0 Core license: MPL-2.0 Built with Next.js 15 TypeScript strict Self-hosted

whounfollowed.co · How it works · Privacy · Self-hosting


Why this exists

Most Instagram follower trackers ask for your password. That breaks Instagram's terms of service, puts your account at risk, and hands your credentials to a stranger.

WhoUnfollowed takes a different path. Instagram's Download Your Information feature (mandated by GDPR) gives you a ZIP of your own follower and following data. WhoUnfollowed reads that file entirely inside your browser. There is no upload, no server round trip, and no account required on the free plan.

You export data you already own. We just read it. And unlike every closed-source tracker in this space, you don't have to take that claim on faith: the web app is AGPL-3.0 and the parser that touches your data is MPL-2.0, both public in this repository. Read the code instead of trusting a privacy policy.

What you get

  • The complete list of accounts you follow that don't follow you back
  • A Radar health score with follow ratio and a growth timeline
  • Snapshot comparison to see exactly who unfollowed you between two dates
  • One-click CSV export of any list
  • On the free plan, zero bytes ever leave your device

How it works

  1. Request your data from Instagram (Followers and Following, JSON format, all time)
  2. Download the ZIP that Instagram emails you, usually within minutes
  3. Drop it on whounfollowed.co
  4. The browser parses it in roughly two seconds and renders the full report
Typical parse time~2 seconds
Data sent to a server (free plan)0 bytes
Instagram API calls0
Passwords required0

Step-by-step export guide: How to export your Instagram data.

Features

Free, no signup

  • Full non-followers list from a single export
  • CSV export
  • Runs entirely client-side

Pro

  • Unlimited snapshot history
  • Radar: health score, follow-age tracking, pending-follow detection
  • Snapshot comparison across any two dates
  • Follower growth charts
  • Triage workflow
  • Encrypted cloud sync (in progress)

Mobile (planned)

  • iOS and Android, included with Pro
  • Works offline
  • Share results as an image

Tech stack

A TypeScript monorepo managed with Turborepo and pnpm workspaces.

LayerTechnology
FrameworkNext.js 15 (App Router, Turbopack)
LanguageTypeScript 5 (strict)
UIReact 19, Tailwind CSS v4, Framer Motion
ComponentsBase UI, Lucide, Recharts
Client stateZustand
Local storageDexie (IndexedDB)
ToolingTurborepo, pnpm, ESLint, Prettier, Husky
InfrastructureHetzner Cloud, Docker, Caddy, PostgreSQL 16

Requires Node ≥ 20 and pnpm ≥ 9.

Repository layout

WhoUnfollowed/
├── apps/
│   └── web/            # Next.js 15 web app (AGPL-3.0)
├── packages/
│   ├── core/           # ZIP parsing and follower-diff engine (MPL-2.0)
│   └── ui/             # Shared component library
├── docs/               # Format notes and architecture docs
├── turbo.json          # Turborepo pipeline
└── pnpm-workspace.yaml # Workspace definition

Getting started

Prerequisites

  • Node.js ≥ 20
  • pnpm ≥ 9 (npm install -g pnpm)

Install and run

git clone https://github.com/al-kilic/WhoUnfollowed.git
cd WhoUnfollowed
pnpm install

# Start every app in dev mode (Turbopack)
pnpm dev
# Web app: http://localhost:3000

Common scripts

pnpm build       # Build all packages and apps
pnpm typecheck   # Type-check the workspace
pnpm lint        # Lint
pnpm test        # Run the test suite (Vitest)
pnpm clean       # Remove build artifacts

Privacy

The privacy model is short enough to fit here in full:

  • The ZIP is read by JavaScript inside your browser tab.
  • On the free plan, nothing is stored and nothing is sent anywhere.
  • On Pro, only the snapshots you explicitly save are stored, encrypted, so you can compare them across devices.
  • No Instagram login. No third-party API calls. No credential storage.

The parsing engine lives in packages/core under the MPL-2.0 license, so anyone can read exactly what happens to their data.

Full policy: whounfollowed.co/privacy.

Self-hosting

The full web app is open source. Clone the repo, copy the variables from .env.example, and run pnpm dev (or build the Docker image for production).

Included out of the box: the entire free tier, plus Radar, snapshot comparison, the triage workflow, and CSV export, all running locally.

Requires backend infrastructure: Pro features depend on a server by design. Cross-device snapshot history, email alerts on new unfollowers, and long-term trend charts store data server-side and will not work in a purely local build unless you run the backend yourself.

Roadmap

  • Single-snapshot non-follower analysis
  • CSV export
  • Radar health score
  • Snapshot comparison (who unfollowed between dates)
  • Follower growth charts
  • Light and dark themes
  • Mobile-responsive layout
  • Encrypted cloud sync for Pro snapshots
  • iOS app
  • Android app

Release notes: whounfollowed.co/changelog.

Contributing

The project is under active development. Issues for bugs and feature requests are welcome, and so are pull requests. For anything substantial, please open an issue first so we can align on direction.

License

This repository uses an open-core model:

  • Web app (apps/web): AGPL-3.0. If you run a modified version as a network service, you must publish your source.
  • Core engine (packages/core): MPL-2.0. Use it freely in any project. Modifications to the licensed files stay open, the rest of your code does not have to.

Contact

Built by Alan Kılıç · aekilicc@gmail.com

Not affiliated with Instagram or Meta.

client-side
follower-tracker
gdpr
instagram
nextjs
open-core
privacy
self-hosted
typescript
unfollowers

Languages

TypeScript

98.8%