WEIR

Twitter Datasets in 2026: Where to Get Them, What They Cost

Twitter datasets in 2026: which public X collections still work, why most stop in 2023, what ready-made data costs, and a Python script to build your own.


Published · Updated · 6 min read

Cover image: 10,000 posts, four ways

Twitter datasets in 2026 come from four places: frozen research archives, tweet-ID lists you rehydrate, paid vendors, and searches you run yourself.

This guide is for students, analysts and developers who need X (Twitter) posts to study or train on. You get what each public source holds, its dates and terms, then a standard-library Python script to build a small dataset of your own. We run Weir, the API in the script, and say where others cost less.

Turn a list of post IDs back into full posts with one call:

curl -s "https://api.weirapp.io/v1/x/posts?ids=2113390212911083894,2104994048381792487" \
  -H "Authorization: Bearer $WEIR_API_KEY"
  1. Check the free archivesFine for anything before 2023.
  2. Rehydrate an ID setLook each post ID up again.
  3. Buy a vendor datasetFresh, large, $250 and up.
  4. Collect your ownA search script writing JSONL.

Where Twitter datasets come from in 2026

Public collections still exist, but most are frozen in time. Here is what we checked on 26 October 2026:

Source What you get Dates Catch
Archive Team Stream Grab Raw stream JSON 2011 to 2023 No longer updated
Sentiment140 1.6M labeled tweets 2009 to 2010 No open license
TweetEval (Hugging Face) 7 labeled tasks Older tweets License per subset
COVID-19 chatter (Zenodo) Post IDs only 2020 to 2023 You rehydrate them
Stanford SNAP twitter7 476M tweets 2009 Removed
Bright Data Posts and profiles Refreshed monthly $250 minimum

Each one fits a different job:

  • Archive Team's Twitter Stream Grab holds JSON from Twitter's free "Spritzer" sample stream. Its Internet Archive page says it "is no longer updated" and should be treated as static.
  • Sentiment140 is the classic sentiment set. Its Hugging Face card says no open-source license is attached.
  • TweetEval bundles seven classification tasks, from irony to hate speech. Its card says every subset requires complying with Twitter's terms.
  • The COVID-19 chatter dataset on Zenodo shares only IDs. Its last version, from April 2023, warned it "might be the last full update" because of the API paywall.
  • Stanford's SNAP twitter7 set is gone. The page says, "As per request from Twitter the data is no longer available."
  • Bright Data sells current X posts and profiles. Its page lists $250 per 100,000 records, refreshed monthly.

Why research datasets share only post IDs

X's Developer Policy decides what can be passed around. It says you "may only distribute Post IDs, Direct Message IDs, and/or User IDs."

It also caps sharing at 1,500,000 post IDs per person in any 30 days, without X's written permission. Academic researchers may share IDs "solely for the purposes of non-commercial research."

So a typical research dataset is a file of numbers. To read the posts, you rehydrate them, which means looking each ID up again.

A deleted post can't be rehydrated. The same policy asks you to delete stored content once it is deleted on X.

How to rehydrate a Twitter dataset of post IDs

Weir's GET /v1/x/posts takes up to 100 IDs per call. Missing posts come back in meta.notFound and aren't billed.

We ran it on 26 October 2026 with three brand post IDs and one fake one. It returned three posts for 4 credits, trimmed:

{
  "data": [
    { "id": "2113390212911083894", "createdAt": "2026-10-22T22:01:06.000Z", "likeCount": 9669 }
  ],
  "meta": { "notFound": ["1111111111111111111"], "creditsCharged": 4 }
}

In Python, with only the standard library:

import json, os, urllib.request

HEADERS = {"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}", "Content-Type": "application/json"}

def hydrate(ids):
    for i in range(0, len(ids), 100):
        url = "https://api.weirapp.io/v1/x/posts?ids=" + ",".join(ids[i:i + 100])
        page = json.load(urllib.request.urlopen(urllib.request.Request(url, headers=HEADERS), timeout=60))
        yield from page["data"]

Keep IDs as strings. They are too long for a float, and a spreadsheet will round them.

Build your own small Twitter dataset with Python

For posts after 2023, collect them yourself. This script searches X through Weir and writes one post per line, a format called JSONL. It reuses the imports and HEADERS above:

SEARCH, KEEP = "https://api.weirapp.io/v1/x/search", ["id", "createdAt", "lang", "text", "likeCount", "retweetCount", "replyCount"]

def collect(body, path, max_pages=10):
    seen = set()
    with open(path, "a", encoding="utf-8") as out:
        for _ in range(max_pages):
            req = urllib.request.Request(SEARCH, json.dumps(body).encode(), HEADERS)
            page = json.load(urllib.request.urlopen(req, timeout=60))
            for post in page["data"]:
                if post["id"] not in seen:
                    seen.add(post["id"])
                    out.write(json.dumps({k: post.get(k) for k in KEEP}, ensure_ascii=False) + "\n")
            if not page["meta"]["nextCursor"]:
                break
            body = {**body, "cursor": page["meta"]["nextCursor"]}

Then run one search, such as a week of English posts on a topic:

collect({"query": "electric cars -filter:nativeretweets", "language": "en",
         "onlyOriginal": True, "since": "2026-10-19T00:00:00Z", "limit": 20},
        "posts.jsonl", max_pages=5)

Three choices in it matter:

  • It stops only on a null cursor, and max_pages caps the spend. An empty page can still have more behind it.
  • It keeps no usernames. Add the author only if your study needs it, since a handle is personal data.
  • It drops reposts with -filter:nativeretweets. A repost shows 0 likes and would skew your counts.

Our guide to Twitter data for academic research adds an ethics checklist. For a CSV instead, see how to get tweets with Python.

What does a Twitter dataset cost?

A Weir search page costs 1 credit plus 1 per post, so 20 posts cost 21 credits. Here is 10,000 posts by each route, as of October 2026:

Getting 10,000 X posts, October 2026
TwitterAPI.io$1.50
Weir, $5 packabout $2.10
Official X API$50
Bright Data, minimum order$250 for 100K records

TwitterAPI.io's pricing page lists $0.15 per 1,000 tweets, the cheapest here. X's pricing page lists $0.005 per post read.

Weir's 5,000 free monthly credits cover about 4,760 posts, with no card. Price a bigger job with the X API cost calculator.

When not to use Weir

  • You need tweets from before 2023 in bulk. The Archive Team files cost nothing.
  • You need data licensed by X. Only X's own API or a deal with X gives you that.
  • Price per post is all that matters. TwitterAPI.io charges less per tweet.
  • You need millions of posts in one delivery. A vendor dataset ships it as one file.

Weir reads public posts only and isn't licensed by X, so access can change. Read is scraping Twitter legal before you collect at scale.

FAQ

Where can I find free Twitter datasets?

The Internet Archive's Twitter Stream Grab, Sentiment140 and TweetEval on Hugging Face, and ID-only sets on Zenodo. Nearly all end by early 2023. Check each one's license and X's terms before you use it.

Can I still download Twitter data in 2026?

Yes, through the paid X API, a third-party API, or a vendor dataset. Your own posts come free in your X archive. The free research collections mostly end in 2023.

What is rehydrating a Twitter dataset?

Turning a list of post IDs back into full posts by looking each one up again. Research sets share only IDs because X's policy says so. Deleted or protected posts won't come back.

Sources

All checked on 26 October 2026: