Summary and recommendation
Github Copilot user management can be run manually, but complexity usually increases with role models, licensing gates, and offboarding dependencies. This guide gives the exact mechanics and where automation has the biggest impact.
GitHub Copilot seat management runs through a two-layer role hierarchy: enterprise owners set policies and enable Copilot per organization, then organization admins assign seats to individual members or teams.
There are no Copilot-specific custom roles - permissions derive entirely from a user's existing GitHub enterprise or org role, meaning every app and user lifecycle action inherits that hierarchy's constraints. Billing managers can view seat counts but cannot assign or revoke access.
Quick facts
| Admin console path | Enterprise account → Policies → Copilot / Organization → Settings → Copilot → Access |
| Admin console URL | Official docs |
| SCIM available | Yes |
| SCIM tier required | Enterprise (EMU) |
| SSO prerequisite | Yes |
User types and roles
| Role | Permissions | Cannot do | Plan required | Seat cost | Watch out for |
|---|---|---|---|---|---|
| Enterprise Owner | Enable/disable Copilot across all organizations in the enterprise; set enterprise-wide policies (e.g., allowed editors, suggestions matching public code, Copilot Chat); assign Copilot Business or Enterprise to organizations; view enterprise-level usage and audit logs. | Cannot directly assign individual seats without delegating to org admins; cannot use Copilot features on behalf of end users. | GitHub Copilot Business or Enterprise (requires GitHub Enterprise Cloud) | No additional seat cost for the owner role itself; owner consumes a Copilot seat only if they are also an active user. | Enterprise owners must explicitly enable Copilot for each organization before org admins can assign seats. Enabling at enterprise level does not automatically grant seats to all members. |
| Organization Admin (Owner) | Grant or revoke Copilot access to individual members, all members, or specific teams within the organization; view organization-level seat usage. | Cannot override enterprise-level policies set by the enterprise owner; cannot assign Copilot to users outside their organization. | GitHub Copilot Business or Enterprise (org must be enabled by enterprise owner) | Consumes a paid seat only if also an active Copilot user. | If the enterprise policy is set to 'No policy' (disabled), org admins cannot enable Copilot regardless of their permissions. |
| Billing Manager | View billing and seat usage information at the enterprise or organization level. | Cannot assign or revoke Copilot seats; cannot change Copilot policies. | Any paid Copilot plan | Does not consume a Copilot seat by virtue of this role alone. | Billing managers have read-only access to seat counts but cannot take action on seat assignments. |
| Copilot Seat User (Member) | Use GitHub Copilot in supported IDEs and on GitHub.com once a seat is assigned; access Copilot Chat, code completion, and other features enabled by policy. | Cannot self-assign a seat on Business or Enterprise plans; cannot change organization or enterprise policies. | GitHub Copilot Free (self-serve), Pro ($10/mo), Pro+ ($39/mo), Business ($19/user/mo), or Enterprise ($39/user/mo) | $19/user/month (Business) or $39/user/month (Enterprise); billed monthly regardless of usage once assigned. | On Business and Enterprise plans, seats are billed for the full billing cycle in which they are assigned, even if access is revoked mid-cycle. The seat is freed at the start of the next billing cycle. |
Permission model
- Model type: role-based
- Description: GitHub Copilot uses GitHub's existing enterprise and organization role hierarchy. Access is controlled by enterprise owners setting policies and enabling Copilot per organization, then organization admins assigning seats to members or teams. There are no Copilot-specific custom roles; permissions derive from the user's GitHub enterprise/org role.
- Custom roles: No
- Custom roles plan: Not documented
- Granularity: Seat assignment is at the individual user or team level within an organization. Feature-level policies (e.g., Copilot Chat, suggestions matching public code, Copilot in the CLI) are set at the enterprise or organization level and apply uniformly to all seat holders in scope.
How to add users
- Enterprise owner navigates to the enterprise account → Settings → Copilot → Access and enables Copilot for the target organization(s), or sets policy to 'Allow for all organizations'.
- Organization admin navigates to the organization → Settings → Copilot → Access.
- Under 'Access', select one of: 'Allow for all members', 'Allow for selected members and teams', or 'Disabled'.
- If 'Allow for selected members and teams' is chosen, click 'Add people' or 'Add teams', search for the GitHub username or team name, and confirm.
- The user receives an email notification and can activate Copilot in their IDE or on GitHub.com immediately.
Required fields: GitHub username or team name of the user(s) to be granted access, Organization must already be enabled for Copilot by the enterprise owner (Business/Enterprise plans)
Watch out for:
- Seats are billed immediately upon assignment; there is no trial period for Business/Enterprise seats.
- If a user is a member of multiple organizations under the same enterprise, they consume only one Copilot seat across all organizations.
- On the Free plan, users self-activate; admins cannot assign Free seats.
- Enabling 'Allow for all members' automatically assigns a seat to every current and future org member, which can cause unexpected billing increases.
- Users must have a GitHub account before a seat can be assigned; there is no way to pre-provision a seat for a non-existent GitHub user.
| Bulk option | Availability | Notes |
|---|---|---|
| CSV import | No | Not documented |
| Domain whitelisting | No | Automatic domain-based user add |
| IdP provisioning | Yes | Enterprise (requires GitHub Enterprise Cloud with EMU and SAML SSO/SCIM configured via Okta or Entra ID) |
How to remove or deactivate users
- Can delete users: No
- Delete/deactivate behavior: GitHub Copilot does not have a 'delete user' concept separate from GitHub account management. Removing Copilot access means revoking the seat assignment (deactivation of Copilot access). The GitHub user account itself is not deleted. On EMU, deprovisioning via SCIM suspends the managed user account enterprise-wide, which also removes Copilot access.
- Organization admin navigates to the organization → Settings → Copilot → Access.
- Find the user or team whose access should be removed.
- Click 'Remove' next to the individual user, or remove the team from the allowed list.
- Confirm the removal. The user loses Copilot access immediately.
- Alternatively (enterprise-level): Enterprise owner navigates to enterprise Settings → Copilot → Access and disables Copilot for the entire organization, which removes all seats in that org.
| Data impact | Behavior |
|---|---|
| Owned records | No Copilot-specific data is stored per user that would be lost. Code suggestions are ephemeral and not saved to a user profile. Copilot knowledge bases (Enterprise) are org-level assets, not user-owned. |
| Shared content | Copilot Chat conversation history stored in GitHub.com (if any) may be retained per GitHub's data retention policies, but is not transferred or deleted upon seat removal. |
| Integrations | IDE extensions continue to be installed on the user's machine but will return an authorization error when Copilot access is revoked. No automatic uninstall occurs. |
| License freed | The seat is freed at the start of the next billing cycle. The organization is billed for the remainder of the current billing cycle even after revocation. |
Watch out for:
- Seat billing continues until the end of the current billing cycle after revocation; there are no prorated refunds for mid-cycle removals.
- If 'Allow for all members' is enabled, removing a single user requires switching to 'Allow for selected members and teams' first, then manually re-adding all other users - or removing the user from the organization entirely.
- On EMU, SCIM deprovisioning suspends the entire managed user account, not just Copilot access; this affects all GitHub Enterprise services for that user.
- Revoking access does not clear any locally cached Copilot tokens; the user may have a brief window of continued access until the token expires.
License and seat management
| Seat type | Includes | Cost |
|---|---|---|
| Copilot Free | 2,000 code completions/month, 50 premium requests/month, basic Copilot Chat; self-serve for individual GitHub accounts; no centralized admin management. | $0 |
| Copilot Pro | Unlimited code completions, 300 premium requests/month, Copilot Chat, CLI, GitHub.com integration; individual subscription. | $10/user/month or $100/user/year |
| Copilot Pro+ | Unlimited code completions, 1,500 premium requests/month, access to all available Copilot models including the latest; individual subscription. | $39/user/month or $390/user/year |
| Copilot Business | Unlimited code completions, 300 premium requests/month, Copilot Chat, centralized policy management, audit logs, IP indemnity, organization-level seat management. | $19/user/month |
| Copilot Enterprise | All Business features plus 1,000 premium requests/month, Copilot knowledge bases, Copilot pull request summaries, fine-tuned models (where available); requires GitHub Enterprise Cloud. | $39/user/month |
- Where to check usage: Enterprise: github.com/enterprises/{enterprise}/settings/copilot → 'Usage' tab shows seat count, active users, and per-organization breakdown. Organization: github.com/organizations/{org}/settings/copilot → 'Access' shows assigned seats and last-active dates.
- How to identify unused seats: The enterprise and organization Copilot usage pages display the last activity date for each assigned seat. Seats with no recorded activity (no completions or chat interactions) in the past 30 days can be identified and revoked manually. There is no automated idle-seat reclamation; admins must review and remove manually.
- Billing notes: Seats are billed monthly per user assigned, regardless of actual usage. Adding a seat mid-cycle is prorated for the remainder of the cycle. Removing a seat mid-cycle does not generate a prorated credit; the seat is billed through the end of the current cycle. Extra premium requests beyond the plan allowance are billed at $0.04 per request. Business and Enterprise plans are billed at the organization or enterprise level, not per individual. Free and Pro plans are billed to the individual user's GitHub account.
The cost of manual management
Seat billing starts the moment a seat is assigned and continues through the end of the billing cycle even if access is revoked mid-cycle - no prorated credits are issued. Enabling 'Allow for all members' automatically assigns a seat to every current and future org member, which can produce unexpected billing spikes in growing organizations.
There is no automated idle-seat reclamation; admins must manually review last-activity dates and remove unused seats one by one or by team.
Bulk provisioning without SCIM is limited to team-based assignment or manual individual adds - there is no CSV import path. Switching from 'Allow for all members' back to 'Allow for selected members' requires manually re-adding every user who should retain access, which is operationally expensive at scale.
What IT admins are saying
The most consistent friction point reported by admins is the EMU requirement for SCIM provisioning. EMU forces organizations onto a separate, isolated GitHub enterprise with managed accounts, which is a hard architectural break from existing GitHub organizations using personal accounts.
A related constraint - one GitHub Enterprise Cloud instance per Entra ID tenant when using OIDC - blocks multi-enterprise setups under a single IdP.
Admins also flag the billing behavior on removal: seats stay active and billable until the cycle ends, with no refund mechanism. The manual idle-seat review process compounds this, since there is no automated way to surface or reclaim unused seats.
Common complaints:
- EMU (Enterprise Managed Users) is required for SCIM provisioning of Copilot, which forces organizations to use a separate, isolated GitHub enterprise with managed accounts rather than their existing GitHub organization with personal accounts.
- One GitHub Enterprise Cloud instance per Entra ID (Azure AD) tenant when using OIDC for SSO, which is a hard architectural constraint that blocks multi-enterprise setups under a single IdP tenant.
- Seat billing continues through the end of the billing cycle after a user is removed, with no prorated refund, making it costly to offboard users mid-cycle.
- No automated idle-seat reclamation; admins must manually identify and remove unused seats by reviewing last-activity dates.
- Switching from 'Allow for all members' to 'Allow for selected members' requires manually re-adding every user who should retain access, which is operationally burdensome in large organizations.
- No CSV import for bulk seat assignment; large-scale provisioning requires either SCIM (EMU only) or manual team-based assignment.
- Copilot Free and Pro plans are entirely self-serve and cannot be centrally managed or reported on by enterprise admins, creating a shadow-IT risk.
- Complex licensing model with five tiers (Free, Pro, Pro+, Business, Enterprise) creates confusion about which features are available at each tier and which plan is required for centralized management.
The decision
Every app and user in your GitHub org is subject to the same two-layer policy model, so the decision point is really about whether your provisioning volume justifies the EMU migration cost.
GitHub Copilot Business ($19/user/month) covers centralized policy management, audit logs, and org-level seat control - sufficient for most teams that do not need SCIM or knowledge bases. Copilot Enterprise ($39/user/month) is required for SCIM provisioning, and only through EMU, which carries significant IdP and architectural prerequisites.
Teams already on GitHub Enterprise Cloud with EMU configured will find the provisioning path straightforward. Teams on standard GitHub organizations should weigh the EMU migration cost against the operational overhead of manual seat management before committing to the Enterprise tier.
Bottom line
GitHub Copilot's admin model is functional but tightly coupled to GitHub's existing enterprise hierarchy, which means every app and user lifecycle action - provisioning, deprovisioning, idle-seat cleanup - inherits the constraints of that hierarchy.
Manual seat management is viable for smaller organizations but becomes operationally burdensome at scale without SCIM, and SCIM itself requires a full EMU migration that many teams are not positioned to undertake.
The billing model, which charges through the end of the cycle on removal with no proration, raises the cost of any provisioning error and makes accurate, timely offboarding more consequential than in most SaaS tools.
Automate Github Copilot workflows without one-off scripts
Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.