Skip to main content

GitHub Projects Integration

Tom Williams avatar
Written by Tom Williams
Updated over 3 weeks ago

Our GitHub Projects integration allows you to complement our existing GitHub integration with project-level information (such as Iterations and custom fields).

The GitHub Projects integration is supplemental and requires you to import the related repositories to Keypup.

Related repositories are not automatically imported into Keypup since each repository incurs an additional monthly cost. You are in control of which repositories you track through your GitHub Projects.

GitHub accounts connected before May 5th, 2025, need to be reconnected

Our GitHub integration was updated to require the read:project scope. If you connected GitHub before May 5th, 2025, then GitHub Projects won't appear in the list of available projects to connect.

To fix this, go to the Apps page on your Keypup account and click the reconnect icon πŸ”„ in front of GitHub. GitHub Projects will appear after reconnecting.

How does it work compared to importing repositories?

GitHub Projects are project management layers on top of GitHub repositories belonging to the same user or organization.

An Issue or Pull Request can belong to multiple GitHub Projects. Typically, this means that an Issue or Pull Request can be in multiple advancement statuses, depending on which GitHub Project you consider.

This is why each GitHub Project on Keypup maintains its own set of issues and pull requests, on top (but separate) from repository data.

Each GitHub Project you connect to Keypup creates duplicates, in Keypup, of Issues and Pull Requests imported from repositories. Each duplicate gets augmented with additional fields (status, iteration, custom field) coming from the GitHub Project.

Because each GitHub Project creates duplicates of existing Issues and Pull Requests imported from repositories, it is important to use Project-level or App-level filtering in Keypup to ensure your reporting focuses on the right project.

Example

Let's assume Issue 123 from repository doecorp/ui has been added to GitHub Project A and GitHub Project B.

After connecting doecop/ui to Keypup, we will have the following data:

Issue 123

github

doecorp/ui

doecorp/ui

If you now connect GitHub Project A and GitHub Project B to Keypup, we will have the following data:

Issue 123

github

doecorp/ui

doecorp/ui

Issue 123

github-projects

GitHub Project A

doecorp/ui

Issue 123

github-projects

GitHub Project B

doecorp/ui

What data do we collect?

Our GitHub integration fetches the following entities:

Project Items

Project items are fetched and exposed on the Issues & Pull Request dataset. Each project item adopts the attributes of the underlying issue or PR, plus the following attributes:

  • The Status field in GitHub Project is mapped to the Workflow status field in Keypup.

  • The Iteration field attributes (start/end date, etc.) in GitHub Project are mapped as Sprint attributes in Keypup (e.g., Sprint Name field). If you renamed the Iteration field in GitHub Project to something else, Keypup will not pick it up as Sprint.

  • The GitHub Project name is mapped to the Project field in Keypup.

  • The source repository of the Issue/PR is mapped to the Project Source field in Keypup.

  • The Source App field in Keypup is set to github-projects instead of github.

Project Iterations

Project iterations from the Iteration field in GitHub Projects are captured and exposed as Sprints in Keypup. Sprint attributes allow you to filter issues and pull requests based on Sprint Name, Sprint End Date, Sprint Start Date, etc.

On the Iteration field is retrieved as Sprints. Other iteration fields are not picked up by Keypup. If you renamed the Iteration field in GitHub Project to something else, Keypup will not pick it up as Sprint.

Project Item Status

The Status field in GitHub Projects is a mandatory non-editable system field. This field is mapped to the Workflow status field in Keypup.

You can define a custom list of statuses in your GitHub Project, and Keypup will automatically pick up the status names.

Project Item Custom Fields

All date, number, single select and text fields are captured as custom fields in Keypup. Custom fields can be used for filtering, reporting, and in formulas (they are prefixed with cf_github_).

Current limitations

Status transition events (e.g., transition from "Todo" to "In Progress") are not currently exposed on the GitHub API.

The consequences are the following:

How often do we refresh data?

Updates on Issues and Pull Requests are received in real time via webhooks when available, or via long-polling (every 20 mins) if the connecting user does not have permissions to set webhooks on the repositories.

Updates on Project Items (status, iterations, custom fields) are received via long-polling (every 20 mins). Webhooks are not available since they require org-level administrative permissions.

Note on API throttling: GitHub has strict API rate limitations and it may take Keypup up to a day to retrieve historical data the first time you connect projects.

Using IP whitelisting on GitHub

If you have IP whitelisting enabled on GitHub, please authorize the IPs to make Keypup work:

  • 35.227.8.113

  • 34.139.100.4

  • 104.196.223.124

  • 34.23.243.137

Did this answer your question?