> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Linking Notion as a source Canonical URL: https://posthog.com/docs/data-pipelines/sources/notion > **Cloud region:** This page uses US Cloud hosts. For an EU Cloud project, use `https://eu.posthog.com` instead of `https://app.posthog.com` (app host for links). ## On this page - [Adding a data source](#adding-a-data-source) - [Available tables](#available-tables) - [Sync modes](#sync-modes) - [Syncing permission groups (Enterprise)](#syncing-permission-groups-enterprise) - [Configuration](#configuration) - [Supported tables](#supported-tables) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70) ![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d) Let AI connect your sources for you Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog. `npx @posthog/wizard warehouse` ![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png) ![](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)Let AI connect your sources for you The Notion connector syncs your Notion workspace data into PostHog, including pages, databases, users, blocks, comments, and permission groups. ## Adding a data source 1. Go to the [Data pipeline page](https://app.posthog.com/data-management/sources) and select the **Sources** tab. 2. Click **\+ New source** and select Notion by clicking the **Link** button. 3. Get your integration token: - Go to [notion.so/my-integrations](https://www.notion.so/my-integrations) and click **\+ New integration**. - Give your integration a name and select the workspace you want to sync. - Under **Capabilities**, ensure **Read content** is enabled. - Copy the **Internal Integration Secret** (starts with `ntn_` or `secret_`). 4. Paste your integration token into PostHog. 5. *Optional:* If you want to sync permission groups (Enterprise only), paste your organization bot token. See [syncing permission groups](#syncing-permission-groups-enterprise) below. 6. *Optional:* Add a prefix to your table names. 7. Click **Next**. **Share pages with your integration** Each page and database you want to sync must be explicitly shared with your integration. Open the page in Notion, click the **•••** menu in the top right, select **Connections**, and add your integration. Pages not shared with the integration won't appear in the sync. The data warehouse then starts syncing your Notion data. You can see details and progress in the [data pipeline sources tab](https://app.posthog.com/data-management/sources). ## Available tables The Notion source syncs the following tables: | Table | Description | | --- | --- | | pages | All pages shared with your integration | | databases | All database objects shared with your integration | | users | All users in your workspace | | blocks | Content blocks within synced pages (paragraphs, headings, lists, etc.) | | comments | Comments on synced pages | | permission\_groups | Workspace permission groups (Enterprise only). Requires an organization bot token. | ## Sync modes Notion tables support **full refresh only**. Each sync re-downloads all data from Notion. Incremental syncing isn't available because Notion's API only sorts by last edited time but doesn't support server-side filtering by it. For large workspaces, syncs may take longer due to Notion's rate limits (~3 requests/second). The blocks and comments tables fan out across all synced pages, so workspaces with many deeply nested pages will take the longest. ## Syncing permission groups (Enterprise) The `permission_groups` table syncs workspace permission groups, including admin-managed and SCIM-managed groups. This table is only available for Notion Enterprise organizations. To sync permission groups, you need an **organization bot token** in addition to your regular integration token: 1. In the Notion organization console, create an organization bot token with the `permission-group:read` scope. 2. Paste this token into the **Organization bot token** field when configuring the source. The organization bot token is separate from the integration token you use for other tables. Other tables continue to work without it. If the token is missing, invalid, or lacks the required scope, the `permission_groups` table shows a permission error in the schema picker, but other tables sync normally. ## Configuration | Option | Type | Required | | --- | --- | --- | | `API key` | password | Yes | | `Organization bot token (optional)` | password | No | ## Supported tables | Table | Description | Sync method | Incremental field | Primary key | | --- | --- | --- | --- | --- | | `pages` | A Notion page — a document of content blocks, optionally with database properties. | Full refresh | — | — | | `databases` | A Notion database (data source) — a collection of pages with a defined set of properties. | Full refresh | — | — | | `users` | A user or bot in the Notion workspace. | Full refresh | — | — | | `blocks` | A block of content within a Notion page (paragraph, heading, list item, etc.). | Full refresh | — | — | | `comments` | A comment left on a Notion page or block. | Full refresh | — | — | | `permission_groups` | A permission group in the Notion workspace, either admin-managed or SCIM-managed. | Full refresh | — | — |