# Connect GitHub for shipping context

> Install the Postless GitHub App, pick repos per brand, and turn commits, merged PRs, and releases into planner and draft context. GitHub is not a publish destination.

- HTML: https://postless.app/docs/github-shipping
- Published: 2026-10-03
- Author: Postless
- Category: Product
- Tags: github, founders, developers, shipping, content

GitHub feeds **facts** into plans and drafts (what shipped). It is not a network you publish to.
LinkedIn, X, and the other social accounts stay under [Connect social platforms](https://postless.app/guides/connecting-platforms).

## What you get

After you connect and select repos:

- Commits, **merged** pull requests, and **releases** can influence weekly plans and generated posts
- A **GitHub** influence badge can appear on posts that used that shipping context
- Connections live at the **account** level; **which repos** each brand uses are per brand

## Connect (account)

1. Open **Settings → Connections**.
2. In the **GitHub** card:
   - **Connect GitHub** — links accounts/orgs where the App is already installed (OAuth sync)
   - **Install App first** — opens the GitHub App install flow for a new personal account or org
3. Finish GitHub’s screens and return to Connections.

If you already have an installation listed:

- **Sync accounts** — refresh orgs/accounts you already authorized
- **Add account** — install the App on another account or org
- **Disconnect** — removes that installation from your Postless account (other Postless users who
  linked the same org install are unaffected)

You need at least one connected installation before a brand can pick repos.

## Pick repos (per brand)

1. Open the brand from **Brands**.
2. Find **GitHub repos**.
3. Tick the repos that should feed this brand’s content.
4. Saves apply immediately when you toggle a repo.

Different brands can select different repos from the same connected installations. See
[Multiple brands](https://postless.app/guides/multiple-brands).

## How activity is used

Postless uses shipping activity as **data for planning and writing**, not as posts themselves. You
still approve, schedule, and publish through your social connections.

Typical flow:

1. Ship something on a selected repo.
2. Generate or refresh a plan (or create a draft) for that brand.
3. Review topics/drafts that reference the work; edit as usual.

GitHub is not available on the public API or Postless MCP. Agents that need raw GitHub data should
use a separate GitHub MCP (or the GitHub UI); use Postless MCP for voice, drafts, and scheduling.

## Disconnect

1. **Settings → Connections → GitHub**.
2. **Disconnect** on the installation row.

Repo selections for that installation stop receiving new activity. Existing drafts are unchanged.

## If this fails

- **No GitHub account connected** on the brand page — connect in Settings first.
- **Install** ended on GitHub’s Configure page with nothing new in Postless — use **Connect GitHub**
  or **Sync accounts** so OAuth can link the already-installed App.
- **Repos list empty** after connect — confirm the App is installed on the org that owns the repos,
  and that those repos were included in the install (all repos vs selected).
- Planner drafts ignore recent shipping — confirm the brand has the right repos ticked, and that the
  activity is a commit, merged PR, or release on those repos.

## Self-hosted operators

Hosted Postless has the App configured. If you run your own instance, create a GitHub App and set:

| Variable                   | Notes                                          |
| -------------------------- | ---------------------------------------------- |
| `GITHUB_APP_ID`            | App ID                                         |
| `GITHUB_APP_PRIVATE_KEY`   | PEM (`\n` escapes in `.env`); PKCS#1 or PKCS#8 |
| `GITHUB_APP_SLUG`          | URL slug (e.g. `postless`)                     |
| `GITHUB_APP_CLIENT_ID`     | User OAuth client ID from the App settings     |
| `GITHUB_APP_CLIENT_SECRET` | User OAuth client secret                       |
| `GITHUB_WEBHOOK_SECRET`    | Webhook secret                                 |

In the GitHub App settings:

- **Callback URL:** `{NEXT_PUBLIC_SITE_URL}/api/connect/github/callback`
- **Setup URL (optional):** same callback (OAuth is primary for linking)
- **Webhook URL:** `{NEXT_PUBLIC_SITE_URL}/api/webhooks/github`

Connect uses **user OAuth** so already-installed orgs can link without uninstalling. See
`.env.example` for the same checklist.

## Related

- [Connect social platforms](https://postless.app/guides/connecting-platforms)
- [Multiple brands](https://postless.app/guides/multiple-brands)
- [Set up your brand profile](https://postless.app/guides/brand-setup)
- [MCP for AI agents](https://postless.app/guides/mcp)
