Discover professors. Match research. Compare stipends. Reach out — efficiently.
ProfScout is a free, open-source, privacy-first web app that helps PhD/MS applicants run their entire graduate-school outreach from one place: find advisors across 34,000+ CS faculty (or millions of global STEM researchers), rank them by research fit, compare PhD stipends against cost of living, and draft & send personalized emails straight from your own Gmail.
Live demo: https://satyam-thakur.github.io/profscout/ · 100% client-side — your data never leaves your browser (unless you opt into private Google Drive sync).
| Page | What it does |
|---|---|
| 🧭 Discover | Search & filter 34,000+ CS faculty locally, or flip to Global STEM to search millions of researchers across all fields live via OpenAlex. Every result links out to the professor's homepage, Google Scholar, ORCID, or OpenAlex profile. |
| 🎯 Match | Select the specific research areas you care about and get professors ranked by fit, using publication counts and recency. |
| 📄 Templates | A built-in, always-available default outreach template plus your own custom templates, powered by {{merge tags}}. |
| Compose a personalized email, refine it with one-click AI actions (Enhance, Shorten, Formal, Friendly…), and send or draft directly from your Gmail — no SMTP setup. Bulk-compose to your whole shortlist. | |
| 📋 Tracker | A Kanban board (Saved → Contacted → Interviewing → Accepted → Rejected) with drag-and-drop and bulk actions. |
| 💰 Stipends | A sortable, searchable table comparing PhD stipends, fees, cost of living, and net income across 82 US universities. |
Also:
- Reusable applicant profile — fill your details once in Settings (degree, university, experience, skills, interests, contact) and every template auto-completes.
- Trust-first sending — ProfScout never fabricates recipient addresses; it points you to the professor's homepage and blocks sends to made-up/invalid emails.
- Minimal, accessible UI — clean light/dark themes, keyboard-friendly, reduced-motion aware.
- Private cloud sync (optional) — templates, tracker, and settings back up to a hidden folder in your Google Drive so they follow you across devices.
- Set up your profile once (Settings) — name, degree, university, experience, skills, and contact info.
- Find advisors in Discover or Match, and save promising ones to your Tracker.
- Pick a template — start from the built-in default or create your own.
- Compose — professor-specific fields fill from the card; your profile fills the rest. Polish with AI if you like.
- Send from your Gmail, and watch the professor move to Contacted on your board automatically.
- CSrankings — faculty names, affiliations, homepages, Google Scholar IDs, and publication records at top CS venues (34k+, stored locally).
- CSStipendRankings — PhD stipend, fee, and cost-of-living data for US universities.
- OpenAlex — live global API spanning millions of researchers across all STEM fields.
The two local datasets are included as git submodules under data/.
- Python 3.11+
- uv (recommended) or pip
- Git (for the data submodules)
git clone --recursive https://github.com/satyam-thakur/profscout.git
cd profscoutAlready cloned without --recursive? Initialize the submodules:
git submodule update --init --recursive# Using uv (recommended)
uv sync
# …or plain Python
python -m venv .venv
pip install -e .Activate it — Windows: .venv\Scripts\activate · macOS/Linux: source .venv/bin/activate
Transforms the raw submodule CSVs into optimized JSON for the frontend:
python scripts/build_data.py[OK] Data pipeline complete! 34280 professors, 762 institutions
ProfScout is 100% client-side — any static file server works:
python -m http.server 8081 --directory publicVisit http://localhost:8081. Open Settings to fill your profile and (optionally) add an AI API key, then Sign in with Google to enable 1-click sending and private cloud sync.
Everything is configured in-app under Settings (stored locally in your browser):
- Your Profile — merged into every email template via
{{my_*}}tags. - Google OAuth Client ID — required for Gmail sending & Drive sync. Create one in the Google Cloud Console and authorize your origin (e.g.
http://localhost:8081). - AI provider & API key — optional, for AI drafting. Supports Google Gemini (free key from AI Studio), OpenAI, or Anthropic.
Templates support these {{tags}}:
- Professor (from the compose form):
prof_name,prof_firstName,prof_lastName,prof_interests,paper_title,projects,univ_name - You (from your Settings profile):
my_name,my_degree,my_university,my_interests,my_experience_years,my_job_title,my_company,my_skills,my_contact,my_background
profscout/
├── .github/workflows/ # CI: Pages deploy + weekly data auto-update
├── data/ # Data sources (git submodules)
│ ├── CSrankings/ # faculty & publication data
│ └── CSStipendRankings/ # stipend & cost-of-living data
├── scripts/
│ └── build_data.py # CSV → optimized JSON pipeline
├── public/ # Static frontend (deploy root)
│ ├── index.html # app shell + metadata/icons
│ ├── assets/ # favicon, PWA icons, social preview
│ ├── data/ # generated JSON (built by build_data.py)
│ └── src/
│ ├── style.css # minimal light/dark design system
│ └── main.js # single-file SPA (router, pages, services)
└── pyproject.toml
Pull the latest upstream data and rebuild:
git submodule update --init --recursive --remote
python scripts/build_data.pyThis also runs automatically every week via the Automated Data Update GitHub Action, which commits refreshed data as github-actions[bot].
Pushing to the default branch triggers the Deploy to GitHub Pages workflow, which regenerates the JSON data and publishes public/ — so the generated data is intentionally not committed to the repo.
ProfScout has no backend. Your profile, templates, tracker, and outbox live in your browser's localStorage. Signing in with Google is optional and only used to (a) send email from your own account and (b) back up your data to a private App Data folder in your own Google Drive. Nothing is sent to any third-party server operated by this project.
Contributions are welcome — please open an issue or submit a pull request. For data corrections, contribute upstream to CSrankings or CSStipendRankings.
ProfScout is open source under the MIT License.
Data provided by:
- CSrankings — CC BY-NC-ND 4.0 by Emery Berger
- CSStipendRankings — CC BY-NC-ND 4.0 by its contributors