Linking Discourse 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

Alpha release

This source is currently in alpha. The interface and available tables may change.

The Discourse connector syncs categories, topics, posts, and more into the PostHog data warehouse, so you can analyze them alongside your product data.

Prerequisites

Credentials that can read the data you want to sync. PostHog only reads data, so read access is enough.

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.

Connect your Discourse community forum to sync categories, topics, posts, tags, groups, and user stats.

Generate an Admin API key under Admin > API > Keys on your Discourse instance (a key scoped to "Global" access, or scoped to read the tables below, both work). The instance URL is your forum's address, e.g. https://yourforum.discourse.group.

You'll be asked for:

  • Instance URL: for example https://yourforum.discourse.group.
  • Admin API key
  • API username: for example system.

Sync modes

Each table can be synced in one of several modes, depending on what the source supports:

  • Webhook (when available) – the source pushes changes to PostHog in real time. Fastest freshness, lowest ongoing cost, and the only mode that reliably captures updates and deletes.
  • Incremental – only new or updated rows are synced on each run, using a cursor field (such as an updated_at timestamp). Cheaper than a full refresh, but deletes aren't captured.
  • Append only – new rows are appended using a cursor field; existing rows are never updated. Ideal for immutable, append-only tables like event logs.
  • Full refresh – the whole table is reloaded on every sync. Use it when a table has no reliable cursor or when you need deletions reflected.

See sync methods for a full explanation of how each mode works and how to choose between them.

All Discourse tables are full refresh. Each sync replaces the contents of the table.

Configuration

OptionTypeRequired
Instance URLtextYes
Admin API keypasswordYes
API usernametextYes

Supported tables

TableDescriptionSync methodIncremental fieldPrimary key
categories

A category groups related topics together, e.g. Support, Feature Requests, or Announcements.

Full refresh——
topics

A discussion thread. Returned from the site's latest-activity topic list, so it covers every topic that has had activity.

Full refresh——
posts

A single post (the original post or a reply) within a topic, from the site-wide post stream.

Incremental, Full refreshid—
tags

A tag that can be applied to topics to aid discovery and filtering.

Full refresh——
groups

A user group, used for permissions, mentions, and messaging.

Full refresh——
group_members

One row per user in a group, linking the groups table to the users who belong to it. Group owners are included.

Full refresh——
users

A forum member and their aggregate activity stats, from the public user directory leaderboard.

Full refresh——
admin_users

The full member list from the admin API, including accounts the public user directory leaves out. Email addresses are not synced.

Full refresh——
user_actions

One row per public action in a member's activity stream: likes given and received, new topics, replies, mentions, quotes and edits. Actions inside private message topics are excluded, and post text is not synced. Post bodies live in the posts table.

Incremental, Full refreshcreated_at—
badges

A badge that can be granted to members, used to resolve the badge IDs carried on user badge grants.

Full refresh——

Troubleshooting

  • If the connection fails with an authorization error, the admin API key is wrong, expired, or has been revoked. Create a new one, then reconnect the source.
  • If a table syncs no rows, the credential may not have access to that data. Check its permissions, then reconnect the source.

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?