GitFollow is a desktop app that finds real, recently active GitHub developers in your areas of interest, follows them on your behalf, and automatically cleans up connections that never became mutual. Every candidate passes an 8-signal quality filter before being followed - no bots, no follow-farmers, no inactive accounts.
ToS notice: Automated following falls under GitHub's Acceptable Use Policies. GitFollow respects all rate limits and identifies itself via a proper
User-Agentheader, but the follow/unfollow mechanic is still subject to those policies. Use conservatively and at your own risk.
Windows - no Python needed:
- Download
GitFollow.exefrom Releases - Double-click - no install required
- Open Settings, enter your GitHub token and username, click Save Settings
- Open Setup and click Re-check to confirm everything is ready
- Click Run → Run Follow
Need a token? Click Create Token in the Setup tab, or visit github.com/settings/tokens - only the
user:followscope is required.
macOS / Linux - run from source:
git clone https://github.com/Andrew-most-likely/gitfollow
cd gitfollow
pip install -r requirements.txt
cp .env.example .env # fill in GH_TOKEN and GH_USERNAME
python gui.py # launch the desktop app
# or headless:
python gitfollow.py- Smart candidate sourcing - pulls stargazers from popular repos in your chosen topics; people who star real projects are almost always real developers
- 8-signal quality filter - screens every candidate before following (see below)
- 7-day quality cache - results are stored locally so repeat runs skip already-checked accounts entirely, preserving API quota
- Auto-unfollow - unfollows non-reciprocators after a configurable window (default 24 hours)
- Quality cleanup - optional pass to unfollow existing follows that have gone inactive or botty
- People tab - browse your following and followers with timestamps, mutual status, and multi-select unfollow
- Mutual follow tracking - never unfollows someone who follows you back
- Whitelist - specific accounts that are always protected from unfollowing
- Desktop GUI - setup wizard, live stats dashboard, run controls, no terminal needed
- Windows exe - single download, zero Python required
This is what separates GitFollow from simpler scripts. Before following anyone, every candidate is checked against 8 independent signals:
| Signal | What it catches |
|---|---|
| Bot-like username pattern | All-numeric names, accounts with bot, mirror, crawler, scraper etc. |
| Account type | Organizations and GitHub-flagged bots are skipped |
| Minimum followers | Accounts with no social presence |
| Maximum repo count | Mass-forking mirror bots with hundreds of auto-cloned repos |
| Following/followers ratio | Follow-farmers who follow thousands but have few followers back |
| Minimum account age | Throwaway and spam accounts less than 30 days old |
| Profile completeness | Accounts with no name, bio, or email - almost always unconfigured bots |
| Recent push event | Confirms the account actually committed code recently - not just a profile edit |
Results are cached for 7 days in state.json. A quality-checked account is never re-evaluated until the cache expires, keeping API usage minimal on repeat runs.
Browse and manage your network without running a full pass.
- Following - full list with relative timestamps showing how long ago you followed each account
- Followers - everyone who follows you, with mutual accounts surfaced to the top
- Multi-select unfollow - checkboxes, Select Page / Deselect All, confirm and unfollow in bulk (selection applies to the current page only)
- Paginated - 50 accounts per page for fast rendering even with large lists
- Usernames are clickable links that open the GitHub profile in your browser
All settings are available in the GUI Settings tab. When running headlessly, set them as environment variables or in a .env file.
| Variable | Default | Description |
|---|---|---|
GH_TOKEN |
required | GitHub personal access token (user:follow scope) |
GH_USERNAME |
required | Your GitHub username |
FOLLOW_LIMIT |
150 |
Max new follows per run. Keep at or below 150/day. |
UNFOLLOW_HOURS |
24 |
Hours before unfollowing a non-reciprocator |
ACTIVITY_DAYS |
30 |
Max days since last commit to consider a user active |
MIN_FOLLOWERS |
1 |
Minimum follower count a candidate must have |
MAX_REPOS |
500 |
Skip accounts with more public repos than this |
MAX_FF_RATIO |
10.0 |
Skip accounts whose following/followers ratio exceeds this |
MIN_ACCOUNT_AGE_DAYS |
30 |
Skip accounts newer than this many days |
CACHE_DAYS |
7 |
Days to cache quality check results |
QUALITY_UNFOLLOW |
false |
Set to true to unfollow existing follows failing quality criteria |
WHITELIST |
- | Comma-separated usernames to never unfollow |
STATE_FILE |
data/state.json |
Path to the state file |
SEARCH_MIN_FOLLOWERS |
10 |
Pre-filter search candidates by minimum follower count |
SEARCH_MAX_FOLLOWERS |
1000 |
Pre-filter search candidates by maximum follower count |
- Queries GitHub for popular repos in curated tech topics (python, rust, go, ML, etc.)
- Pulls stargazers from those repos at random pages - avoiding the same early followers every run
- Falls back to GitHub user search if the stargazer pool is thin
- Runs every candidate through the 8-signal quality filter (with caching)
- Follows up to
FOLLOW_LIMITqualifying users with a polite delay between each
- Checks every account followed through this tool
- Unfollows anyone who hasn't followed back after
UNFOLLOW_HOURShours - Never unfollows mutual follows or whitelisted accounts
- Scans your entire following list against quality criteria
- Unfollows orgs, inactive accounts, and follow-farmers
- Skips mutual follows and whitelisted accounts
- Uses the cache - after the first run, subsequent passes take minutes not hours
pip install pyinstaller
pyinstaller --onefile --windowed --name GitFollow --icon=assets/icon.ico gui.py
# Output: dist/GitFollow.exeOr trigger the Build Windows Exe workflow from the Actions tab - the .exe is attached to the release automatically.
data/state.json tracks:
- Every account followed through this tool (with timestamp and mutual status)
- Quality check cache (so accounts aren't re-evaluated every run)
- Lifetime stats (total followed, unfollowed, mutual)
The file is excluded from git and never committed to the repo.
How long does the quality unfollow pass take on first run? Roughly 2 minutes per 1,000 accounts (0.1s delay between checks). Results are cached so subsequent passes are near-instant.
Can I use this on macOS or Linux?
gitfollow.py runs on any OS. The GUI (gui.py) also works cross-platform via Python. The pre-built .exe is Windows only.
The token field is masked - how do I edit it? Clear the field and type your new token. The masking is display-only.
Does the app need to stay open while running? Yes - the current version runs locally. Close the window and the run stops. Use the Stop button for a clean halt.