Overview
The GitLab integration monitors your projects, branch protection rules, group membership, and security configurations. LowerPlane uses read-only API access and does not access source code contents. LowerPlane ships two separate GitLab integrations:Authentication
GitLab uses OAuth 2.0 for authentication. When you connect, you’ll be redirected to GitLab to authorize LowerPlane.Required Permissions (OAuth Scopes)
read_repository scope is intentionally excluded. LowerPlane does not access code contents, commits, or file trees. The read_api scope provides all the metadata needed for compliance checks.Do not grant additional scopes when creating a self-managed OAuth application. read_api and read_user are sufficient, and requesting more will show your users a broader consent screen than LowerPlane actually needs.What LowerPlane Collects
Project Metadata
Branch Protection
Group Members
Vulnerability Scanning
Security Tests
LowerPlane runs 7 automated tests against your GitLab instance:require_two_factor_authentication flag to owners. If the authorizing account has a lower role, the test reports an explicit permissions reason rather than a failure.LowerPlane does not run a per-user MFA test for GitLab. GitLab exposes an individual user’s 2FA state only to instance administrators, which is never available on GitLab.com. Group-level enforcement (every member must enroll before accessing the group) is applied uniformly across GitLab Cloud and self-managed so that the evidence reads the same way for an auditor, and it is the reliable signal for SOC 2 CC6.1.Connecting GitLab Cloud
Navigate to Integrations
Click Connect
Authorize
Initial Sync
Connecting Self-Managed GitLab
If you run your own GitLab instance, use the GitLab Self-Managed integration. It authenticates against your instance’s own OAuth endpoints using an OAuth application that you create and control.Prerequisites
Before you begin, make sure you have:- A self-managed GitLab instance running GitLab CE or EE.
- Permission to create an OAuth application on that instance: either instance administrator access (Admin Area) or the ability to create a user-owned or group-owned application.
- An account that is an Owner of the groups you want covered, so the group MFA test can read the 2FA enforcement flag.
- Your instance reachable from LowerPlane over HTTPS, with a valid publicly trusted TLS certificate.
Step 1: Create an OAuth application in GitLab
Open the Applications page

Admin area → Applications → Add new application
Fill in the application form

The completed Add new application form. Note the Redirect URI, the two enabled checkboxes, and the two selected scopes.
LowerPlane_App.Redirect URI: enter exactly:read_api: grants read access to the API, including groups and projectsread_user: grants read-only access to the user profile
Save and copy the credentials

Copy the Application ID and Secret. The secret is shown only once.
Yes, and Scopes should list only read_api and read_user.Step 2: Connect in LowerPlane
Open the integration
Fill in the connection details
Authorize on your instance
Initial sync
Troubleshooting
The redirect URI included is not valid
The redirect URI included is not valid
/v1, http instead of https, or a copied leading space.Connection fails right after clicking Connect
Connection fails right after clicking Connect
- Re-check the Application ID and Client Secret for truncation or trailing whitespace.
- Confirm the Confidential checkbox is enabled on the GitLab application. A non-confidential application will not accept the client secret.
- Confirm the Hosted service URL points at the instance where you created the application.
Hosted service URL is rejected
Hosted service URL is rejected
- Remove
http://orhttps://and any trailing slash. - Confirm the host resolves publicly and serves a valid TLS certificate. Self-signed certificates are not accepted.
No projects appear after connecting
No projects appear after connecting
Group MFA test reports a permissions problem
Group MFA test reports a permissions problem
require_two_factor_authentication flag only to group Owners. Reconnect the integration using an account that is an Owner of that group, or mark the test as manually verified if owner access cannot be granted.The connection stopped working after a while
The connection stopped working after a while