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ão | Situação | Precisa de | Erro que aparece |
|---|---|---|---|---|
| snscrape | 22 de jun de 2023 | Módulo de Twitter morto | Nada (sem login) | blocked (404) |
| Twint | 29 de abr de 2020 | Arquivado em 30 de mar de 2023 | Nada (sem login) | Guest token not found |
| twikit | 7 de fev de 2025 | Quebrado desde 18 de mar de 2026 | Login ou cookies | KEY_BYTE indices |
| twifork | 30 de ago de 2026 | Fork funcional do twikit | Cookies do navegador | Cookies vencidos |
| twscrape | 25 de ago de 2026 | Funcionando | Contas do X | Bloqueios de conta, 403 |
| Scweet | 22 de out de 2026 | Funcionando | Um cookie auth_token | Bloqueios de conta |
| ntscraper | 24 de mai de 2025 | Morto junto com o Nitter | Uma instância do Nitter | Instâncias fora do ar |
| tweety | 15 de jul de 2025 | Atualizações lentas | Uma conta do X | A 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.
#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:
-
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.
-
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) -
Troque cada chamada. Escolha a sua biblioteca e a chamada que o seu script faz; o conversor mostra a requisição equivalente.
Sua bibliotecaAntes: snscrapescraper = sntwitter.TwitterSearchScraper( "python lang:en") for tweet in scraper.get_items(): print(tweet.rawContent)Depois: Sorsa APIfor 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:emin_faves:funcionam igual. Definaordercomo"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.
-
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.
| Tarefa | Sorsa API | twikit | twscrape |
|---|---|---|---|
| Buscar tweets | POST /search-tweets (abre em uma nova aba) | search_tweet | search |
| Tweets de um usuário | POST /user-tweets (abre em uma nova aba) | get_user_tweets | user_tweets |
| Um perfil | GET /info (abre em uma nova aba) | get_user_by_screen_name | user_by_login |
| Seguidores | GET /followers (abre em uma nova aba) | get_user_followers | followers |
| Seguindo | GET /follows (abre em uma nova aba) | get_user_following | following |
| Um tweet | POST /tweet-info (abre em uma nova aba) | get_tweet_by_id | tweet_details |
| 100 tweets por ID | POST /tweet-info-bulk (abre em uma nova aba) | get_tweets_by_ids | nenhuma |
| Respostas a um tweet | POST /comments (abre em uma nova aba) | get_tweet_by_id | tweet_replies |
| Retweeters | POST /retweeters (abre em uma nova aba) | get_retweeters | retweeters |
| Buscar usuários | POST /search-users (abre em uma nova aba) | search_user | search_user |
| Tweets de uma lista | GET /list-tweets (abre em uma nova aba) | get_list_tweets | list_timeline |
| Trends | GET /trends (abre em uma nova aba) | get_place_trends | trends |
| Dados de "Sobre" da conta | GET /about (abre em uma nova aba) | nenhuma | user_about |
Buscar tweets
- twikit
- search_tweet
- twscrape
- search
Tweets de um usuário
- twikit
- get_user_tweets
- twscrape
- user_tweets
Um perfil
- Sorsa API
- GET /info (abre em uma nova aba)
- twikit
- get_user_by_screen_name
- twscrape
- user_by_login
Seguidores
- twikit
- get_user_followers
- twscrape
- followers
Seguindo
- Sorsa API
- GET /follows (abre em uma nova aba)
- twikit
- get_user_following
- twscrape
- following
Um tweet
- twikit
- get_tweet_by_id
- twscrape
- tweet_details
100 tweets por ID
- twikit
- get_tweets_by_ids
- twscrape
- nenhuma
Respostas a um tweet
- twikit
- get_tweet_by_id
- twscrape
- tweet_replies
Retweeters
- twikit
- get_retweeters
- twscrape
- retweeters
Buscar usuários
- twikit
- search_user
- twscrape
- search_user
Tweets de uma lista
- twikit
- get_list_tweets
- twscrape
- list_timeline
Trends
- Sorsa API
- GET /trends (abre em uma nova aba)
- twikit
- get_place_trends
- twscrape
- trends
Dados de "Sobre" da conta
- Sorsa API
- GET /about (abre em uma nova aba)
- twikit
- nenhuma
- twscrape
- user_about
O snscrape e o Twint cobriam menos tarefas, e cada uma corresponde aos mesmos endpoints:
| Tarefa | Sorsa API | snscrape | Twint |
|---|---|---|---|
| Buscar tweets | POST /search-tweets | TwitterSearchScraper | run.Search |
| Hashtag | POST /search-tweets | TwitterHashtagScraper | c.Search com #tag |
| Tweets de um usuário | POST /user-tweets | TwitterUserScraper | c.Username |
| Um perfil | GET /info | TwitterUserScraper.entity | run.Lookup |
| Seguidores | GET /followers | nenhuma | run.Followers |
| Seguindo | GET /follows | nenhuma | run.Following |
| Um tweet | POST /tweet-info | TwitterTweetScraper | nenhuma |
| Tweets de uma lista | GET /list-tweets | TwitterListPostsScraper | nenhuma |
| Trends | GET /trends | TwitterTrendsScraper | nenhuma |
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:
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: 403nouser_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
GqlFeaturesOutdatedErroraté que uma versão o alcance.
As chamadas user_by_login, user_tweets e followers do twscrape viram duas chamadas à função auxiliar:
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ério | Sorsa API | twscrape | twikit | snscrape |
|---|---|---|---|---|
| Funciona no X hoje | Sim | Sim | Pelo twifork | Não |
| Precisa de conta do X | Nenhuma | Um pool delas | Uma, por cookies | Nenhuma, mas morto |
| Quando o X muda | Corrigido por nós | Esperar uma versão | O fork corrige | Nunca corrigido |
| Tweets por requisição | Cerca de 20; 100 por ID | Cerca de 20 | Cerca de 20 | Eram cerca de 20 |
| Conta em risco | Nunca | Todas as do pool | A conta dos cookies | Nenhuma |
| Configuração | Uma chave de API | Contas, cookies, proxies | Exportação de cookies | Nada, não devolve nada |
| Preço por 1.000 tweets | A partir de US$ 0,07 | Contas, proxies, tempo | Contas, tempo | Grá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 API | snscrape, twscrape | twikit | Twint |
|---|---|---|---|
id (string) | id | id | id |
created_at (ISO 8601) | date | created_at | datetime |
full_text | rawContent | text | tweet |
user.username | user.username | user.screen_name | username |
user.display_name | user.displayname | user.name | name |
likes_count | likeCount | favorite_count | likes_count |
retweet_count | retweetCount | retweet_count | retweets_count |
reply_count | replyCount | reply_count | replies_count |
quote_count | quoteCount | quote_count | nenhum |
view_count | viewCount | view_count | nenhum |
conversation_id_str | conversationId | nenhum | conversation_id |
quoted_status | quotedTweet | quote | nenhum |
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:
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.
#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.
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.
#Como verificamos
Em 2 de novembro de 2026, lemos o histórico de versões no PyPI e o estado do repositório no GitHub do snscrape, Twint, twikit, twifork, twscrape, Scweet, ntscraper, tweety e Nitter, e as issues citadas acima. Tomamos os nomes de métodos e atributos de cada biblioteca do código-fonte dela no GitHub no mesmo dia. Todos os endpoints, parâmetros e campos da Sorsa API aqui correspondem à referência da API em produção; as requisições foram escritas a partir dela, e não executamos o código das bibliotecas contra o x.com.
Fontes
- snscrape issue #996: All Twitter scrapes are failing (abre em uma nova aba)
- snscrape issue #270: Support for authentication (abre em uma nova aba)
- snscrape on PyPI (abre em uma nova aba)
- Twint repository (archived) (abre em uma nova aba)
- Twint issue #1433: Could not find the Guest token in HTML (abre em uma nova aba)
- twikit issue #408: ClientTransaction broken as of March 18, 2026 (abre em uma nova aba)
- twikit on PyPI (abre em uma nova aba)
- twifork README (abre em uma nova aba)
- twscrape README (abre em uma nova aba)
- twscrape issue #337: user_by_id blocked by Cloudflare (abre em uma nova aba)
- Scweet on PyPI (abre em uma nova aba)
- ntscraper README (abre em uma nova aba)
- Nitter repository (archived) (abre em uma nova aba)
- X API pay-per-use pricing (docs.x.com) (abre em uma nova aba)
- Sorsa API reference, OpenAPI
- Search operators (Sorsa API docs) (abre em uma nova aba)