Linking Plane as a source
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.

Contents
The Plane connector syncs your workspace data into the PostHog Data Warehouse, so you can analyze work items and project progress alongside your product data.
Prerequisites
You need a Plane Cloud workspace or a self-hosted Plane instance with the v2 API. A self-hosted instance must be reachable by PostHog over HTTPS.
Create a personal access token from an account that belongs to the workspace. The token can read everything its owner can see. Follow Plane's API key instructions:
- In Plane, open Profile settings > Personal access tokens.
- Click Add personal access token.
- Enter a title and description for the token. You can also set an expiry date.
- Copy the token to use as the API key in PostHog.
Adding a data source
- In PostHog, go to the Sources tab of the data pipeline section.
- Click + New source and click Link next to this source.
- Enter your credentials (see Configuration below) and click Next.
- Select the tables you want to sync, choose a sync method and frequency, then click Import.
Once the syncs are complete, you can start querying this data in PostHog.
When linking Plane, enter:
- API key: Your Plane personal access token.
- Workspace slug: The part after the domain in your Plane workspace URL. For example, enter
my-teamforhttps://app.plane.so/my-team. Enter only the slug, without a URL or slashes. - Instance URL: Leave this blank for Plane Cloud. For self-hosted Plane, enter your instance URL, for example
https://plane.example.com. PostHog adds the/api/v2path.
Sync modes
- Full refresh: Available for every table. PostHog reloads the whole table on each sync.
- Incremental: Available only for
work_items. PostHog fetches rows from the last synced timestamp onward. The default field,updated_at, captures new and updated work items. Choosecreated_atonly when you need newly created work items, because changes to older items do not advance that field.
Incremental syncs do not capture deletions. Archiving a work item does not change its updated_at timestamp, so use a full refresh to update archive status. See sync methods for more guidance.
Configuration
| Option | Description |
|---|---|
API keyType: password Required: True | |
Workspace slugType: text Required: True | |
Instance URLType: text Required: False | Only for a self-hosted Plane. Leave blank for Plane Cloud. |
Supported tables
| Table | Description | Sync method | Incremental field | Primary key |
|---|---|---|---|---|
projects | Projects in the workspace, archived ones included. | Full refresh | — | — |
work_items | Work items (issues) from every project in the workspace, archived ones included. | Incremental, Full refresh | updated_at, created_at | — |
states | Workflow states of every project, archived projects and triage states included. | Full refresh | — | — |
members | Workspace memberships with each member's role and profile. | Full refresh | — | — |
cycles | Time-boxed cycles of every project, archived ones included. | Full refresh | — | — |
modules | Modules of every project, archived ones included. | Full refresh | — | — |
labels | Work item labels of every project. | Full refresh | — | — |
The connector includes archived projects and work items, but excludes draft work items. It also includes archived cycles and modules, and reads workflow states from archived projects, including triage states.
Troubleshooting
- API key rejected (401): Create a new personal access token in Plane, then reconnect with that token.
- Workspace access denied (403): Use a token from an account that belongs to the workspace and can read the data you want to sync.
- Workspace not found (404): Check the workspace slug. Enter the part after the domain in your Plane URL, without slashes or the rest of the URL.
- Feature unavailable (402): Your Plane plan does not include the feature that the table reads. Turn off that table or upgrade your Plane plan.
- Invalid instance URL or connection failure: Leave Instance URL blank for Plane Cloud. For self-hosted Plane, check that the URL uses HTTPS, is reachable by PostHog, and serves the v2 API. Enter the instance URL without the
/api/v2suffix. - Missing work items: Draft work items are excluded. Check that the token owner can see the missing items in Plane. If you use incremental sync with
created_at, updates to older items require a full refresh or a sync usingupdated_at.
If your sync is failing or data looks wrong, see the Data warehouse troubleshooting guide. If that doesn't help, contact support – we're happy to help.





