Free tool · no login · public threads

Twitter Thread Reader

Paste a link to any post in an X (Twitter) thread. You get the thread on one page, in order, with only the author's posts: no replies from other people, and none of the author's side answers to commenters. Then copy it as text or Markdown, or save it as a PDF.

Public posts only. The first post, the last one or any post in between works.

How to unroll a Twitter thread

  1. On any post of the thread, tap Share → Copy link. Links from x.com, twitter.com and mobile.twitter.com work, and so does a bare post ID.
  2. Paste it above and press Unroll thread.
  3. Read it as one article, or use Copy text, Copy Markdown, the .md and .txt downloads, or Save as PDF. Untick Number posts if you don't want the 1/n markers.

No reply bot to tag and nothing to post publicly. For the bot route, reading threads inside the X app, or a script that saves threads to files, see how to unroll a Twitter thread.

Why a thread is not the same as the conversation

A thread is a chain: each post replies to the author's previous one. But authors also reply to people in the comments, and those answers sit in the same conversation. A tool that collects “every post by the author in this conversation” mixes them in. We pulled 39 recent threads (2026) through our own API and counted:

Thread length and author side replies in 39 sampled X threads
MeasureResult
Threads where the author also replied to others24 of 39 (62%)
Author posts in those conversations that were replies to other people160 of 327 (49%)
Side replies per affected threadmedian 3.5, up to 27
Thread length2 posts: 23 · 3 to 5: 10 · 6 to 10: 3 · 11 or more: 3 (longest 19)

Source: threads found with X search's self-thread filter (2026, English, at least 30 likes), each read with the TwitterAPI.io search endpoint. A post counts as part of the thread when it replies to the author's previous post in the chain.

So in most of the threads we checked, a naive unroll would put side answers like “@someone thanks!” between the actual posts. This reader follows the reply chain instead. When an author forked the thread, it keeps the branch of the post you pasted, and below that the earliest continuation.

Thread to text, Markdown or PDF

  • Text: the posts as plain paragraphs with the source link on top, ready for a note, an email or a document. The t.co link X adds for photos is removed.
  • Markdown: a heading, each post as a paragraph, photos as image links and quoted posts as blockquotes, for Obsidian, Notion or a static site.
  • PDF: your browser's print dialog with a clean, single-column page; pick “Save as PDF”. Photos are included; a video or GIF appears as a link to its post.

Reading many threads: use the API

To archive threads from a list of accounts or feed them into an app, do the same thing in code: search the conversation for the author's posts, then follow the reply chain from the first post.

import requests

API = "https://api.twitterapi.io/twitter/tweet/advanced_search"
HEADERS = {"X-API-Key": "YOUR_API_KEY"}

def unroll(root_id, author):
    posts, cursor = {}, ""
    for _ in range(5):  # up to 5 pages
        r = requests.get(API, headers=HEADERS, timeout=30, params={
            "query": f"conversation_id:{root_id} from:{author}",
            "queryType": "Latest", "cursor": cursor,
        }).json()
        posts.update({t["id"]: t for t in r.get("tweets", [])})
        if not r.get("has_next_page"):
            break
        cursor = r["next_cursor"]
    chain = [root_id]  # follow the author's own reply chain
    while True:
        nxt = [t for t in posts.values() if t.get("inReplyToId") == chain[-1]]
        if not nxt:
            break
        chain.append(min(nxt, key=lambda t: int(t["id"]))["id"])
    return [posts[i]["text"] for i in chain if i in posts]

Pass the thread's first post ID (the conversationId of any post in it) and the author's username. Search on TwitterAPI.io costs $0.15 per 1,000 posts returned (pricing); X's own pay-per-use API charges $0.005 per post read (docs.x.com, prices subject to change), about 33× more. To post threads rather than read them, see how to make a Twitter thread via API.

Archive threads at scale: get an API key

Questions

Do I need to paste the first post of the thread?
No. Paste the link of any post in the thread, the first, the last or one in the middle. The reader finds the first post and rebuilds the thread from there.
Why is the unrolled thread shorter than the conversation on X?
Because only the thread itself is kept: the author's posts that continue it, in order. Replies from other people and the author's own answers to commenters are left out. In 39 threads we checked, about half of the author's posts in the conversation were such answers.
Can I save a Twitter thread as a PDF?
Yes. After unrolling, press "Save as PDF" and choose "Save as PDF" as the printer. The PDF holds the posts, their photos and the source link, without buttons or site menus.
Does it work on old threads?
Usually. For threads older than about a week, X's search can return only part of the posts, so the reader adds a short note under older threads and links to the original to check against.
Do you store the threads I read?
No account is needed and nothing is saved to a profile. A thread is kept in a short cache for about 10 minutes so a second visitor doesn't trigger a new lookup, then dropped.

Public posts only

The reader shows public posts as X serves them and links each one back to the original. Posts from protected accounts and deleted posts can't be read. Threads belong to their authors: quote and share them with credit. TwitterAPI.io is an independent service, not affiliated with X Corp.

Related