GitHub
Renta exports GitHub data to your data warehouse: commits, issues, pull requests, releases, GitHub Actions runs, and other repository objects. The full list is in the Report type section.
You pick the repositories and the fields of each object yourself.
Authentication
Renta connects to GitHub through OAuth. You log in to GitHub, confirm the access Renta asks for, and return to Renta. You do not need to create a personal access token.
On the consent screen, GitHub asks for access that covers everything Renta can export:
- Repositories.
Code, branches, commits, issues, and pull requests, including private repositories. - GitHub Actions.
Workflows, their runs, and jobs. - Organization.
Teams and their members. - Profile.
The login and email of the connected account.
GitHub has no read-only version of the repository and workflow access, so the consent screen mentions write access. Renta only reads data.
A pipeline sees the same repositories as the authorized account. If an organization restricts OAuth apps, its repositories appear in Renta only after an owner approves the app in the organization's Third-party Access settings.
Connect GitHub source
Follow these steps to add GitHub as a source in Renta by authorizing access to your GitHub account.
- Navigate to the Connections > Catalog section in the left sidebar.
- Open the Developer tools category and click the GitHub card.

Click Log in to your GitHub account. Renta redirects you to GitHub, where you sign in and confirm the access it requests. If the browser already holds an authorized GitHub session, the confirmation goes through right away and you return to Renta.

Finish the setup:
- Source name.
Specify a name for this data source. It is used exclusively in the Renta interface. - Access granted.
Verify that the account is connected. The card carries the login of the authorized GitHub account.
Click Save to finish.
If the authorization later changes, for example after you revoke the app in GitHub, click Re-authorize on this source. The connection refreshes in place and every pipeline built on it keeps running.

The new source appears in the Sources list with the Active status. You can now use it in pipelines.

Create a pipeline
Once the source is connected, create a pipeline to sync your GitHub data into your destination.
Create a GitHub pipeline
Link your GitHub source to a destination and configure the pipeline.
In the left sidebar, click New pipeline. On the Source step, select GitHub under Already connected and click Next step.

Choose the GitHub connection you created earlier and click Next step. The card shows the account behind the connection and the date it was added.

On the Destination step, select your destination (for example, Google BigQuery) and click Next step.

Choose the destination connection you want to load data into and click Next step. The card shows the dataset and project the data will land in.

Pipeline configuration
On the final step, choose which GitHub data to export, from which repositories, and how often Renta loads it.
Integration type
Choose how to configure the pipeline: assemble one report yourself or start from a template.

| Integration type | Description |
|---|---|
| Custom report | You choose the report type, the repositories, the fields, and the load settings yourself. The sections below describe this path. |
| Pre-built templates | A bundle of report types with every field selected. You pick the template and the repositories. |
A template creates one pipeline per report type it covers, so one Create pipeline click can produce more than a dozen pipelines. Renta offers five templates: repository basics, issues and pull requests, CI/CD, organization, and all objects.
Report type
Select which GitHub object the pipeline exports. One pipeline loads one report type.

| Report type | Description |
|---|---|
| Repositories | Repositories available to the connected account: name, visibility, description, language, default branch, license, permissions, topics, and the counters of stars, watchers, forks, and open issues. |
| Branches | Branches of each repository with the SHA of the head commit and the protection flag. |
| Tags | Tags with the SHA of the tagged commit and the archive links. |
| Commits | Commit history of the default branch: message, tree SHA, author and committer with name, email, and date, signature verification, and the parent commits. |
| Commit Comments | Comments left on commits: body, author, the file path and line they point at, and reaction counters. |
| Commit Check Runs | CI checks reported for commits: status, conclusion, start and completion time, the output summary, the check suite, and the app that reported it. |
| Issues | Issues with their state, title, body, author, assignee, milestone, labels, reactions, and close date. GitHub counts every pull request as an issue, so pull requests land in this report as well. |
| Issue Comments | Comments on issues and pull requests: body, author, author association, and reaction counters. |
| Issue Events | The change log of issues: which event happened, who performed it, and the label, assignee, milestone, rename, or review request it carries. |
| Issue Milestones | Milestones with their state, description, due and close dates, creator, and the counters of open and closed issues. |
| Issue Labels | Label definitions of the repository: name, color, description, and the default flag. |
| Pull Requests | Pull requests with their state, title, body, author, assignee, milestone, labels, requested reviewers and teams, head and base refs, and the created, updated, closed, and merged dates. |
| Pull Request Commits | Commits attached to each pull request, with the same author, committer, and verification fields as the commit history. |
| Reviews | Pull request reviews: state, body, author, and submission time. |
| Review Comments | Comments left inside a review: body, file path, diff hunk, line and side of the diff, the review and commit they belong to, and reaction counters. |
| Pull Request Stats | Pull requests together with the diff statistics GitHub reports per pull request: commits, additions, deletions, changed files, comment counters, merge state, and the head and base repository. |
| Releases | Releases with their tag, name, body, draft and prerelease flags, author, publish date, attached assets, and reactions. |
| Deployments | Deployments with their environment, ref and SHA, task, description, creator, and the deployment payload. |
| Events | Repository activity events: type, actor, organization, and the event payload. |
| Workflows | GitHub Actions workflow definitions: name, path, state, and creation and update dates. |
| Workflow Runs | Runs of GitHub Actions workflows: status, conclusion, triggering event and actor, run number and attempt, head branch and commit, and the linked pull requests. |
| Workflow Jobs | Jobs of workflow runs: status, conclusion, runner, timing, the runner labels the job asked for, and the steps it went through. |
| Collaborators | Users with access to the repository, their role name, and the pull, triage, push, maintain, and admin permission flags. |
| Assignees | Users who can be assigned to issues and pull requests: login, type, and profile link. |
| Teams | Teams of the organization that owns the selected repositories: name, slug, description, privacy, permission, and the parent team. |
| Team Members | Membership of every team in that organization: login, type, and profile link. |
| Projects | Classic project boards: number, name, body, state, visibility, and creator. |
| Project Columns | Columns of classic project boards with their name and the project they belong to. |
| Project Cards | Cards of classic project boards: note, archive flag, creator, and the links to the column and the content behind the card. |
| Stargazers | Users who starred the repository, with the time each star was added. |
Repositories
Select the repositories the pipeline reads.

The picker lists every repository the authorized account can reach, with the owner/repo name under each title. Use the search field to find a repository by name, or click Select All. The Selected tab shows what you picked, and the Selected Repositories list below the picker lets you remove an entry.
The Repositories report type has no repository picker: it always returns every repository the account can reach.
Teams and Team Members are organization objects. Renta takes the organization from the owner of each selected repository, so a repository owned by a personal account contributes nothing to these two reports.
Parameters
Select the GitHub fields to include in the destination table. Your dataset schema is defined by the parameters you choose here.

Every row shows the field name with the destination column name below it: Node ID becomes the node_id column. Use the search to find a field by name, review the choice on the Selected tab, and remove a field from the Selected Parameters list below the picker.
The set of available fields depends on the report type. Renta flattens the objects GitHub nests inside a record, so the author of a commit arrives as Author Login, Author ID, Author Type, and Author HTML URL, and the milestone of a pull request as Milestone ID, Milestone Title, Milestone State, and Milestone Due On.
Fields that hold a list of objects load as nested records.
| Report type | Fields that load as nested records |
|---|---|
| Commits, Pull Request Commits | Parents |
| Issues | Labels, Assignees |
| Pull Requests, Pull Request Stats | Labels, Assignees, Requested Reviewers, Requested Teams |
| Releases | Assets |
| Commit Check Runs, Workflow Runs | Pull Requests |
| Workflow Jobs | Steps |
Fields whose shape depends on the record itself arrive as JSON. These are Payload in Events and Deployments, Reactions wherever GitHub reports them, Auto Merge, Head Repo, and Base Repo in the pull request reports, Repository, Head Repository, and Referenced Workflows in Workflow Runs, and the entity fields of Issue Events such as Label, Assignee, Milestone, and Rename.
Renta pre-selects three required fields and locks them in the list: the record key (ID, or SHA for Commits and User ID for Stargazers), the modification date (Updated At, Created At, and similar), and the day-granularity date the destination table is partitioned by (Updated Date, Created Date, and similar). Report types that carry no date load in full and have no locked fields.
Table name
Name the pipeline and the destination table.

- Integration name.
The name of the pipeline. It is used exclusively in the Renta interface. - Table name.
The destination table name. You can keep the auto-generated name or enter your own.
Date range
Set the historical period to load. By default, Date start is the first day of the current month and Date end is Today.

- Date start.
The first date of the extraction period. - Date end.
The last date of the extraction period. You can pick a fixed date or a relative option such as Today.
Renta keeps only the records whose date falls inside the range. A repository nobody updated within the range does not reach the Repositories table, and neither does a pull request untouched since last year. Set Date start far enough back for the history you need.
Branches, Tags, Issue Labels, Pull Request Commits, Collaborators, Assignees, Teams, and Team Members carry no date, so they ignore the range and load in full.
Overwrite period
The overwrite period defines how many recent days Renta reloads on every run. Renta pre-selects the date parameter the report type is partitioned by, so the setting is visible for every report type in the table below.

| Date parameter | Report types |
|---|---|
| Updated At | Repositories, Commit Comments, Issues, Issue Comments, Issue Milestones, Pull Requests, Review Comments, Pull Request Stats, Deployments, Workflows, Projects, Project Columns, Project Cards |
| Created At | Issue Events, Releases, Events, Workflow Runs |
| Commit Author Date | Commits |
| Completed At | Commit Check Runs |
| Started At | Workflow Jobs |
| Submitted At | Reviews |
| Starred At | Stargazers |
On each run, Renta re-fetches the data starting from the date of the last successful run minus the overwrite period. The affected days are deleted from the destination table and inserted again, while older data stays untouched.
The options range from Without overwrite data to Overwrite all data. The default is Last 1 day.
On Google BigQuery and ClickHouse, Renta tracks its own sync point and upserts records by their identifier, so the overwrite period does not change the loaded window there. See Sync strategy below.
Schedule
Choose how often the pipeline runs.

| Schedule type | Description |
|---|---|
| Manual | The pipeline runs only when triggered manually through the interface or via API. |
| Daily | The pipeline runs once a day at the specified update time. |
| Interval | The pipeline runs at specified time intervals. |
| Cron Expression | The pipeline runs on a schedule defined by a cron expression. |
For Daily schedules, set the Update time, the exact time each run starts, then click Create pipeline.

Renta also supports API triggers and integration with external orchestrators such as Apache Airflow, Dagster, and Prefect. See the full scheduling documentation for details.
The new pipeline appears in the Pipelines section under the ETL tab, where you can track its runs, progress, and the destination table name.

Limitations
The GitHub API sets boundaries that apply to every pipeline built on this source.
| Limitation | Description |
|---|---|
| API rate limit | GitHub allows 5000 requests per hour for the authorized account, and every pipeline on the connection draws from that budget. When it runs out, the run stops with a rate limit message and resumes on the next scheduled tick. |
| Commit history scope | The Commits report reads the default branch of each repository. Commits that live only on other branches reach the warehouse through Pull Request Commits. |
| Event retention | GitHub keeps repository events for the last 90 days, so the Events report cannot reach further back no matter how the date range is set. |
| Classic project boards | GitHub retired Projects (classic) on 23 August 2024 and migrated the boards to Projects v2, which the REST API does not expose. Projects, Project Columns, and Project Cards return rows only for accounts that still hold classic boards. |
| Organization-only objects | Teams and Team Members exist only for organizations. Repositories owned by a personal account are skipped, and the run finishes without rows for them. |
| Run duration | Pull Request Commits, Reviews, Pull Request Stats, Commit Check Runs, Workflow Jobs, and Project Cards describe objects nested inside other objects, so they take the longest to load and consume the largest share of the hourly budget. |
Sync strategy
How Renta synchronizes a GitHub report depends on the report type and on whether the destination supports merge.
| Strategy | Supported report types | Description |
|---|---|---|
| Incremental (merge) | Repositories, Commits, Commit Comments, Commit Check Runs, Issues, Issue Comments, Issue Events, Issue Milestones, Pull Requests, Reviews, Review Comments, Pull Request Stats, Releases, Deployments, Events, Workflows, Workflow Runs, Workflow Jobs, Projects, Project Columns, Project Cards, Stargazers (on Google BigQuery and ClickHouse) | Renta requests the records changed since the previous run and upserts them into the destination table by the record id. Commits are matched by sha and Stargazers by user_id. Every run re-reads a three-hour overlap, so a change that reached GitHub late is still picked up. The first run loads the date range you configured. |
| Incremental | The same report types on the remaining destinations | The destination table is partitioned by the day of the record date. On every run Renta reads the window from the last successful run minus the overwrite period, and the affected daily partitions are deleted and inserted again. Older partitions stay untouched. |
| Full reload | Branches, Tags, Issue Labels, Pull Request Commits, Collaborators, Assignees, Teams, Team Members | These objects carry no modification date, so Renta reads them in full on every run and replaces the contents of the destination table. The table mirrors the selected repositories at the time of the run. |
Pull Request Commits offers the Commit Author Date parameter, so the Overwrite Period control appears for it. The report still reloads in full, because GitHub reports no modification date for a commit inside a pull request.
A record that GitHub stops returning, such as a deleted issue, stays in the destination table of a report type loaded incrementally. Full reload report types drop it on the next run.
Ready to get started?
Build your data pipeline today or get a personalized demo. Start free!
Need help?
Get expert support to ensure your project succeeds. We're here to help!
Feature requests?
Help shape our product! Share your ideas for new features and integrations.