Build a Knowledge Graph from Your Slack Workspace

Slack is where most modern teams actually decide things — but channel history is the world's worst archive. Decisions, owners, blockers, and follow-ups vanish into infinite scroll. KnodeGraph ingests Slack export ZIPs (JSON-per-channel), reads thread structure and message permalinks, and builds a typed graph of people, decisions, projects, and action items pulled directly from the conversation. The result is a searchable, navigable record of what your team actually committed to in chat — the kind of thing the Free plan's 90-day retention policy was happy to delete forever.

Why connect Slack to KnodeGraph

  • Slack hit 65 million daily active users in 2024 (Salesforce earnings) — for most knowledge teams it's the highest-volume documentation surface, even though it's not framed that way.
  • Slack's Free plan now retains only 90 days of message history and file storage — KnodeGraph extraction gives you a permanent structured record of decisions before that window closes.
  • Standard Slack Export (Workspace owners → Settings → Import/Export Data → Export) produces a ZIP of one JSON file per channel per day, with full thread structure, user IDs, reactions, and message permalinks intact.
  • Corporate Export (Plus/Enterprise Grid) covers private channels and DMs under legal hold — the same ingest path works for the resulting JSON files.
  • The Slack Web API (chat.history, conversations.replies) is OAuth-scoped (`channels:history`, `groups:history`, `users:read`); a polling integration is on the next-quarter roadmap. Today's flow is export-and-ingest.
  • Block Kit messages (rich attachments from bots, GitHub, Linear, Jira) parse cleanly — KnodeGraph extracts the underlying text and links rather than stringifying the JSON blob.
  • Slash commands and webhook bot output are tagged with the originating bot user, so you can trace which automation produced which artifact in the graph.

How it works end-to-end

1.Run the standard Slack export

Workspace owners can trigger a Standard Export from Slack admin → Workspace settings → Import/Export Data. You get an email when the ZIP is ready — usually 30 minutes for a mid-sized workspace, longer for years of history. Plus/Enterprise Grid admins use Corporate Export to include private channels and DMs.

2.Upload the export ZIP

Drag the ZIP into KnodeGraph. We unpack the channel directories, read users.json and channels.json for the metadata index, then walk each per-day JSON file and reconstruct threads via parent_ts pointers. Message permalinks (`https://workspace.slack.com/archives/C.../p...`) are preserved as provenance on every extracted node.

3.Pick a chat-aware template

Choose 'Decision Log' (entities: person, decision, project, action_item; relations: decided, owns, blocks, mentions) or 'Engineering Channel' (extracts: incident, deploy, on_call, runbook, postmortem). Templates bias Claude toward the relation types that actually appear in chat as opposed to formal docs.

4.Approve the staged extractions

Slack is noisier than docs — emoji reactions, off-topic threads, social chatter. The staging UI groups extractions by channel and timeframe so you can sweep approvals quickly. Reactions of `:approved:` or `:eyes:` from senior team members are surfaced as confidence signals on the underlying claim.

5.Walk decisions across channels

Find every decision a person made across the past quarter, every action item still open from #product-planning, every project that lost its owner in a re-org. Click any node and the source thread loads via the preserved Slack permalink — auditable back to the exact message.

6.Refresh on a 30 / 60 / 90 day cadence

Re-export periodically and re-ingest. KnodeGraph deduplicates by Slack message ts (timestamp), so re-importing overlapping windows doesn't double-count. Most teams settle on monthly refresh for high-traffic channels.

Why KnodeGraph is a good fit

  • Slack's native search is keyword-only and capped on Free; KnodeGraph turns chat into a typed entity-relationship store you actually own.
  • Decisions made in chat are first-class graph nodes with named owners and timestamps — try doing that with Slack search.
  • Permalinks back to the original message preserve audit-grade provenance on every extracted claim.
  • Self-hosted plan keeps confidential channels (legal-counsel, exec-only, security-incidents) inside your own VPC — none of the export leaves your perimeter.
  • Bot-message handling: Block Kit attachments from GitHub, Linear, Jira parse into structured nodes rather than text blobs.
  • Multi-language: Arabic, Mandarin, French chat threads work the same way English does — useful for distributed teams.

Supported formats

  • Slack Standard Export ZIP (public channels)
  • Slack Corporate Export ZIP (Plus/Enterprise Grid — includes private channels and DMs)
  • Per-channel JSON files extracted manually from an export
  • Slack message permalinks (preserved as node provenance — clickable from the graph back to the source thread)
  • Block Kit message JSON (rich attachments from bots — parsed into structured nodes)
  • users.json and channels.json metadata files (used to resolve user IDs to display names and channel IDs to channel names)

Limitations to know up front

  • No live Slack API sync today — the workflow is export-and-ingest. A polling integration using `channels:history` OAuth scope is on the next-quarter roadmap.
  • Slack Free plan only retains 90 days of message history. If you're on Free and care about a longer record, run an export now — KnodeGraph will preserve what Slack would otherwise discard.
  • DMs are excluded from Standard Export by Slack policy. Use Corporate Export (Plus/Enterprise Grid) if DM coverage matters.
  • Files attached to messages (PDFs, images, videos) are referenced by URL but not downloaded — ingest the files separately into the same project graph for full coverage.
  • Reaction-emoji metadata is captured but not yet surfaced as a graph signal in the default templates; available as a custom-template extension.
  • Edited messages: the export contains the latest version only, not the edit history.

Frequently Asked Questions

Do I need workspace-owner permissions to use this integration?

Yes for the export step — only Workspace Owners (and Admins on some plans) can trigger Standard Export. Corporate Export, which covers private channels and DMs, requires Workspace Owner on Plus or Enterprise Grid plans. Once you have the ZIP, anyone with KnodeGraph access can ingest it; the permission gate is on the Slack side, not ours. If you're not an admin, ask your workspace owner to run the export and share the ZIP with you over an existing approved file-share channel.

What about private channels and direct messages?

Standard Export only covers public channels. To include private channels and DMs you need Corporate Export, which is available on Slack Plus and Enterprise Grid plans and typically requires legal-hold or compliance justification. The ingest path is identical — KnodeGraph reads the same JSON-per-channel format whether the source is Standard or Corporate Export. For most teams the public-channel export is enough, since strategic decisions usually live in public channels by team norm.

Will this work with the Slack Free plan?

Yes — Standard Export is available on every plan including Free. The catch is that Slack Free now retains only 90 days of messages, so you can only export what's still in retention. If you've been on Free for years, ingesting now is exactly the right move — KnodeGraph gives you a permanent structured record of the last 90 days of decisions before Slack rolls them off. Set a calendar reminder to re-export quarterly.

How does KnodeGraph handle bot messages and Block Kit attachments?

Bot messages from GitHub, Linear, Jira, PagerDuty, and similar integrations come through as Block Kit JSON attachments in the export. KnodeGraph parses the Block Kit structure rather than treating it as a JSON string — so a GitHub PR notification becomes a structured 'pull_request' node linked to the author, the repo, and the channel where it landed. Slash commands and webhook output are similarly tagged with the originating bot user ID. This makes the graph cleaner than treating every bot post as free-form text.

Is there a way to filter out off-topic or low-signal channels?

Yes — at upload time, you can pick a subset of channels from the export rather than ingesting the whole ZIP. We recommend skipping #random, #social, #lunch, and similar channels unless you specifically want a social-graph view. For decision-tracking, focus on the channels where actual planning and ownership happens (typically #product, #engineering, #leadership, project-specific channels). A 50-channel workspace usually distills to 8-12 channels that matter for graph extraction.

How does this differ from Slack's own AI features?

Slack AI (the paid add-on) does conversation summarisation and Q&A — it answers 'what did I miss?' for an individual user. KnodeGraph does cross-channel structured extraction — it answers 'show me every decision Person X made across all our project channels in Q3'. Slack AI is great for catching up; KnodeGraph is for analysis, audit, and onboarding new hires to a year of context. Different jobs; teams using both is a common pattern.

Connect Slack to KnodeGraph

Start free with 3 graphs and 100 nodes. Upgrade to Pro for AI extraction, unlimited graphs, and 50K nodes.

Get Started Free