From cb217cecfac31b25da0ee95d091a43ceeab8525a Mon Sep 17 00:00:00 2001 From: Lorena Ciutacu Date: Thu, 11 Sep 2025 16:31:25 +0200 Subject: [PATCH 1/4] Move billing and usage to new page --- doc/administration/moderate_users.md | 2 +- .../documentation/styleguide/word_list.md | 2 +- doc/subscriptions/billing_and_usage.md | 298 ++++++++++++++++++ doc/subscriptions/gitlab_com/_index.md | 4 +- doc/subscriptions/manage_subscription.md | 12 +- doc/subscriptions/manage_users_and_seats.md | 284 ----------------- doc/subscriptions/quarterly_reconciliation.md | 4 +- doc/user/custom_roles/_index.md | 2 +- doc/user/group/_index.md | 2 +- .../usage_quotas/seats/constants.js | 4 +- ...roaching_active_user_count_limit.html.haml | 4 +- ...subscription_seats_statistics_card_spec.js | 8 +- 12 files changed, 320 insertions(+), 306 deletions(-) create mode 100644 doc/subscriptions/billing_and_usage.md diff --git a/doc/administration/moderate_users.md b/doc/administration/moderate_users.md index d84944d1ce964d..0c2b59d6dc0ba2 100644 --- a/doc/administration/moderate_users.md +++ b/doc/administration/moderate_users.md @@ -220,7 +220,7 @@ For more information, see [user deactivation emails](settings/email.md#user-deac To deactivate users with the GitLab API, see [deactivate user](../api/user_moderation.md#deactivate-a-user). For information about permanent user restrictions, see [block and unblock users](#block-and-unblock-users). To remove a user from a GitLab.com subscription, see -[Remove users from your subscription](../subscriptions/manage_users_and_seats.md#remove-users-from-subscription). +[Remove users from your subscription](../subscriptions/billing_and_usage.md#remove-users-from-subscription). ### Automatically deactivate dormant users diff --git a/doc/development/documentation/styleguide/word_list.md b/doc/development/documentation/styleguide/word_list.md index d564e0a6888b17..fd4daaaa47f120 100644 --- a/doc/development/documentation/styleguide/word_list.md +++ b/doc/development/documentation/styleguide/word_list.md @@ -2354,7 +2354,7 @@ Searching is different from [filtering](#filter). When referring to the subscription billing model: - For GitLab.com, use **seats**. Customers purchase seats. Users occupy seats when they are invited - to a group, with some [exceptions](../../../subscriptions/manage_users_and_seats.md#gitlabcom-billing-and-usage). + to a group, with some [exceptions](../../../subscriptions/billing_and_usage.md#gitlabcom-billing-and-usage). - For GitLab Self-Managed, use **users**. Customers purchase subscriptions for a specified number of **users**. ## section diff --git a/doc/subscriptions/billing_and_usage.md b/doc/subscriptions/billing_and_usage.md new file mode 100644 index 00000000000000..42fc496a7adac4 --- /dev/null +++ b/doc/subscriptions/billing_and_usage.md @@ -0,0 +1,298 @@ +--- +stage: Fulfillment +group: Seat Management +info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments +description: View and manage subscription billing and usage. +title: Billing and usage +--- + +{{< details >}} + +- Tier: Premium, Ultimate +- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated + +{{< /details >}} + +## Self-Managed billing and usage + +{{< details >}} + +- Offering: GitLab Self-Managed + +{{< /details >}} + +A GitLab Self-Managed subscription uses a hybrid model. You pay for a subscription +according to the maximum number of users enabled during the +subscription period. + +For instances that are not offline or on a closed network, the maximum number of +simultaneous users in the GitLab Self-Managed instance is checked each quarter. + +If an instance is unable to generate a quarterly usage report, the existing +true up model is used. Prorated charges are not +possible without a quarterly usage report. + +The number of users in subscription represents the number of users included in your current license, +based on what you've paid for. +This number remains the same throughout your subscription period unless you purchase more seats. + +The number of maximum users reflects the highest number of billable users on your system for the current license period. + +You can view and export your [license usage](../administration/license_usage.md). + +### Users over subscription + +A GitLab subscription is valid for a specific number of seats. +The number of users over subscription shows how many users are in excess of the +number allowed by the subscription, in the current subscription period. + +Calculated as `Maximum users` - `Users in subscription` for the current license +term. For example, you purchase a subscription for 10 users. + +| Event | Billable users | Maximum users | +|:---------------------------------------------------|:-----------------|:--------------| +| Ten users occupy all 10 seats. | 10 | 10 | +| Two new users join. | 12 | 12 | +| Three users leave and their accounts are blocked. | 9 | 12 | +| Four new users join. | 13 | 13 | + +Users over subscription = 13 - 10 (Maximum users - users in license) + +The users over subscription value is always zero for trial license. + +If users over subscription value is above zero, then you have more users in your +GitLab instance than you are licensed for. You must pay for the additional users +[before or at the time of renewal](quarterly_reconciliation.md). This is +called the "true up" process. If you do not do this, your license key does not work. + +To view the number of users over subscription, go to the **Admin** area. + +### View users + +View the lists of users in your instance: + +1. On the left sidebar, at the bottom, select **Admin**. +1. Select **Users**. + +Select a user to view their account information. + +#### Check daily and historical billable users + +Prerequisites: + +- You must be an administrator. + +You can get a list of daily and historical billable users in your GitLab instance: + +1. [Start a Rails console session](../administration/operations/rails_console.md#starting-a-rails-console-session). +1. Count the number of users in the instance: + + ```ruby + User.billable.count + ``` + +1. Get the historical maximum number of users on the instance from the past year: + + ```ruby + ::HistoricalData.max_historical_user_count(from: 1.year.ago.beginning_of_day, to: Time.current.end_of_day) + ``` + +#### Update daily and historical billable users + +Prerequisites: + +- You must be an administrator. + +You can trigger a manual update of the daily and historical billable users in your GitLab instance. + +1. [Start a Rails console session](../administration/operations/rails_console.md#starting-a-rails-console-session). +1. Force an update of the daily billable users: + + ```ruby + identifier = Analytics::UsageTrends::Measurement.identifiers[:billable_users] + ::Analytics::UsageTrends::CounterJobWorker.new.perform(identifier, User.minimum(:id), User.maximum(:id), Time.zone.now) + ``` + +1. Force an update of the historical max billable users: + + ```ruby + ::HistoricalDataWorker.new.perform + ``` + +### Manage users and subscription seats + +Managing the number of users against the number of subscription seats can be difficult: + +- If [LDAP is integrated with GitLab](../administration/auth/ldap/_index.md), anyone + in the configured domain can sign up for a GitLab account. This can result in + an unexpected bill at time of renewal. +- If sign-up is turned on in your instance, anyone who can access the instance can + sign up for an account. + +GitLab has several features to help you manage the number of users. You can: + +- [Require administrator approval for new sign ups](../administration/settings/sign_up_restrictions.md#require-administrator-approval-for-new-sign-ups). +- Automatically block new users, either through + [LDAP](../administration/auth/ldap/_index.md#basic-configuration-settings) or + [OmniAuth](../integration/omniauth.md#configure-common-settings). +- [Limit the number of billable users](../administration/settings/sign_up_restrictions.md#user-cap) + who can sign up or be added to a subscription without administrator approval. +- [Disable new sign-ups](../administration/settings/sign_up_restrictions.md), + and instead manage new users manually. +- View a breakdown of users by role in the + [Users statistics](../administration/admin_area.md#users-statistics) page. + +To increase the number of users covered by your license, [buy more seats](manage_users_and_seats.md#buy-more-seats) +during the subscription period. The cost of seats added during the subscription +period is prorated from the date of purchase through to the end of the subscription +period. You can continue to add users even if you reach the number of users in +license count. GitLab [bills you for the overage](quarterly_reconciliation.md). + +If your subscription was activated with an activation code, the additional seats are reflected in +your instance immediately. If you're using a license file, you receive an updated file. +To add the seats, [add the license file](../administration/license_file.md) +to your instance. + +## GitLab.com billing and usage + +{{< details >}} + +- Offering: GitLab.com + +{{< /details >}} + +A GitLab.com subscription uses a concurrent (_seat_) model. +You pay for a subscription according to the maximum number of users assigned to the top-level group, +its subgroups and projects during the billing period. +You can add and remove users during the subscription period without incurring additional charges, +as long as the total users at any given time doesn't exceed the subscription count. +If the total users exceeds your subscription count, you will incur an overage, +which must be paid at your next [reconciliation](quarterly_reconciliation.md). + +A top-level group can be [changed](../user/group/manage.md#change-a-groups-path) like any other group. + +### Seats owed + +If the number of billable users exceeds the number of **seats in subscription**, known +as the number of **seats owed**, you must pay for the excess number of users. + +For example, if you purchase a subscription for 10 users: + +| Event | Billable members | Maximum users | +|:---------------------------------------------------|:-----------------|:--------------| +| Ten users occupy all 10 seats. | 10 | 10 | +| Two new users join. | 12 | 12 | +| Three users leave and their accounts are removed. | 9 | 12 | + +Seats owed = 12 - 10 (Maximum users - users in subscription) + +To prevent charges from seats owed, you can +[turn on restricted access](../user/group/manage.md#turn-on-restricted-access). +This setting restricts groups from adding new billable users when there are no seats left in the subscription. + +### Seat usage alerts + +{{< history >}} + +- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/348481) in GitLab 15.2 [with a flag](../administration/feature_flags/_index.md) named `seat_flag_alerts`. +- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/362041) in GitLab 15.4. Feature flag `seat_flag_alerts` removed. + +{{< /history >}} + +If you have the Owner role for a top-level group that is linked to a subscription enrolled in +[quarterly subscription reconciliations](quarterly_reconciliation.md), +you receive alerts about the seat usage in the subscription. + +The alert displays on group, subgroup, and project pages. +After you dismiss the alert, it doesn't display again until another seat is used. + +The alert displays at the following intervals: + +| Seats in subscription | Alert | +|-----------------------|---------------------| +| 0-15 | One seat remains. | +| 16-25 | Two seats remain. | +| 26-99 | 10% of seats remain.| +| 100-999 | 8% of seats remain. | +| 1000+ | 5% of seats remain. | + +### View seat usage + +To view a list of seats being used: + +1. On the left sidebar, select **Search or go to** and find your group. +1. Select **Settings > Usage quotas**. +1. Select the **Seats** tab. + +For each user, a list shows groups and projects where the user is a direct member. + +- **Group invite** indicates the user is a member of a [group invited to a group](../user/project/members/sharing_projects_groups.md#invite-a-group-to-a-group). +- **Project invite** indicates the user is a member of a [group invited to a project](../user/project/members/sharing_projects_groups.md#invite-a-group-to-a-project). + +The data in seat usage listing, **Seats in use**, and **Seats in subscription** are updated live. +The counts for **Max seats used** and **Seats owed** are updated once per day. + +#### View billing information + +To view your subscription information and a summary of seat counts: + +1. On the left sidebar, select **Search or go to** and find your group. +1. Select **Settings > Billing**. + +- The usage statistics are updated once per day, which may cause a difference between the information + in the **Usage quotas** page and the **Billing page**. +- The **Last login** field is updated when a user signs in after they have signed out. If there is an active session + when a user re-authenticates (for example, after a 24 hour SAML session timeout), this field is not updated. + +### Search users' seat usage + +You can view the users that use seats on your subscription. +To search for a user's seat usage: + +1. On the left sidebar, select **Search or go to** and find your group. +1. Select **Settings > Usage quotas**. +1. On the **Seats** tab, in the search field, enter the user's name or username. + The search string must have minimum three characters. + +The search returns a list of users whose first name, last name, or username match the search string. + +For example, for a user with the first name Amir, +the search string `ami` results in a match, but `amr` does not. + +### Export seat usage data + +To export seat usage data as a CSV file: + +1. On the left sidebar, select **Search or go to** and find your group. +1. Select **Settings > Usage quotas**. +1. In the **Seats** tab, select **Export list**. + +### Export seat usage history + +Prerequisites: + +- You must have the Owner role for the group. + +To export seat usage history as a CSV file: + +1. On the left sidebar, select **Search or go to** and find your group. +1. Select **Settings > Usage quotas**. +1. In the **Seats** tab, select **Export seat usage history**. + +The generated list contains all seats being used, +and is not affected by the current search. + +### Remove users from subscription + +To remove a billable user from your GitLab.com subscription: + +1. On the left sidebar, select **Search or go to** and find your group. +1. Select **Settings > Billing**. +1. In the **Seats currently in use** section, select **See usage**. +1. In the row for the user you want to remove, on the right side, select **Remove user**. +1. Re-type the username and select **Remove user**. + +If you add a member to a group by using the [share a group with another group](../user/project/members/sharing_projects_groups.md#invite-a-group-to-a-group) feature, you can't remove the member by using this method. Instead, you can either: + +- [Remove the member from the shared group](../user/group/_index.md#remove-a-member-from-the-group). +- [Remove the invited group](../user/project/members/sharing_projects_groups.md#remove-an-invited-group). diff --git a/doc/subscriptions/gitlab_com/_index.md b/doc/subscriptions/gitlab_com/_index.md index 11d25f447b5a82..3d63aac3946042 100644 --- a/doc/subscriptions/gitlab_com/_index.md +++ b/doc/subscriptions/gitlab_com/_index.md @@ -1,11 +1,11 @@ --- -redirect_to: '../manage_users_and_seats.md#gitlabcom-billing-and-usage' +redirect_to: '../billing_and_usage.md#gitlabcom-billing-and-usage' remove_date: '2025-11-04' --- -This document was moved to [another location](../manage_users_and_seats.md#gitlabcom-billing-and-usage). +This document was moved to [another location](../billing_and_usage.md#gitlabcom-billing-and-usage). diff --git a/doc/subscriptions/manage_subscription.md b/doc/subscriptions/manage_subscription.md index 181de4a7778237..54de143be4bfcb 100644 --- a/doc/subscriptions/manage_subscription.md +++ b/doc/subscriptions/manage_subscription.md @@ -157,7 +157,7 @@ For more information, see the documentation on: - [User statistics](../administration/admin_area.md#users-statistics). - [License usage](../administration/license_usage.md). -- [Managing users and subscription seats](manage_users_and_seats.md#manage-users-and-subscription-seats). +- [Managing users and subscription seats](billing_and_usage.md#manage-users-and-subscription-seats). ## Upgrade subscription tier @@ -239,7 +239,7 @@ Subscriptions purchased through the Customers Portal are set to auto-renew by de but you can [turn off automatic subscription renewal](#turn-on-or-turn-off-automatic-subscription-renewal). The number of user seats is adjusted to fit the number of billable users in your -[group](manage_users_and_seats.md#view-seat-usage) or [instance](manage_users_and_seats.md#view-users) +[group](billing_and_usage.md#view-seat-usage) or [instance](billing_and_usage.md#view-users) at the time of renewal, if that number is higher than the current subscription quantity. #### Turn on or turn off automatic subscription renewal @@ -282,7 +282,7 @@ To manually renew your subscription: [overage](quarterly_reconciliation.md) is due when you renew. In the **Users over license** text box, enter the number of - [users over subscription](manage_users_and_seats.md#users-over-subscription) for the user overage incurred. + [users over subscription](billing_and_usage.md#users-over-subscription) for the user overage incurred. 1. Optional. If renewing add-on products, review and update the desired quantity. You can also remove products. 1. Optional. If upgrading the subscription tier, select the desired option. 1. Review your renewal details and select **Renew subscription** to complete the @@ -300,7 +300,7 @@ Subscription renewals with fewer seats must have or exceed the current number of Before you renew your subscription: - For GitLab.com, -[reduce the number of billable users](manage_users_and_seats.md#remove-users-from-subscription) +[reduce the number of billable users](billing_and_usage.md#remove-users-from-subscription) if it exceeds the number of seats you want to renew for. - For GitLab Self-Managed, [block inactive or unwanted users](../administration/moderate_users.md#block-a-user). @@ -440,7 +440,7 @@ Customers Portal: - Company name - Licensee name - Licensee email -- Historical [maximum user count](manage_users_and_seats.md#self-managed-billing-and-usage) +- Historical [maximum user count](billing_and_usage.md#self-managed-billing-and-usage) - [Billable users count](manage_users_and_seats.md#billable-users) - GitLab version - Hostname @@ -493,7 +493,7 @@ To change the group linked to a GitLab.com subscription: - If the subscription is not linked to a group, select **Link subscription to a group**. - If the subscription is already linked to a group, select **Subscription actions** ({{< icon name="ellipsis_v" >}}) > **Change linked group**. 1. Select the desired group from the **New Namespace** dropdown list. For a group to appear here, you must have the Owner role for that group. -1. If the [total number of users](manage_users_and_seats.md#view-seat-usage) in your group exceeds the number of seats in your subscription, +1. If the [total number of users](billing_and_usage.md#view-seat-usage) in your group exceeds the number of seats in your subscription, you are prompted to pay for the additional users. Subscription charges are calculated based on the total number of users in a group, including its subgroups and nested projects. diff --git a/doc/subscriptions/manage_users_and_seats.md b/doc/subscriptions/manage_users_and_seats.md index fd6d771ca5456c..d570994f0ef657 100644 --- a/doc/subscriptions/manage_users_and_seats.md +++ b/doc/subscriptions/manage_users_and_seats.md @@ -133,287 +133,3 @@ If you want to reduce the number of seats in your subscription, you can [renew f If you want to reduce seats after you have renewed or purchased a subscription, open a ticket with the Billing team or contact your GitLab sales representative. For assistance, visit the [Contact us](https://customers.gitlab.com/contact_us) page in your Customers Portal account. - -## Self-Managed billing and usage - -{{< details >}} - -- Offering: GitLab Self-Managed - -{{< /details >}} - -A GitLab Self-Managed subscription uses a hybrid model. You pay for a subscription -according to the maximum number of users enabled during the -subscription period. - -For instances that are not offline or on a closed network, the maximum number of -simultaneous users in the GitLab Self-Managed instance is checked each quarter. - -If an instance is unable to generate a quarterly usage report, the existing -true up model is used. Prorated charges are not -possible without a quarterly usage report. - -The number of users in subscription represents the number of users included in your current license, -based on what you've paid for. -This number remains the same throughout your subscription period unless you purchase more seats. - -The number of maximum users reflects the highest number of billable users on your system for the current license period. - -You can view and export your [license usage](../administration/license_usage.md). - -### Users over subscription - -A GitLab subscription is valid for a specific number of seats. -The number of users over subscription shows how many users are in excess of the -number allowed by the subscription, in the current subscription period. - -Calculated as `Maximum users` - `Users in subscription` for the current license -term. For example, you purchase a subscription for 10 users. - -| Event | Billable users | Maximum users | -|:---------------------------------------------------|:-----------------|:--------------| -| Ten users occupy all 10 seats. | 10 | 10 | -| Two new users join. | 12 | 12 | -| Three users leave and their accounts are blocked. | 9 | 12 | -| Four new users join. | 13 | 13 | - -Users over subscription = 13 - 10 (Maximum users - users in license) - -The users over subscription value is always zero for trial license. - -If users over subscription value is above zero, then you have more users in your -GitLab instance than you are licensed for. You must pay for the additional users -[before or at the time of renewal](quarterly_reconciliation.md). This is -called the "true up" process. If you do not do this, your license key does not work. - -To view the number of users over subscription, go to the **Admin** area. - -### View users - -View the lists of users in your instance: - -1. On the left sidebar, at the bottom, select **Admin**. -1. Select **Users**. - -Select a user to view their account information. - -#### Check daily and historical billable users - -Prerequisites: - -- You must be an administrator. - -You can get a list of daily and historical billable users in your GitLab instance: - -1. [Start a Rails console session](../administration/operations/rails_console.md#starting-a-rails-console-session). -1. Count the number of users in the instance: - - ```ruby - User.billable.count - ``` - -1. Get the historical maximum number of users on the instance from the past year: - - ```ruby - ::HistoricalData.max_historical_user_count(from: 1.year.ago.beginning_of_day, to: Time.current.end_of_day) - ``` - -#### Update daily and historical billable users - -Prerequisites: - -- You must be an administrator. - -You can trigger a manual update of the daily and historical billable users in your GitLab instance. - -1. [Start a Rails console session](../administration/operations/rails_console.md#starting-a-rails-console-session). -1. Force an update of the daily billable users: - - ```ruby - identifier = Analytics::UsageTrends::Measurement.identifiers[:billable_users] - ::Analytics::UsageTrends::CounterJobWorker.new.perform(identifier, User.minimum(:id), User.maximum(:id), Time.zone.now) - ``` - -1. Force an update of the historical max billable users: - - ```ruby - ::HistoricalDataWorker.new.perform - ``` - -### Manage users and subscription seats - -Managing the number of users against the number of subscription seats can be difficult: - -- If [LDAP is integrated with GitLab](../administration/auth/ldap/_index.md), anyone - in the configured domain can sign up for a GitLab account. This can result in - an unexpected bill at time of renewal. -- If sign-up is turned on in your instance, anyone who can access the instance can - sign up for an account. - -GitLab has several features to help you manage the number of users. You can: - -- [Require administrator approval for new sign ups](../administration/settings/sign_up_restrictions.md#require-administrator-approval-for-new-sign-ups). -- Automatically block new users, either through - [LDAP](../administration/auth/ldap/_index.md#basic-configuration-settings) or - [OmniAuth](../integration/omniauth.md#configure-common-settings). -- [Limit the number of billable users](../administration/settings/sign_up_restrictions.md#user-cap) - who can sign up or be added to a subscription without administrator approval. -- [Disable new sign-ups](../administration/settings/sign_up_restrictions.md), - and instead manage new users manually. -- View a breakdown of users by role in the - [Users statistics](../administration/admin_area.md#users-statistics) page. - -To increase the number of users covered by your license, [buy more seats](#buy-more-seats) -during the subscription period. The cost of seats added during the subscription -period is prorated from the date of purchase through to the end of the subscription -period. You can continue to add users even if you reach the number of users in -license count. GitLab [bills you for the overage](quarterly_reconciliation.md). - -If your subscription was activated with an activation code, the additional seats are reflected in -your instance immediately. If you're using a license file, you receive an updated file. -To add the seats, [add the license file](../administration/license_file.md) -to your instance. - -## GitLab.com billing and usage - -{{< details >}} - -- Offering: GitLab.com - -{{< /details >}} - -A GitLab.com subscription uses a concurrent (_seat_) model. -You pay for a subscription according to the maximum number of users assigned to the top-level group, -its subgroups and projects during the billing period. -You can add and remove users during the subscription period without incurring additional charges, -as long as the total users at any given time doesn't exceed the subscription count. -If the total users exceeds your subscription count, you will incur an overage, -which must be paid at your next [reconciliation](quarterly_reconciliation.md). - -A top-level group can be [changed](../user/group/manage.md#change-a-groups-path) like any other group. - -### Seats owed - -If the number of billable users exceeds the number of **seats in subscription**, known -as the number of **seats owed**, you must pay for the excess number of users. - -For example, if you purchase a subscription for 10 users: - -| Event | Billable members | Maximum users | -|:---------------------------------------------------|:-----------------|:--------------| -| Ten users occupy all 10 seats. | 10 | 10 | -| Two new users join. | 12 | 12 | -| Three users leave and their accounts are removed. | 9 | 12 | - -Seats owed = 12 - 10 (Maximum users - users in subscription) - -To prevent charges from seats owed, you can -[turn on restricted access](../user/group/manage.md#turn-on-restricted-access). -This setting restricts groups from adding new billable users when there are no seats left in the subscription. - -### Seat usage alerts - -{{< history >}} - -- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/348481) in GitLab 15.2 [with a flag](../administration/feature_flags/_index.md) named `seat_flag_alerts`. -- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/362041) in GitLab 15.4. Feature flag `seat_flag_alerts` removed. - -{{< /history >}} - -If you have the Owner role for a top-level group that is linked to a subscription enrolled in -[quarterly subscription reconciliations](quarterly_reconciliation.md), -you receive alerts about the seat usage in the subscription. - -The alert displays on group, subgroup, and project pages. -After you dismiss the alert, it doesn't display again until another seat is used. - -The alert displays at the following intervals: - -| Seats in subscription | Alert | -|-----------------------|---------------------| -| 0-15 | One seat remains. | -| 16-25 | Two seats remain. | -| 26-99 | 10% of seats remain.| -| 100-999 | 8% of seats remain. | -| 1000+ | 5% of seats remain. | - -### View seat usage - -To view a list of seats being used: - -1. On the left sidebar, select **Search or go to** and find your group. -1. Select **Settings > Usage quotas**. -1. Select the **Seats** tab. - -For each user, a list shows groups and projects where the user is a direct member. - -- **Group invite** indicates the user is a member of a [group invited to a group](../user/project/members/sharing_projects_groups.md#invite-a-group-to-a-group). -- **Project invite** indicates the user is a member of a [group invited to a project](../user/project/members/sharing_projects_groups.md#invite-a-group-to-a-project). - -The data in seat usage listing, **Seats in use**, and **Seats in subscription** are updated live. -The counts for **Max seats used** and **Seats owed** are updated once per day. - -#### View billing information - -To view your subscription information and a summary of seat counts: - -1. On the left sidebar, select **Search or go to** and find your group. -1. Select **Settings > Billing**. - -- The usage statistics are updated once per day, which may cause a difference between the information - in the **Usage quotas** page and the **Billing page**. -- The **Last login** field is updated when a user signs in after they have signed out. If there is an active session - when a user re-authenticates (for example, after a 24 hour SAML session timeout), this field is not updated. - -### Search users' seat usage - -You can view the users that use seats on your subscription. -To search for a user's seat usage: - -1. On the left sidebar, select **Search or go to** and find your group. -1. Select **Settings > Usage quotas**. -1. On the **Seats** tab, in the search field, enter the user's name or username. - The search string must have minimum three characters. - -The search returns a list of users whose first name, last name, or username match the search string. - -For example, for a user with the first name Amir, -the search string `ami` results in a match, but `amr` does not. - -### Export seat usage data - -To export seat usage data as a CSV file: - -1. On the left sidebar, select **Search or go to** and find your group. -1. Select **Settings > Usage quotas**. -1. In the **Seats** tab, select **Export list**. - -### Export seat usage history - -Prerequisites: - -- You must have the Owner role for the group. - -To export seat usage history as a CSV file: - -1. On the left sidebar, select **Search or go to** and find your group. -1. Select **Settings > Usage quotas**. -1. In the **Seats** tab, select **Export seat usage history**. - -The generated list contains all seats being used, -and is not affected by the current search. - -### Remove users from subscription - -To remove a billable user from your GitLab.com subscription: - -1. On the left sidebar, select **Search or go to** and find your group. -1. Select **Settings > Billing**. -1. In the **Seats currently in use** section, select **See usage**. -1. In the row for the user you want to remove, on the right side, select **Remove user**. -1. Re-type the username and select **Remove user**. - -If you add a member to a group by using the [share a group with another group](../user/project/members/sharing_projects_groups.md#invite-a-group-to-a-group) feature, you can't remove the member by using this method. Instead, you can either: - -- [Remove the member from the shared group](../user/group/_index.md#remove-a-member-from-the-group). -- [Remove the invited group](../user/project/members/sharing_projects_groups.md#remove-an-invited-group). diff --git a/doc/subscriptions/quarterly_reconciliation.md b/doc/subscriptions/quarterly_reconciliation.md index 32687c65c20e0e..d876ae1fb392de 100644 --- a/doc/subscriptions/quarterly_reconciliation.md +++ b/doc/subscriptions/quarterly_reconciliation.md @@ -17,7 +17,7 @@ In accordance with [the GitLab Subscription Agreement](https://about.gitlab.com/ GitLab reviews your seat usage and sends you an invoice for any overages. This review occurs either quarterly (quarterly reconciliation process) or annually (annual true-up process). -To learn more about how GitLab bills GitLab.com users, see [How seat usage is determined](manage_users_and_seats.md#gitlabcom-billing-and-usage). For GitLab Self-Managed users, see [How GitLab bills for users](manage_users_and_seats.md#self-managed-billing-and-usage). +To learn more about how GitLab bills GitLab.com users, see [How seat usage is determined](billing_and_usage.md#gitlabcom-billing-and-usage). For GitLab Self-Managed users, see [How GitLab bills for users](billing_and_usage.md#self-managed-billing-and-usage). To prevent overages, you can turn on restricted access for [your group](../user/group/manage.md#turn-on-restricted-access) or [your instance](../administration/settings/sign_up_restrictions.md#turn-on-restricted-access). @@ -65,7 +65,7 @@ If you are billed quarterly: At the end of each subscription quarter, GitLab notifies you about overages. The date you're notified about the overage is not the same as the date you are billed. -1. An email that communicates the [overage seat quantity](manage_users_and_seats.md#seats-owed) +1. An email that communicates the [overage seat quantity](billing_and_usage.md#seats-owed) and expected invoice amount is sent: - On GitLab.com: On the reconciliation date, to group owners. diff --git a/doc/user/custom_roles/_index.md b/doc/user/custom_roles/_index.md index fa9f6acedfb1a9..c624d5a0bea8cb 100644 --- a/doc/user/custom_roles/_index.md +++ b/doc/user/custom_roles/_index.md @@ -33,7 +33,7 @@ There are two types of custom roles: - Custom member roles: - Can be assigned to members of a group or project. - Gains the same permissions in any subgroups or projects. For more information, see [membership types](../../user/project/members/_index.md#membership-types). - - [Uses a seat](../../subscriptions/manage_users_and_seats.md#gitlabcom-billing-and-usage) and becomes a [billable user](../../subscriptions/manage_users_and_seats.md#billable-users). + - [Uses a seat](../../subscriptions/billing_and_usage.md#gitlabcom-billing-and-usage) and becomes a [billable user](../../subscriptions/manage_users_and_seats.md#billable-users). - A custom Guest member role that includes only the `read_code` permission does not use a seat. - Custom admin roles: - Can be assigned to any user on the instance. diff --git a/doc/user/group/_index.md b/doc/user/group/_index.md index 14190f2104a4f4..618334af8a7b67 100644 --- a/doc/user/group/_index.md +++ b/doc/user/group/_index.md @@ -382,7 +382,7 @@ For more information, see [issue 23020](https://gitlab.com/gitlab-org/gitlab/-/i {{< /alert >}} -To view all namespace members (and their respective occupied seats), in the top-level namespace, [view the **Usage quotas** page](../../subscriptions/manage_users_and_seats.md#view-seat-usage). +To view all namespace members (and their respective occupied seats), in the top-level namespace, [view the **Usage quotas** page](../../subscriptions/billing_and_usage.md#view-seat-usage). ## Filter and sort members in a group diff --git a/ee/app/assets/javascripts/usage_quotas/seats/constants.js b/ee/app/assets/javascripts/usage_quotas/seats/constants.js index 31619f14d51da0..4c401a82011770 100644 --- a/ee/app/assets/javascripts/usage_quotas/seats/constants.js +++ b/ee/app/assets/javascripts/usage_quotas/seats/constants.js @@ -104,10 +104,10 @@ export const SORT_OPTIONS = [ }, ]; export const EXPLORE_PAID_PLANS_CLICKED = 'explore_paid_plans_clicked'; -export const seatsInUseLink = helpPagePath('subscriptions/manage_users_and_seats', { +export const seatsInUseLink = helpPagePath('subscriptions/billing_and_usage', { anchor: 'gitlabcom-billing-and-usage', }); -export const seatsOwedLink = helpPagePath('subscriptions/manage_users_and_seats', { +export const seatsOwedLink = helpPagePath('subscriptions/billing_and_usage', { anchor: 'seats-owed', }); export const seatsUsedLink = helpPagePath('subscriptions/manage_subscription', { diff --git a/ee/app/views/license_mailer/approaching_active_user_count_limit.html.haml b/ee/app/views/license_mailer/approaching_active_user_count_limit.html.haml index a29c2e210faf39..870de00c676e45 100644 --- a/ee/app/views/license_mailer/approaching_active_user_count_limit.html.haml +++ b/ee/app/views/license_mailer/approaching_active_user_count_limit.html.haml @@ -1,5 +1,5 @@ -- users_over_subscription_link = link_to("users over subscription", help_page_url('subscriptions/manage_users_and_seats.md', anchor: 'users-over-subscription')) -- self_managed_subscriptions_doc_link = link_to("self-managed subscriptions", help_page_url('subscriptions/manage_users_and_seats.md', anchor: 'self-managed-billing-and-usage')) +- users_over_subscription_link = link_to("users over subscription", help_page_url('subscriptions/billing_and_usage.md', anchor: 'users-over-subscription')) +- self_managed_subscriptions_doc_link = link_to("self-managed subscriptions", help_page_url('subscriptions/billing_and_usage.md', anchor: 'self-managed-billing-and-usage')) - subscriptions_doc_link = link_to("our documentation", help_page_url('subscriptions/_index.md')) %p diff --git a/ee/spec/frontend/usage_quotas/seats/components/subscription_seats_statistics_card_spec.js b/ee/spec/frontend/usage_quotas/seats/components/subscription_seats_statistics_card_spec.js index 4ad9416216cf94..557c6b9b4bf2dd 100644 --- a/ee/spec/frontend/usage_quotas/seats/components/subscription_seats_statistics_card_spec.js +++ b/ee/spec/frontend/usage_quotas/seats/components/subscription_seats_statistics_card_spec.js @@ -93,7 +93,7 @@ describe('SubscriptionSeatsStatisticsCard', () => { it('renders the tooltip link', () => { expect(findTooltipLink().attributes('href')).toBe( - '/help/subscriptions/manage_users_and_seats#gitlabcom-billing-and-usage', + '/help/subscriptions/billing_and_usage#gitlabcom-billing-and-usage', ); }); @@ -129,7 +129,7 @@ describe('SubscriptionSeatsStatisticsCard', () => { it('renders the tooltip link', () => { expect(findTooltipLink().attributes('href')).toBe( - '/help/subscriptions/manage_users_and_seats#gitlabcom-billing-and-usage', + '/help/subscriptions/billing_and_usage#gitlabcom-billing-and-usage', ); }); @@ -164,7 +164,7 @@ describe('SubscriptionSeatsStatisticsCard', () => { it('renders the tooltip link', () => { expect(findTooltipLink().attributes('href')).toBe( - '/help/subscriptions/manage_users_and_seats#gitlabcom-billing-and-usage', + '/help/subscriptions/billing_and_usage#gitlabcom-billing-and-usage', ); }); @@ -234,7 +234,7 @@ describe('SubscriptionSeatsStatisticsCard', () => { it('renders the tooltip link', () => { expect(findTooltipLink().attributes('href')).toBe( - '/help/subscriptions/manage_users_and_seats#gitlabcom-billing-and-usage', + '/help/subscriptions/billing_and_usage#gitlabcom-billing-and-usage', ); }); -- GitLab From 1956014249c2d812c4c2e7d40b84445207470823 Mon Sep 17 00:00:00 2001 From: Lorena Ciutacu Date: Tue, 23 Sep 2025 18:51:18 +0200 Subject: [PATCH 2/4] Add intro about billing --- doc/subscriptions/billing_and_usage.md | 3 +++ doc/subscriptions/quarterly_reconciliation.md | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/subscriptions/billing_and_usage.md b/doc/subscriptions/billing_and_usage.md index 42fc496a7adac4..30b0a7c2039aaa 100644 --- a/doc/subscriptions/billing_and_usage.md +++ b/doc/subscriptions/billing_and_usage.md @@ -13,6 +13,9 @@ title: Billing and usage {{< /details >}} +GitLab uses different billing models depending on your deployment. +Understanding how billing works helps you manage costs and get insights into the seat usage of your subscription. + ## Self-Managed billing and usage {{< details >}} diff --git a/doc/subscriptions/quarterly_reconciliation.md b/doc/subscriptions/quarterly_reconciliation.md index b8a883db031b60..3acdc13faffd00 100644 --- a/doc/subscriptions/quarterly_reconciliation.md +++ b/doc/subscriptions/quarterly_reconciliation.md @@ -26,8 +26,8 @@ You pay less annually, which can result in substantial savings. Learn more about: -- [How seat usage is determined](manage_users_and_seats.md#gitlabcom-billing-and-usage) on GitLab.com. -- [How GitLab bills for users](manage_users_and_seats.md#self-managed-billing-and-usage) on GitLab Self-Managed. +- [How seat usage is determined](billing_and_usage.md#gitlabcom-billing-and-usage) on GitLab.com. +- [How GitLab bills for users](billing_and_usage.md#self-managed-billing-and-usage) on GitLab Self-Managed. To prevent overages, you can turn on restricted access for your [group](../user/group/manage.md#turn-on-restricted-access) or [instance](../administration/settings/sign_up_restrictions.md#turn-on-restricted-access). @@ -87,7 +87,7 @@ Alternatively, you can reconcile any overages by [purchasing additional seats](m At the end of each subscription quarter, GitLab notifies you about overages. The date you're notified about the overage is not the same as the date you are billed. -1. An email that communicates the [overage seat quantity](manage_users_and_seats.md#seats-owed) +1. An email that communicates the [overage seat quantity](billing_and_usage.md#seats-owed) and expected invoice amount is sent: - On GitLab.com: On the reconciliation date, to group owners and billing account managers. -- GitLab From 6e32df181cc45028b987a1420544701dd9b313b6 Mon Sep 17 00:00:00 2001 From: Lorena Ciutacu Date: Wed, 24 Sep 2025 16:44:19 +0200 Subject: [PATCH 3/4] Rename offering headings, --- .../documentation/styleguide/word_list.md | 2 +- doc/subscriptions/billing_and_usage.md | 284 +++++++++--------- doc/subscriptions/gitlab_com/_index.md | 4 +- doc/subscriptions/manage_subscription.md | 2 +- doc/subscriptions/quarterly_reconciliation.md | 4 +- doc/user/custom_roles/_index.md | 2 +- ...roaching_active_user_count_limit.html.haml | 2 +- ...subscription_seats_statistics_card_spec.js | 8 +- 8 files changed, 154 insertions(+), 154 deletions(-) diff --git a/doc/development/documentation/styleguide/word_list.md b/doc/development/documentation/styleguide/word_list.md index 9a5667dd668f01..05df7239f129a6 100644 --- a/doc/development/documentation/styleguide/word_list.md +++ b/doc/development/documentation/styleguide/word_list.md @@ -2376,7 +2376,7 @@ Searching is different from [filtering](#filter). When referring to the subscription billing model: - For GitLab.com, use **seats**. Customers purchase seats. Users occupy seats when they are invited - to a group, with some [exceptions](../../../subscriptions/billing_and_usage.md#gitlabcom-billing-and-usage). + to a group, with some [exceptions](../../../subscriptions/billing_and_usage.md#for-gitlabcom). - For GitLab Self-Managed, use **users**. Customers purchase subscriptions for a specified number of **users**. ## section diff --git a/doc/subscriptions/billing_and_usage.md b/doc/subscriptions/billing_and_usage.md index 30b0a7c2039aaa..a4a7b0dd7c7061 100644 --- a/doc/subscriptions/billing_and_usage.md +++ b/doc/subscriptions/billing_and_usage.md @@ -16,147 +16,7 @@ title: Billing and usage GitLab uses different billing models depending on your deployment. Understanding how billing works helps you manage costs and get insights into the seat usage of your subscription. -## Self-Managed billing and usage - -{{< details >}} - -- Offering: GitLab Self-Managed - -{{< /details >}} - -A GitLab Self-Managed subscription uses a hybrid model. You pay for a subscription -according to the maximum number of users enabled during the -subscription period. - -For instances that are not offline or on a closed network, the maximum number of -simultaneous users in the GitLab Self-Managed instance is checked each quarter. - -If an instance is unable to generate a quarterly usage report, the existing -true up model is used. Prorated charges are not -possible without a quarterly usage report. - -The number of users in subscription represents the number of users included in your current license, -based on what you've paid for. -This number remains the same throughout your subscription period unless you purchase more seats. - -The number of maximum users reflects the highest number of billable users on your system for the current license period. - -You can view and export your [license usage](../administration/license_usage.md). - -### Users over subscription - -A GitLab subscription is valid for a specific number of seats. -The number of users over subscription shows how many users are in excess of the -number allowed by the subscription, in the current subscription period. - -Calculated as `Maximum users` - `Users in subscription` for the current license -term. For example, you purchase a subscription for 10 users. - -| Event | Billable users | Maximum users | -|:---------------------------------------------------|:-----------------|:--------------| -| Ten users occupy all 10 seats. | 10 | 10 | -| Two new users join. | 12 | 12 | -| Three users leave and their accounts are blocked. | 9 | 12 | -| Four new users join. | 13 | 13 | - -Users over subscription = 13 - 10 (Maximum users - users in license) - -The users over subscription value is always zero for trial license. - -If users over subscription value is above zero, then you have more users in your -GitLab instance than you are licensed for. You must pay for the additional users -[before or at the time of renewal](quarterly_reconciliation.md). This is -called the "true up" process. If you do not do this, your license key does not work. - -To view the number of users over subscription, go to the **Admin** area. - -### View users - -View the lists of users in your instance: - -1. On the left sidebar, at the bottom, select **Admin**. -1. Select **Users**. - -Select a user to view their account information. - -#### Check daily and historical billable users - -Prerequisites: - -- You must be an administrator. - -You can get a list of daily and historical billable users in your GitLab instance: - -1. [Start a Rails console session](../administration/operations/rails_console.md#starting-a-rails-console-session). -1. Count the number of users in the instance: - - ```ruby - User.billable.count - ``` - -1. Get the historical maximum number of users on the instance from the past year: - - ```ruby - ::HistoricalData.max_historical_user_count(from: 1.year.ago.beginning_of_day, to: Time.current.end_of_day) - ``` - -#### Update daily and historical billable users - -Prerequisites: - -- You must be an administrator. - -You can trigger a manual update of the daily and historical billable users in your GitLab instance. - -1. [Start a Rails console session](../administration/operations/rails_console.md#starting-a-rails-console-session). -1. Force an update of the daily billable users: - - ```ruby - identifier = Analytics::UsageTrends::Measurement.identifiers[:billable_users] - ::Analytics::UsageTrends::CounterJobWorker.new.perform(identifier, User.minimum(:id), User.maximum(:id), Time.zone.now) - ``` - -1. Force an update of the historical max billable users: - - ```ruby - ::HistoricalDataWorker.new.perform - ``` - -### Manage users and subscription seats - -Managing the number of users against the number of subscription seats can be difficult: - -- If [LDAP is integrated with GitLab](../administration/auth/ldap/_index.md), anyone - in the configured domain can sign up for a GitLab account. This can result in - an unexpected bill at time of renewal. -- If sign-up is turned on in your instance, anyone who can access the instance can - sign up for an account. - -GitLab has several features to help you manage the number of users. You can: - -- [Require administrator approval for new sign ups](../administration/settings/sign_up_restrictions.md#require-administrator-approval-for-new-sign-ups). -- Automatically block new users, either through - [LDAP](../administration/auth/ldap/_index.md#basic-configuration-settings) or - [OmniAuth](../integration/omniauth.md#configure-common-settings). -- [Limit the number of billable users](../administration/settings/sign_up_restrictions.md#user-cap) - who can sign up or be added to a subscription without administrator approval. -- [Disable new sign-ups](../administration/settings/sign_up_restrictions.md), - and instead manage new users manually. -- View a breakdown of users by role in the - [Users statistics](../administration/admin_area.md#users-statistics) page. - -To increase the number of users covered by your license, [buy more seats](manage_users_and_seats.md#buy-more-seats) -during the subscription period. The cost of seats added during the subscription -period is prorated from the date of purchase through to the end of the subscription -period. You can continue to add users even if you reach the number of users in -license count. GitLab [bills you for the overage](quarterly_reconciliation.md). - -If your subscription was activated with an activation code, the additional seats are reflected in -your instance immediately. If you're using a license file, you receive an updated file. -To add the seats, [add the license file](../administration/license_file.md) -to your instance. - -## GitLab.com billing and usage +## For GitLab.com {{< details >}} @@ -242,7 +102,7 @@ To view your subscription information and a summary of seat counts: 1. On the left sidebar, select **Search or go to** and find your group. 1. Select **Settings > Billing**. -- The usage statistics are updated once per day, which may cause a difference between the information +- The usage statistics are updated once per day, which might cause a difference between the information in the **Usage quotas** page and the **Billing page**. - The **Last login** field is updated when a user signs in after they have signed out. If there is an active session when a user re-authenticates (for example, after a 24 hour SAML session timeout), this field is not updated. @@ -299,3 +159,143 @@ If you add a member to a group by using the [share a group with another group](. - [Remove the member from the shared group](../user/group/_index.md#remove-a-member-from-the-group). - [Remove the invited group](../user/project/members/sharing_projects_groups.md#remove-an-invited-group). + +## For GitLab Self-Managed + +{{< details >}} + +- Offering: GitLab Self-Managed + +{{< /details >}} + +A GitLab Self-Managed subscription uses a hybrid model. You pay for a subscription +according to the maximum number of users enabled during the +subscription period. + +For instances that are not offline or on a closed network, the maximum number of +simultaneous users in the GitLab Self-Managed instance is checked each quarter. + +If an instance is unable to generate a quarterly usage report, the existing +true up model is used. Prorated charges are not +possible without a quarterly usage report. + +The number of users in subscription represents the number of users included in your current license, +based on what you've paid for. +This number remains the same throughout your subscription period unless you purchase more seats. + +The number of maximum users reflects the highest number of billable users on your system for the current license period. + +You can view and export your [license usage](../administration/license_usage.md). + +### Users over subscription + +A GitLab subscription is valid for a specific number of seats. +The number of users over subscription shows how many users are in excess of the +number allowed by the subscription, in the current subscription period. + +Calculated as `Maximum users` - `Users in subscription` for the current license +term. For example, you purchase a subscription for 10 users. + +| Event | Billable users | Maximum users | +|:---------------------------------------------------|:-----------------|:--------------| +| Ten users occupy all 10 seats. | 10 | 10 | +| Two new users join. | 12 | 12 | +| Three users leave and their accounts are blocked. | 9 | 12 | +| Four new users join. | 13 | 13 | + +Users over subscription = 13 - 10 (maximum users - users in license) + +The users over subscription value is always zero for trial license. + +If users over subscription value is above zero, then you have more users in your +GitLab instance than you are licensed for. You must pay for the additional users +[before or at the time of renewal](quarterly_reconciliation.md). This process is +called true up. If you don't pay in time, your license key does not work. + +To view the number of users over subscription, go to the **Admin** area. + +### View users + +View the lists of users in your instance: + +1. On the left sidebar, at the bottom, select **Admin**. +1. Select **Users**. + +Select a user to view their account information. + +#### Check daily and historical billable users + +Prerequisites: + +- You must be an administrator. + +You can get a list of daily and historical billable users in your GitLab instance: + +1. [Start a Rails console session](../administration/operations/rails_console.md#starting-a-rails-console-session). +1. Count the number of users in the instance: + + ```ruby + User.billable.count + ``` + +1. Get the historical maximum number of users on the instance from the past year: + + ```ruby + ::HistoricalData.max_historical_user_count(from: 1.year.ago.beginning_of_day, to: Time.current.end_of_day) + ``` + +#### Update daily and historical billable users + +Prerequisites: + +- You must be an administrator. + +You can trigger a manual update of the daily and historical billable users in your GitLab instance. + +1. [Start a Rails console session](../administration/operations/rails_console.md#starting-a-rails-console-session). +1. Force an update of the daily billable users: + + ```ruby + identifier = Analytics::UsageTrends::Measurement.identifiers[:billable_users] + ::Analytics::UsageTrends::CounterJobWorker.new.perform(identifier, User.minimum(:id), User.maximum(:id), Time.zone.now) + ``` + +1. Force an update of the historical max billable users: + + ```ruby + ::HistoricalDataWorker.new.perform + ``` + +### Manage users and subscription seats + +Managing the number of users against the number of subscription seats can be difficult: + +- If [LDAP is integrated with GitLab](../administration/auth/ldap/_index.md), anyone + in the configured domain can sign up for a GitLab account. This can result in + an unexpected bill at time of renewal. +- If sign-up is turned on in your instance, anyone who can access the instance can + sign up for an account. + +GitLab has several features to help you manage the number of users. You can: + +- [Require administrator approval for new sign ups](../administration/settings/sign_up_restrictions.md#require-administrator-approval-for-new-sign-ups). +- Automatically block new users, either through + [LDAP](../administration/auth/ldap/_index.md#basic-configuration-settings) or + [OmniAuth](../integration/omniauth.md#configure-common-settings). +- [Limit the number of billable users](../administration/settings/sign_up_restrictions.md#user-cap) + who can sign up or be added to a subscription without administrator approval. +- [Disable new sign-ups](../administration/settings/sign_up_restrictions.md), + and instead manage new users manually. +- View a breakdown of users by role in the + [Users statistics](../administration/admin_area.md#users-statistics) page. + +To increase the number of users covered by your license, [buy more seats](manage_users_and_seats.md#buy-more-seats) +during the subscription period. The cost of seats added during the subscription +period is prorated from the date of purchase through to the end of the subscription +period. You can continue to add users even if you reach the number of users in +license count. GitLab [bills you for the overage](quarterly_reconciliation.md). + +If your subscription was activated with an activation code, the additional seats are reflected in +your instance immediately. If you're using a license file, you receive an updated file. +To add the seats, [add the license file](../administration/license_file.md) +to your instance. diff --git a/doc/subscriptions/gitlab_com/_index.md b/doc/subscriptions/gitlab_com/_index.md index 3d63aac3946042..5469942a97c2e2 100644 --- a/doc/subscriptions/gitlab_com/_index.md +++ b/doc/subscriptions/gitlab_com/_index.md @@ -1,11 +1,11 @@ --- -redirect_to: '../billing_and_usage.md#gitlabcom-billing-and-usage' +redirect_to: '../billing_and_usage.md#for-gitlabcom' remove_date: '2025-11-04' --- -This document was moved to [another location](../billing_and_usage.md#gitlabcom-billing-and-usage). +This document was moved to [another location](../billing_and_usage.md#for-gitlabcom). diff --git a/doc/subscriptions/manage_subscription.md b/doc/subscriptions/manage_subscription.md index c337101d793f81..f07144e48ca7de 100644 --- a/doc/subscriptions/manage_subscription.md +++ b/doc/subscriptions/manage_subscription.md @@ -440,7 +440,7 @@ Customers Portal: - Company name - Licensee name - Licensee email -- Historical [maximum user count](billing_and_usage.md#self-managed-billing-and-usage) +- Historical [maximum user count](billing_and_usage.md#for-gitlab-self-managed) - [Billable users count](manage_users_and_seats.md#billable-users) - GitLab version - Hostname diff --git a/doc/subscriptions/quarterly_reconciliation.md b/doc/subscriptions/quarterly_reconciliation.md index 3acdc13faffd00..9596e267c4df4c 100644 --- a/doc/subscriptions/quarterly_reconciliation.md +++ b/doc/subscriptions/quarterly_reconciliation.md @@ -26,8 +26,8 @@ You pay less annually, which can result in substantial savings. Learn more about: -- [How seat usage is determined](billing_and_usage.md#gitlabcom-billing-and-usage) on GitLab.com. -- [How GitLab bills for users](billing_and_usage.md#self-managed-billing-and-usage) on GitLab Self-Managed. +- [How seat usage is determined](billing_and_usage.md#for-gitlabcom) on GitLab.com. +- [How GitLab bills for users](billing_and_usage.md#for-gitlab-self-managed) on GitLab Self-Managed. To prevent overages, you can turn on restricted access for your [group](../user/group/manage.md#turn-on-restricted-access) or [instance](../administration/settings/sign_up_restrictions.md#turn-on-restricted-access). diff --git a/doc/user/custom_roles/_index.md b/doc/user/custom_roles/_index.md index 3a96450d31f226..a745af13e0c144 100644 --- a/doc/user/custom_roles/_index.md +++ b/doc/user/custom_roles/_index.md @@ -33,7 +33,7 @@ There are two types of custom roles: - Custom member roles: - Can be assigned to members of a group or project. - Gains the same permissions in any subgroups or projects. For more information, see [membership types](../../user/project/members/_index.md#membership-types). - - [Uses a seat](../../subscriptions/billing_and_usage.md#gitlabcom-billing-and-usage) and becomes a [billable user](../../subscriptions/manage_users_and_seats.md#billable-users). + - [Uses a seat](../../subscriptions/billing_and_usage.md#for-gitlabcom) and becomes a [billable user](../../subscriptions/manage_users_and_seats.md#billable-users). - A custom Guest member role that includes only the `read_code` permission does not use a seat. - Custom admin roles: - Can be assigned to any user on the instance. diff --git a/ee/app/views/license_mailer/approaching_active_user_count_limit.html.haml b/ee/app/views/license_mailer/approaching_active_user_count_limit.html.haml index 870de00c676e45..1f88ff302dcc50 100644 --- a/ee/app/views/license_mailer/approaching_active_user_count_limit.html.haml +++ b/ee/app/views/license_mailer/approaching_active_user_count_limit.html.haml @@ -1,5 +1,5 @@ - users_over_subscription_link = link_to("users over subscription", help_page_url('subscriptions/billing_and_usage.md', anchor: 'users-over-subscription')) -- self_managed_subscriptions_doc_link = link_to("self-managed subscriptions", help_page_url('subscriptions/billing_and_usage.md', anchor: 'self-managed-billing-and-usage')) +- self_managed_subscriptions_doc_link = link_to("self-managed subscriptions", help_page_url('subscriptions/billing_and_usage.md', anchor: 'for-gitlab-self-managed')) - subscriptions_doc_link = link_to("our documentation", help_page_url('subscriptions/_index.md')) %p diff --git a/ee/spec/frontend/usage_quotas/seats/components/subscription_seats_statistics_card_spec.js b/ee/spec/frontend/usage_quotas/seats/components/subscription_seats_statistics_card_spec.js index 557c6b9b4bf2dd..25079615970bda 100644 --- a/ee/spec/frontend/usage_quotas/seats/components/subscription_seats_statistics_card_spec.js +++ b/ee/spec/frontend/usage_quotas/seats/components/subscription_seats_statistics_card_spec.js @@ -93,7 +93,7 @@ describe('SubscriptionSeatsStatisticsCard', () => { it('renders the tooltip link', () => { expect(findTooltipLink().attributes('href')).toBe( - '/help/subscriptions/billing_and_usage#gitlabcom-billing-and-usage', + '/help/subscriptions/billing_and_usage#for-gitlabcom', ); }); @@ -129,7 +129,7 @@ describe('SubscriptionSeatsStatisticsCard', () => { it('renders the tooltip link', () => { expect(findTooltipLink().attributes('href')).toBe( - '/help/subscriptions/billing_and_usage#gitlabcom-billing-and-usage', + '/help/subscriptions/billing_and_usage#for-gitlabcom', ); }); @@ -164,7 +164,7 @@ describe('SubscriptionSeatsStatisticsCard', () => { it('renders the tooltip link', () => { expect(findTooltipLink().attributes('href')).toBe( - '/help/subscriptions/billing_and_usage#gitlabcom-billing-and-usage', + '/help/subscriptions/billing_and_usage#for-gitlabcom', ); }); @@ -234,7 +234,7 @@ describe('SubscriptionSeatsStatisticsCard', () => { it('renders the tooltip link', () => { expect(findTooltipLink().attributes('href')).toBe( - '/help/subscriptions/billing_and_usage#gitlabcom-billing-and-usage', + '/help/subscriptions/billing_and_usage#for-gitlabcom', ); }); -- GitLab From 661252a418d6937fb4e79f60eef1617ff3498044 Mon Sep 17 00:00:00 2001 From: Lorena Ciutacu Date: Fri, 26 Sep 2025 14:30:39 +0200 Subject: [PATCH 4/4] Fix links and intro --- doc/subscriptions/billing_and_usage.md | 2 +- ee/app/assets/javascripts/usage_quotas/seats/constants.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/subscriptions/billing_and_usage.md b/doc/subscriptions/billing_and_usage.md index a4a7b0dd7c7061..d9661dc735d45f 100644 --- a/doc/subscriptions/billing_and_usage.md +++ b/doc/subscriptions/billing_and_usage.md @@ -13,7 +13,7 @@ title: Billing and usage {{< /details >}} -GitLab uses different billing models depending on your deployment. +GitLab uses different billing models depending on the offering you use. Understanding how billing works helps you manage costs and get insights into the seat usage of your subscription. ## For GitLab.com diff --git a/ee/app/assets/javascripts/usage_quotas/seats/constants.js b/ee/app/assets/javascripts/usage_quotas/seats/constants.js index 4c401a82011770..6ae5f030e072d1 100644 --- a/ee/app/assets/javascripts/usage_quotas/seats/constants.js +++ b/ee/app/assets/javascripts/usage_quotas/seats/constants.js @@ -105,7 +105,7 @@ export const SORT_OPTIONS = [ ]; export const EXPLORE_PAID_PLANS_CLICKED = 'explore_paid_plans_clicked'; export const seatsInUseLink = helpPagePath('subscriptions/billing_and_usage', { - anchor: 'gitlabcom-billing-and-usage', + anchor: 'for-gitlabcom', }); export const seatsOwedLink = helpPagePath('subscriptions/billing_and_usage', { anchor: 'seats-owed', -- GitLab