Pular para o conteúdo

Como montar um dataset do Twitter para machine learning

Um dataset do Twitter para machine learning é um conjunto de tweets com texto, datas e autores, baixado de um arquivo público como o Sentiment140 (1,6 milhão de tweets de 2009) ou coletado agora por meio de uma API.

Resposta curta: Os conjuntos públicos são grátis, mas têm anos, e a maioria vem como IDs de tweets que você precisa consultar de novo antes de qualquer texto aparecer. Um conjunto novo custa US$ 5,00 por 1.000 posts na API oficial do X. Para montar um, use a Sorsa API: POST /search-tweets coleta tweets de um tópico a partir de US$ 0,07 por 1.000, e 100 requisições grátis cobrem uma coleta de teste de 2.000 tweets.

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

#De onde vêm os datasets do Twitter

Todo dataset do Twitter (X) nasce em um de dois lugares: uma coleção que alguém já publicou, ou tweets que você coleta por conta própria por meio de uma API. Um conjunto publicado é grátis e carrega em minutos. Uma coleção sua combina com o seu tópico, idioma, datas e rótulos, porque é você quem os escolhe; nosso guia sobre como fazer scraping do Twitter compara todas as formas de puxar tweets em 2026.

Os conjuntos públicos mais conhecidos foram reunidos entre 2009 e 2022, quando o Twitter ainda dava acesso gratuito à API para pesquisadores, e vários deles já não distribuem mais o texto dos tweets.

DatasetTamanhoColetadoO que você recebe hoje
Sentiment1401,6 milhão de tweets, 498 para teste2009Texto com rótulos positivo ou negativo tirados de emoticons
TweetEval (Cardiff NLP)7 tarefas de classificaçãoBenchmark de 2020Texto e rótulos de sentimento, emoção, ironia, ódio, linguagem ofensiva, emoji e posicionamento
COVID-19-TweetIDsMais de 1 bilhão de tweetsA partir de janeiro de 2020Apenas IDs de tweets
Arquivo do Twitter do ArchiveTeamCerca de 16 bilhões de registros2011 a 2022JSON bruto, sem rótulos
SNAP Twitter7 (Stanford)476 milhões de tweets2009Nada: retirado a pedido do Twitter
  • Sentiment140

    Tamanho
    1,6 milhão de tweets, 498 para teste
    Coletado
    2009
    O que você recebe hoje
    Texto com rótulos positivo ou negativo tirados de emoticons
  • TweetEval (Cardiff NLP)

    Tamanho
    7 tarefas de classificação
    Coletado
    Benchmark de 2020
    O que você recebe hoje
    Texto e rótulos de sentimento, emoção, ironia, ódio, linguagem ofensiva, emoji e posicionamento
  • COVID-19-TweetIDs

    Tamanho
    Mais de 1 bilhão de tweets
    Coletado
    A partir de janeiro de 2020
    O que você recebe hoje
    Apenas IDs de tweets
  • Arquivo do Twitter do ArchiveTeam

    Tamanho
    Cerca de 16 bilhões de registros
    Coletado
    2011 a 2022
    O que você recebe hoje
    JSON bruto, sem rótulos
  • SNAP Twitter7 (Stanford)

    Tamanho
    476 milhões de tweets
    Coletado
    2009
    O que você recebe hoje
    Nada: retirado a pedido do Twitter

Para uma linha de base genérica de sentimento ou emoção, um dos conjuntos rotulados é o começo mais rápido. A lista awesome-twitter-data (abre em uma nova aba), mantida pela comunidade, acompanha centenas de outros e marca quais ainda compartilham o texto. Para qualquer coisa específica, como reações ao seu produto, um evento deste ano, um idioma que os arquivos ignoram ou um esquema de rótulos seu, você monta o dataset.

#O problema dos datasets públicos do Twitter

Os datasets públicos do Twitter compartilham quatro problemas: são antigos, a maioria guarda só IDs, esses IDs se degradam a cada ano e os rótulos foram feitos para a tarefa de outra pessoa.

  • Texto antigo. Todo tweet do Sentiment140 tem 140 caracteres ou menos, porque o Twitter só elevou o limite para 280 em novembro de 2017. Um modelo treinado com a linguagem de 2009 encontra em 2026 gírias, assuntos e tamanhos de post que nunca viu.
  • IDs em vez de texto. Um dataset compartilhado com terceiros costuma conter apenas IDs de posts e de usuários, então muitos conjuntos de pesquisa, entre eles as grandes coleções de COVID-19, são listas de números. Você recupera o texto reidratando os IDs: consultando cada um de novo por meio de uma API.
  • Degradação. Um tweet que foi apagado, ou cujo autor ficou privado ou foi suspenso, não volta mais. As linhas perdidas não são aleatórias, então o conjunto reconstruído tende para as contas que continuam ativas.
  • Rótulos emprestados. Os rótulos do Sentiment140 vieram de emoticons, não de pessoas lendo os tweets, e os rótulos de benchmark respondem à pergunta do benchmark, não à sua.

Para um modelo que precisa entender os posts deste ano, sobra um caminho: um conjunto novo, limpo e rotulado para uma única tarefa.

#Como montar um dataset novo do Twitter com a Sorsa API

Para um dataset novo, use a Sorsa API, uma API e scraper do Twitter (X): uma chave de API, os operadores de busca do X desde 2006, cerca de 20 tweets por requisição a partir de US$ 0,07 por 1.000 e 20 requisições por segundo em todos os planos, então um conjunto de 1 milhão de tweets sobre um tópico leva cerca de 42 minutos para coletar. Todo tweet chega com o perfil completo do autor sem custo extra, e nada toca em uma conta sua do X.

1 Colete tweets de um tema, threads de respostas ou lista de IDs POST /search-tweets IDs: POST /tweet-info-bulk 2 Limpe remova retweets, cópias e quase duplicatas lang, made_with_ai handles para @user, links para http 3 Rotule um conjunto gold à mão, o resto pré-rotulado label_source humano, modelo ou consulta 4 Divida threads inteiras, semanas mais novas como teste conversation_id_str depois corte por created_at 5 Salve um registro por linha, com dataset card train.jsonl, test.jsonl consultas, datas, taxa de recuperação
A coleta é uma chamada de API em um loop. A maior parte do trabalho que decide a qualidade do modelo acontece depois dela: limpeza, rótulos e uma divisão honesta.

Escolha o endpoint pelo que define o seu dataset:

  1. Pegue uma chave. Cadastre-se e copie sua chave de API no painel. As primeiras 100 requisições são grátis, sem cartão.

  2. Escreva a consulta. Os operadores de busca moldam o dataset antes de você pagar por ele: lang:en mantém um único idioma, -filter:retweets descarta cópias, since: e until: fixam a janela. Teste uma consulta à mão primeiro na ferramenta gratuita Busca Avançada do Twitter.

  3. Envie uma requisição de teste. Uma requisição devolve cerca de 20 tweets e um cursor para a próxima página.

    Terminal
    curl -X POST "https://api.sorsa.io/v3/search-tweets" \
      -H "ApiKey: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"order": "latest",
           "query": "crashing lang:en -filter:retweets since:2026-10-01"}'
    
    Response200 OK
    {
      "tweets": [
        {
          "id": "2115807747265175863",
          "full_text": "The new beta keeps crashing on launch for me",
          "created_at": "2026-10-29T14:07:31Z",
          "lang": "en",
          "likes_count": 12,
          "reply_count": 3,
          "retweet_count": 0,
          "conversation_id_str": "2115807747265175863",
          "in_reply_to_tweet_id": null,
          "is_reply": false,
          "made_with_ai": false,
          "user": {
            "id": "1710221540156513285",
            "username": "maya_trains_models",
            "followers_count": 412,
            "created_at": "2023-10-06T09:12:44Z",
            "verified": false
          }
        }
      ],
      "next_cursor": "DAADDAABCgABHV5mIq0VsAoKAAIdXmUz8Kqg"
    }
    
  4. Percorra as páginas e salve JSONL bruto. Envie o next_cursor de volta até que ele venha vazio e grave cada tweet intocado, um objeto JSON por linha. A limpeza roda depois, sobre uma cópia, então você nunca paga para coletar os mesmos tweets duas vezes.

    Python
    import json
    import time
    
    import requests
    
    URL = "https://api.sorsa.io/v3/search-tweets"
    HEADERS = {"ApiKey": "YOUR_API_KEY"}
    QUERY = "crashing lang:en -filter:retweets since:2026-10-01"
    
    
    def collect(query, path, limit=50_000):
        body = {"query": query, "order": "latest"}
        saved = 0
        with open(path, "a", encoding="utf-8") as out:
            while saved < limit:
                r = requests.post(URL, headers=HEADERS, json=body, timeout=30)
                if r.status_code == 429:  # over 20 requests per second
                    time.sleep(1)
                    continue
                r.raise_for_status()  # 403: no key, or no requests left
                page = r.json()
                for tweet in page.get("tweets", []):
                    tweet["_query"] = query
                    out.write(json.dumps(tweet, ensure_ascii=False) + "\n")
                    saved += 1
                if not page.get("next_cursor"):
                    break
                body["next_cursor"] = page["next_cursor"]
        return saved
    
    
    print(collect(QUERY, "raw_tweets.jsonl"), "tweets saved")
    

Rode uma consulta por classe ou tópico, cada uma em seu próprio arquivo, e a contagem por arquivo mostra na hora se uma classe está muito rala. Para ir além deste ano, o mesmo endpoint alcança todo tweet público desde 2006; nosso guia sobre dados históricos do Twitter trata do fatiamento por data em grandes coletas retroativas.

#Reidrate um dataset de IDs de tweets

Para reconstruir um dataset publicado só com IDs, envie os IDs dos tweets para POST /tweet-info-bulk (abre em uma nova aba) na Sorsa API, até 100 por requisição, e guarde o que voltar. Uma lista de 1 milhão de IDs custa a partir de US$ 14 e leva cerca de 8 minutos a 20 requisições por segundo; o mesmo 1 milhão de posts custa US$ 5.000 em leituras de posts na API oficial do X.

Python
import json

import requests

URL = "https://api.sorsa.io/v3/tweet-info-bulk"
HEADERS = {"ApiKey": "YOUR_API_KEY"}

with open("tweet_ids.txt", encoding="utf-8") as f:
    ids = list(dict.fromkeys(x.strip() for x in f if x.strip()))

found = set()
with open("rehydrated.jsonl", "w", encoding="utf-8") as out:
    for i in range(0, len(ids), 100):
        body = {"tweet_links": ids[i:i + 100]}
        r = requests.post(URL, headers=HEADERS, json=body, timeout=30)
        r.raise_for_status()
        for tweet in r.json().get("tweets", []):
            found.add(tweet["id"])
            out.write(json.dumps(tweet, ensure_ascii=False) + "\n")

missing = [x for x in ids if x not in found]
print(f"recovered {len(found)} of {len(ids)}; {len(missing)} gone")

Informe a taxa de recuperação junto com o dataset: quantos IDs voltaram, de quantos, em que data. Dois datasets reconstruídos a partir dos mesmos IDs com um ano de diferença são datasets diferentes, e quem lê seus resultados precisa saber com qual você treinou.

Bom saber

Mantenha os IDs de tweets como texto do início ao fim. Um ID tem 19 dígitos, enquanto uma planilha guarda 15 dígitos significativos e um número do JavaScript cerca de 16, então um ID que passa pelo Excel ou por JSON.parse volta arredondado e não corresponde a nenhum tweet. Leia os arquivos de IDs como strings e salve-os entre aspas.

#Limpe e remova duplicatas dos tweets

Limpe um dataset de tweets em quatro passadas: descarte retweets e duplicatas exatas por ID, reduza o texto quase duplicado, filtre por idioma e autor, e troque handles e links por marcadores. Cada passada usa campos que voltam em todo tweet.

CampoO que faz em um dataset
idA chave primária; guarde-a como string
full_textO texto que você limpa, rotula e usa para treinar
langMantém cada divisão em um único idioma
conversation_id_strAgrupa uma thread, para que a divisão possa mantê-la inteira
in_reply_to_tweet_idLiga uma resposta ao seu tweet-pai, para pares de conversa
made_with_aiMarca posts que o X rotula como feitos com IA; deixe-os fora de conjuntos de texto humano
user.followers_count, user.created_atSinais do autor para filtros de spam e de bots
likes_count, reply_countUm piso de qualidade: posts com os quais ninguém interagiu costumam ser spam
  • id

    O que faz em um dataset
    A chave primária; guarde-a como string
  • full_text

    O que faz em um dataset
    O texto que você limpa, rotula e usa para treinar
  • lang

    O que faz em um dataset
    Mantém cada divisão em um único idioma
  • conversation_id_str

    O que faz em um dataset
    Agrupa uma thread, para que a divisão possa mantê-la inteira
  • in_reply_to_tweet_id

    O que faz em um dataset
    Liga uma resposta ao seu tweet-pai, para pares de conversa
  • made_with_ai

    O que faz em um dataset
    Marca posts que o X rotula como feitos com IA; deixe-os fora de conjuntos de texto humano
  • user.followers_count, user.created_at

    O que faz em um dataset
    Sinais do autor para filtros de spam e de bots
  • likes_count, reply_count

    O que faz em um dataset
    Um piso de qualidade: posts com os quais ninguém interagiu costumam ser spam

As quase duplicatas são a passada que a maioria dos pipelines pula. Retweets com comentário, posts copiados, campanhas de bots e a mesma reclamação colada por dez contas passam todos por uma checagem de ID e inflam tudo o que dizem. Normalize o texto primeiro (minúsculas, sem links, sem handles, sem pontuação) e depois compare shingles de palavras: dois posts que compartilham a maior parte de suas sequências de três palavras dizem a mesma coisa. O verificador abaixo executa esse teste sobre o que você colar.

Tweets
7
Únicos após a limpeza
4
Duplicados removidos
3
  1. MantidoThe new beta keeps crashing on launch :( https://t.co/k2Vq81

    the new beta keeps crashing on launch

    • Mesmo textoRT @priya_ships_features: The new beta keeps crashing on launch :(
    • 71% de semelhançathe new beta keeps crashing on launch for me!!
  2. MantidoLoving the new dark mode, finally easy on the eyes

    loving the new dark mode finally easy on the eyes

    • Mesmo texto@nadia_tests_builds loving the new dark mode... finally easy on the eyes https://t.co/x9Lm2
  3. MantidoBattery life on the beta is noticeably better this week

    battery life on the beta is noticeably better this week

  4. MantidoDoes anyone else get logged out after the update?

    does anyone else get logged out after the update

Cole um tweet por linha. Linhas cujo texto limpo compartilha pelo menos 70% das sequências de três palavras caem no mesmo grupo, e só a primeira linha de cada grupo é mantida.

Para o texto que o modelo vai ler, troque cada handle por @user e cada link por http, a convenção que os modelos de tweets do Cardiff NLP usam. O modelo então aprende como as pessoas escrevem, não quais contas e links mais aparecem. Guarde o full_text original ao lado do limpo, para poder mudar a limpeza depois sem coletar de novo.

Python
import hashlib
import json
import re


def norm(text):
    text = re.sub(r"https?://\S+", " ", text.lower())
    text = re.sub(r"^rt @\w+:?|@\w+", " ", text)
    text = re.sub(r"[^\w\s#]", " ", text)
    return " ".join(text.split())


seen, rows = set(), []
for line in open("raw_tweets.jsonl", encoding="utf-8"):
    t = json.loads(line)
    if t.get("retweeted_status") or t.get("made_with_ai"):
        continue
    clean = norm(t["full_text"])
    key = hashlib.sha1(clean.encode()).hexdigest()
    if key in seen or len(clean.split()) < 4:
        continue
    seen.add(key)
    rows.append(t)

O hash pega as cópias exatas depois da normalização; para correspondências aproximadas na escala de milhões, o MinHash com hashing sensível à localidade faz a comparação de shingles sem comparar todos os pares.

#Rotule o dataset

Rotule um dataset de tweets em duas camadas: um conjunto de referência de algumas centenas de tweets que pessoas rotulam à mão, e o grosso pré-rotulado por um modelo e conferido por uma pessoa onde o modelo tem dúvida. O conjunto de referência nunca entra no treino; ele é o teste que diz se os rótulos do grosso são bons o bastante.

Escreva as regras de rotulagem antes de qualquer um começar, com um exemplo de cada classe e dos casos difíceis: sarcasmo, perguntas, citações da opinião de outra pessoa. Duas pessoas rotulando os mesmos 100 tweets e comparando os resultados mostram onde as regras são vagas. Guarde com cada rótulo quem ou o que o produziu (human, model, query), para poder descartar ou reponderar os mais fracos depois.

Uma consulta de busca pode servir de rótulo fraco: tweets coletados para "keeps crashing" tendem ao negativo. Use isso só para dar a partida, porque um rótulo de consulta ensina ao modelo as palavras da consulta, não o sentimento.

#Divida treino e teste sem vazamento

Divida um dataset de tweets por conversa e por tempo, nunca linha a linha: reserve as semanas mais recentes como conjunto de teste e mantenha cada thread de um mesmo lado da linha. Uma divisão aleatória coloca um post e suas respostas, ou duas cópias do mesmo texto, tanto no treino quanto no teste, e a nota do teste passa a medir memória em vez de habilidade.

Treino Teste Tweets em ordem de data, do mais antigo ao mais novo Divisão aleatória cada linha vai para treino ou teste por sorteio Uma thread cai nos dois lados: o teste já foi visto Agrupado por thread, cortado por data threads inteiras ficam juntas, as semanas mais novas são o teste A thread fica no treino As semanas mais novas
Agrupe por conversation_id_str e depois corte por data. O conjunto de teste então se parece com os tweets do mês que vem, que é o que o modelo vai encontrar.
Python
import hashlib

rows.sort(key=lambda t: t["created_at"])
cut = rows[int(len(rows) * 0.9)]["created_at"]  # newest 10% = test
test = [t for t in rows if t["created_at"] >= cut]

threads = {t.get("conversation_id_str") for t in test}
rest = [t for t in rows if t["created_at"] < cut
        and t.get("conversation_id_str") not in threads]


def bucket(t):
    key = t.get("conversation_id_str") or t["id"]
    return int(hashlib.md5(key.encode()).hexdigest(), 16) % 10


train = [t for t in rest if bucket(t) != 0]
valid = [t for t in rest if bucket(t) == 0]

Para tarefas sobre contas em vez de posts, como a detecção de bots no Twitter, agrupe por user.id, de modo que nenhuma conta apareça nos dois lados.

#Salve no formato que o seu modelo lê

Salve um dataset de tweets como JSONL, um registro por linha, com o ID do tweet em todo registro. O JSONL faz streaming, aceita acréscimos e carrega direto no pandas, na biblioteca datasets do Hugging Face e na maioria dos scripts de treino. Quais campos entram em cada linha depende do trabalho.

TrabalhoO que cada linha JSONL guarda
Classificador ou modelo de tópicosid, text limpo, label, label_source, lang, created_at
Conjunto de avaliação de um modelo ou de um promptid, text, a resposta esperada e a regra que ele testa
Índice RAG para recuperaçãoid, text, a URL do post, created_at e o ID do autor, para que as respostas possam citar o post
  • Classificador ou modelo de tópicos

    O que cada linha JSONL guarda
    id, text limpo, label, label_source, lang, created_at
  • Conjunto de avaliação de um modelo ou de um prompt

    O que cada linha JSONL guarda
    id, text, a resposta esperada e a regra que ele testa
  • Índice RAG para recuperação

    O que cada linha JSONL guarda
    id, text, a URL do post, created_at e o ID do autor, para que as respostas possam citar o post
Um registro de classificação
{
  "id": "2115807747265175863",
  "text": "the new beta keeps crashing on launch for me",
  "label": "negative",
  "label_source": "human",
  "lang": "en",
  "created_at": "2026-10-29T14:07:31Z",
  "split": "test"
}

Entregue um cartão do dataset junto com os arquivos: as consultas e as datas, o dia em que você coletou ou reidratou, a taxa de recuperação, como os rótulos foram feitos, o que foi filtrado e para o que o conjunto não deve ser usado. Os cartões de dataset do Hugging Face seguem o mesmo roteiro, e a próxima pessoa a treinar com os seus dados, muitas vezes você mesmo daqui a seis meses, precisa de cada linha dele.

#Quanto custa um dataset do Twitter

Um dataset de 1 milhão de tweets custa US$ 5.000 em leituras de posts na API oficial do X, contra a partir de US$ 70 na Sorsa API por busca, ou a partir de US$ 14 quando você reidrata IDs conhecidos. Troque o tamanho para ver os totais de uma coleta nova por busca.

Tamanho do dataset

API oficial do X

US$ 5.000

para 1 milhão tweets

US$ 0,005 por post

Sorsa API

a partir deUS$ 70

para 1 milhão tweets

a partir de US$ 0,07 por 1.000

Dois limites da API oficial do X mudam a conta para datasets. O plano de pagamento por uso para em 3 milhões de leituras de posts por mês, então um conjunto de 10 milhões de tweets exige um contrato Enterprise, para o qual a lista de preços do X (abre em uma nova aba) aponta acima desse teto. E, a partir de 22 de novembro de 2026, o X também cobra como leitura de usuário o perfil do autor que volta com cada post, US$ 0,010 a mais por post (aviso do X (abre em uma nova aba)). Na Sorsa API o perfil completo do autor faz parte de todo tweet, e requisições com falha nunca são cobradas.

O tempo é a outra metade do orçamento. A 20 requisições por segundo, a Sorsa API coleta cerca de 400 tweets por segundo por busca e até 2.000 por segundo por ID, então 1 milhão de tweets novos leva cerca de 42 minutos e um conjunto de 10 milhões cerca de 7 horas em uma única chave.

#Como compartilhar um dataset de tweets e treinar com ele

Datasets públicos de pesquisa são distribuídos como IDs de tweets e de usuários, e quem tem os IDs recupera o texto completo por meio de uma API: a Sorsa API reidrata 1 milhão de IDs em cerca de 8 minutos.

  • Compartilhamento. Publique os IDs de tweets e de usuários com um script de reidratação, como fazem os datasets públicos de pesquisa; o POST /tweet-info-bulk transforma 100 IDs de volta em posts completos por requisição.
  • Treinamento. Guarde o texto completo que você coleta para os seus próprios modelos: classificadores, modelos de tópicos, conjuntos de avaliação, índices de recuperação e fine-tuning de modelos de linguagem são os trabalhos comuns dos datasets de tweets.
  • Pessoas. Troque os handles antes de treinar, não monte perfis de indivíduos e remova os tweets que os autores apagaram quando atualizar o conjunto.

A Sorsa API devolve apenas dados públicos e nunca publica, curte nem segue. Universidades com um projeto de pesquisa também podem perguntar sobre o acesso acadêmico à Sorsa API.

#Comece o seu dataset com uma coleta de teste

Os datasets públicos do Twitter dão uma linha de base; um dataset novo dá o seu próprio tópico, as suas próprias datas e rótulos que combinam com a sua tarefa. Monte-o com a Sorsa API: a partir de US$ 0,07 por 1.000 tweets por busca e a partir de US$ 0,014 por 1.000 por ID, a 20 requisições por segundo, com o perfil do autor em todo tweet. Suas 100 requisições grátis coletam os primeiros 2.000 tweets, o bastante para testar a consulta, a limpeza e a divisão antes de pagar por qualquer coisa.

#FAQ

O que é um dataset do Twitter?

Um dataset do Twitter é uma coleção de posts do X, antigo Twitter, salva em um arquivo para análise ou machine learning: em geral o ID do tweet, o texto, a data, o idioma, as contagens de engajamento e campos do autor, às vezes com rótulos como sentimento. Muitos datasets publicados guardam só os IDs dos tweets, o padrão da pesquisa para compartilhamento, então o texto precisa ser consultado de novo.

Onde posso baixar um dataset do Twitter de graça?

O Kaggle, o Hugging Face e a lista awesome-twitter-data no GitHub hospedam centenas de datasets gratuitos do Twitter, entre eles o Sentiment140, com 1,6 milhão de tweets rotulados de 2009, e o benchmark TweetEval. A maioria foi coletada antes de 2023, e muitos compartilham só IDs de tweets, que você reidrata por meio de uma API para o texto passar a existir. A Sorsa API reidrata 100 IDs por requisição a partir de US$ 0,014 por 1.000.

Qual API devo usar para montar um dataset do Twitter?

Use a Sorsa API para montar um dataset do Twitter: a busca com os operadores do X desde 2006 devolve cerca de 20 tweets por requisição a partir de US$ 0,07 por 1.000, a reidratação leva 100 IDs por requisição a partir de US$ 0,014 por 1.000, e todo plano roda a 20 requisições por segundo com uma chave de API, sem conta de desenvolvedor e sem OAuth. A API oficial do X cobra US$ 5,00 por 1.000 posts e para em 3 milhões de leituras de posts por mês.

Posso usar dados do Twitter para treinar um LLM?

Sim. Conversas públicas do X são uma fonte comum de dados de treinamento e de fine-tuning, e os datasets de tweets também alimentam classificadores de sentimento e de tópicos, conjuntos de avaliação e índices de recuperação (RAG) que permitem a um assistente citar posts reais. A Sorsa API coleta esses dados a 20 requisições por segundo: cerca de 20 tweets por requisição de busca a partir de US$ 0,07 por 1.000, ou 100 por ID a partir de US$ 0,014 por 1.000.

Quanto tempo leva para coletar 1 milhão de tweets?

Na Sorsa API, 1 milhão de tweets leva cerca de 42 minutos por busca e cerca de 8 minutos por ID de tweet, a 20 requisições por segundo em uma única chave. A limpeza e a remoção de duplicatas depois eliminam uma parte deles, então meça a perda em uma coleta de teste e colete essa quantidade a mais do que o tamanho com que você quer terminar.

#Como verificamos

Em 2 de novembro de 2026, lemos a lista de preços de pagamento por uso do X em docs.x.com, e conferimos as páginas de dataset do Sentiment140, do TweetEval e do Twitter7 do SNAP. Todo endpoint, campo e tamanho de página da Sorsa API nesta página corresponde à referência de API ao vivo do mesmo dia; a resposta mostrada segue o esquema dessa referência, e não executamos os exemplos de código contra a API. Os tempos de coleta são aritmética a partir dos tamanhos de página e do limite de 20 requisições por segundo.

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
  • Reescrito do zero: datasets públicos e o que sobrou deles, como montar um conjunto novo, reidratação de IDs, limpeza com verificação de quase duplicatas, divisões sem vazamento, formatos, custos e as regras atuais do X para compartilhar e treinar.
  • Primeira publicação.