Inside SeeWhoUnfollowedYou: The Zero-Cloud Intelligence Agent

How a vanilla JavaScript Chrome extension uses local session cookies and undocumented GraphQL endpoints to render sketchy analytics SaaS obsolete.

6 min read • View on GitHub • More from evinjohnn

A vintage iron safe containing a mechanical spider spinning a web among paper files.
The extension operates as a secure, local-only agent, keeping all data extraction confined to the user's machine.
Key Takeaways

The Credential Harvesting Trap

The ecosystem of social media analytics tools is notoriously predatory. Most 'who unfollowed me' applications require users to hand over their account passwords to a third-party server. This exposes users to significant security risks and frequent account bans.

SeeWhoUnfollowedYou takes the opposite approach. It operates entirely as a local intelligence agent, never letting your data leave your machine.

FeatureTraditional SaaS TrackersSeeWhoUnfollowedYou
ArchitectureCloud DatabaseLocal Storage
AuthenticationOAuth or PasswordsLocal Session Cookies
API UsageOfficial Paid APIInternal GraphQL
CostMonthly SubscriptionFree Open Source

<p align="center"> A privacy-first Chrome extension that helps you track unfollowers, detect "snakes", and analyze your account growth with a sleek, dark-mode UI. </p>

Project README, Repository documentation · evinjohnn/SeeWhoUnfollowedYou README

The Benevolent Parasite Architecture

Instead of asking for a login, the extension acts as a benevolent parasite. It uses the utils.js file to grab the ds_user_id cookie directly from the user's active browser session.

With this cookie, the background worker sends requests to Instagram's internal, undocumented GraphQL endpoints using hardcoded query hashes. This bypasses the need for official API keys entirely.

The zero-cloud data loop bypasses external servers entirely.

The Psychology of the Progress Bar

Web scraping is inherently unpredictable. Rate limits and pagination make a linear progress bar nearly impossible to calculate accurately.

To solve this, the background.js orchestrator employs a 4-Phase Monotonic Progress System. When data fetching slows down, the UI enters a 'Slow Burn' phase. The progress bar continues to creep forward at a microscopic pace, preventing the user from assuming the application has frozen.

A close-up of a pressure gauge with complex gears restricting the needle's movement.
The 'Slow Burn' phase deliberately restrains UI progress to mask network latency.

Calculating the Diff

The actual value of the extension lies in its local state machine. The application stores previous scan results in chrome.storage.local.

When a new scan completes, the popup instantly compares the new follower list against the stored history. It filters the user base into distinct categories (strangers who never followed back, and users who recently unfollowed the account) without ever hitting an external database.