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.
| Caminho | O que você configura | Atualiza sozinho | Pagina os resultados |
|---|---|---|---|
| Apps Script (este guia) | Um script, colado uma vez | Sim, com um gatilho por tempo | Sim, de qualquer tamanho |
| Add-on conector | Uma URL e um header no formulário do add-on | Sim, no agendamento do add-on | Depende do add-on |
| n8n, Make ou Zapier | Um cenário com uma etapa do Google Sheets | Sim | Sim, com um loop |
| Arquivo CSV | Um download e depois Arquivo > Importar | Não | A 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.
-
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.
-
Abra o editor de scripts. Na planilha, escolha Extensões > Apps Script. Abre-se um projeto vinculado a esta planilha.
-
Cole o script. Substitua tudo em
Code.gspelo código abaixo e depois definaSEARCHcom a sua busca eACCOUNTcom 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(); } -
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.
-
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.
-
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.
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.
{
"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.
| Coluna | Campo na resposta | O que o script faz |
|---|---|---|
| id | id | Grava em uma coluna formatada como texto simples |
| created_at | created_at | Converte a string ISO 8601 em uma data de verdade |
| author | user.username | Adiciona o @ |
| text | full_text | Adiciona um apóstrofo antes de um =, + ou - inicial |
| likes, reposts, replies, quotes, views | likes_count, retweet_count, reply_count, quote_count, view_count | Grava 0 quando falta uma contagem |
| url | montada a partir de user.username e id | Leva 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.usernameeid - 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_atem ISO 8601, entãonew 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:
| Limite | Conta Google gratuita | Google Workspace |
|---|---|---|
| Chamadas de URL Fetch por dia | 20 mil | 100 mil |
| Tempo de execução de uma execução | 6 minutos | 6 minutos |
| Tempo de execução dos gatilhos por dia | 90 minutos | 6 horas |
| Tempo de execução de uma função personalizada | 30 segundos | 30 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_PAGESpá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. AumenteMAX_PAGESou 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.
É 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()ouRAND()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 planilha | Sorsa API, por 1.000 linhas | Linhas por requisição | API oficial do X, por 1.000 linhas |
|---|---|---|---|
| Tweets de uma busca ou de uma timeline | a partir de US$ 0,07 | 20 | US$ 5,00 |
| Seguidores de uma conta | a partir de US$ 0,007 | 200 | US$ 10,00 |
| Perfis de uma lista de @s | a partir de US$ 0,014 | 100 | US$ 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.
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
ApiKeycom a sua chave como valor, nunca a chave na URL; - o array
usersoutweetscomo os dados a gravar enext_cursorcomo 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.
| Mensagem | Causa | Solução |
|---|---|---|
401 {"message":"invalid api key"} | A chave tem um erro de digitação ou um espaço sobrando | Execute X data > Set API key de novo |
403 {"message":"missing key in request header"} | O header não foi enviado | Mantenha o nome do header exatamente como ApiKey |
403 com qualquer outra mensagem | As requisições do plano acabaram | Faça upgrade ou ative as requisições extras no painel |
429 three times in a row | Mais de 20 requisições por segundo | Não rode várias cópias do script ao mesmo tempo |
| Exceeded maximum execution time | Uma execução passou de 6 minutos, ou uma função personalizada passou de 30 segundos | Reduza MAX_PAGES; a exportação de seguidores é retomada sozinha |
| Service invoked too many times for one day: urlfetch | Mais de 20 mil chamadas de URL Fetch por dia | Rode o gatilho com menos frequência |
| IDs terminam em 0000 | A coluna A era uma coluna numérica | Formate 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
403com 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.
Fontes
- X API pay-per-usage pricing (abre em uma nova aba)
- X API PPU expansions update, October 23, 2026 (abre em uma nova aba)
- Apps Script quotas for Google services (abre em uma nova aba)
- Custom functions in Google Sheets (abre em uma nova aba)
- Files you can store in Google Drive (abre em uma nova aba)
- Sorsa API reference: Search Tweets (abre em uma nova aba)