PhDScout / README.md
HipFil98's picture
chore: add HF Spaces YAML frontmatter to README
c330b91

A newer version of the Gradio SDK is available: 6.15.1

Upgrade
metadata
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

git clone https://github.com/Hipsterfil998/PhDScout.git
cd PhDScout
pip install -r requirements.txt

Create a .env file:

LLM_BACKEND=groq
GROQ_API_KEY=your_groq_api_key

Get a free Groq API key at console.groq.com/keys.

Then run:

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 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:

LLM inference powered by Groq free API.


Cite this work

If you use PhdScout in your research or project, please cite it as:

@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