GitHub Integration
Connect your GitHub organization to surface PR attribution and productivity metrics alongside AI coding assistant usage in Revenium.
Connecting GitHub to Revenium adds shipped pull request data to the AI Assistants dashboards. Without GitHub, the dashboards measure AI assistant activity: sessions, tokens, cost. With it, you can cross-reference that spend against what developers actually deliver, surfacing per-developer productivity metrics and attributing pull requests to AI-assisted work.
What connecting GitHub adds
Once connected, the Value by User tables for Cursor, Codex CLI, and Gemini CLI can show four pull request columns. Two are named for the assistant, such as PRs with Cursor and Cursor Adoption. The Claude Code People roster instead shows PRs merged and Cost / PR.
PRs Merged
Total pull requests merged by this developer in the selected period, regardless of how they were authored
PRs with [Assistant]
PRs where that assistant left its attribution — on a commit or in the pull request description — matching its detection signature
Cost/PR
This developer's API-equivalent estimated value divided by PRs merged — the cost side of a basic productivity ratio
[Assistant] Adoption
The share of this developer's merged PRs attributed to that assistant
These columns let you ask: are high-spend developers also shipping the most? Which developers are getting the most delivered per dollar of AI spend? Is AI adoption actually showing up as more code delivery?
Which tools support PR data
The Cursor, Codex CLI, and Gemini CLI Value by User tables can show merged pull requests, pull requests attributed to that assistant, cost per pull request, and adoption rate. The Claude Code People roster shows merged pull requests and cost per pull request. Detection is per-assistant: each assistant is matched against its own signature (see AI co-author detection patterns below), so a commit or pull request only counts toward the assistant whose signature it actually carries, not toward every tab at once.
If an assistant leaves no mark Revenium can match on, its figure reads Not detected instead of a zero. That means unmeasured, not that the assistant helped with nothing. Columns appear only for assistants with attributed counts, so a tab never fills with empty cells.
Merged pull requests by repository
Open a person's details from Intelligence > AI Assistants > Claude Code to see Where their PRs land, or from AI by Employee to see PRs merged by repository. The table groups that person's merged pull requests by repository for the selected time range and can open the matching pull requests on GitHub.
The repository breakdown covers GitHub only. If GitLab is also connected, its merge requests can contribute to the person's overall merged-PR figure, but they do not create per-repository rows in this table.
Prerequisites
A GitHub fine-grained personal access token with these read-only permissions:
Repository permissions: Pull requests, Metadata (auto-selected by GitHub)
Organization permissions: Members
Developer identities that Revenium can map to your organization's GitHub accounts, using organization identity information, commit emails, or a mapping you set by hand
The connect screen provides a link that pre-selects these permissions for you. If your organization requires administrator approval for fine-grained tokens, the token will stay pending until an owner approves it.
Setting up the integration
Open Integrations, select the Integrations tab, then Connect GitHub. The Slack and GitLab integrations are on the same tab. Connect with a GitHub personal access token carrying the permissions listed in Prerequisites above. The connection screen shows the last successful validation timestamp and offers a Sync now action; data refreshes on its natural cadence otherwise. Either integration on the tab can be reconfigured or disconnected without affecting the other.
In GitHub organization, paste your organization's GitHub URL, for example https://github.com/acme-corp. A link to any repository in the organization works too. Revenium takes the organization's short name from it and shows We'll use with the name it found; check that it is your organization before you continue. You can also type the short name or an @handle. The pre-filled token button stays disabled until the organization is filled in, since the link needs it to target the right Resource owner on GitHub.
When you generate the token, check that GitHub's Resource owner picker shows your organization — the button pre-selects it, but GitHub sometimes asks you to confirm it again. If you see an Account tab instead of Organizations, the token belongs to your personal account: switch Resource owner to your organization, then re-check the Pull requests and Members permissions, since switching resets them.
If your organization uses SAML single sign-on, GitHub authorizes a fine-grained token for the organization as you create it. You need a linked single sign-on identity on GitHub first.
The token expires on the date you choose when you create it, and GitHub suggests 30 days by default. Choose an expiry that fits your policy and set a reminder. When the token lapses, create a new one and select Reconnect on the GitHub card to enter it.
Connecting multiple organizations
You can connect more than one GitHub organization to a single Revenium account. Add each organization from the GitHub connect modal; each connection carries its own credential, and PR attribution is drawn from every connected organization. This suits teams whose code is split across separate GitHub organizations rather than concentrated in one.
Choosing repositories with the repo picker
When you connect an organization, the connect modal offers a repository picker so you can select which repositories to track instead of scanning everything. Changing the organization clears the loaded list; select Load repositories from GitHub to load the new organization's repositories.
Once GitHub is connected
The GitHub card on the Integrations tab shows the organization, Last successful sync, Last validated (when the token was last checked), the allowed repositories and the AI co-author patterns. Sync now refreshes the data straight away; otherwise it refreshes once a day on a schedule. Settings changes repositories and detection patterns, Reconnect takes a new token, and Disconnect removes the connection. Add another GitHub organization connects a second organization.
View Sync Logs, at the top of the Integrations tab, lists every scheduled and manual GitHub and GitLab sync. Select Failures to show only failed runs, then open a run for the provider's message and the suggested next step.
Configuring the integration
Open the GitHub settings dialog from the integrations page to refine repository scope and detection patterns.
Allowed repositories
You can also scope scanning to specific repositories through Allowed repos (optional). Select repositories in the picker, or choose Enter manually instead and type each owner/repo, pressing Enter after each one.
Leave this field empty to scan all repositories available to the connection.
AI co-author detection patterns
The AI-versus-human split counts merged pull requests. A pull request is attributed to AI when a configured pattern matches a Co-Authored-By trailer on one of its commits. The product also checks matching markers in the pull request description and commit author email. A pull request without a matching signal counts as human-authored, even if an assistant helped create it.
This is attribution at the pull-request level, not a count of lines written by AI. GitHub does not expose line-level AI authorship through this integration. To make the split consistent, use each assistant's managed settings to add its co-author trailer to every AI-assisted commit across your organization. Then add any additional signature under Integrations > Integrations > GitHub > Settings > AI co-author detection patterns. A company-wide setting is more reliable than asking each developer to enable attribution locally.
Matching is case-insensitive substring matching on commit messages and on the pull request description, and exact matching on email addresses. An assistant with no signature recognized reads Not detected on its tab rather than showing a zero.
Claude Code, Cursor, and Codex CLI each ship with a built-in signature and need no configuration. Claude Code recognizes five signals automatically:
the
noreply@anthropic.comco-author email on a commita
Co-Authored-By: Claude Codetrailer carrying no email addressa
Claude-Session:trailercommits authored by the
claude[bot]GitHub identitya "Generated with Claude Code" footer in the pull request description
Cursor and Codex CLI are each recognized by their own default co-author email.
The pattern field on this settings dialog (one pattern per line, each at least 3 characters) feeds the overall AI-assisted count, the one that splits merged PRs into AI-assisted and human-authored. Patterns you add here extend the built-in signals behind that count and never replace them, and they add to no individual assistant's column. Use this field for a proxy address or an internal template your team wraps around AI-assisted commits, for example:
Check that your assistant actually adds its signature to commits or pull request descriptions. The managed setting that makes it add a trailer belongs in the assistant's organization settings; the GitHub settings dialog in Revenium controls which signatures to detect.
Managing user mappings
Most developers are mapped for you. Revenium reads the mapping GitHub already holds. People are matched to their GitHub accounts without anyone editing anything, and without relying on a public profile or on a commit email that is usually private. Connecting GitHub starts that mapping immediately rather than waiting for the overnight sync.
Two things are worth knowing. The token used to connect must be created by a GitHub organization owner for the identity list to be readable. A mapping you set by hand is never overwritten by the automatic one.
If the automatic mapping cannot resolve someone, or if they commit under more than one address, you can adjust the mapping directly rather than leaving the attribution wrong.
Edit an existing mapping to correct which Revenium user a GitHub identity resolves to.
Map multiple GitHub accounts to one corporate email, so a developer who commits from more than one GitHub account still rolls up to a single person.
Consolidating accounts this way keeps per-developer metrics — PRs merged, PRs with AI assistance, and cost per PR — accurate for people who work across more than one GitHub identity.
Department filtering and PR scope
The department filter on a coding assistant dashboard applies to AI completion metrics (sessions, tokens, cost). PR data is organization-wide: the PRs Merged and PRs with [Assistant] columns reflect the developer's activity across the organization (or across your allowed repositories list), without the department filter. To limit PR scope to specific repositories, add those repositories to Allowed repos (optional).
Network requirements
If your GitHub enterprise uses an IP allow list, GitHub refuses any connection from an address that is not on it, including Revenium's. Add every address listed on Revenium Outbound IP Addresses.
An enterprise owner adds them under the enterprise's Settings → Authentication security → IP allow list. If your organization manages its own list, an organization owner adds them under the organization's Settings → Authentication security → IP allow list. Entries on an enterprise list apply to every organization in the enterprise. See GitHub's guides to enterprise and organization IP allow lists.
Troubleshooting
No PR data appears after connecting:
Select Sync now on the GitHub card, or wait for the daily scheduled sync
Open View Sync Logs and select Failures to see whether a run failed and the suggested next step
Confirm the token carries the permissions listed in Prerequisites above. The connection screen can show a missing-permission error
Verify the token is valid and not expired. The GitHub card shows when the token was last validated
Coding assistant-attributed PR count is lower than expected:
A PR is attributed to an AI Coding assistant only if a matching signature appears on one of its commits or in the pull request description. This is user or organization-configurable, and not all Claude Code sessions automatically produce these — check whether those PRs carry the trailer or the description marker
Confirm the repositories containing the expected PRs are accessible to your token (or listed in Allowed repos)
Inspect the relevant repository to confirm whether the Co-Authored-By trailer or the pull request description marker appears where you expected it to count
Developer PR counts are not attributed correctly:
If a developer is not mapped automatically, review their mapping on the Integrations tab and assign their GitHub account to the right corporate email
Developers who use more than one GitHub account can have those accounts mapped to the same corporate email
Last updated
Was this helpful?