A desktop Tkinter app for searching public GitHub profiles by location and optional filters, then exporting the results to either a local CSV file or a Google Sheet.
- Search GitHub users by required location
- Narrow results with optional keyword, creation date, repository count, and follower count filters
- Filter results by gender (All / Male / Female) detected from explicit
he/himorshe/herpronouns in the user's bio or profile README - Export profile details to a local CSV file or a Google Sheet
- Include email, LinkedIn, and Discord details when they are publicly available
- Read each user's GitHub profile README and extract email, LinkedIn, or Discord details from there too
- Track progress while profile details are being fetched
- Python 3.10+
aiohttpcustomtkintergoogle-api-python-clientandgoogle-authonly if you want the service-account Google Sheets fallback
pip install aiohttp customtkinterFor Google Sheets export, also install:
pip install google-api-python-client google-authYou do not need these packages if you use the Apps Script Web App method below.
python main.py- Open your target Google Sheet.
- Go to
Extensions->Apps Script. - Replace the default script with a web app handler.
- Deploy it as a Web App.
- In the deployment settings, use the actual
Web appURL and choose access that does not require the desktop app to sign in. - In the app, choose
google sheet, then fill in:Spreadsheet URL or IDWorksheet NameApps Script Web App URL
This method does not require a downloaded JSON key.
- Create or choose a Google Cloud project.
- Enable the Google Sheets API for that project.
- Create a service account and download its JSON key.
- Share your target Google Sheet with the service account email as an editor.
- In the app, fill in
Service Account JSONinstead of the Apps Script URL.
The app accepts either the full Google Sheet URL or just the spreadsheet ID for both methods.
Both destinations use the same columns:
usernameurllocationemaillinkedindiscord
- A GitHub token is optional, but recommended to reduce rate-limit issues.
Locationis the only required search field.Creation Datemust useYYYY-MM-DD.- Min and max repo/follower fields must be whole numbers.
- Duplicate usernames are skipped for both CSV and Google Sheets exports.
- Profile README content is checked in addition to the GitHub bio and blog fields.
- The Discord column is extracted from public bio/blog/README text when it matches common Discord URLs or usernames.
- The gender filter looks for explicit pronouns (
he/him,he/they,she/her,she/they,him/his,her/hers) in the bio and profile README. Profiles with no detected pronoun are skipped whenMaleorFemaleis selected; pickAllto disable the filter.
main.py
github_scraper/
exporter.py
models.py
scraper.py
ui.py
This project is licensed under the MIT License. See LICENSE.

