| name | notion-ci-integration |
| description | Integrate the Notion API into CI/CD pipelines for automated documentation sync,
deploy tracking, and configuration reads. Use when setting up GitHub Actions
workflows that push release notes to Notion, update database entries on deploy,
create incident pages from CI, or read feature flags from Notion databases.
Trigger with phrases like "notion CI", "notion GitHub Actions", "notion deploy sync",
"notion release notes automation", "notion CI pipeline".
|
| allowed-tools | Read, Write, Edit, Bash(gh:*), Bash(npm:*), Bash(npx:*), Bash(python3:*) |
| version | 1.38.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","productivity","notion","ci-cd","devops"] |
| compatibility | Designed for Claude Code |
Notion CI Integration
Overview
Integrate the Notion API into CI/CD pipelines for automated documentation sync, deploy tracking, and configuration reads. GitHub Actions workflows push release notes to Notion pages, upsert deploy entries in databases, create incident pages, and read feature flags — all with rate-limit handling, and each concern in its own reference file for copy-ready code.
Prerequisites
- GitHub repository with Actions enabled
- Notion internal integration token (create at
https://www.notion.so/my-integrations)
- Target Notion pages/databases shared with the integration (click "..." > "Connections" > add the integration)
NOTION_TOKEN stored as a GitHub Actions secret
- Node.js 18+ or Python 3.9+ in the CI environment
Authentication
Every request authenticates with an internal integration token passed as a bearer
credential. The Notion SDKs read it from the NOTION_TOKEN environment variable
(new Client({ auth: process.env.NOTION_TOKEN }) in Node, Client(auth=token) in
Python). Store it as a repository secret and inject it per job — never hardcode it
(gh secret set NOTION_TOKEN). A token only reaches pages and databases explicitly
shared with the integration (page menu > "Connections" > add integration); an unshared
target returns 404 Object not found, not 401 — see Error Handling.
Instructions
The integration is three composable pieces — read each summary for its shape, then open the linked reference for complete, copy-ready code.
Step 1: Workflow for documentation sync
Add a workflow that reacts to release: published and pushes to main. It runs three
jobs — create a release-notes page, sync the CHANGELOG.md page, and update the deploy
tracker — each injecting NOTION_TOKEN and the relevant database ID as env:
on:
release: { types: [published] }
env:
NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
jobs: