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.

Learn more
PostHog Wizard hedgehog

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:

  1. In Plane, open Profile settings > Personal access tokens.
  2. Click Add personal access token.
  3. Enter a title and description for the token. You can also set an expiry date.
  4. Copy the token to use as the API key in PostHog.

Adding a data source

  1. In PostHog, go to the Sources tab of the data pipeline section.
  2. Click + New source and click Link next to this source.
  3. Enter your credentials (see Configuration below) and click Next.
  4. 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-team for https://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/v2 path.

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. Choose created_at only 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

OptionDescription
API key
Type: password
Required: True
Workspace slug
Type: text
Required: True
Instance URL
Type: text
Required: False

Only for a self-hosted Plane. Leave blank for Plane Cloud.

Supported tables

TableDescriptionSync methodIncremental fieldPrimary 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 refreshupdated_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/v2 suffix.
  • 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 using updated_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.

Still have questions?

Was this page useful?