Brand & competitor monitoring is live — we track the comments, you get the dashboard. See it

How-to

How to Export Comments From Multiple Posts at Once — Any Platform (CSV, Excel & JSON, 2026)

By Sarayut L., Founder, ZocialCommentSeptember 21, 20269 min read
How to Export Comments From Multiple Posts at Once — Any Platform (CSV, Excel & JSON, 2026)

Try ZocialComment free

The answer is shorter than you expect: paste all the links into the same box. One per line, up to 20 at a time, then submit once. There is no separate bulk mode, no upload step, no CSV of URLs to prepare — the box that takes one post link takes twenty, and each one comes back as its own file inside a single ZIP.

They do not even have to be from the same platform. A single paste can hold TikTok videos, Instagram posts and reels, YouTube videos, Facebook posts, Reddit threads, Threads posts, Lemon8 posts and Google Maps places, all exporting at the same time. The rest of this guide is what happens after you hit submit: the preview table that shows every post's real comment count before anything runs, what lands in the download, and the handful of things that behave differently once a job is twenty posts instead of one.

This distinction matters more than it sounds. A lot of tools treat a multi-link paste as a single long queue: link one finishes, link two starts, and if link seven dies the queue dies with it. Here, every pasted URL becomes its own independent export — its own job, its own progress bar, its own download token, its own file. They all run at the same time.

Three practical consequences fall out of that design. A batch takes roughly as long as its slowest link, not the sum of all of them. One dead or rate-limited link cannot take down the other nineteen. And because each post is its own job, the platform is decided per link rather than per batch — which is why mixing them works at all.

Twenty is the ceiling per batch, and it is a deliberate one: twenty simultaneous jobs is the point where the batch still finishes cleanly instead of turning into an hours-long run that fails somewhere in the middle. If you have sixty posts, three overlapping batches beat one heroic one.

Mixing platforms in one paste

Every URL in the box is detected on its own. TikTok share links and short vm.tiktok.com links are resolved to their canonical form, Instagram post and reel URLs are validated (Stories are not exportable and get rejected with that reason), YouTube videos and Shorts both work, and a Google Maps place link exports reviews rather than comments. Nothing about the batch assumes one platform.

That is more useful than it first sounds, because campaigns are rarely single-platform. A launch that ran on TikTok and Instagram, a creator posting the same video to both, a product complaint thread on Reddit alongside the brand's own Facebook post — one paste, one download, one folder. The shared columns are identical across platforms, so the files stack into a single table without any realignment.

The preview table is the step worth slowing down for

Paste and submit, and you land on a batch page — not on a running export. Each link is a row, and each row fills in its real counted comment total as the counts land. Nothing has started. Nothing has been spent.

This is the moment to actually look. Rows are marked in four states, and each one means something different:

  • Still counting — the count is in flight. Counts run in parallel per link and land asynchronously, which is why the page fills in rather than blocking on the slowest one. A Facebook permalink alone can take around fourteen seconds to count.
  • Failed to count — the post could not be read. It is excluded, and correctly so: the export runs the same fetch as the count, so a link that cannot be counted cannot be exported either. Letting it start would spend a slot on a job that fails a minute later.
  • Empty — the post genuinely has no comments. Common on new uploads and on posts with comments turned off.
  • Above your cap — the counted total is larger than your per-post ceiling. The post is excluded rather than truncated.

Everything exportable is ticked by default, and unticking is what gets remembered. Use it. Seeing the true comment count next to each link before committing routinely changes the plan — the post you assumed was the big one turns out to have 400 comments, and the throwaway one has 40,000.

How we know this — from running the batches

We operate the exporter, so the figures here are the live product values rather than marketing copy: 20 links per batch, the first 100 comments of any single post free with no signup, 10,000 comments per post on the 3-Day Pass and 100,000 on the Pro passes, 30-day retention on paid exports, eight supported platforms, and the shared column set listed in the FAQ above. They come from the same constants the running service reads.

A few behaviours in this guide exist specifically because the obvious version failed in production. The ZIP replaced firing N browser downloads, which triggered the browser's "allow multiple downloads?" prompt and dumped a folder of token-named files nobody could match to a post. Files are named after the post rather than the token for the same reason, and the names are ASCII-only because Info-ZIP — the unzip that ships with macOS — ignores the UTF-8 flag and mangles non-ASCII filenames on extract. One dead link used to reject the entire paste and throw away the other nineteen; now bad URLs are set aside and listed with a reason. And bulk counts were moved off the submit request entirely, because a batch containing one slow Facebook permalink left the paste box spinning on it.

One number worth stating plainly, because every honest exporter hits it: the row count you get back is usually below the comment count shown on the post. Hidden comments, keyword-filtered comments, comments held for review and comments from deleted or suspended accounts are counted in the platform's badge but are not served in the thread. A gap of roughly five to fifteen per cent on a large post is normal, and it is not specific to any one network — Meta documents the hidden-and-filtered behaviour in its Community Standards, and TikTok in its Community Guidelines. Researchers with institutional access to the official TikTok Research API see the same shortfall.

What actually lands in the ZIP

Pick CSV, Excel or JSON once, at download time, for the whole batch. You get a single archive with one file per post, named by position, platform and a slug of the post URL — 01-tiktok-….csv, 02-instagram-….csv — so the folder sorts in paste order and every file is traceable to its source without opening it.

Each file leads with the shared columns: author, username, text, likes, replies, created_at, language, is_pinned, id, reply_to_id and avatar_url. Every platform-specific field the post carries follows in snake_case. Replies are expanded at download, so they appear as their own rows with reply_to_id pointing at the parent — which is why the file usually has more rows than the preview's counted total.

Choose the format by what happens next. CSV for a spreadsheet, Excel when you want it to open cleanly with no import dialog, JSON when the rows are going into a database or a notebook and you want the nested structure intact. If a batch is genuinely large, remember that Excel stops at 1,048,576 rows per sheet — per file that is rarely a problem, but it is a hard wall once you stack twenty of them together.

Stacking 20 files into one sheet

The ZIP is the deliverable for archival. For analysis you almost always want one table. Two reliable ways:

  1. Spreadsheet. Open file 01, then paste each subsequent file's rows underneath — the shared columns are identical across platforms, so nothing has to be realigned. Add one column, source_post, filled with the filename. Without it, the moment the files are merged you can no longer tell which comment came from which post, and that is the single most common mistake in this workflow.
  2. Script. Three lines of pandas: glob the folder, read each CSV with its filename recorded, concat. Deduplicate on the id column, never on text — two people posting the same emoji are two real comments, while a repeated id is a genuine overlap between pulls.

With one stacked table, the questions that were impossible per-post become pivots: comments per post, distinct commenters per account, share of comments containing a question, which posts generate purchase-intent language, and — on a mixed batch — which platform the conversation actually happened on. For sentiment and intent on top of the raw rows, AI comment analysis scores the batch without you reading 40,000 rows.

Posts that do not fit, and what to do with them

A post above your per-post cap is left out of the batch deliberately. Truncation is the worse option: a file that silently contains an arbitrary slice of a thread produces analysis that looks complete and is not. The batch page tells you which rows were excluded and how far over they were, and the remaining posts run normally.

From there it depends on the size. A post over the 3-Day Pass ceiling but under 100,000 comments is covered by a Pro pass. Past 100,000, nothing self-serve covers it and it becomes a manual run — worth knowing before you promise a client a number. For the arithmetic of assembling very large datasets across many posts, see downloading millions of comments.

Cancelling, restarting and re-downloading

Long batches are interruptible without loss. Cancelling a running job keeps everything it had already collected and still produces a downloadable file, so stopping early leaves you with partial exports rather than nothing at all. Jobs that had not started yet stay on the page as unstarted rows and can be launched later — which also means selecting a subset in the preview and running the rest tomorrow is a supported workflow, not a hack.

Finished batches stay available for 30 days on a paid export, and any link in the batch resolves the whole set, so one bookmarked URL is enough to come back and download the same posts in a different format. Do download the files, though: avatar and media URLs inside the data are signed by the platform and expire on their own schedule.

In practice four jobs account for nearly all of it. Campaign reporting — every creator post from one campaign in one paste, across whichever networks it ran on, so the deliverable says what audiences said rather than just views and likes. Creator vetting — a few posts each from a shortlist, compared on distinct commenters and question rate rather than follower count; the multi-creator workflow covers that end to end. Competitive monitoring — a competitor's recent posts on a schedule, stacked month over month. And giveaway verification across several entry posts at once, where having every entry in one sheet is the entire job.

What they share is that the answer lives across posts, not in any one of them. That is the honest test for whether you need a multi-link paste at all: if a single post answers your question, export the single post — it is free and takes seconds.

Start on the platform you need: TikTok, Instagram, YouTube, Facebook, Reddit, Threads, Lemon8 or Google Reviews — the paste box is the same on all of them.

Export comments from every post free →

Related reading: bulk exporting comments across multiple creators, bulk exporting Instagram comments, bulk export and AI analysis for influencer agencies.

Try ZocialComment free

Export comments from TikTok, Instagram, YouTube, Reddit, Facebook, Threads, or Lemon8.