TweetExporter

Guide

How to get Twitter data for academic research

For a decade, Twitter was the most-studied platform in social science — because the Academic Research API made it the easiest to study. That door closed in 2023. Research didn't stop; it moved to three imperfect routes. Here's what they are, and how to keep a dataset reproducible on any of them.

Updated August 2026 · Public data only — no DMs, no protected accounts

The post-2023 landscape

The Academic Research track — free full-archive search for vetted researchers — was discontinued in 2023 when X put the entire API behind enterprise pricing. The tiers with meaningful read access now start in the hundreds per month and climb to thousands, priced for companies, not dissertations. The free-tier workarounds of that era (guest-mode libraries, Nitter) died in the same purge.

What remains is a choice between paying for the API, reusing datasets other teams published, or collecting public data yourself with a tool that doesn't need the API at all.

What research data needs

Before comparing routes, it's worth naming the bar, because it's higher than "get the tweets":

Reproducibility

A reviewer must be able to see exactly what defined the sample. A search query plus a date window is a definition; 'we collected relevant tweets' is not.

Provenance

When was it collected, with what tool, and how many rows came back. Social media data changes daily — the collection date is part of the dataset.

Bounded scope

Open-ended collection produces unanalyzable piles. Date windows and row caps make the dataset finite before collection starts, not after.

Machine-readable format

Analysis happens in R, Python, or a spreadsheet. Whatever the method, it has to end in CSV or JSON, one observation per row.

Three ways to collect

The paid API is the right answer for funded labs running continuous collection — streams, full-archive access, and volume. For a bounded study, its cost and engineering overhead are hard to justify.

Published datasets — shared archives from earlier studies, often as tweet-ID lists you re-fetch ("rehydrate") — cost nothing and carry established provenance. The catches: rehydration loses every tweet deleted since collection, and you're limited to questions someone else's sampling frame happens to answer.

No-code collection covers the common middle: a bounded, query-defined sample of public tweets. TweetExporter's search export takes any query X search accepts and returns one CSV row per matching tweet; the timeline, follower, and following exports cover account-centered designs. Pricing is per row and visible before you run anything, which maps neatly onto grant budgeting.

Building a reproducible dataset

The unit of reproducibility is the query. X's search operator language lets you write a sampling frame precise enough to publish: (#hashtag OR "key phrase") lang:en since:2026-03-01 until:2026-04-01 is a methods sentence that happens to be executable.

Two practices pay for themselves. Slice long periods into windows — a month per export — so volume shifts and gaps are visible rather than buried in one file. And log every run: query, window, collection date, row count. An export service's order history keeps the query attached to each file, but your methods log is the citable record.

Ethics and sharing

Public tweets are public, but people don't tweet expecting to appear in a journal. Three norms are settled enough to state plainly: consult your IRB or ethics board early, even when you expect an exemption; be careful with verbatim quotes, which make authors findable via search — paraphrase or aggregate for sensitive topics; and when sharing data, prefer dehydrated tweet-ID lists over full text, in line with platform terms and journal policy. Deleted and protected content is off-limits by construction — every method here reads only what is public on collection day.

Step by step: a query-defined dataset

  1. 1

    Write the query as your sampling frame

    Keywords, hashtags, accounts, and operators — the query string is the operational definition of your sample. Prototype it on X search until the results match your construct.

  2. 2

    Bound it with dates and a cap

    Add a since:/until: window and a max-rows cap. For longer periods, collect in slices — per week or per month — so gaps and volume changes are visible.

  3. 3

    Export and record the details

    Run the export and note query, window, collection date, and row count in your methods log. The order history keeps the exact query attached to each file.

  4. 4

    Analyze in your tool of choice

    CSV opens in R, pandas, SPSS, or Excel — one row per tweet with text, author, timestamp, and engagement. JSON is there for pipelines.

Research data, answered

Is there still free academic API access?+

No — the Academic Research track was discontinued in 2023 along with free API access generally. Researchers now choose between paid API tiers, previously published datasets, and collection tools that read public pages.

How should I document a collected dataset?+

Record the exact query string, the since/until window, the collection date, the tool, and the row count. A search export keeps the query attached to the order, which makes the methods section a copy-paste.

Can I share the dataset I collect?+

Norms and terms differ. The established compromise in the literature is sharing tweet IDs (a 'dehydrated' dataset) rather than full text, letting others re-fetch what still exists. Check your journal's policy, your institution's rules, and X's terms before publishing data.

Do I need ethics-board approval for public tweets?+

Many boards treat public social media data as low-risk, but practices vary by institution and by how identifiable your analysis is. Ask your IRB or ethics committee early — especially if you'll quote tweets verbatim, which makes authors findable via search.

How far back can I collect tweets?+

Search reaches back through X's public archive, but old and broad queries return less reliably than recent, narrow ones. Slice a historical study into shorter since:/until: windows and collect them separately — it's also better provenance.

What about deleted or protected content?+

Unreachable, by every method. Collection reads what is public on the day it runs, which is why prospective designs — collecting during or right after an event — beat retrospective ones.

A defensible dataset, one file.

First 50 rows free. Reproducible queries, visible pricing, CSV or JSON out.

Export tweets by search query