How to Export Slack Threads to Markdown (2026 Guide)

·

The best thinking in most companies happens inside Slack threads — bug post-mortems, design debates, customer feedback, “hey how do we actually do X” Q&As. Then it disappears. Search finds snippets; full context decays.

Exporting that content as Markdown turns Slack from a chat log into a queryable knowledge base. This guide covers every practical method.

Why Export Slack Threads to Markdown?

  • Feed AI assistants — Claude and ChatGPT can answer “what did we decide about X” if you give them the actual thread. A Slack search result won’t.
  • Preserve post-mortems and incident reviews — threads around incidents are the raw material of engineering culture. Losing them to a retention policy is a tragedy.
  • Decision logs — the reasoning that led to a decision is almost always better captured in a thread than in the final doc.
  • Migrating off Slack — Discord, Teams, Mattermost, and Zulip all import Markdown better than Slack’s proprietary export format.
  • Archiving channels before they’re deleted — free Slack tiers delete messages past 90 days; exporting first is the only recovery.

Method 1: Save Chrome Extension (per-thread)

Save captures an open Slack thread as clean Markdown with a click.

What Save captures:

  • Channel name and workspace context
  • Thread parent message (author, timestamp, body)
  • Every reply in the thread in posting order
  • Emoji reactions as inline Markdown
  • Mentions (@user) and channel references (#channel)
  • Linked files and Slack’s link-unfurl previews
  • Code blocks with language detection preserved

What Save strips:

  • Slack UI chrome (sidebar, search bar, reactions panel)
  • Presence indicators and typing notifications
  • Slack’s notification counter badges

When it’s the right tool: one thread you care about, quick extraction before a retention window expires, feeding a specific conversation to Claude or ChatGPT.

Method 2: Slack’s Built-in Workspace Export

Slack Workspace Owners can trigger a full export of public channels (all plans) or private channels and DMs (Business+ plans).

Path: Workspace Settings → Import/Export Data → Export.

What you get:

  • A .zip file containing JSON per channel, per day
  • User profile directory (users.json)
  • Channel directory (channels.json)
  • All public messages in raw JSON

What you need to do: convert the JSON to Markdown yourself. Community tools:

  • slackdump — dumps and converts to Markdown, handles edge cases
  • slack-export-viewer — renders the export as browsable HTML
  • Your own script — the JSON format is well-documented

Pros: free on all plans for public channels, official.

Cons: full dump (no selective export), restricted on free plan, converting JSON to usable Markdown still takes work.

Method 3: Slack Web API

For programmatic, selective, scheduled exports, the Slack Web API is the right path.

Typical flow:

  1. Create a Slack app with channels:history, groups:history, and users:read scopes
  2. Install it to your workspace
  3. Call conversations.history for channel messages
  4. Call conversations.replies to get thread continuations
  5. Call users.info to resolve user IDs to display names
  6. Emit Markdown

Rate limits: 1 request/second per method on the free tier — plan for pagination on long channels.

Pros: selective, scriptable, can be a scheduled job.

Cons: requires a Slack app and admin approval in strict workspaces.

Slack’s Copy link to thread shares a URL. Point Save at that URL and it extracts the thread without you needing to be in Slack.

This is the fastest path for ad-hoc sharing — send yourself (or a teammate) a thread link, let Save do the extraction, drop the Markdown into your notes.

Making Slack content LLM-friendly

When you’re exporting specifically to feed an AI assistant:

  • Flatten reactions into short inline markers. [:+1: × 4] is cheaper tokens than listing the 4 reactors.
  • Resolve user IDs to display names. Claude/ChatGPT have no way to know who U02GABC123 is.
  • Preserve time deltas, not just timestamps. “3 hours later” reads better to an LLM than two ISO timestamps.
  • Strip bots’ auto-messages (GitHub / Jira / Linear / Datadog bots) unless the thread is specifically about a bot’s output.

Save’s extraction already handles most of this — it’s tuned for feeding threads to Claude for post-mortem summaries, design-doc generation, and customer-feedback synthesis.

The practical workflow

For the common case — “I want this thread in my notes or my AI context”:

  1. Open the thread in Slack
  2. Copy link to thread (from the thread’s ⋯ menu)
  3. Open the URL in a new tab
  4. Click Save in your Chrome toolbar
  5. Markdown file, in your downloads

Fifteen seconds. The alternative — admin portal, full export, parse JSON, find the thread, render Markdown — is a 30-minute detour for the same result.

For entire channel exports, use Slack’s workspace export + slackdump. For scheduled extraction, use the Web API.

Slack wasn’t designed to be a knowledge base. Markdown is. Bridging the two is a 1-click problem now.

## Continue reading

Jean-Sébastien Wallez

Written by

Jean-Sébastien Wallez

I've been making internet products for 10+ years. Built Save on weekends because I wanted my own reading library in clean markdown for Claude and Obsidian. Write here about web clipping, AI workflows, and the small things that make a personal knowledge base actually useful.