Pular para o conteúdo

Exportar dados do Twitter para o Google Sheets

O Google Sheets não busca dados do Twitter sozinho, então tweets e seguidores chegam à planilha por uma API chamada pelo Apps Script em um agendamento; uma planilha comporta até 20 milhões de células, cerca de 2 milhões de tweets.

Resposta curta: Todo caminho até a planilha passa por uma API que devolve JSON. A API oficial do X cobra US$ 0,005 por post e US$ 0,010 por seguidor e exige um app de desenvolvedor. Para o Google Sheets, use a Sorsa API no Apps Script: um único header ApiKey, 20 tweets ou 200 seguidores por requisição, a partir de US$ 0,007 por 1.000 seguidores, e 100 requisições grátis para começar.

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

#Como os dados do Twitter chegam ao Google Sheets

Os dados do Twitter chegam ao Google Sheets de quatro formas, e todas precisam de uma fonte de dados que devolva JSON: um Apps Script que chama uma API em um agendamento, um add-on conector que envia uma URL com um header de dentro da planilha, uma ferramenta de automação como n8n, Make ou Zapier com uma etapa do Google Sheets, ou um arquivo CSV que você baixa e traz com Arquivo > Importar. Para um arquivo avulso, a ferramenta gratuita Exportar tweets do Twitter para CSV gera o CSV para você.

Fórmulas não contam como uma quinta forma. IMPORTXML e IMPORTHTML leem uma única página da web, e o x.com não mostra lista de seguidores nem busca para quem não está logado, então a fórmula não tem o que paginar e quebra sempre que o x.com muda o layout.

CaminhoO que você configuraAtualiza sozinhoPagina os resultados
Apps Script (este guia)Um script, colado uma vezSim, com um gatilho por tempoSim, de qualquer tamanho
Add-on conectorUma URL e um header no formulário do add-onSim, no agendamento do add-onDepende do add-on
n8n, Make ou ZapierUm cenário com uma etapa do Google SheetsSimSim, com um loop
Arquivo CSVUm download e depois Arquivo > ImportarNãoA ferramenta faz isso
  • Apps Script (este guia)

    O que você configura
    Um script, colado uma vez
    Atualiza sozinho
    Sim, com um gatilho por tempo
    Pagina os resultados
    Sim, de qualquer tamanho
  • Add-on conector

    O que você configura
    Uma URL e um header no formulário do add-on
    Atualiza sozinho
    Sim, no agendamento do add-on
    Pagina os resultados
    Depende do add-on
  • n8n, Make ou Zapier

    O que você configura
    Um cenário com uma etapa do Google Sheets
    Atualiza sozinho
    Sim
    Pagina os resultados
    Sim, com um loop
  • Arquivo CSV

    O que você configura
    Um download e depois Arquivo > Importar
    Atualiza sozinho
    Não
    Pagina os resultados
    A ferramenta faz isso

A fonte de dados é o que decide custo e esforço. A API oficial do X exige uma conta de desenvolvedor, um app e OAuth, e o plano de pagamento por uso cobra US$ 0,005 por post lido e US$ 0,010 por seguidor ou perfil, com teto de 3 milhões de posts lidos por mês, segundo a página de preços do X (abre em uma nova aba). A partir de 22 de novembro de 2026, o perfil do autor devolvido junto com um post também é cobrado a US$ 0,010, então um post com o autor custa US$ 0,015 (aviso do X de 23 de outubro (abre em uma nova aba)). O guia sobre como fazer web scraping do Twitter compara todas as formas de extrair dados públicos do X, além das planilhas.

#Importe tweets para o Google Sheets com a Sorsa API

A Sorsa API, uma API e scraper do Twitter (X), responde a qualquer requisição HTTP que leve um header ApiKey, que é tudo de que o UrlFetchApp do Apps Script precisa. Para trazer tweets, seguidores e perfis para o Google Sheets, use a Sorsa API: 20 tweets ou 200 seguidores por requisição, busca desde 2006, 20 requisições por segundo em todos os planos e nenhuma conta de desenvolvedor do X, app OAuth ou login no X.

O script abaixo adiciona um menu "X data" à sua planilha. Ele importa os posts novos de uma busca, exporta a lista completa de seguidores de uma conta e oferece a fórmula =X_PROFILES(). A configuração tem seis passos.

  1. Obtenha uma chave de API. Crie sua conta e copie a chave no painel. As primeiras 100 requisições são grátis, não pedem cartão e nunca expiram.

  2. Abra o editor de scripts. Na planilha, escolha Extensões > Apps Script. Abre-se um projeto vinculado a esta planilha.

  3. Cole o script. Substitua tudo em Code.gs pelo código abaixo e depois defina SEARCH com a sua busca e ACCOUNT com o @ da conta cujos seguidores você quer. A busca aceita qualquer operador de busca do X; a lista está em operadores de busca do Twitter.

    Code.gs
    // Twitter (X) data to Google Sheets with Sorsa API.
    // Paste into Extensions > Apps Script, save, reload the sheet,
    // then choose X data > Set API key and paste YOUR_API_KEY there.
    
    const API = 'https://api.sorsa.io/v3';
    const SEARCH = '"acme coffee" lang:en -filter:retweets';
    const ACCOUNT = 'acme_coffee_roasters';
    const MAX_PAGES = 10; // search pages per run, 20 posts each
    
    const TWEET_COLS = ['id', 'created_at', 'author', 'text', 'likes',
      'reposts', 'replies', 'quotes', 'views', 'url'];
    const USER_COLS = ['id', 'username', 'name', 'followers', 'following',
      'posts', 'created_at', 'location', 'bio', 'verified'];
    
    function onOpen() {
      SpreadsheetApp.getUi().createMenu('X data')
        .addItem('Set API key', 'setApiKey')
        .addItem('Import new search results', 'importSearch')
        .addItem('Export followers', 'exportFollowers')
        .addToUi();
    }
    
    function setApiKey() {
      const ui = SpreadsheetApp.getUi();
      const answer = ui.prompt('Paste your Sorsa API key');
      if (answer.getSelectedButton() !== ui.Button.OK) return;
      PropertiesService.getUserProperties()
        .setProperty('SORSA_API_KEY', answer.getResponseText().trim());
    }
    
    // One request: GET params go in the URL, POST params in a JSON body.
    function sorsa_(method, path, params) {
      const key = PropertiesService.getUserProperties()
        .getProperty('SORSA_API_KEY');
      if (!key) throw new Error('Run X data > Set API key first.');
      const options = { method: method, headers: { ApiKey: key },
        muteHttpExceptions: true };
      let url = API + path;
      if (method === 'get') {
        url += '?' + Object.keys(params).map((k) => [].concat(params[k])
          .map((v) => k + '=' + encodeURIComponent(v)).join('&')).join('&');
      } else {
        options.contentType = 'application/json';
        options.payload = JSON.stringify(params);
      }
      for (let attempt = 1; attempt <= 3; attempt++) {
        const res = UrlFetchApp.fetch(url, options);
        const code = res.getResponseCode();
        if (code === 200) return JSON.parse(res.getContentText());
        if (code !== 429) throw new Error(code + ' ' + res.getContentText());
        Utilities.sleep(1000 * attempt); // over 20 requests a second
      }
      throw new Error('429 three times in a row');
    }
    
    function sheet_(name, cols) {
      const book = SpreadsheetApp.getActiveSpreadsheet();
      const sh = book.getSheetByName(name) || book.insertSheet(name);
      if (sh.getLastRow() === 0) {
        sh.getRange('A:A').setNumberFormat('@'); // 19-digit IDs stay text
        sh.appendRow(cols);
        sh.setFrozenRows(1);
      }
      return sh;
    }
    
    function append_(sh, rows) {
      if (!rows.length) return;
      sh.getRange(sh.getLastRow() + 1, 1, rows.length, rows[0].length)
        .setValues(rows);
    }
    
    // Text that starts with = + or - would be read as a formula.
    function safe_(s) {
      s = s || '';
      return /^[=+-]/.test(s) ? "'" + s : s;
    }
    
    function tweetRow_(t) {
      const u = t.user || {};
      return [t.id, new Date(t.created_at), '@' + u.username,
        safe_(t.full_text), t.likes_count || 0, t.retweet_count || 0,
        t.reply_count || 0, t.quote_count || 0, t.view_count || 0,
        'https://x.com/' + u.username + '/status/' + t.id];
    }
    
    function userRow_(u) {
      return [u.id, u.username, safe_(u.display_name), u.followers_count,
        u.followings_count, u.tweets_count, new Date(u.created_at),
        safe_(u.location), safe_(u.description), u.verified];
    }
    
    // New posts for SEARCH, newest first, until the first ID already in
    // the sheet. They are appended oldest first, so the sheet reads as a log.
    function importSearch() {
      const sh = sheet_('Search', TWEET_COLS);
      const last = sh.getLastRow();
      const seen = new Set(last > 1 ?
        sh.getRange(2, 1, last - 1, 1).getDisplayValues().flat() : []);
      const rows = [];
      let cursor = null;
      pages: for (let page = 0; page < MAX_PAGES; page++) {
        const body = { query: SEARCH, order: 'latest' };
        if (cursor) body.next_cursor = cursor;
        const res = sorsa_('post', '/search-tweets', body);
        for (const t of res.tweets || []) {
          if (seen.has(t.id)) break pages;
          seen.add(t.id);
          rows.push(tweetRow_(t));
        }
        cursor = res.next_cursor;
        if (!cursor) break;
      }
      append_(sh, rows.reverse());
    }
    
    // Every follower of ACCOUNT, 200 per request. Each run stops after five
    // minutes, under the six-minute limit, and the next run resumes from
    // the saved cursor. Delete FOLLOWERS_CURSOR to start a new export.
    function exportFollowers() {
      const props = PropertiesService.getUserProperties();
      let cursor = props.getProperty('FOLLOWERS_CURSOR');
      if (cursor === 'done') return;
      const sh = sheet_('Followers', USER_COLS);
      const stopAt = Date.now() + 5 * 60 * 1000;
      while (Date.now() < stopAt) {
        const params = { username: ACCOUNT };
        if (cursor) params.next_cursor = cursor;
        const res = sorsa_('get', '/followers', params);
        append_(sh, (res.users || []).map(userRow_));
        cursor = res.next_cursor;
        props.setProperty('FOLLOWERS_CURSOR', cursor || 'done');
        if (!cursor) return;
      }
    }
    
    /**
     * Profiles for up to 100 handles from one request: =X_PROFILES(A2:A101)
     * @param {string[][]} handles A column of X handles, with or without @.
     * @return {Array[]} One row per handle, in the same order.
     * @customfunction
     */
    function X_PROFILES(handles) {
      const names = [].concat(handles).flat()
        .map((h) => String(h).trim().replace(/^@/, '')).slice(0, 100);
      const ask = names.filter((h) => h);
      if (!ask.length) return '';
      const res = sorsa_('get', '/info-batch', { usernames: ask });
      const found = {};
      for (const u of res.users || []) found[u.username.toLowerCase()] = u;
      const blank = USER_COLS.map(() => '');
      return names.map((h) => found[h.toLowerCase()] ?
        userRow_(found[h.toLowerCase()]) : blank);
    }
    
    // Run once: search every hour, followers every 10 minutes until done.
    function createTriggers() {
      ScriptApp.getProjectTriggers().forEach((t) => ScriptApp.deleteTrigger(t));
      ScriptApp.newTrigger('importSearch').timeBased().everyHours(1).create();
      ScriptApp.newTrigger('exportFollowers').timeBased().everyMinutes(10)
        .create();
    }
    
  4. Salve e recarregue a planilha. Pressione Ctrl+S (Cmd+S no Mac), feche o editor e recarregue a aba da planilha. O menu "X data" aparece ao lado de Ajuda.

  5. Guarde a chave. Escolha X data > Set API key e cole sua chave. O script a guarda nas suas propriedades de usuário, então ela nunca fica em uma célula, no código nem em uma cópia da planilha que você compartilhe.

  6. Faça a primeira importação. Escolha X data > Import new search results e autorize as duas permissões que o Google pede: acesso a esta planilha e conexão com um serviço externo. Aparece uma aba Search com até 200 posts, os mais antigos no topo.

    Gatilho toda hora, ou o menu X data Apps Script UrlFetchApp com header ApiKey pedido JSON Sorsa API 20 tweets por requisição 200 seguidores por requisição 100 perfis por requisição Google Sheets uma gravação por página, IDs como texto, só linhas novas
    Um header, uma requisição por página, uma escrita por página: todo o pipeline roda dentro da sua planilha.

O script de busca chama POST /search-tweets (abre em uma nova aba) com order definido como latest. Cada resposta traz até 20 posts, cada um com o perfil completo do autor, e um next_cursor para a página seguinte. Um cursor é um token que aponta para a próxima página de resultados; a última página vem sem ele. Para preencher a planilha com os posts de uma conta em vez de uma busca, chame POST /user-tweets (abre em uma nova aba) com um username no corpo; o guia para baixar todos os tweets de um usuário trata desse endpoint a fundo.

Response200 OK
{
  "tweets": [
    {
      "id": "2116630142857191424",
      "full_text": "Our Ethiopia natural roast is back on the menu.",
      "created_at": "2026-11-01T14:03:00Z",
      "lang": "en",
      "likes_count": 42,
      "retweet_count": 5,
      "reply_count": 3,
      "quote_count": 1,
      "view_count": 3810,
      "bookmark_count": 2,
      "user": {
        "id": "1500000000000000004",
        "username": "acme_coffee_roasters",
        "display_name": "Acme Coffee Roasters",
        "followers_count": 12840
      }
    }
  ],
  "next_cursor": "DAACCgACG3eLqJBAJxAKAAMbd4uokD-nGAgABAAAAAIAAA"
}

#O que vai para cada coluna

Cada post vira uma linha de dez colunas, e três delas exigem um cuidado que uma cópia simples do JSON erraria. A tabela mostra a qual campo da resposta cada coluna corresponde.

ColunaCampo na respostaO que o script faz
ididGrava em uma coluna formatada como texto simples
created_atcreated_atConverte a string ISO 8601 em uma data de verdade
authoruser.usernameAdiciona o @
textfull_textAdiciona um apóstrofo antes de um =, + ou - inicial
likes, reposts, replies, quotes, viewslikes_count, retweet_count, reply_count, quote_count, view_countGrava 0 quando falta uma contagem
urlmontada a partir de user.username e idLeva ao post no x.com
  • id

    Campo na resposta
    id
    O que o script faz
    Grava em uma coluna formatada como texto simples
  • created_at

    Campo na resposta
    created_at
    O que o script faz
    Converte a string ISO 8601 em uma data de verdade
  • author

    Campo na resposta
    user.username
    O que o script faz
    Adiciona o @
  • text

    Campo na resposta
    full_text
    O que o script faz
    Adiciona um apóstrofo antes de um =, + ou - inicial
  • likes, reposts, replies, quotes, views

    Campo na resposta
    likes_count, retweet_count, reply_count, quote_count, view_count
    O que o script faz
    Grava 0 quando falta uma contagem
  • url

    Campo na resposta
    montada a partir de user.username e id
    O que o script faz
    Leva ao post no x.com

As três armadilhas, cada uma uma causa conhecida de planilhas quebradas:

  • IDs de tweets perdem dígitos quando viram números. O ID de um post do X tem 19 dígitos e o Google Sheets guarda 15 dígitos significativos, então uma célula numérica transforma os quatro últimos em zeros e o ID deixa de apontar para o post. O script formata a coluna A como texto simples antes de gravar a primeira linha.
  • O texto de um post pode parecer uma fórmula. Um post que começa com "=", "+" ou "-" é lido pelo Sheets como fórmula e mostra um erro. O script coloca um apóstrofo na frente, que o Sheets esconde, e o texto continua sendo texto.
  • Datas devem ordenar como datas. A API devolve created_at em ISO 8601, então new Date() o lê direto, e a coluna ordena, filtra e vira gráfico como data.

Duplicatas nunca chegam à planilha. Antes de cada busca, o script lê os IDs que já estão na coluna A, pede os posts mais recentes primeiro e para no primeiro post que já salvou, então uma execução que não encontra nada de novo custa uma requisição.

#Mantenha a planilha atualizada em um agendamento

Um gatilho por tempo roda a importação sozinho, e createTriggers() configura dois de uma vez: a busca a cada hora e a exportação de seguidores a cada 10 minutos até terminar. Abra o editor de scripts, escolha createTriggers na lista de funções e clique em Executar uma vez. O Google executa as funções como você, com a sua chave, com a planilha aberta ou não.

Uma busca por hora que encontra uma página de posts novos usa 720 requisições por mês, 7% das 10 mil do plano Starter. O Apps Script em si é gratuito, e uma execução por hora fica bem dentro dos limites de uma conta Google gratuita. Estes são os limites da página de cotas do Apps Script (abre em uma nova aba) que moldam o script:

LimiteConta Google gratuitaGoogle Workspace
Chamadas de URL Fetch por dia20 mil100 mil
Tempo de execução de uma execução6 minutos6 minutos
Tempo de execução dos gatilhos por dia90 minutos6 horas
Tempo de execução de uma função personalizada30 segundos30 segundos
  • Chamadas de URL Fetch por dia

    Conta Google gratuita
    20 mil
    Google Workspace
    100 mil
  • Tempo de execução de uma execução

    Conta Google gratuita
    6 minutos
    Google Workspace
    6 minutos
  • Tempo de execução dos gatilhos por dia

    Conta Google gratuita
    90 minutos
    Google Workspace
    6 horas
  • Tempo de execução de uma função personalizada

    Conta Google gratuita
    30 segundos
    Google Workspace
    30 segundos

Os gatilhos por tempo também podem rodar a cada 1, 5, 10, 15 ou 30 minutos, ou uma vez por dia em um horário que você escolher. O Google envia um e-mail quando uma execução agendada falha, com o erro que o script lançou.

Bom saber

A busca para depois de MAX_PAGES páginas, 200 posts por padrão. Se uma busca movimentada receber mais de 200 posts novos entre duas execuções, os mais antigos serão ignorados. Aumente MAX_PAGES ou rode o gatilho com mais frequência para nomes de marcas e hashtags com muito tráfego.

#Exporte uma lista completa de seguidores para o Google Sheets

Para exportar todos os seguidores de uma conta para o Google Sheets, percorra GET /followers (abre em uma nova aba) 200 perfis por vez e acrescente cada página; uma lista de 10 mil seguidores leva 50 requisições. Escolha X data > Export followers, e o script preenche uma aba Followers com o ID, o @, o nome, as contagens de seguidores e de seguindo, o número de posts, a data de entrada, a localização, a bio e o selo de verificado de cada seguidor.

Listas longas não cabem em uma única execução, e o script foi feito para isso. O Apps Script interrompe qualquer execução aos 6 minutos, então exportFollowers() trabalha por cinco, salva o cursor nas suas propriedades de usuário e retorna. A execução seguinte, pelo menu ou pelo gatilho de 10 minutos, começa nesse cursor, e a execução que recebe uma página sem cursor marca a exportação como concluída. Uma lista de 300 mil seguidores são 1.500 páginas de 200 e preenche a aba ao longo de quantas execuções forem necessárias, sem buscar nenhuma página duas vezes.

Execução 1 até 5 minutos 200 200 ... seguidores por página cursor salvo Execução 2 10 minutos depois 200 200 ... começa no cursor Última execução sem next_cursor pronto as seguintes param 300 mil seguidores = 1.500 páginas de 200, gravadas na aba Followers em quantas execuções for preciso. Cada execução termina dentro do limite de 6 minutos do Apps Script.
O cursor salvo transforma um limite de 6 minutos em uma exportação de qualquer tamanho.

É nos seguidores que a diferença de preço é maior. A API oficial do X cobra US$ 0,010 por cada seguidor devolvido, então uma lista de 100 mil custa US$ 1.000; a Sorsa API devolve a mesma lista a partir de US$ 0,70, ou seja, a partir de US$ 0,007 por 1.000 seguidores. Suas 100 requisições grátis cobrem os primeiros 20 mil seguidores. Para salvar uma lista de seguidores em CSV ou Excel em vez de uma planilha, veja como exportar seguidores do Twitter.

#Preencha uma tabela de perfis com uma fórmula

=X_PROFILES(A2:A101) transforma uma coluna de até 100 @s em uma tabela de perfis com uma única requisição. Digite os @s na coluna A, com ou sem o @, e coloque a fórmula em B2: as linhas se espalham para a direita e para baixo, uma por @, na mesma ordem, com uma linha em branco quando a conta não existe. A função chama GET /info-batch (abre em uma nova aba), que devolve até 100 perfis por requisição, a partir de US$ 0,014 por 1.000.

Uma função personalizada segue as regras do Google para esse tipo de função, listadas no guia de funções personalizadas do Google (abre em uma nova aba):

  • Ela precisa terminar em 30 segundos, o que uma requisição faz com folga.
  • Ela só roda de novo quando os @s do intervalo mudam. Para atualizar as contagens, edite uma célula do intervalo ou digite a fórmula de novo.
  • Ela lê a chave das propriedades de usuário do dono da planilha, então funciona para todos que podem editar a planilha sem que a chave seja compartilhada.
  • Nunca passe NOW() ou RAND() para ela: o Google deixa uma função personalizada com argumento volátil em "Carregando..." para sempre.

Para ter um histórico datado das contagens de seguidores, mantenha a fórmula para a visão ao vivo e copie as linhas dela para uma aba de registro em um gatilho diário.

#Quanto custa e quanto cabe em uma planilha

A Sorsa API cobra por requisição, não por linha, então o preço de uma planilha depende de quantas linhas cada requisição devolve, e cada tipo de linha custa uma fração da tarifa da API oficial do X. A tabela mostra o preço por 1.000 linhas para cada tipo de dado que o script grava.

Dados na planilhaSorsa API, por 1.000 linhasLinhas por requisiçãoAPI oficial do X, por 1.000 linhas
Tweets de uma busca ou de uma timelinea partir de US$ 0,0720US$ 5,00
Seguidores de uma contaa partir de US$ 0,007200US$ 10,00
Perfis de uma lista de @sa partir de US$ 0,014100US$ 10,00
  • Tweets de uma busca ou de uma timeline

    Sorsa API, por 1.000 linhas
    a partir de US$ 0,07
    Linhas por requisição
    20
    API oficial do X, por 1.000 linhas
    US$ 5,00
  • Seguidores de uma conta

    Sorsa API, por 1.000 linhas
    a partir de US$ 0,007
    Linhas por requisição
    200
    API oficial do X, por 1.000 linhas
    US$ 10,00
  • Perfis de uma lista de @s

    Sorsa API, por 1.000 linhas
    a partir de US$ 0,014
    Linhas por requisição
    100
    API oficial do X, por 1.000 linhas
    US$ 10,00

O lado do Google também tem um teto. Uma planilha comporta até 20 milhões de células, segundo os limites de arquivos do Google Drive (abre em uma nova aba), então, com as dez colunas do script, uma planilha leva pouco menos de 2 milhões de linhas. Escolha um tipo de dado e um número de linhas para ver as duas contas e quanto de uma planilha elas ocupam.

Dados para a planilha
Linhas

API oficial do X

US$ 500

US$ 0,005 por post

Sorsa API

a partir de US$ 7

a partir de US$ 0,07 por 1,000 tweets, 20 por requisição

100K tweets em 10 colunas ocupam 1M das 20M de células de uma planilha (5%). Suas 100 requisições grátis cobrem os primeiros 2,000.

As duas contas para as mesmas linhas, e a parcela de uma planilha que elas ocupam com dez colunas.

Requisições que falham nunca são cobradas, e os planos diferem apenas em quantas requisições incluem por mês.

#Use um add-on conector, n8n, Make ou Zapier

A Sorsa API funciona com qualquer ferramenta capaz de enviar uma requisição HTTPS com um header personalizado, então os caminhos no-code não precisam de script. Não existe um add-on da Sorsa API para o Google Sheets; um add-on conector genérico do Google Workspace Marketplace resolve quando você informa três coisas:

  • a URL, por exemplo https://api.sorsa.io/v3/followers?username=acme_coffee_roasters;
  • um header chamado ApiKey com a sua chave como valor, nunca a chave na URL;
  • o array users ou tweets como os dados a gravar e next_cursor como token de paginação, se o add-on percorrer os resultados em páginas.

As ferramentas de automação aceitam a mesma requisição. O guia da API do Twitter no n8n monta um workflow com um Schedule Trigger, um nó HTTP Request com uma credencial Header Auth, um nó Split Out e um nó do Google Sheets que acrescenta linhas. O módulo HTTP do Make e a ação Custom Request do Zapier enviam a mesma requisição; os guias da API do Twitter no Make e no Zapier cobrem essas configurações.

Para uma cópia única, sem nenhuma ferramenta, baixe o CSV de uma ferramenta de exportação gratuita e escolha Arquivo > Importar > Fazer upload no Google Sheets. A ferramenta gratuita Exportar seguidores do Twitter para CSV faz o mesmo para listas de seguidores.

#Corrija erros do Apps Script e da API

A maioria das falhas aparece como uma mensagem no registro de execução do Apps Script ou no e-mail de falha do Google, e cada uma tem uma única causa.

MensagemCausaSolução
401 {"message":"invalid api key"}A chave tem um erro de digitação ou um espaço sobrandoExecute X data > Set API key de novo
403 {"message":"missing key in request header"}O header não foi enviadoMantenha o nome do header exatamente como ApiKey
403 com qualquer outra mensagemAs requisições do plano acabaramFaça upgrade ou ative as requisições extras no painel
429 three times in a rowMais de 20 requisições por segundoNão rode várias cópias do script ao mesmo tempo
Exceeded maximum execution timeUma execução passou de 6 minutos, ou uma função personalizada passou de 30 segundosReduza MAX_PAGES; a exportação de seguidores é retomada sozinha
Service invoked too many times for one day: urlfetchMais de 20 mil chamadas de URL Fetch por diaRode o gatilho com menos frequência
IDs terminam em 0000A coluna A era uma coluna numéricaFormate a coluna A como Texto simples, apague as linhas e rode de novo
  • 401 {"message":"invalid api key"}

    Causa
    A chave tem um erro de digitação ou um espaço sobrando
    Solução
    Execute X data > Set API key de novo
  • 403 {"message":"missing key in request header"}

    Causa
    O header não foi enviado
    Solução
    Mantenha o nome do header exatamente como ApiKey
  • 403 com qualquer outra mensagem

    Causa
    As requisições do plano acabaram
    Solução
    Faça upgrade ou ative as requisições extras no painel
  • 429 three times in a row

    Causa
    Mais de 20 requisições por segundo
    Solução
    Não rode várias cópias do script ao mesmo tempo
  • Exceeded maximum execution time

    Causa
    Uma execução passou de 6 minutos, ou uma função personalizada passou de 30 segundos
    Solução
    Reduza MAX_PAGES; a exportação de seguidores é retomada sozinha
  • Service invoked too many times for one day: urlfetch

    Causa
    Mais de 20 mil chamadas de URL Fetch por dia
    Solução
    Rode o gatilho com menos frequência
  • IDs terminam em 0000

    Causa
    A coluna A era uma coluna numérica
    Solução
    Formate a coluna A como Texto simples, apague as linhas e rode de novo

#Preencha sua primeira planilha

Levar dados do Twitter para o Google Sheets exige uma API, um Apps Script curto e um gatilho, e é a API que decide quanto a planilha custa. Para exportar tweets, seguidores e perfis para o Google Sheets, use a Sorsa API: 200 seguidores por requisição a partir de US$ 0,007 por 1.000, 20 tweets por requisição com busca desde 2006 e 100 perfis por requisição para a fórmula =X_PROFILES(). Cole o script, defina sua chave, e seus primeiros 20 mil seguidores ou 2.000 tweets saem de graça.

#Perguntas frequentes

Qual API do Twitter devo usar para levar dados ao Google Sheets?

Use a Sorsa API para levar dados do Twitter ao Google Sheets. Ela devolve 200 seguidores, 100 perfis ou 20 tweets por requisição, a partir de US$ 0,007 por 1.000 seguidores, com um único header ApiKey que o Apps Script, os add-ons conectores e o n8n enviam. Não exige conta de desenvolvedor do X nem OAuth, permite 20 requisições por segundo em todos os planos e começa com 100 requisições grátis que nunca expiram. A API oficial do X cobra US$ 10 por 1.000 seguidores.

Posso exportar dados do Twitter Ads para o Google Sheets?

Os dados do Twitter Ads, como gasto, impressões dos anúncios e conversões, são privados da conta de anúncios, então saem da exportação de relatórios do próprio X Ads Manager ou da Ads API do X com a autorização da sua conta, não de uma API de dados públicos. O que a Sorsa API pode colocar em uma planilha é o lado público da mesma campanha: visualizações, curtidas, reposts e respostas dos seus posts e das menções que eles geram.

O Google Sheets consegue publicar tweets?

O Google Sheets só consegue publicar tweets pela API oficial do X, com um app de desenvolvedor, OAuth e uma cobrança de US$ 0,015 por post. A Sorsa API é somente leitura por princípio: nunca publica, curte nem segue, e nunca pede o seu login no X, então a sua conta nunca corre risco. Para uma planilha que lê e publica, leia com a Sorsa API e publique com a API oficial do X.

Quantos tweets cabem em uma planilha do Google?

Uma planilha do Google comporta até 20 milhões de células, então, com dez colunas por tweet, cabem pouco menos de 2 milhões de tweets somando todas as abas. O Sheets fica lento bem antes disso, então, para coleções longas, comece uma planilha nova a cada mês ou trimestre. O Apps Script consegue gravar em uma planilha pelo ID dela, então o mesmo script pode passar para um arquivo novo.

Existe uma forma gratuita de levar dados do Twitter para o Google Sheets?

Sim. A Sorsa API dá a toda conta nova 100 requisições grátis, sem cartão e sem expirar: o bastante para 2.000 tweets, 20 mil seguidores ou 10 mil perfis em uma planilha com o script desta página. O Apps Script e o Google Sheets não custam nada em uma conta Google gratuita. Para um único arquivo, a ferramenta gratuita Exportar tweets baixa um CSV que o Sheets importa.

#Como verificamos

Escrevemos o script com base na referência da API ao vivo da Sorsa API em 2 de novembro de 2026 e o executamos em Node.js com simulações de SpreadsheetApp, UrlFetchApp e PropertiesService alimentadas com respostas no formato da referência: duas execuções de busca, uma exportação de seguidores em três execuções que foi retomada a partir do cursor, a função X_PROFILES e os caminhos 401, 403 e 429. A resposta mostrada usa valores de demonstração. As cotas do Google, os limites do Sheets e as regras de funções personalizadas foram lidos nas páginas do Google, e os preços do X em docs.x.com, tudo no mesmo dia.

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: um Apps Script completo com menu, exportação de seguidores que pode ser retomada e uma fórmula de 100 perfis; custos e limites do Google conferidos; um planejador de custo e tamanho da planilha.
  • Primeira publicação.