How to Save a Twitter / X Thread as Markdown (Full Thread, In Order)
Twitter (now X) was never designed to be exported. There’s no “save thread” button, no transcript download, no archive option. Copy-paste a long thread and you get the tweets out of order, broken by reply indentation, with quote-tweets collapsed into “View Tweet” links that go nowhere once the original gets deleted. And threads get deleted constantly --- accounts go private, tweets get removed, whole conversations vanish in a content-moderation sweep.
This guide covers every method to convert a Twitter / X thread to clean Markdown --- from a single viral tweet to a 100-post mega-thread.
Why Save Twitter Threads as Markdown?
Markdown is the format that works wherever a thread needs to go:
- Feed it to an LLM --- Claude, ChatGPT, Gemini, and local models all read Markdown natively as context
- Drop it into Obsidian or Notion --- one file, fully searchable, every tweet preserved in order
- Quote a specific tweet --- timestamps and handles intact, so you can cite the source even if the original is deleted
- Archive a thread before it disappears --- accounts get suspended, tweets get removed, your notes shouldn’t depend on X’s uptime
- Build a personal research base --- threads from operators, researchers, and builders are some of the densest content on the internet, and none of it is preserved by default
The use case driving most Twitter-to-Markdown traffic in 2026 is the first one: people want to ask Claude or ChatGPT questions about a long thread they just read, and pasting the URL doesn’t work because the model can’t authenticate to X.
Method 1: Save (Fastest, One Click)
Save is a Chrome extension that turns any Twitter or X thread into a Markdown file with one click. It walks the thread in posting order, attaches the author handle and timestamp to every tweet, and nests quote-tweets inline so the conversation actually reads top-to-bottom.
How it works:
- Open the thread on twitter.com or x.com in Chrome
- Click the Save extension icon in your toolbar
- A
.mdfile downloads instantly (or lands in your Save Vault if connected)
What you get:
- Every tweet in the thread, in posting order
- Display name + handle for each author on every tweet
- Timestamp on every tweet (linked back to the original URL)
- Quote-tweets nested inline, with the quoted author and content preserved
- Images and videos as Markdown references (
) - Embedded YouTube videos and articles as link previews
- Frontmatter with thread author, first-tweet URL, post date, and tweet count
What gets removed:
- “Who to follow” sidebar, trending panel, and X nav chrome
- Promoted tweets injected into the thread
- “Show more replies” UI noise once the replies are expanded
- Reply tweets from other users (unless they’re part of a multi-author thread)
- Engagement counts on every tweet (kept on the root tweet only, as metadata)
Best for: Researchers, AI users, builders, and anyone who reads long threads and needs them in a permanent, citable form. If you want to paste a 50-tweet thread into Claude or archive it in Obsidian, this is the cleanest path.
Example Output
Saving a 12-tweet thread from a builder produces:
---
title: "Thread by @paulg on what makes a good founder"
author: Paul Graham
handle: "@paulg"
url: https://x.com/paulg/status/1234567890
date: 2026-04-12
tweets: 12
---
## Thread
**Paul Graham** [@paulg](https://x.com/paulg) --- Apr 12, 2026, 9:14 AM
The best founders I've met all share one trait, and it's not what
people usually say. It's not grit, intelligence, or vision. It's
something more specific.
---
**Paul Graham** [@paulg](https://x.com/paulg) --- Apr 12, 2026, 9:14 AM
It's the ability to update fast on new information without losing
conviction in the underlying thesis. Most people do one or the other.
---
**Paul Graham** [@paulg](https://x.com/paulg) --- Apr 12, 2026, 9:15 AM
> Quoting **Sam Altman** [@sama](https://x.com/sama):
> Conviction without flexibility is dogma. Flexibility without
> conviction is drift.
Exactly this. The trick is holding both at once.
That file is one paste away from being usable Claude context, one keystroke away from being a permanent Obsidian note --- even if the original thread gets deleted tomorrow.
Method 2: ThreadReaderApp (Browser, Web Only)
ThreadReaderApp has been the go-to “unroll” tool for years. You reply @threadreaderapp unroll to a tweet (or paste the URL into their site) and get a single-page version of the thread.
Steps:
- Open the thread you want to save
- Paste the URL into threadreaderapp.com or reply with the unroll command
- Wait for the unroll to render
- Copy the rendered HTML into a Markdown converter, or use their export feature
Problems with this approach:
- Output is HTML or PDF, not Markdown --- conversion adds friction every time
- Quote-tweets are usually flattened to links, not nested
- Images often broken in the export (hotlinks to X CDN that expire)
- Free tier has rate limits and watermarks; clean export needs a subscription
- Doesn’t work on protected accounts or deleted-author threads
- Reply-thread context (when the author is responding to someone else) gets lost
Workable for a one-off public thread you want to read later. Falls apart if you need consistent Markdown output across many threads.
Method 3: Twitter API + Script
For full control, you can pull a conversation through the X API and format it yourself.
import tweepy
client = tweepy.Client(bearer_token=BEARER_TOKEN)
tweets = client.search_recent_tweets(
query=f"conversation_id:{ROOT_TWEET_ID} from:{AUTHOR_HANDLE}",
tweet_fields=["created_at", "author_id", "referenced_tweets"],
max_results=100,
)
for t in sorted(tweets.data, key=lambda x: x.created_at):
print(f"[{t.created_at}] {t.text}\n")
Best for: Engineering teams archiving threads at scale, or anyone building a dataset of public discourse. Requires a paid X API tier (the free tier doesn’t return conversation threads), and the rate limits are aggressive.
Problems with this approach:
- X API access starts at $100/month for the Basic tier as of 2026 --- not worth it for personal use
- Conversation queries only return tweets from the last 7 days on most tiers
- Quote-tweet content needs a separate lookup per quoted tweet
- Media URLs in the API response expire and need to be downloaded immediately
- No clean Markdown formatting --- you write the rendering yourself
- Protected accounts and deleted tweets return nothing
This is the right method if you’re building infrastructure. It’s overkill (and expensive) for one thread.
Method 4: Manual Copy + Reformat
Open the thread, scroll to the top, and copy-paste each tweet into a Markdown file by hand.
Steps:
- Open the thread on twitter.com or x.com
- Scroll to the first tweet of the thread
- Copy each tweet one by one, paste into a
.mdfile - Add the handle, timestamp, and quote-tweet context manually
- Download any images, host them somewhere, link them back in
Problems with this approach:
- A 30-tweet thread takes 20+ minutes
- X’s copy behavior pastes engagement counts and “Show this thread” labels alongside the tweet text
- Quote-tweets need separate handling for each one
- Easy to miss tweets when the page lazy-loads as you scroll
- No timestamp formatting consistency unless you also copy the tooltip text
Fine for archiving one tweet you want to remember. Painful for anything longer than five.
Which Method Should You Use?
| Scenario | Best Method |
|---|---|
| Paste a thread into Claude or ChatGPT | Save --- one click, structured output |
| Archive a thread before it gets deleted | Save --- preserves attribution and timestamps |
| Build a personal research library of threads | Save --- consistent Markdown across every save |
| Quote a specific tweet six months from now | Save --- handle + timestamp + URL on every tweet |
| Read one long thread later without archiving | ThreadReaderApp --- free unroll, web-only |
| Build a public-discourse dataset at scale | X API + script --- programmatic, requires paid tier |
| Save one short tweet for a quote | Manual copy --- 30 seconds, no tooling |
For most people --- especially anyone using Twitter threads as AI context or research material --- Save is the answer. It produces the cleanest Markdown with zero setup, and it handles a 100-tweet thread at the same speed as a single post.
Edge Cases Save Handles
- “Show more replies” expansions. Save expands the thread fully before snapshotting. If a tweet has hidden replies from the same author, they get pulled in. The output is the complete thread, not just the visible portion.
- Threads by multiple authors. When a thread is a back-and-forth between two or more people (rare but happens in technical discussions), Save tags every tweet with the correct author and keeps the ordering by timestamp.
- Deleted tweets in the middle of a thread. If tweet #4 in a 10-tweet thread is gone, Save flags it with
[deleted]and a timestamp placeholder, so the order stays intact and you know something was removed. - Quote-tweets vs reply-tweets. Quote-tweets are nested inline as Markdown blockquotes with the quoted author. Reply-tweets from third parties are excluded unless they’re the author’s own replies extending their thread.
- x.com vs twitter.com URLs. Both work. Save auto-detects the domain and handles cookie/login differences between the two --- you don’t need to migrate URLs.
- Long threads (50+ tweets). Save waits for the entire thread to lazy-load before snapshotting. “Scroll-to-load” pages are handled by walking the DOM until no new tweets appear. Mega-threads (100+) are saved correctly.
- Embedded YouTube videos or articles. Link previews are preserved as Markdown links, with the title and source. If the embed is an image card, it’s saved as an image reference.
- Locked or protected accounts. Save sees what your logged-in browser sees. If you’re approved to follow the account, the thread saves. If not, it can’t see what you can’t see.
- Suspended accounts. Once an account is suspended, the thread is gone from X. If you saved it before the suspension, your Markdown copy is the only record. If not, Save can’t recover it (nothing can).
Pair It With Your Workflow
The Markdown output works wherever you need it:
- Claude / ChatGPT / Gemini --- paste the file in, ask follow-up questions about the thread
- Obsidian --- drop it in your vault, link tweets to related notes, search across every author you’ve ever saved
- Notion --- paste directly, blockquotes and image links render correctly
- Apple Notes --- clean import via the Markdown share extension
- Save Vault --- if you’ve connected one, every Twitter save lands there automatically, grouped by author with backlinks and tags
FAQ
Does Save work on the X mobile site or app? The extension is desktop Chrome only for now. On mobile, copy the URL and open it on desktop, or paste it into a Save Vault on Mac (which has a URL handler).
Does it work on x.com or only twitter.com? Both. Save auto-detects which domain you’re on. Existing twitter.com bookmarks still resolve, and x.com works identically.
What about a single tweet, not a thread? Works the same way. Single tweets save as a one-tweet Markdown file with full attribution, timestamp, and media. Useful for quoting a specific post in a doc or a paper.
Can Save extract just the root tweet’s text without the whole thread? Yes. The extension lets you pick: full thread, root tweet only, or root + replies from the author. Default is full thread.
Does it save images and videos? Images are saved as Markdown references with stable URLs where possible. Videos are linked with a thumbnail. For long-term archival, point Save at a Save Vault, which can mirror media locally.
What about threads on protected (locked) accounts? Save respects X’s access rules. If you’re an approved follower and can see the thread, Save can save it. If not, it can’t bypass the protection.
Will it save deleted tweets? Only if they were live when you saved them. Once a tweet is deleted from X, it’s gone everywhere except in copies that were made before the deletion. This is the main reason to save threads as you read them.
Does the export include engagement counts (likes, reposts)? Engagement counts are included on the root tweet as metadata in the frontmatter (a snapshot of the moment you saved). Individual tweet counts are omitted to keep the output clean.
How much does it cost? Save has a free tier so you can try it on a few threads. After that, a small subscription unlocks unlimited saves and Vault syncing.
Related Save Guides
- Save Reddit Threads as Markdown --- threads with the comment nesting preserved
- Save YouTube Videos as Markdown --- transcript, summary, timestamps, all clean
- Save Hacker News Threads as Markdown --- full comment trees, in order, with author handles
- Save Substack Newsletters as Markdown --- newsletter posts with images and footnotes intact
## Continue reading
How to Save a Reddit Thread as Markdown (With Comments and Context)
Convert any Reddit thread to clean Markdown with nested comments, karma, flair, and OP markers preserved. Complete 2026 guide for researchers and AI users.
How to Save a Claude Conversation as Markdown (Artifacts, Citations, Projects)
Convert Claude conversations to clean Markdown: every turn, Artifacts as code blocks, citations preserved. Complete guide for researchers and AI users.
How to Save a ChatGPT Conversation as Markdown (Every Turn, Code Blocks Intact)
Convert any ChatGPT conversation to clean Markdown: every turn, code blocks, tables, citations. Complete 2026 guide for researchers and AI users.
How to Save a Substack Post as Markdown (Paywall-Aware, No Cross-Promo)
Convert any Substack newsletter to clean Markdown: full body, pull-quotes, embedded audio, no subscribe-modals. Complete 2026 guide for researchers and AI users.
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.