Skip to content

Slack

Ingests a Slack workspace as a property graph: channels, messages, reply threads, @-mentions, and the people behind them. Incremental per channel via the oldest message-timestamp cursor. Slack's Web API returns HTTP 200 with {"ok": false} on logical errors, which the data source handles (a ratelimited response is retried, anything else is a permanent error).

OAuth data source

Authorize once with Connect in the UI. Provider slug slack; see OAuth data sources for the Slack app setup. Requested scopes: channels:read, channels:history, groups:read, groups:history, users:read.

Connect

  1. Data sources → Add data source → Slack.
  2. Name it, Connect Slack, approve the workspace install.
  3. (Optional) restrict to specific channel ids; empty = public channels the token can list.
  4. Pick a sync interval and Create.

What it ingests

A property graph under slack_nodes / slack_edges (graph name slack); ids are prefixed slack:.

Nodes

LabelIdKey props
Channelslack:chan:{id}name, is_private, topic
Messageslack:msg:{channel}:{ts}text (truncated), ts, reply_count
Userslack:user:{id}name

Edges

TypeFrom → ToMeaning
POSTED_INMessage → Channelmessage location
SENT_BYMessage → Userauthor
REPLY_TOMessage → Messagethread reply → parent
MENTIONSMessage → Usereach <@U…> mention

Configuration

FieldTypeDefaultDescription
credential_iduuid— (required)the OAuth2 credential (set by the Connect flow)
channelsstring[][]restrict to these channel ids; empty = public channels
max_channels_per_tickint20channels processed per tick (one history page each)
json
{
  "credential_id": "0e8f…",
  "channels": [],
  "max_channels_per_tick": 20
}

Default sync interval is 10 minutes. Private channels require the app/user to be a member.

An open-source project · MIT licensed.