{"id":23443244,"url":"https://github.com/oood/find-available-github-usernames","last_synced_at":"2025-04-13T12:13:56.557Z","repository":{"id":109987261,"uuid":"468905916","full_name":"oood/find-available-github-usernames","owner":"oood","description":"Help find a simple, easy-to-type username on GitHub :octocat:","archived":false,"fork":false,"pushed_at":"2024-12-05T16:53:58.000Z","size":24563,"stargazers_count":25,"open_issues_count":0,"forks_count":5,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-04-13T12:13:41.216Z","etag":null,"topics":["account","dictionary","github","github-user","github-user-profile","github-user-search","github-username-checker","hello-world","username","username-checker"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oood.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}},"created_at":"2022-03-11T21:34:10.000Z","updated_at":"2025-03-08T08:23:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"caca1c39-1b91-4aa1-897a-019e378d9c91","html_url":"https://github.com/oood/find-available-github-usernames","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oood%2Ffind-available-github-usernames","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oood%2Ffind-available-github-usernames/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oood%2Ffind-available-github-usernames/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oood%2Ffind-available-github-usernames/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oood","download_url":"https://codeload.github.com/oood/find-available-github-usernames/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248710447,"owners_count":21149191,"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":["account","dictionary","github","github-user","github-user-profile","github-user-search","github-username-checker","hello-world","username","username-checker"],"created_at":"2024-12-23T18:17:01.044Z","updated_at":"2025-04-13T12:13:56.534Z","avatar_url":"https://github.com/oood.png","language":"Shell","readme":"# :octocat: find available github username\n\n## 📜 Table of Contents\n\n- [Usage](#usage)\n  - [v1 script](#v1-script)\n  - [v2 script](#v2-script)\n  - [Combining both versions](#combining-both-versions)\n- [Project Background](#project-background)\n- [FAQs](#faqs)\n  - [Dictionary file name meaning?](#dictionary-file-name-meaning)\n  - [What is the difference between full dictionary and `easy-to-remember`?](#what-is-the-difference-between-full-dictionary-and-easy-to-remember)\n  - [How do I generate a dictionary?](#how-do-i-generate-a-dictionary)\n  - [How to generate `easy-to-remember` dictionaries from the full dictionary?](#how-to-generate-easy-to-remember-dictionaries-from-the-full-dictionary)\n  - [How can I exclude those `easy-to-remember` usernames from the full dictionary?](#how-can-i-exclude-those-easy-to-remember-usernames-from-the-full-dictionary)\n  - [Why are some usernames unavailable checked via `v1.sh`](#why-are-some-usernames-unavailable-checked-via-v1sh)\n  - [How to check GitHub API remaining available requests?](#how-to-check-github-api-remaining-available-requests)\n  - [Is it possible to use it under Windows?](#is-it-possible-to-use-it-under-windows)\n  - [How do I find my current username?](#how-do-i-find-my-current-username)\n  - [Is further support available?](#is-further-support-available)\n- [License](#license)\n\n## Usage\n\nClone the repository\n\n```sh\ngit clone https://github.com/oood/find-available-github-usernames.git \u0026\u0026 cd find-available-github-usernames\n```\n\n### v1 script\n\n---\n\n|Conditions|Requests per Hour|\n|-|-|\n|Username only|60|\n|Username and token|5000|\n\n---\n\n1) **Generate a Personal Access Token**:\n   - Register on GitHub and go to `Settings \u003e Developer Settings \u003e Personal Access Token` to create your token.\n  \n2) Edit the script and fill in your current GitHub username and token\n\n```sh\nUSER=\"\" # your_current_username\nTOKEN=\"\" # your_api_token\n```\n\n3) Run script\n\n````sh\n./v1.sh \u003cpath to dictionary.txt\u003e \u003cthreads\u003e\n````\n\n**To stop script, just press ```^C (Ctrl+C)``` or wait until it stops**\n\n**To get information about api limits:**\n\n````sh\n./v1.sh --api\n````\n\nResponse example:\n\n```sh\n\u003e ./v1.sh --api\nTOKEN is empty\nLimit: 60\nUsed: 46\nRemaining: 14\nReset time: 2024-10-21 20:11:20\n```\n\n**Notes:**\n\n\nThe working principle of the script is very simple, import the first line of the dictionary, check whether the username is available, if got `HTTP: 404`, add it to the `v1_found.txt`, if encounter an error, print and output to the `v1.log`, and finally delete all checked lines in the dictionary.\n\n\nThe reason for deleting the lines in the dictionary is to ensure that the task can be terminated at any time by pressing `^c` (Ctrl+C) in the terminal and don't have to start from the beginning on the next run.\n\n\nThe first time the script is run, a backup file with a `.bak` suffix is generated for the dictionary.\n\n### v2 script\n\n---\n\n~4200-6000 Requests Per Hour\n\n---\n\n1) Find tokens from GitHub web version.\n    - Go to `Settings` \u003e `Account` \u003e `Change username`\n    - Open `Web DevTools` \u003e `Network`\n    - Type something in `Choose a new username form`\n    - Click on `rename_check?suggest_usernames=true` in `Web DevTools`\n    - Look at Headers and Payload\n  \n2) Edit the script and fill in your current tokens\n\n```sh\n# copy only \u003ctoken\u003e\n\n# in headers starts with \n# _octo=\u003ctoken\u003e\nTOKEN_1=\"\"\n\n# in headers starts with \n# boundary=----\u003ctoken\u003e\nTOKEN_2=\"\" # updates if you are making a lot of requests\n\n# in headers starts with \n# user_session=\u003ctoken\u003e \n# or \n# __Host-user_session_same_site=\u003ctoken\u003e\nTOKEN_3=\"\"\n\n# in payload starts with \n# authenticity_token: \u003ctoken\u003e\nTOKEN_4=\"\" # updates if you are making a lot of requests\n```\n\n3) Run script\n\n````sh\n./v2.sh \u003cpath to dictionary.txt\u003e \u003cthreads\u003e\n````\n\nGitHub allows you to make 70-100 requests per minute so you can run:\n\n```sh\n./auto-v2.sh \u003cpath to dictionary.txt\u003e\n```\n\nit just runs `v2.sh` every minute with 100 threads\n\n**To stop script, just press ```^C (Ctrl+C)``` or wait until it stops**\n\n### Combining both versions\n\nUse `v1.sh` and after what `auto-v2.sh` with result of `v1.sh`\n\n```sh\n./v1 dictionaries/4-characters_easy-to-remember_AAAA-ZZZZ.txt 100\n```\n\nAnd next\n\n```sh\n./auto-v2.sh v1_found.txt\n```\n\nresult will be in `v2_found.txt`\n\n---\n\n## Project Background\n\nGitHub allows everyone to check user pages, I initially wrote a script and created some dictionaries with character combinations to check all URLs `https://github.com/$username`. this worked fine at first, but unfortunately after a few minutes I triggered an `Error: 429 Too many requests`, so I started searching to see if there was a better way, and I found that GitHub provides an API that can be used to retrieve registered username and available username, but I don't have an account how can I get an API token?\n\n\nThere are two ways: First, register an account with any username, then get the API token and then find the appropriate username and modify it. Or bypass the restriction with proxies :shipit:, which I know is rude, so I chose the first way.\n\n\nGitHub serves 5,000 requests per hour for users using the API, which seems a bit low considering the short usernames that are still available from millions of usernames, but compared to only 60 requests per IP per hour without the API, that's a huge difference.\n\n\nI generated the 2-character dictionary and found some \"available\" usernames, but I found out that they were just reserved usernames, then I tried the 3-character dictionary again, this time I didn't intend to check all 3-characters, because I didn't want to wait too long, and all combinations were already well over the limit of 5,000 per hour, I generated `easy-to-remember` dictionaries from all combinations, then I didn't find a username that worked for me, and finally I found my current username in a 4-character `easy-to-remember` dictionary.\n\n## FAQs\n\n### Dictionary file name meaning?\n\n---\n\n`2-characters_00-99_AA-ZZ.txt` Consists of 2 characters, including all combinations of letters and digits.\n\n`3-characters_AAA-ZZZ.txt` and `4-characters_AAAA-ZZZZ.txt` Contains all combinations of all 3 and 4 letters, no digits.\n\n`XX-characters_easy-to-remember_XX.txt` Usernames with repeated characters.\n\n### What is the difference between full dictionary and `easy-to-remember`?\n\n---\n\nI recommend trying the `easy-to-remember` ones in my dictionaries first, as those that have some kind of regularity, like multiple occurrences of the same character, and easier to type. other dictionaries are full dictionaries, which means they may contain thousands of usernames.\n\n### How do I generate a dictionary?\n\n---\n\nFor 2 characters:\n\n```sh\nprintf \"%s\\n\" {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} \u003e ./2-characters.txt\n```\n\nFor 4 characters:\n\n```sh\necho {a..z}{a..z}{a..z}{a..z} | tr ' ' '\\n' \u003e ./4-characters.txt\n```\n\n### How to generate `easy-to-remember` dictionaries from the full dictionary?\n\n---\n\n```sh\ngrep '\\(.\\).*\\1' 3-characters_AAA-ZZZ.txt \u003e ./3-characters_easy-to-remember_AAA-ZZZ.txt\n```\n\n```sh\ngrep '\\(.\\).*\\1.*\\1' 4-characters_AAAA-ZZZZ.txt \u003e ./4-characters_easy-to-remember_AAAA-ZZZZ.txt\n```\n\nThis will extract usernames that have the same letter repeated multiple times, like `aaa`, `aab`, `aba`...\n\n### How can I exclude those `easy-to-remember` usernames from the full dictionary?\n\n---\n\n```sh\ncomm -23 ./dictionary.txt ./easy-to-remember.txt \u003e ./easy-to-remember-excluded.txt\n```\n\n### Why are some usernames unavailable checked via `v1.sh`?\n\n---\n\nGitHub may for some reason keep some usernames that are not open for registration, such as `47`, `fr`, `ccc`, although I found a lot of 2-character and 3-character usernames when I tried to register, but they were not available, but that doesn't mean you shouldn't try those 2 and 3-character usernames, because at any time a user could delete their account or change their username, so you might have better luck than me.\n\nThe `v2.sh` script utilizes the  `https://github.com/account/rename_check` endpoint to verify the availability of these usernames.\n\n### How to check GitHub API remaining available requests?\n\n---\n\n```sh\n./v1.sh --api\n```\n\nor\n\n```sh\ncurl -i -u \"$USER:$TOKEN\" -H \"Accept: application/vnd.github.v3+json\" https://api.github.com/rate_limit\n```\n\n### Is it possible to use it under Windows?\n\n---\n\nIt should work fine with [WSL](https://docs.microsoft.com/en-us/windows/wsl/install) and some 3rd party Linux tools ([Cygwin](https://github.com/cygwin/cygwin) or [Git bash](https://github.com/git-for-windows/git)).\n\n### How do I find my current username?\n\n---\n\n1. In the GitHub Desktop menu, click Preferences.\n\n2. In the Preferences window, verify the following:\n    - To view your GitHub username, click Accounts.\n\n### Is further support available?\n\n---\n\nNo, I'm not going to use my time to continue developing and contributing to this repository, it's just a sharing of some experiences, if you're interested you can create something better!\n\n## License\n\nThis project is available under the [Creative Commons Zero (CC0) License](LICENSE), allowing anyone to use, modify, and distribute the work without restrictions.\n\n[![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foood%2Ffind-available-github-usernames","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foood%2Ffind-available-github-usernames","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foood%2Ffind-available-github-usernames/lists"}