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

X (Twitter). Checked September 2026.

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.

## GET /v1/twitter/search/posts?q=…&sort=latest

```bash
curl "https://api.openhandle.dev/v1/twitter/search/posts?q=synthetic&sort=latest" \
  -H "Authorization: Bearer $OPENHANDLE_API_KEY"
```

```ts
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:

```json
{
  "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 ran | Openhandle |
|---|---|
| `snscrape twitter-search "query"` | `GET /v1/twitter/search/posts?q=query&sort=latest` |
| `snscrape twitter-user handle` | `GET /v1/twitter/profiles/@handle/posts`, one page per request |
| `twint -u handle --followers` | `GET /v1/twitter/profiles/@handle/followers` |
| A Nitter profile page | `GET /v1/twitter/profiles/@handle` |
| A Nitter thread page | `GET /v1/twitter/posts/{id}` and `/comments` for the replies |
| A status URL | `POST /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](/legal/public-data-notice) lists every limit.

## When this does not work

The answers you will see instead of a stack trace.

| Situation | Status | Code |
|---|---|---|
| The account is protected | 403 | `PROFILE_PRIVATE` |
| The account is suspended, deleted, or never existed | 404 | `PROFILE_NOT_FOUND` |
| The cursor came from another query or sort | 400 | `CURSOR_MISMATCH` |

```json
{
  "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.

## Related

- [Is the X (Twitter) API free to read posts?](https://openhandle.dev/questions/is-the-x-twitter-api-free-to-read-posts): What the official tiers cost and what they cap.
- [Twitter (X) scraper API](https://openhandle.dev/compare/twitter-scraper-api): Build, rent, or call one API. What each costs.
- [X (Twitter) API](https://openhandle.dev/apis/twitter): Every X endpoint with examples.
