Pular para o conteúdo

snscrape, Twint, twikit e twscrape: o que ainda funciona no X

snscrape e Twint pararam de funcionar no X em 2023 e não voltam, a última versão do twikit falha desde a mudança do X de 18 de março de 2026, e o twscrape ainda funciona, mas só com contas do X logadas que você mesmo fornece.

Resposta rápida: Em 2 de novembro de 2026, o snscrape ainda devolve blocked (404) para o X, como acontece desde 30 de junho de 2023, o Twint está arquivado e o twikit 2.3.3 é de fevereiro de 2025. Para executar os mesmos trabalhos sem arriscar uma conta do X, use a Sorsa API: o POST /search-tweets aceita a sua consulta antiga, com cerca de 20 tweets por requisição a partir de US$ 0,07 por 1.000, e 100 requisições grátis.

Endpoint
POST /search-tweets
Tamanho da página
cerca de 20 tweets por requisição
Preço
a partir de US$ 0,07 por 1.000

#Quais bibliotecas de scraping do Twitter ainda funcionam em 2026

Das oito bibliotecas Python que as pessoas ainda instalam para obter dados do X, duas são mantidas e funcionam, uma funciona como fork, uma recebe atualizações lentas e quatro estão mortas ou quebradas. Toda biblioteca que ainda funciona faz login como uma conta do X, porque o X só mostra busca, timelines completas e listas de seguidores a usuários logados desde 30 de junho de 2023.

A tabela traz o que o PyPI e o GitHub mostravam em 2 de novembro de 2026, com o erro que cada biblioteca imprime quando falha.

BibliotecaÚltima versãoSituaçãoPrecisa deErro que aparece
snscrape22 de jun de 2023Módulo de Twitter mortoNada (sem login)blocked (404)
Twint29 de abr de 2020Arquivado em 30 de mar de 2023Nada (sem login)Guest token not found
twikit7 de fev de 2025Quebrado desde 18 de mar de 2026Login ou cookiesKEY_BYTE indices
twifork30 de ago de 2026Fork funcional do twikitCookies do navegadorCookies vencidos
twscrape25 de ago de 2026FuncionandoContas do XBloqueios de conta, 403
Scweet22 de out de 2026FuncionandoUm cookie auth_tokenBloqueios de conta
ntscraper24 de mai de 2025Morto junto com o NitterUma instância do NitterInstâncias fora do ar
tweety15 de jul de 2025Atualizações lentasUma conta do XA conta vira somente leitura
  • snscrape

    Última versão
    22 de jun de 2023
    Situação
    Módulo de Twitter morto
    Precisa de
    Nada (sem login)
    Erro que aparece
    blocked (404)
  • Twint

    Última versão
    29 de abr de 2020
    Situação
    Arquivado em 30 de mar de 2023
    Precisa de
    Nada (sem login)
    Erro que aparece
    Guest token not found
  • twikit

    Última versão
    7 de fev de 2025
    Situação
    Quebrado desde 18 de mar de 2026
    Precisa de
    Login ou cookies
    Erro que aparece
    KEY_BYTE indices
  • twifork

    Última versão
    30 de ago de 2026
    Situação
    Fork funcional do twikit
    Precisa de
    Cookies do navegador
    Erro que aparece
    Cookies vencidos
  • twscrape

    Última versão
    25 de ago de 2026
    Situação
    Funcionando
    Precisa de
    Contas do X
    Erro que aparece
    Bloqueios de conta, 403
  • Scweet

    Última versão
    22 de out de 2026
    Situação
    Funcionando
    Precisa de
    Um cookie auth_token
    Erro que aparece
    Bloqueios de conta
  • ntscraper

    Última versão
    24 de mai de 2025
    Situação
    Morto junto com o Nitter
    Precisa de
    Uma instância do Nitter
    Erro que aparece
    Instâncias fora do ar
  • tweety

    Última versão
    15 de jul de 2025
    Situação
    Atualizações lentas
    Precisa de
    Uma conta do X
    Erro que aparece
    A conta vira somente leitura

Dois padrões explicam a tabela inteira. As bibliotecas que leem o X sem login (snscrape, Twint, ntscraper via Nitter) perderam a fonte de dados, e nenhum patch a traz de volta. As que fazem login só continuam funcionando enquanto as contas do X permanecem ativas e o código acompanha o app web do X, que mudou o query ID da sua busca interna 37 vezes nos últimos 12 meses. Nosso guia sobre como fazer web scraping do Twitter trata também de navegadores e da API oficial do X.

Quando cada biblioteca parou de ler o X Datas de release e issues do PyPI e do GitHub, checadas em 2 nov 2026 2020 2021 2022 2023 2024 2025 2026 agora Twint Arquivado Erros de guest token, out 2020 Arquivado em 30 mar 2023 snscrape Morto para o X Quebrou em 30 jun 2023 (#996) Última release 8 dias antes ntscraper Morto com o Nitter Última release em 24 mai 2025 Nitter arquivado em 9 out 2026 twikit Quebrado na origem Última release em 7 fev 2025 Quebrou em 18 mar 2026 (#408) twscrape Funciona com contas 0.20.1 em 25 ago 2026 Exige contas logadas
Toda biblioteca sem login acabou. As que ainda funcionam, o twscrape inclusive, rodam em contas logadas.

#Troque uma chamada de biblioteca por uma requisição da Sorsa API

Para um projeto que usava qualquer uma dessas bibliotecas, use a Sorsa API, uma API e scraper do Twitter (X): ela devolve os mesmos tweets, perfis e listas de seguidores públicos em JSON, a partir de um cabeçalho ApiKey, sem conta do X, cookies ou proxies, e, quando o X muda o app web dele, a correção fica por nossa conta, enquanto seu código e o esquema de resposta continuam iguais. Os resultados de busca custam a partir de US$ 0,07 por 1.000, os seguidores a partir de US$ 0,007 por 1.000, e todos os planos, o início gratuito inclusive, permitem 20 requisições por segundo.

Quatro passos migram um script:

  1. Obtenha uma chave. Cadastre-se e copie a chave de API do painel. As primeiras 100 requisições são grátis e nunca expiram.

  2. Adicione uma função auxiliar. Estas funções substituem o import da biblioteca. Cada endpoint de lista devolve uma página e um next_cursor; a função auxiliar envia o cursor de volta até que ele venha vazio.

    sorsa_helper.py
    import requests
    
    BASE = "https://api.sorsa.io/v3"
    HEADERS = {"ApiKey": "YOUR_API_KEY"}
    
    
    def pages(method, path, payload):
        """Call a Sorsa API list endpoint and yield every page."""
        payload = dict(payload)
        send = requests.get if method == "GET" else requests.post
        arg = "params" if method == "GET" else "json"
        while True:
            r = send(BASE + path, headers=HEADERS, timeout=30, **{arg: payload})
            r.raise_for_status()  # 403: key or quota, 429: over 20 requests/s
            page = r.json()
            yield page
            if not page.get("next_cursor"):
                return
            payload["next_cursor"] = page["next_cursor"]
    
    
    def items(method, path, payload, key, limit=None):
        """Yield tweets or users across pages, stopping at limit."""
        n = 0
        for page in pages(method, path, payload):
            for item in page.get(key) or []:
                yield item
                n += 1
                if limit and n >= limit:
                    return
    
    
    def search(query, limit=None, order="latest"):
        body = {"query": query, "order": order}
        return items("POST", "/search-tweets", body, "tweets", limit)
    
    
    def user_tweets(username, limit=None):
        body = {"username": username}
        return items("POST", "/user-tweets", body, "tweets", limit)
    
    
    def followers(username, limit=None):
        params = {"username": username}
        return items("GET", "/followers", params, "users", limit)
    
  3. Troque cada chamada. Escolha a sua biblioteca e a chamada que o seu script faz; o conversor mostra a requisição equivalente.

    Sua biblioteca
    Antes: snscrape
    scraper = sntwitter.TwitterSearchScraper(
        "python lang:en")
    for tweet in scraper.get_items():
        print(tweet.rawContent)
    Depois: Sorsa API
    for tweet in search("python lang:en"):
        print(tweet["full_text"])
    Endpoint
    POST /search-tweets
    Uma requisição devolve
    cerca de 20 tweets
    Preço na Sorsa API
    a partir de US$ 0,07 por 1,000 tweets

    Sua string de consulta passa como está: from:, since:, until:, lang: e min_faves: funcionam igual. Defina order como "latest" para a ordem do snscrape, do mais recente para o mais antigo.

    Cada chamada de biblioteca corresponde a um endpoint da Sorsa API. Chamadas de escrita e curtidas não têm equivalente somente leitura.

  4. Confira a primeira página. Toda resposta traz o perfil completo do autor dentro de cada tweet, então a segunda consulta que o twscrape e o twikit exigem para obter um ID de usuário deixa de ser necessária.

    Resposta200 OK
    {
      "tweets": [
        {
          "id": "2116173807613027825",
          "full_text": "Moved our nightly tweet pull off a dead library.",
          "created_at": "2026-10-30T14:22:07Z",
          "lang": "en",
          "likes_count": 214,
          "retweet_count": 37,
          "reply_count": 19,
          "quote_count": 6,
          "view_count": 18450,
          "conversation_id_str": "2116173807613027825",
          "user": {
            "id": "1592041833471827968",
            "username": "lena_ships_python",
            "display_name": "Lena Ships Python",
            "followers_count": 2310
          }
        }
      ],
      "next_cursor": "DAACCgACGW7xDmNAJxAKAAMZbvEOY0AnEAgABAAAAAEAAA"
    }
    

O mapa completo das chamadas

As tabelas cobrem as chamadas que a maioria dos scripts faz. Cada linha é uma requisição da Sorsa API; as colunas das bibliotecas mostram a chamada que ela substitui. As bibliotecas com login vêm primeiro, porque são os scripts delas que ainda estão rodando.

TarefaSorsa APItwikittwscrape
Buscar tweetsPOST /search-tweets (abre em uma nova aba)search_tweetsearch
Tweets de um usuárioPOST /user-tweets (abre em uma nova aba)get_user_tweetsuser_tweets
Um perfilGET /info (abre em uma nova aba)get_user_by_screen_nameuser_by_login
SeguidoresGET /followers (abre em uma nova aba)get_user_followersfollowers
SeguindoGET /follows (abre em uma nova aba)get_user_followingfollowing
Um tweetPOST /tweet-info (abre em uma nova aba)get_tweet_by_idtweet_details
100 tweets por IDPOST /tweet-info-bulk (abre em uma nova aba)get_tweets_by_idsnenhuma
Respostas a um tweetPOST /comments (abre em uma nova aba)get_tweet_by_idtweet_replies
RetweetersPOST /retweeters (abre em uma nova aba)get_retweetersretweeters
Buscar usuáriosPOST /search-users (abre em uma nova aba)search_usersearch_user
Tweets de uma listaGET /list-tweets (abre em uma nova aba)get_list_tweetslist_timeline
TrendsGET /trends (abre em uma nova aba)get_place_trendstrends
Dados de "Sobre" da contaGET /about (abre em uma nova aba)nenhumauser_about

O snscrape e o Twint cobriam menos tarefas, e cada uma corresponde aos mesmos endpoints:

TarefaSorsa APIsnscrapeTwint
Buscar tweetsPOST /search-tweetsTwitterSearchScraperrun.Search
HashtagPOST /search-tweetsTwitterHashtagScraperc.Search com #tag
Tweets de um usuárioPOST /user-tweetsTwitterUserScraperc.Username
Um perfilGET /infoTwitterUserScraper.entityrun.Lookup
SeguidoresGET /followersnenhumarun.Followers
SeguindoGET /followsnenhumarun.Following
Um tweetPOST /tweet-infoTwitterTweetScrapernenhuma
Tweets de uma listaGET /list-tweetsTwitterListPostsScrapernenhuma
TrendsGET /trendsTwitterTrendsScrapernenhuma
  • Buscar tweets

    Sorsa API
    POST /search-tweets
    snscrape
    TwitterSearchScraper
    Twint
    run.Search
  • Hashtag

    Sorsa API
    POST /search-tweets
    snscrape
    TwitterHashtagScraper
    Twint
    c.Search com #tag
  • Tweets de um usuário

    Sorsa API
    POST /user-tweets
    snscrape
    TwitterUserScraper
    Twint
    c.Username
  • Um perfil

    Sorsa API
    GET /info
    snscrape
    TwitterUserScraper.entity
    Twint
    run.Lookup
  • Seguidores

    Sorsa API
    GET /followers
    snscrape
    nenhuma
    Twint
    run.Followers
  • Seguindo

    Sorsa API
    GET /follows
    snscrape
    nenhuma
    Twint
    run.Following
  • Um tweet

    Sorsa API
    POST /tweet-info
    snscrape
    TwitterTweetScraper
    Twint
    nenhuma
  • Tweets de uma lista

    Sorsa API
    GET /list-tweets
    snscrape
    TwitterListPostsScraper
    Twint
    nenhuma
  • Trends

    Sorsa API
    GET /trends
    snscrape
    TwitterTrendsScraper
    Twint
    nenhuma

Duas requisições a mais não têm equivalente em biblioteca que mereça uma linha. O GET /info-batch (abre em uma nova aba) devolve até 100 perfis em uma única requisição, enquanto todas as bibliotecas consultam as contas uma a uma, e o GET /verified-followers (abre em uma nova aba) substitui o verified_followers do twscrape e o get_user_verified_followers do twikit.

Duas tarefas não têm substituto somente leitura. A lista de quem curtiu um post (o get_favoriters do twikit, o --favorites do Twint) e as curtidas ou bookmarks do próprio usuário não são dados públicos que a Sorsa API devolve. Postar, seguir e enviar DMs (o create_tweet, o follow_user e o send_dm do twikit) ficam com a API oficial do X, já que a Sorsa API é somente leitura por princípio e nunca toca na sua conta do X.

#Por que o snscrape devolve blocked (404)

O snscrape devolve blocked (404) em todo scraping do Twitter porque lê o X sem login, e o X parou de servir busca e timelines a visitantes sem login em 30 de junho de 2023. O mantenedor abriu a issue #996 (abre em uma nova aba), "All Twitter scrapes are failing", no mesmo dia; ela continua aberta, com 161 comentários.

A biblioteca obtinha um guest token, o passe que o X dava antes a visitantes anônimos, e chamava os endpoints que a página web sem login usava. Fazer login está fora de escopo por princípio: a issue #270 (abre em uma nova aba) diz que o snscrape "does not and will not support logging into social network accounts", ou seja, não suporta nem vai suportar o login em contas de redes sociais. A última versão no PyPI, 0.7.0.20230622, saiu oito dias antes da quebra, então reinstalar, usar uma nova versão do Python ou a branch de desenvolvimento não muda nada. Os módulos das outras redes são outra história; o módulo de Twitter não tem como voltar.

O loop de busca que a maioria dos tutoriais ensinava migra linha por linha. Sua string de consulta mantém os operadores: from:, since:, until:, lang: e min_faves: funcionam do mesmo modo no campo query.

import itertools
import snscrape.modules.twitter as sntwitter

query = "from:lena_ships_python since:2026-10-01"
scraper = sntwitter.TwitterSearchScraper(query)
for tweet in itertools.islice(scraper.get_items(), 100):
    print(tweet.date, tweet.likeCount, tweet.rawContent)

TwitterUserScraper("lena_ships_python") vira user_tweets("lena_ships_python"), e TwitterHashtagScraper("yourtag") vira search("#yourtag"). Nossa referência de operadores de busca do Twitter lista todos os operadores que o campo query aceita, com posts desde 2006.

#Twint: erros de guest token e o arquivamento

O Twint morreu de vez: o repositório dele no GitHub foi arquivado pelo dono em 30 de março de 2023, a última versão no PyPI (2.1.20) é de 29 de abril de 2020, e ele lê o X pelo mesmo guest token sem login que o snscrape perdeu.

As falhas começaram anos antes do arquivamento. RefreshTokenException: Could not find the Guest token in HTML aparece em issues desde outubro de 2020, e a issue #1433 (abre em uma nova aba), aberta em 3 de março de 2023, é o último relato dele antes do arquivamento. O outro erro que as pessoas citam, CRITICAL:root:twint.run:Twint:Feed:noData, significa que a página que o Twint analisou voltou sem os dados esperados. Forks que corrigem o token.py esbarraram no mesmo muro de login em junho de 2023.

O objeto Config do Twint corresponde a argumentos simples. c.Search e c.Username viram a consulta ou o username, c.Since e c.Until passam para a consulta como since: e until:, e c.Store_csv vira um gravador de CSV que você controla.

import twint

c = twint.Config()
c.Search = "python"
c.Since = "2026-10-01"
c.Limit = 100
c.Store_csv = True
c.Output = "tweets.csv"
twint.run.Search(c)

twint.run.Followers(c) e twint.run.Following(c) viram GET /followers e GET /follows, com até 200 contas por página. Uma timeline inteira, além do antigo limite de rolagem de 3.200 tweets do Twint, é uma busca por intervalo de datas, que nosso guia para baixar todos os tweets de um usuário explica passo a passo.

#twikit: a quebra de março de 2026 e o twifork

A última versão do twikit, a 2.3.3 de 7 de fevereiro de 2025, falha em todas as chamadas desde que o X mudou o app web em 18 de março de 2026. A issue #408 (abre em uma nova aba) relata Couldn't get KEY_BYTE indices e continua aberta, e a issue #425 acrescenta um KeyError de 23 de abril de 2026.

A causa está na forma como o twikit fala com o X. Ele faz login como um usuário comum do X e chama os endpoints GraphQL internos que o app web do x.com usa, e cada chamada precisa de um cabeçalho x-client-transaction-id calculado a partir de um script que o X serve. Quando o X mudou esse script, o parser do twikit deixou de reconhecê-lo. O repositório original tem 160 issues e pull requests abertos, e nenhuma versão nova saiu.

Um fork continua o código. O twifork (abre em uma nova aba) 2.4.0, lançado em 30 de agosto de 2026, mantém o import from twikit import Client e corrige as quebras de 2026, e o README dele é franco sobre os limites: o login por senha "cannot be made to work", ou seja, não tem como funcionar, e o acesso de visitante "is closed on X's side; use cookies", isto é, foi fechado pelo X, e é preciso usar cookies. Para rodá-lo, você exporta os cookies auth_token e ct0 de uma sessão de navegador de uma conta do X e fica de olho em bloqueios dessa conta.

Uma busca do twikit como search_tweet("python", "Latest") vira uma chamada à função auxiliar:

Depois: Sorsa API
from sorsa_helper import search

for t in search("python", limit=20):
    print(t["created_at"], t["user"]["username"], t["full_text"])

O produto 'Top' do twikit corresponde a "order": "popular", e o 'Latest' a "latest". O arquivo de cookies, o loop asyncio e a conta por trás deles desaparecem.

#twscrape: funciona, com contas do X que você fornece

O twscrape ainda funciona em 2026: a versão 0.20.1 saiu em 25 de agosto de 2026, e o repositório foi atualizado de novo em 31 de outubro. O README (abre em uma nova aba) dele declara a condição logo de início: ele "requires authorized X/Twitter accounts", ou seja, exige contas autorizadas do X/Twitter, adicionadas a partir de cookies do navegador que contêm auth_token e ct0.

A biblioteca roda um pool dessas contas, então cada conta dele corre o risco de ser bloqueada.

Três falhas aparecem na prática:

  • Contas bloqueadas ou sem login. Um pool sem nenhuma conta ativa fica esperando ou levanta NoAccountError.
  • Bloqueios da Cloudflare. A issue #337 (abre em uma nova aba) aberta (12 de setembro de 2026) registra Blocked by Cloudflare: 403 no user_by_id.
  • Mudanças no app web do X. O X adiciona flags às chamadas GraphQL internas dele, e, quando uma delas se torna obrigatória, o twscrape levanta o GqlFeaturesOutdatedError até que uma versão o alcance.

As chamadas user_by_login, user_tweets e followers do twscrape viram duas chamadas à função auxiliar:

Depois: Sorsa API
from sorsa_helper import followers, user_tweets

tweets = list(user_tweets("lena_ships_python", limit=100))
fans = list(followers("lena_ships_python", limit=1000))

Não é preciso consultar o ID do usuário, porque o POST /user-tweets e o GET /followers aceitam o username diretamente. Mil seguidores chegam em cinco requisições, a 200 por página.

#twscrape x twikit x snscrape: como se comparam

O twscrape é o único dos três que ainda funciona na versão oficial, o twikit funciona só pelo fork, e o snscrape não tem conserto para o X; nenhum deles roda hoje sem contas do X. Os critérios que decidem um substituto são se ele funciona agora, o que exige de você, se o seu código continua funcionando, quanto uma requisição devolve e quanto custam 1.000 resultados.

CritérioSorsa APItwscrapetwikitsnscrape
Funciona no X hojeSimSimPelo twiforkNão
Precisa de conta do XNenhumaUm pool delasUma, por cookiesNenhuma, mas morto
Quando o X mudaCorrigido por nósEsperar uma versãoO fork corrigeNunca corrigido
Tweets por requisiçãoCerca de 20; 100 por IDCerca de 20Cerca de 20Eram cerca de 20
Conta em riscoNuncaTodas as do poolA conta dos cookiesNenhuma
ConfiguraçãoUma chave de APIContas, cookies, proxiesExportação de cookiesNada, não devolve nada
Preço por 1.000 tweetsA partir de US$ 0,07Contas, proxies, tempoContas, tempoGrátis, sem dados
  • Funciona no X hoje

    Sorsa API
    Sim
    twscrape
    Sim
    twikit
    Pelo twifork
    snscrape
    Não
  • Precisa de conta do X

    Sorsa API
    Nenhuma
    twscrape
    Um pool delas
    twikit
    Uma, por cookies
    snscrape
    Nenhuma, mas morto
  • Quando o X muda

    Sorsa API
    Corrigido por nós
    twscrape
    Esperar uma versão
    twikit
    O fork corrige
    snscrape
    Nunca corrigido
  • Tweets por requisição

    Sorsa API
    Cerca de 20; 100 por ID
    twscrape
    Cerca de 20
    twikit
    Cerca de 20
    snscrape
    Eram cerca de 20
  • Conta em risco

    Sorsa API
    Nunca
    twscrape
    Todas as do pool
    twikit
    A conta dos cookies
    snscrape
    Nenhuma
  • Configuração

    Sorsa API
    Uma chave de API
    twscrape
    Contas, cookies, proxies
    twikit
    Exportação de cookies
    snscrape
    Nada, não devolve nada
  • Preço por 1.000 tweets

    Sorsa API
    A partir de US$ 0,07
    twscrape
    Contas, proxies, tempo
    twikit
    Contas, tempo
    snscrape
    Grátis, sem dados

Para um pipeline que precisa rodar no mês que vem, escolha a Sorsa API: os mesmos operadores de busca e as mesmas tarefas dessas bibliotecas, cerca de 20 tweets por requisição de busca ou 100 por consulta em lote por ID, 20 requisições por segundo em todos os planos e nenhuma conta do X que possa ser bloqueada. Ela está em produção desde 2022, com mais de 6 bilhões de requisições atendidas, primeiro como TweetScout API.

#Migre os campos que o seu código lê

A Sorsa API nomeia os campos em snake case e aninha o perfil completo do autor em user, então a migração renomeia uma dúzia de atributos e mantém todo o resto. A tabela traz o nome antigo em cada biblioteca e o campo que o substitui.

Campo da Sorsa APIsnscrape, twscrapetwikitTwint
id (string)ididid
created_at (ISO 8601)datecreated_atdatetime
full_textrawContenttexttweet
user.usernameuser.usernameuser.screen_nameusername
user.display_nameuser.displaynameuser.namename
likes_countlikeCountfavorite_countlikes_count
retweet_countretweetCountretweet_countretweets_count
reply_countreplyCountreply_countreplies_count
quote_countquoteCountquote_countnenhum
view_countviewCountview_countnenhum
conversation_id_strconversationIdnenhumconversation_id
quoted_statusquotedTweetquotenenhum
  • id (string)

    snscrape, twscrape
    id
    twikit
    id
    Twint
    id
  • created_at (ISO 8601)

    snscrape, twscrape
    date
    twikit
    created_at
    Twint
    datetime
  • full_text

    snscrape, twscrape
    rawContent
    twikit
    text
    Twint
    tweet
  • user.username

    snscrape, twscrape
    user.username
    twikit
    user.screen_name
    Twint
    username
  • user.display_name

    snscrape, twscrape
    user.displayname
    twikit
    user.name
    Twint
    name
  • likes_count

    snscrape, twscrape
    likeCount
    twikit
    favorite_count
    Twint
    likes_count
  • retweet_count

    snscrape, twscrape
    retweetCount
    twikit
    retweet_count
    Twint
    retweets_count
  • reply_count

    snscrape, twscrape
    replyCount
    twikit
    reply_count
    Twint
    replies_count
  • quote_count

    snscrape, twscrape
    quoteCount
    twikit
    quote_count
    Twint
    nenhum
  • view_count

    snscrape, twscrape
    viewCount
    twikit
    view_count
    Twint
    nenhum
  • conversation_id_str

    snscrape, twscrape
    conversationId
    twikit
    nenhum
    Twint
    conversation_id
  • quoted_status

    snscrape, twscrape
    quotedTweet
    twikit
    quote
    Twint
    nenhum

Em uma base de código grande, um pequeno adaptador mantém os nomes de atributos antigos enquanto você migra o restante. Ele envolve cada tweet da Sorsa API em um objeto que responde pelos nomes do snscrape e do twscrape:

adapter.py
from datetime import datetime
from types import SimpleNamespace


def as_snscrape(t):
    """A Sorsa API tweet under snscrape/twscrape attribute names."""
    u = t["user"]
    return SimpleNamespace(
        id=int(t["id"]),
        url=f"https://x.com/{u['username']}/status/{t['id']}",
        date=datetime.fromisoformat(t["created_at"].replace("Z", "+00:00")),
        rawContent=t["full_text"],
        lang=t.get("lang"),
        likeCount=t["likes_count"],
        retweetCount=t["retweet_count"],
        replyCount=t["reply_count"],
        quoteCount=t["quote_count"],
        viewCount=t.get("view_count"),
        user=SimpleNamespace(
            username=u["username"],
            displayname=u["display_name"],
            followersCount=u["followers_count"],
        ),
    )

for tweet in map(as_snscrape, search(query)): passa a alimentar o corpo do loop antigo sem alterações. Os IDs chegam como strings na Sorsa API, então o adaptador os converte de volta em inteiros, como o snscrape os entregava.

Como cada biblioteca acessa o X e o que a barra Biblioteca Como lê o X O que a barra snscrape Twint Um guest token sem login, o passe que o X dava a anônimos Fechado em 30 jun 2023: busca exige login ntscraper Instâncias públicas do Nitter que repassavam páginas do X Nitter arquivado em 9 out 2026 twikit, twifork twscrape, Scweet Cookies de contas logadas enviados ao app web do x.com Bloqueios de conta e toda mudança no x.com Sorsa API Um header ApiKey, JSON de volta, ~20 tweets por página Sem conta do X, nada para bloquear
Os caminhos sem login estão fechados. O caminho com login funciona enquanto suas contas durarem; uma chave de API não envolve nenhuma conta do X.

#Quanto custa o mesmo trabalho

Na Sorsa API, os tweets de uma busca custam a partir de US$ 0,07 por 1.000, contra US$ 5,00 por 1.000 posts na API oficial do X, que ainda exige uma conta de desenvolvedor, OAuth e créditos pré-pagos. As bibliotecas não cobram taxa; elas custam contas do X, proxies e as horas gastas toda vez que o X muda o app web.

Tweets

API oficial do X

US$ 5.000

para 1 milhão tweets de busca

US$ 0,005 por post

Sorsa API

a partir deUS$ 70

para 1 milhão tweets de busca

a partir de US$ 0,07 por 1.000

O pagamento por uso da API oficial do X (abre em uma nova aba) para em 3 milhões de leituras de posts por mês; acima disso só vale um contrato Enterprise. Consultar tweets por ID em lotes de 100 reduz o preço da Sorsa API para US$ 0,014 por 1.000, e as listas de seguidores custam a partir de US$ 0,007 por 1.000, a 200 por página. Requisições com falha nunca são cobradas.

#Execute hoje a sua consulta antiga do snscrape na Sorsa API

O snscrape e o Twint acabaram, e as bibliotecas que ainda funcionam precisam de contas do X que o X não tenha bloqueado. Para manter um job de Twint, snscrape, twikit ou twscrape rodando sem esse risco, migre-o para a Sorsa API: uma chave, suas consultas de busca atuais, cerca de 20 tweets por requisição a partir de US$ 0,07 por 1.000. Cole a função auxiliar acima, troque uma chamada, e suas 100 requisições grátis devolvem cerca de 2.000 tweets para você comparar a saída com a que o script antigo produzia.

#Perguntas frequentes

O twikit ainda é mantido em 2026?

Não, no projeto original: a última versão do twikit é a 2.3.3, de 7 de fevereiro de 2025, e desde a mudança do X de 18 de março de 2026 toda chamada falha com "Couldn't get KEY_BYTE indices" (issue #408, ainda aberta). O fork da comunidade twifork 2.4.0, lançado em 30 de agosto de 2026, corrige essa quebra, mantém o import do twikit e só funciona com cookies exportados de uma conta do X logada.

O twscrape ainda funciona sem uma conta do X?

Não. O twscrape funciona em 2026, com a versão 0.20.1 de 25 de agosto de 2026, mas o README dele diz que exige contas do X autorizadas, adicionadas a partir de cookies que contêm auth_token e ct0. Ele roda em um pool dessas contas, e o X pode bloquear qualquer uma delas.

Existe um fork do snscrape que funcione para o Twitter?

Nenhum fork consegue trazê-lo de volta para o X. O snscrape lê o X sem login, e desde 30 de junho de 2023 o X só devolve busca e timelines a usuários logados, então qualquer fork que corrija o guest token ainda termina em "blocked (404)". O mantenedor descartou logins na issue #270, então uma correção teria de reescrever a biblioteca em torno de contas logadas.

Posso manter minhas consultas de busca do snscrape ou do Twint?

Pode. A busca da Sorsa API aceita a sintaxe de consulta do próprio X, então strings com from:, since:, until:, lang:, min_faves: e filter: funcionam sem alteração no campo query do POST /search-tweets. Defina "order" como "latest" para a ordem do mais novo para o mais antigo que o snscrape devolvia, ou "popular" para a aba Top, e os resultados voltam com cerca de 20 por página e um cursor.

Qual é a melhor alternativa ao snscrape para dados do Twitter?

Para coletar tweets públicos como o snscrape fazia, sem conta do X, a melhor alternativa é a Sorsa API: os mesmos operadores de busca, cerca de 20 tweets por requisição de busca a partir de US$ 0,07 por 1.000, 100 tweets por consulta em lote por ID a partir de US$ 0,014 por 1.000 e 20 requisições por segundo em todos os planos. Ela devolve apenas dados públicos e nunca pede seu login nem seus cookies do X, e toda conta nova vem com 100 requisições grátis.

Pela equipe da Sorsa API. Construímos e operamos a Sorsa API, a API e scraper somente leitura do Twitter (X), em produção desde 2022 (antiga TweetScout API), com mais de 6 bilhões de requisições atendidas. Sobre a Sorsa API

O que mudou
  • Primeira publicação.