{"id":28381331,"url":"https://github.com/basemax/github-repos-report-generator","last_synced_at":"2026-04-16T04:02:34.860Z","repository":{"id":295705601,"uuid":"988212486","full_name":"BaseMax/github-repos-report-generator","owner":"BaseMax","description":"A Python CLI tool to fetch all public repositories of a GitHub user, extracting repository details such as name, URL, description, top language, and tags. Outputs data in CSV, JSON, and HTML formats.","archived":false,"fork":false,"pushed_at":"2025-05-22T09:03:02.000Z","size":309,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-22T23:32:47.647Z","etag":null,"topics":["api","api-github","crawler","csv","export","extract","github","github-api","github-export","github-exporter","github-info","html","json","py","python"],"latest_commit_sha":null,"homepage":"https://basemax.github.io/github-repos-report-generator/basemax_repos.html","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BaseMax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-22T08:09:57.000Z","updated_at":"2025-05-22T09:26:47.000Z","dependencies_parsed_at":"2025-05-27T00:56:24.998Z","dependency_job_id":"a4c7609f-3857-465a-8bed-4bc33b6ec03a","html_url":"https://github.com/BaseMax/github-repos-report-generator","commit_stats":null,"previous_names":["basemax/github-repos-report-generator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BaseMax/github-repos-report-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fgithub-repos-report-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fgithub-repos-report-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fgithub-repos-report-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fgithub-repos-report-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BaseMax","download_url":"https://codeload.github.com/BaseMax/github-repos-report-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fgithub-repos-report-generator/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261790993,"owners_count":23210075,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-github","crawler","csv","export","extract","github","github-api","github-export","github-exporter","github-info","html","json","py","python"],"created_at":"2025-05-30T04:04:46.922Z","updated_at":"2025-10-08T01:32:37.598Z","avatar_url":"https://github.com/BaseMax.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHub User Repositories Exporter\n\nA powerful Python CLI tool to fetch all public repositories of a GitHub user, extracting detailed repository information such as name, URL, description, top programming language, and tags (topics). Outputs the collected data in CSV, JSON, and HTML formats for easy analysis and sharing.\n\n---\n\n## Features\n\n- Accepts raw GitHub usernames, `@username`, or full GitHub profile URLs as input\n- Validates user existence and confirms the user is not an organization\n- Handles pagination to fetch all public repositories\n- Retrieves repository topics (tags) using GitHub Topics API\n- Supports GitHub personal access token for higher API rate limits\n- Saves output data as CSV (UTF-8 with BOM), JSON, and a nicely formatted HTML report\n- Provides informative logging and error handling\n- Configurable output directory\n\n---\n\n## Installation\n\nClone this repository:\n\n```bash\ngit clone https://github.com/BaseMax/github-repos-report-generator.git\ncd github-repos-report-generator\n```\n\n(Optional but recommended) Create and activate a virtual environment:\n\n```bash\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n```\n\nInstall dependencies:\n\n```bash\npip install -r requirements.txt\nor\npip install requests pandas jinja2\n```\n\n\u003e **Dependencies include:** requests, pandas, jinja2, colorama\n\n## Usage\n\n```bash\npython github_repos_exporter.py USERNAME_OR_URL [--token GITHUB_TOKEN] [--output-dir PATH]\n```\n\n- `USERNAME_OR_URL`: GitHub username, or with leading @, or a full GitHub profile URL (e.g., https://github.com/username).\n- `--token` (optional): Your GitHub personal access token to increase API rate limits and avoid throttling.\n- `--output-dir` (optional): Directory where the output files (.csv, .json, .html, .txt) will be saved. Defaults to current directory (.).\n\n**Examples:**\n\n```bash\npython github_user_repos.py @octocat\n```\n\n```bash\npython github_user_repos.py https://github.com/octocat --token ghp_yourtoken123 --output-dir ./output\n```\n\n## Output Files\n\nGiven username octocat and output directory ./output, the tool generates:\n\n- `octocat_repos.csv` — Spreadsheet-friendly CSV with repository data\n- `octocat_repos.json` — JSON file with detailed repository info\n- `octocat_repos.html` — Beautiful HTML report listing repositories with clickable URLs\n- `octocat_repos.txt` — Plain text log of repository info for quick reference\n\n## Requirements\n\nPython 3.7+\n\nInternet connection\n\n\u003e Optional: GitHub Personal Access Token for increased API quota\n\n## How It Works\n\n- Input normalization: Extracts GitHub username from different input formats.\n- User validation: Confirms user exists and is a \"User\" type (not an organization).\n- Data retrieval: Calls GitHub API to fetch all public repositories (100 per page) with pagination.\n- Topics fetching: For each repository, fetches tags/topics using GitHub's topics API.\n- Rate limiting: Detects rate limit headers, waits automatically for reset, and retries requests.\n- Output generation: Saves the results in CSV, JSON, and HTML formats for versatile use cases.\n\n## Testing\n\nI have up to 2,000 repositories at the moment, about 1,000 of which are public. Let's try the project and script on my account to make sure they handle everything properly.\n\n```bash\n$ python github_user_repos.py basemax\n[INFO] Detected username: basemax\n[INFO] User 'basemax' validated. Fetching repositories...\n[INFO] Fetching repositories...\nPage 1: Retrieved 100 repositories\nPage 2: Retrieved 100 repositories\nPage 3: Retrieved 100 repositories\nPage 4: Retrieved 100 repositories\nPage 5: Retrieved 100 repositories\nPage 6: Retrieved 100 repositories\nPage 7: Retrieved 100 repositories\nPage 8: Retrieved 100 repositories\nPage 9: Retrieved 14 repositories\n[INFO] Total public repositories found: 814\n[INFO] Saved CSV to ./basemax_repos.csv\n[INFO] Saved JSON to ./basemax_repos.json\n[INFO] Saved HTML report to ./basemax_repos.html\n[INFO] All files saved successfully.\n[INFO] Total public repositories found: 814\n```\n\n## Contributions \u0026 Issues\n\nFeel free to open issues or submit pull requests to improve the tool. Your contributions are welcome!\n\n## Contact\n\nDeveloped by BaseMax\n\nFor questions or support, please open an issue on GitHub.\n\n## License\n\nMIT License © 2025 Max Base\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasemax%2Fgithub-repos-report-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbasemax%2Fgithub-repos-report-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasemax%2Fgithub-repos-report-generator/lists"}