All use cases

A Nitter alternative that doesn't depend on a volunteer-run instance

Public Nitter instances fail under rate limits and shutdowns. Read profiles and tweets over versioned JSON; Monitors replaces RSS with signed webhooks or pullable events.

What usually breaks first

Common failure modes after a DIY scraper or marketplace API hits production — schema drift, billing surprises, and pagination quirks.

Nitter scraped X and served RSS until public instances got blocked or shut down. Self-hosting still breaks on upstream changes.

Social Fetch is not RSS/Atom — it covers reading profiles and tweets over versioned JSON, and Monitors for new-post alerts via signed webhook or pullable JSON events. Metered credits; schema and delivery guarantees Nitter never had.

6 routes for this job

These are the X and Monitors routes that replace what a Nitter instance did — reading profiles and tweets, and getting notified of new ones.

  • GET /v1/twitter/profiles/{handle}

    Public profile lookup — bio, follower/following counts, verification — the Nitter profile page's replacement, no login required on your end.

  • GET /v1/twitter/profiles/{handle}/tweets

    Recent tweets for a handle, cursor-paginated — the Nitter timeline's replacement.

  • GET /v1/monitors/sources

    Discover the watchable operationId for tweets (twitter.profile.tweets.list), its minimum interval, and a sample event.

  • POST /v1/monitors

    Create a monitor on a profile's tweets — the RSS feed's replacement, delivered as a signed webhook instead of XML.

  • POST /v1/webhook-endpoints

    Create the delivery target: a real URL, or a hosted test inbox (kind: "sink") if you just want to see it work first.

  • GET /v1/monitors/{id}/events

    Pull new-tweet events directly, cursor-paginated, on your own schedule — for teams that would rather poll a JSON feed than run a webhook receiver.

OpenAPI reference →

How teams wire this

Typical order starts with “replace the nitter profile page.” Adjust cadence, schema, and thresholds to your stack.

  1. 1

    Replace the Nitter profile page

    GET /v1/twitter/profiles/{handle} gives you the same bio and metrics a Nitter profile page rendered, as typed JSON instead of scraped HTML.

  2. 2

    Replace the Nitter timeline

    GET /v1/twitter/profiles/{handle}/tweets returns recent tweets, cursor-paginated. Same JSON envelope every other Social Fetch route uses.

  3. 3

    Replace the RSS feed with a Monitor

    Create a monitor on twitter.profile.tweets.list with an interval or cron schedule. It runs a synchronous baseline on creation, so day-one tweets don't fire a false event.

  4. 4

    Pick push or pull

    Attach a webhook endpoint for a push model, or skip it entirely and pull GET /v1/monitors/{id}/events on your own cadence — a valid pull-only monitor, closer to how an RSS reader actually behaves.

  5. 5

    Verify before you trust it, if you chose push

    Webhook deliveries are HMAC-signed. Verify with verifySignature or constructEvent from @socialfetch/sdk/webhooks over the raw request body before you parse anything.

  6. 6

    Budget credits like the metered service it is

    Unlike a free Nitter instance, every profile lookup, tweet page, and monitor check bills at that route's normal credit price — plan for it the same way you'd plan for any metered API, not a free scrape.

Read a profile's recent tweets — the Nitter timeline's replacement.

Swap YOUR_API_KEY for a dashboard key. The playground pre-fills auth for the same path.

Request
Read a profile's recent tweets — the Nitter timeline's replacement.

Why Social Fetch over a Nitter instance or a self-hosted mirror

  • No dependency on a volunteer-run public instance disappearing overnight, and nothing to self-host or keep patched.
  • A documented, versioned JSON schema instead of scraped HTML — X changing its markup doesn't silently break your parser.
  • Monitors replaces the RSS feed with a signed, retried webhook: 8 attempts over roughly 21 hours on failure, every attempt logged, instead of a feed reader's fixed poll interval.
  • A hosted test inbox and the socialfetch listen CLI let you see a real signed event before deploying a webhook receiver at all.
  • Would rather poll than run a server? GET /v1/monitors/{id}/events is a pull-based JSON feed, cursor-paginated — the closest thing to "RSS, but it doesn't break."
  • Transparent, metered pricing instead of a free service that's free because someone else is quietly absorbing the scraping risk.

Try the Nitter alternative on free credits

100 free credits — read a profile's tweets, then create a monitor and watch a signed webhook (or a pull feed) replace the RSS you used to get from Nitter.