All questionsX (Twitter)

snscrape, Twint, and Nitter are dead. What now?

All three depended on X showing content to visitors who were not logged in. X removed that. Twint stopped working first, snscrape broke when guest tokens went, and public Nitter instances shut down when guest accounts were cut. No fork, flag, or version pin brings it back.

If you need public posts, profiles, followers, or search, call an API that reads X for you. Openhandle returns the same data these tools returned, absorbs X changes, and never asks you for an X account or a cookie.

Checked September 2026 · request and response run against the API · no affiliate links

GET /v1/twitter/search/posts?q=…&sort=latest
curl "https://api.openhandle.dev/v1/twitter/search/posts?q=synthetic&sort=latest" \
  -H "Authorization: Bearer $OPENHANDLE_API_KEY"
TypeScript SDK
import { OpenHandle } from '@openhandle/sdk';

const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
let page = await openhandle.twitter.search.posts.list({ q: 'synthetic', sort: 'latest' });

while (page) {
    for (const post of page.data) console.log(post.author.handle, post.text);
    page = await page.next();
}
200 OK
{
  "platform": "twitter",
  "resource": "post",
  "capturedAt": "2026-09-18T10:58:02Z",
  "source": "live",
  "data": [
    {
      "id": "940100000000000001",
      "url": "https://x.com/copperfield_lab_x_test/status/940100000000000001",
      "text": "A deterministic text post from a fictional lab. #synthetic",
      "createdAt": "2026-08-09T15:30:00Z",
      "author": { "id": "940000000001", "handle": "copperfield_lab_x_test" },
      "metrics": { "likes": 42, "reposts": 3, "comments": 3, "quotes": 0, "views": null }
    }
  ],
  "meta": { "cursors": { "next": "b3BhcXVlLWN1cnNvcg" } }
}

Trimmed to one post and the fields snscrape gave you. The example is a Test fixture, so you can run it on a free Test key.

Map the old tools to the API

You ranOpenhandle
snscrape twitter-search "query"GET /v1/twitter/search/posts?q=query&sort=latest
snscrape twitter-user handleGET /v1/twitter/profiles/@handle/posts, one page per request
twint -u handle --followersGET /v1/twitter/profiles/@handle/followers
A Nitter profile pageGET /v1/twitter/profiles/@handle
A Nitter thread pageGET /v1/twitter/posts/{id} and /comments for the replies
A status URLPOST /v1/urls/fetch with the URL

What is different

  • It costs money. One price per answered request, after use. The old tools were free because X paid the bill. That ended.
  • Search is what X shows now. There is no full archive. sort=latest returns recent public posts. Run it on a schedule and store IDs to build your own history.
  • Views may be null. X shows view counts only in some places. When it does not, the field is null, never 0.
  • Protected accounts stay protected. A protected account returns PROFILE_PRIVATE. The old tools could not read those either.

What we never do

Openhandle never logs in to X with your account or anyone else’s. It never posts, likes, reposts, or follows. Public data only, read on request. The public data notice lists every limit.

When this does not work

The answers you will see instead of a stack trace.

SituationStatusCode
The account is protected403PROFILE_PRIVATE
The account is suspended, deleted, or never existed404PROFILE_NOT_FOUND
The cursor came from another query or sort400CURSOR_MISMATCH
404 Not Found
{
  "error": {
    "code": "PROFILE_NOT_FOUND",
    "message": "This profile was not found.",
    "requestId": "req_01j8…",
    "retryable": false
  }
}

Every new workspace starts with 100 free live requests, no card needed. A full synthetic Test dataset covers every X endpoint at no charge.

Read next

More X (Twitter) questions

Send your agent ahead.

Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.

For agents