How GitHub billing works
GitHub Teams is billed per member of your organization. GitHub Enterprise (Cloud or Server) is billed per licensed seat, with the concept of "active committers" determining actual usage.
For GitHub Teams specifically: every member of your org counts toward your seat count, regardless of whether they've committed code recently. GitHub does not automatically remove or reduce billing for inactive members the way Slack does. If someone joined your org two years ago and hasn't touched a repo since, they're still costing you a seat.
For GitHub Enterprise Cloud, Microsoft introduced "active committer" billing in some configurations — only users who have made commits in the billing period count. But this depends on your specific license type, so check your billing settings to confirm how you're being charged.
Finding inactive members in the GitHub UI
Go to your organization on GitHub, then People. You can see all current members. Unfortunately, the GitHub org UI doesn't show last-activity date directly in the member list — you can see someone's public profile, which shows their recent contribution activity, but that includes personal repos outside your org.
A more reliable way: Settings → Billing and plans shows your active seat count and usage. For Enterprise accounts, the billing page breaks down active committers by month, which tells you who is actually contributing code.
Pulling activity data via the GitHub API
For a proper audit, the GitHub API is the right tool. The GET /orgs/{org}/members endpoint lists all org members. Cross-reference with commit activity using GET /repos/{owner}/{repo}/commits?author={username} across your repos to find members with no recent commits.
A simpler approach using the GitHub CLI:
GitHub CLI
# List all org members
gh api /orgs/YOUR_ORG/members --paginate \
--jq '.[].login' > members.txt
# For each member, get their last commit across all org repos
# (Substitute YOUR_ORG with your org name)
gh api /orgs/YOUR_ORG/repos --paginate \
--jq '.[].full_name' | while read repo; do
gh api /repos/$repo/commits \
--jq 'if length > 0 then .[0] | {repo: "'"$repo"'", author: .author.login, date: .commit.author.date} else empty end'
doneThis is verbose but gives you a per-member activity picture. For larger organizations, the GitHub audit log (Enterprise feature) is cleaner — it records all member actions including logins, which lets you find members who haven't authenticated to your org in a given period.
Current members aren't the only thing to check
A few other places waste hides:
- Pending invitations. Go to Organization → People → Pending invitations. Invitations that have been sitting for weeks or months and were never accepted still count as a claimed seat in some billing models. Cancel any that are stale.
- Outside collaborators.These are people with access to specific repos who are not org members. Depending on your plan, outside collaborators may or may not count toward your seat count — but they represent an access hygiene issue either way. Review them and remove anyone who shouldn't still have access.
- Bot accounts.Many teams have bot or service accounts as org members. These are active in the sense of making automated commits or API calls, but they shouldn't be on paid user seats if you can avoid it. GitHub allows some machine user configurations that don't count as billable seats — check the docs for your plan.
Removing members
Removing a member from your GitHub org revokes their access to all private repos in the org. Their public repos and personal account are not affected. Any commits they made to your repos remain — commits are attributed to the GitHub account, not the org membership.
If they had write access to repos and you want to preserve that access for someone else, re-add the relevant collaborators before removing the departing member, or transfer repo ownership if needed.
Automating this check
Reach Seats connects to your GitHub organization via OAuth and pulls member activity daily. It flags members with no recent activity in your org and shows the monthly cost of each seat, alongside your other SaaS providers — Microsoft 365, Google Workspace, Slack, Zoom, and Jira. 7-day free trial, no credit card.