--- title: PhDScout emoji: 🎓 colorFrom: blue colorTo: indigo sdk: gradio sdk_version: "5.23.3" app_file: app.py pinned: false license: mit short_description: AI-powered search agent for PhD and academic positions ---

PhdScout 🎓

AI-powered search agent for PhD positions, postdocs, research fellowships, and academic staff roles.

🆓 100% free — no subscriptions, no API costs, no sign-up required.
Live demo on HuggingFace Spaces: HipFil98/PhDScout
📖 Full documentation

--- ## What it does Upload your CV, set a research field and country, and PhdScout will: - **Search** multiple academic job boards for open positions - **Score** each position against your profile (0–100 match score) - **Rank** all results and highlight the best fits - **Generate** a personalized cover letter draft for every position - **Export** all approved applications as a ZIP (cover letters + position details) --- ## How to use 1. Upload your CV (PDF, DOCX, or TXT) 2. Enter your research field (e.g. `machine learning`, `computational biology`) 3. Select a country or region from the dropdown (40+ options, or type a custom value) 4. Choose the position type (`PhD`, `postdoc`, `fellowship`, `predoctoral`, `research staff`) 5. Set a minimum match score (used as a recommendation threshold — all positions are reviewable) 6. Click **Parse CV & Search Positions** and wait (~2–3 minutes) 7. In the **Results** tab, browse all scored positions 8. In the **Review & Edit** tab, load any position, read CV tailoring hints, and edit the cover letter 9. Click **Approve & Save** for positions you want to apply to 10. In the **Export** tab, download all approved applications as a ZIP --- ## Running locally ```bash git clone https://github.com/Hipsterfil998/PhDScout.git cd PhDScout pip install -r requirements.txt ``` Create a `.env` file: ```env LLM_BACKEND=groq GROQ_API_KEY=your_groq_api_key ``` Get a free Groq API key at [console.groq.com/keys](https://console.groq.com/keys). Then run: ```bash python app.py ``` The app will be available at `http://localhost:7860`. --- ## Project structure ``` PhDScout/ ├── app.py # Gradio web interface ├── config.py # Runtime settings (model, thresholds, delays) ├── requirements.txt └── agent/ ├── __init__.py # Public API: JobAgent, LLMQuotaError ├── pipeline.py # JobAgent orchestrator ├── base_service.py # BaseLLMService base class ├── llm_client.py # Groq / HuggingFace / Ollama client ├── utils.py # Shared utilities ├── prompts/ # LLM prompts — one file per service │ ├── cv_parser.py │ ├── job_matcher.py │ ├── cv_tailor.py │ └── cover_letter.py ├── cv/ # CV-related services │ ├── parser.py # CV extraction + LLM parsing │ ├── tailor.py # Tailoring hints generator │ └── cover_letter.py # Cover letter writer ├── matching/ │ └── matcher.py # LLM-based scoring + PhD eligibility cap └── search/ ├── searcher.py # JobSearcher (orchestrates scrapers) └── scrapers/ ├── base.py # BaseScraper ABC + shared helpers ├── euraxess.py # EU/worldwide research portal ├── mlscientist.py # ML & AI academic positions ├── jobs_ac_uk.py # UK academic jobs (UK/worldwide only) ├── scholarshipdb.py # Worldwide aggregator (28k+ positions) └── nature_careers.py # Nature.com/careers — multidisciplinary ``` --- ## Model Powered by [Groq](https://groq.com) free API — fast inference, no subscription required. Uses `llama-3.1-8b-instant` by default. To change the model, edit `default_model` in `config.py`. For local use, the app also supports **Ollama** — set `LLM_BACKEND=ollama` in `.env`. --- ## Credits Job data sourced from: - [Euraxess](https://euraxess.ec.europa.eu) — European Commission portal for research careers - [mlscientist.com](https://mlscientist.com) — ML & AI academic job board - [jobs.ac.uk](https://www.jobs.ac.uk) — UK academic jobs portal - [scholarshipdb.net](https://scholarshipdb.net) — Worldwide academic jobs and scholarships aggregator - [nature.com/careers](https://www.nature.com/naturecareers) — Multidisciplinary global research job board LLM inference powered by [Groq](https://groq.com) free API. --- ## Cite this work If you use PhdScout in your research or project, please cite it as: ```bibtex @software{pellegrino2026phdscout, author = {Pellegrino, Filippo}, title = {{PhdScout}: an AI-powered search agent for academic positions}, year = {2026}, url = {https://github.com/Hipsterfil998/PhDScout}, license = {MIT} } ``` --- ## License MIT