InsightSocial

How to Export Reddit Comments from a Thread to CSV (2026)

Last Updated on November 7, 2026
by InsightSocial Team
13 min read
Share:

Reddit has no "export comments" button, so there are three ways to get a thread's comments into CSV or Excel: save the thread's .json URL from your signed-in browser and flatten it with a short script (free, but hidden "load more" replies stay out); use PRAW, Reddit's Python API wrapper, which can expand every hidden reply but needs API credentials that Reddit now approves case by case; or use a Chrome extension such as InsightSocial, which reads the thread in your browser, recovers most hidden replies by re-reading it under several sort orders, and puts each comment's parent and depth on its row so the tree survives a flat file. InsightSocial exports to CSV, Excel, JSON or Google Sheets and is free up to 500 exported rows a month.

Checked November 2026. We make InsightSocial, so we are not neutral. Methods 1 and 2 are free and fully under your control; we say where they are the better choice.

TL;DR: ways to export Reddit comments

MethodCost"Load more" repliesNesting keptSkill
.json URL + scriptFreeNot loaded: listed as more placeholdersYes, if your script keeps itA little Python
PRAWFree library; needs Reddit's API approvalAll, with replace_more(limit=None)YesPython
Chrome extension (InsightSocial)Free up to 500 rows/month; Pro $9.99 for 10,000Most, by re-reading under other sorts; the run says when some are missingParent Comment ID and Depth on every rowNone
Copy and pasteFreeOnly what you expand by handLostNone

Can you export Reddit comments natively?

Not as a spreadsheet. Reddit has two built-in routes, and neither gives you a thread as a CSV:

  • Your own data. Reddit's data request, in your account settings, sends you a copy of your own account's data. You have to wait for it, and it covers your account, not someone else's thread.
  • The .json view. Add .json to a thread's URL and Reddit shows the same page as raw data. It is the raw material for Method 1, not a file you can open in Excel.

Reddit's Data API is the official route for software, but its Responsible Builder Policy now says you must request access and get Reddit's approval before reading Reddit data through it, and commercial use needs a separate agreement.

What data a Reddit comment export includes

A useful export has one row per comment with:

  • Comment ID and Parent Comment ID, the comment it replied to (blank for a top-level comment)
  • Depth, 0 for a top-level comment, 1 for a reply, and so on
  • Comment text, with markdown and emoji as written
  • Author username, or [deleted] when the account is gone
  • Score, net upvotes at the time of export
  • Created and edited times, in UTC
  • Permalink to the comment
  • Flags: whether the author is the original poster (OP), and whether a moderator posted it
  • The post's title and subreddit, so every file says where it came from

Without Parent Comment ID and Depth, a flat file mixes replies with top-level comments and you lose who answered whom. That is the most common flaw in quick exports.

What the rows look like

Illustrative rows: the shape of an export, with made-up names and text, not real users.

Comment IDParent Comment IDDepthAuthorScoreText
c10user_a412We switched last year and support tickets halved.
c2c11user_b88Did you migrate the old data or start fresh?
c3c22user_a51Started fresh, kept the old one read-only for a year.
c40user_c37Pricing is the real problem, not features.

To rebuild the conversation in Excel, look up each row's Parent Comment ID in the Comment ID column (XLOOKUP or VLOOKUP) and you have the reply next to the comment it answers.

Method 1: The .json URL and a short script

This is free and needs no API key, just a few lines of Python.

  1. Open the thread in a browser where you are signed in to Reddit.
  2. Add .json to the end of the URL and press Enter. For example, https://www.reddit.com/r/example/comments/abc123/thread_title/ becomes .../thread_title/.json. You can add ?limit=500 to ask for more comments in one response.
  3. Save the page as thread.json (File > Save Page As).
  4. Run this script next to the file:
import csv, json

with open("thread.json", encoding="utf-8") as f:
    post, comments = json.load(f)  # the file holds two listings

rows, hidden = [], 0

def walk(children, depth):
    global hidden
    for child in children:
        if child["kind"] == "more":  # a "load more" placeholder
            hidden += len(child["data"].get("children", []))
            continue
        c = child["data"]
        rows.append({
            "id": c["id"],
            "parent_id": c["parent_id"],  # t1_... = a comment, t3_... = the post
            "depth": depth,
            "author": c.get("author"),
            "score": c.get("score"),
            "created_utc": c.get("created_utc"),
            "body": c.get("body"),
            "permalink": "https://www.reddit.com" + c.get("permalink", ""),
        })
        if c.get("replies"):  # an empty string when there are none
            walk(c["replies"]["data"]["children"], depth + 1)

walk(comments["data"]["children"], 0)

with open("comments.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.DictWriter(f, fieldnames=list(rows[0]))
    writer.writeheader()
    writer.writerows(rows)

print(f"{len(rows)} comments saved; {hidden} hidden replies were not in the file")

The catch: "load more comments". On a big thread, Reddit sends only part of the tree. The rest appears in the JSON as entries of kind more, which hold the IDs of replies Reddit did not send. The script counts them so you know what is missing; fetching them takes more requests. A "continue this thread" link also shows up as a more entry, which needs that branch's own URL.

Why not fetch the URL from the script? Reddit's Data API Wiki says traffic without OAuth or login credentials is blocked. A script calling reddit.com on its own, outside your browser, is likely to get an error page instead of JSON. Saving the file from your signed-in browser avoids that.

Best for: small and medium threads, once, free.

Method 2: PRAW (Python, with API access)

PRAW (the Python Reddit API Wrapper, version 8.0.3) is what most tutorials and AI assistants suggest, because it can expand every hidden reply. It needs a client ID, a client secret and a user agent, so you first need Reddit to approve your API access.

import csv, praw

reddit = praw.Reddit(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
    user_agent="script:comment-export:v1.0 (by /u/your_username)",
)

submission = reddit.submission(url="https://www.reddit.com/r/example/comments/abc123/")
submission.comments.replace_more(limit=None)  # expand every "load more"

with open("comments.csv", "w", newline="", encoding="utf-8-sig") as f:
    w = csv.writer(f)
    w.writerow(["id", "parent_id", "depth", "author", "score", "created_utc", "body"])
    for c in submission.comments.list():
        w.writerow([c.id, c.parent_id, c.depth, c.author, c.score, c.created_utc, c.body])

Two things from PRAW's own documentation matter here:

  • replace_more defaults to 32. Without limit=None, PRAW expands at most 32 "load more" placeholders and drops the rest, so a big thread comes back short with no error.
  • Each expansion is one request. Reddit's free rate limit is 100 queries per minute per OAuth client, so a very large thread can take minutes.

The user agent format above follows Reddit's API wiki, which asks for <platform>:<app ID>:<version> (by /u/<username>). Default agents such as "Python/urllib" are heavily limited.

Best for: developers with approved access who want to automate exports or join them with other data.

Method 3: A Chrome extension that keeps the tree

If you do not write code, or do not want to wait for API approval, a Chrome extension reads the thread in your own browser. Here is how it works with InsightSocial's Reddit Comment Scraper:

  1. Install InsightSocial from the Chrome Web Store and sign in. It is free and asks for no card.
  2. Pin the icon. Click the puzzle piece in Chrome's toolbar and pin InsightSocial.
  3. Sign in to Reddit in the same browser and open the thread. Reddit refuses this data to signed-out browsers.
  4. Click Scrape. The side panel recognises the thread and collects the comments and replies Reddit serves, follows "continue this thread" chains, and re-reads the thread under other sort orders to recover replies behind "load more". Since November 4, 2026 Reddit refuses the request behind "load more replies", even in a signed-in browser, so on a big thread some replies can stay out: in our test the extension got 1,231 of a thread's 1,728 comments, and the result says when replies are missing. You can switch to another tab while it runs.
  5. Export as CSV, Excel or JSON, or send the rows to Google Sheets.

What you get: one row per comment with Comment ID, Parent Comment ID, Depth, text, author, score, created and edited times, permalink, OP and moderator flags, and the post's title and subreddit. Comments come in Reddit's Best order; sort by score or date afterwards for Top or New. In our tests (October 2026), a thread of 424 comments with eight levels of replies took 42 seconds.

Many threads at once: open a subreddit and pick Posts and Comments to get 25, 50 or 100 posts with every comment under each in one file. A Row Type column marks each line as Post, Comment or Reply, Level gives the depth, and Post ID ties every comment to its post.

What it costs: collecting and reading results in the dashboard are free. Exporting uses one row per comment: Free includes 500 rows a month, Pro $9.99 a month (or $7.99 billed yearly) includes 10,000, and one-time packs start at 1,000 rows for $5. Re-exporting a row you already exported is free.

Other extensions do this too. Adlicio's Reddit Comment Scraper exports 20 comments per thread on its free plan and up to 1,000 per scrape on its $9.99-a-month Pro plan (checked November 2026). We compare them in the best Reddit scrapers.

How to export all comments of a Reddit user

A different job: every comment one person wrote, across all threads.

  • Your own account: Reddit's data request in your account settings sends a copy of your account's data, after a wait.
  • Any public profile, no code: open the profile and use the Reddit User Comments Scraper. It exports the comments newest first, each with its subreddit, score, date, the post it sits under and what it replied to. In our tests (October 2026), a profile returned 1,100 comments in 24 seconds.
  • With PRAW: reddit.redditor("name").comments.new(limit=None) lists the same history through the API.

Every route hits the same wall: Reddit lists only about the newest 1,000 comments of a profile, however old the account is. Deleted comments are not included.

Exporting to Excel, CSV or Google Sheets

  • Excel: open a CSV through Data > From Text/CSV with UTF-8 selected, or the emoji and accents in comments will break. The scripts above write utf-8-sig, which Excel reads correctly when you double-click the file.
  • Google Sheets: File > Import > Upload accepts the CSV. InsightSocial can also send a run straight to a sheet in your Drive.
  • Dates: Reddit gives created_utc as a Unix timestamp. In Excel, =A2/86400+DATE(1970,1,1) turns it into a date.
  • For ChatGPT or Claude: the CSV works as is. Keep the Depth and Parent columns so the model can tell a reply from a top-level opinion.

Troubleshooting

My file has fewer comments than Reddit shows. Reddit's comment count includes deleted and removed comments, which no longer exist to export. With Method 1, also check the script's count of hidden replies; with PRAW, check you passed limit=None.

The script got an HTML page or a 403 error. Reddit blocks requests without OAuth or login credentials. Save the .json from your signed-in browser, or use PRAW with approved credentials.

Replies are missing deep in the thread. Those sit behind "continue this thread" links. PRAW's replace_more(limit=None) and the extension follow them; the plain .json file does not.

The run paused. Reddit limits how many pages any browser can load in a few minutes. InsightSocial waits for the limit to reset, then carries on by itself.

Accents and emoji look broken in Excel. Import the CSV as UTF-8 instead of double-clicking a file saved without a byte-order mark.

FAQ

How do I export Reddit comments to CSV? Save the thread's .json from your signed-in browser and flatten it with a short Python script, use PRAW with Reddit API credentials, or use a Chrome extension such as InsightSocial that downloads the thread as CSV, Excel or JSON with no code.

Can I export Reddit comments without the API? Yes. The .json view of a thread and browser extensions both work without an API key. InsightSocial reads the thread in your own signed-in browser and exports it, free up to 500 rows a month.

How do I get the comments hidden behind "load more comments"? In PRAW, call submission.comments.replace_more(limit=None) before reading the comments; the default expands only 32. In a .json file they appear as more placeholders that need extra requests. Since November 4, 2026 Reddit refuses the request behind "load more replies", even in a signed-in browser, so browser tools can no longer expand them one by one; InsightSocial's Reddit Comment Scraper re-reads the thread under other sort orders to recover most of them and tells you when some are missing.

Can I keep nested replies in a spreadsheet? Yes, if each row carries the ID of the comment it answers and its depth. InsightSocial adds Parent Comment ID and Depth to every row, and the scripts above keep parent_id and depth too.

How do I export all comments from a Reddit user? Open their profile and use InsightSocial's Reddit User Comments Scraper, or PRAW's redditor().comments.new(). Reddit lists about the newest 1,000 comments per profile, so older ones are out of reach for every tool.

Is there a free Reddit comment exporter? Method 1 is free. InsightSocial's free plan exports 500 rows a month, and Adlicio's Reddit Comment Scraper exports 20 comments per thread free.

Can I export comments from many Reddit threads at once? With code, loop over thread URLs in PRAW. Without code, open a subreddit in InsightSocial and pick Posts and Comments for 25, 50 or 100 posts with all their comments in one file.

Related guides: best Reddit scrapers, how to scrape Reddit with Python, how to export Hacker News comments, best ExportComments alternatives, and every Reddit scraper.

#reddit#comments#export#csv#tutorial