Voltar ao blog
tutorialgoogle-sheetsapps-script

Como preencher dados de CNPJ automaticamente no Google Sheets

Aprenda a usar o Google Apps Script com a API de CNPJ para completar Razão Social, Nome Fantasia, Cidade e CNAE de uma lista de empresas — sem nenhum conhecimento técnico avançado.

25 de abril de 2026Equipe cnpj-api.com4 min read

Você tem uma planilha cheia de CNPJs e precisa preencher os dados cadastrais de cada empresa — Razão Social, Nome Fantasia, Cidade, CNAE — mas fazer isso na mão levaria horas? Neste tutorial mostramos como automatizar tudo isso em minutos usando o Google Sheets, o Google Apps Script e a API de CNPJ.

Não precisa ser programador. O código já está pronto — e se precisar ajustar alguma coisa, basta pedir para sua IA favorita (ChatGPT, Claude, Gemini) fazer a mudança para você.

O que você vai precisar

  • Uma conta Google (para usar o Google Sheets)
  • Um token da cnpj-api.com — o plano gratuito já funciona para começar
  • Sua lista de CNPJs em uma planilha

Passo 1 — Monte sua planilha

Crie uma planilha no Google Sheets com a seguinte estrutura de colunas:

A — ClienteB — CNPJC — Razão SocialD — Nome fantasiaE — CidadeF — CNAE
Petrobras33.000.167/0001-01
Nubank18.236.120/0001-58

As colunas C, D, E e F ficarão em branco — o script vai preenchê-las automaticamente.

Dica: Os CNPJs podem estar formatados (com pontos e traços) ou só com números. O script cuida disso automaticamente.

Passo 2 — Abra o Apps Script

No menu do Google Sheets, clique em Extensões → Apps Script.

Menu Extensões > Apps Script no Google Sheets
Menu Extensões > Apps Script no Google Sheets

Isso abre o editor de código. Você verá uma função vazia chamada myFunction. Apague tudo e cole o código do próximo passo.

Passo 3 — Cole o código

O código abaixo é o coração da automação. Ele lê cada linha da sua planilha, consulta a API com o CNPJ e preenche os dados automaticamente.

Não sabe programar? Sem problema. Copie o código abaixo, cole no Apps Script e substitua SEU_TOKEN_AQUI pelo seu token. Se precisar adaptar algo — mudar colunas, adicionar campos, filtrar por situação cadastral — cole o código em qualquer IA e descreva o que quer. Ela faz a modificação em segundos.

function preencherDadosCNPJ() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var token = 'SEU_TOKEN_AQUI'; // Substitua pelo seu token de cnpj-api.com
  var lastRow = sheet.getLastRow();
 
  for (var i = 2; i <= lastRow; i++) {
    var cnpjRaw = sheet.getRange(i, 2).getValue().toString();
    var cnpj = cnpjRaw.replace(/[.\-\/]/g, '');
 
    if (cnpj.length !== 14) {
      Logger.log('CNPJ inválido na linha ' + i + ': ' + cnpjRaw);
      continue;
    }
 
    var existing = sheet.getRange(i, 3).getValue();
    if (existing && existing.toString().trim() !== '') {
      Logger.log('Linha ' + i + ' já preenchida, pulando...');
      continue;
    }
 
    var usage = getUsage_(token);
    if (usage && usage.remaining <= 0) {
      var resetAt = new Date(usage.reset_at);
      var now = new Date();
      var waitMs = Math.max(resetAt - now, 0) + 1500;
      Logger.log('Limite atingido. Aguardando ' + Math.ceil(waitMs / 1000) + 's...');
      Utilities.sleep(waitMs);
    }
 
    var url = 'https://api.cnpj-api.com/v1/cnpj/' + cnpj + '?token=' + token;
 
    try {
      var response = UrlFetchApp.fetch(url);
      var data = JSON.parse(response.getContentText());
 
      sheet.getRange(i, 3).setValue(data.razao_social || '');
      sheet.getRange(i, 4).setValue(data.nome_fantasia || '');
 
      var cidade = '';
      if (data.endereco) {
        cidade = data.endereco.municipio || data.endereco.cidade || '';
      }
      sheet.getRange(i, 5).setValue(cidade);
 
      var cnae = '';
      if (data.atividade_principal) {
        var atv = data.atividade_principal;
        cnae = (atv.id || '') + ' - ' + (atv.descricao || '');
      }
      sheet.getRange(i, 6).setValue(cnae);
 
      Logger.log('Linha ' + i + ' preenchida: ' + cnpj);
 
    } catch (e) {
      if (e.message.indexOf('429') !== -1) {
        Logger.log('Limite atingido — aguardando 65s e tentando novamente...');
        Utilities.sleep(65000);
        i--;
      } else {
        Logger.log('Erro na linha ' + i + ' (' + cnpj + '): ' + e.message);
      }
    }
  }
 
  SpreadsheetApp.getUi().alert('Concluído! Verifique o log para detalhes.');
}
 
function getUsage_(token) {
  try {
    var r = UrlFetchApp.fetch('https://api.cnpj-api.com/v1/usage?token=' + token);
    var d = JSON.parse(r.getContentText());
    return {
      remaining: d.rate_limit ? d.rate_limit.remaining : 99,
      reset_at: d.rate_limit ? d.rate_limit.reset_at : new Date().toISOString()
    };
  } catch (e) {
    Logger.log('Erro ao consultar uso: ' + e.message);
    return null;
  }
}
Editor do Apps Script com o código colado
Editor do Apps Script com o código colado

Passo 4 — Salve e execute

  1. Clique no ícone de salvar (ou pressione Ctrl+S no Windows / Cmd+S no Mac)
  2. No dropdown ao lado de "Executar", selecione a função preencherDadosCNPJ
  3. Clique em Executar (play)
  4. Na primeira vez, o Google pedirá permissão para acessar sua planilha — clique em Revisar permissões e autorize com sua conta Google

O script começará a preencher linha por linha. Você pode acompanhar o progresso no Execution log que aparece na parte inferior da tela.

Resultado

Após a execução, sua planilha estará assim — com todos os dados cadastrais preenchidos automaticamente:

Planilha preenchida com Razão Social, Nome Fantasia, Cidade e CNAE
Planilha preenchida com Razão Social, Nome Fantasia, Cidade e CNAE

Sem copiar e colar nada. Sem abrir site por site. Em segundos por empresa.

Quanto tempo o script demora?

A API de CNPJ aplica um limite de requisições por minuto, e cada CNPJ na sua planilha equivale a uma requisição. Como o script já espera o reset automaticamente quando o limite zera, o tempo total fica fácil de estimar:

tempo aproximado ≈ quantidade de CNPJs ÷ requisições por minuto do seu plano

Plano*Velocidade20 CNPJs100 CNPJs500 CNPJs
Free5 por minuto~4 min~20 min~1h40
Basic10 por minuto~2 min~10 min~50 min
Pro90 por minuto~15s~1 min~6 min

* Confira a página de planos para os valores e limites mais atualizados.

O plano gratuito já é generoso e dá conta tranquilamente das planilhas pequenas e médias do dia a dia. Como o script roda sozinho e continua de onde parou se você precisar pausar, dá pra deixar ele trabalhando em segundo plano enquanto você faz outra coisa.

Para listas maiores, ou quando o tempo é o fator crítico, os planos Basic e Pro aumentam bastante o volume por minuto e reduzem o tempo total na mesma proporção. Você pode ver todos os planos em cnpj-api.com.

Solução de problemas frequentes

"A cota de largura de banda foi excedida"

Se você ver a mensagem "A cota de largura de banda foi excedida: https://[...]. Tente reduzir a velocidade da transferência de dados", isso significa que o Apps Script identificou um volume muito alto de requisições em um curto período de tempo.

Warning

Este erro vem do próprio Google Apps Script, não da API de CNPJ. Ele indica que o script está fazendo chamadas rápidas demais para um serviço externo, o que pode acontecer em planilhas com muitas linhas sem pausa entre as chamadas.

Como resolver:

O código acima já inclui proteção automática contra esse problema. Antes de cada consulta, ele chama o endpoint /v1/usage da API (que não consome cota) para verificar quantas requisições ainda restam no seu plano. Se o limite estiver zerado, ele espera exatamente o tempo necessário até o reset — sem desperdício e sem erros.

Se ainda assim encontrar esse erro, você pode pedir para uma IA ajustar o código para adicionar uma pausa extra entre as requisições. Por exemplo: "Adicione uma pausa de 3 segundos entre cada consulta à API".

"429 Too Many Requests"

Esse erro da própria API significa que você atingiu o limite de requisições do seu plano no minuto atual. O código já trata isso automaticamente: ao receber um erro 429, ele aguarda 65 segundos e tenta a mesma linha novamente — sem perder nenhum dado.

Execution log mostrando o controle automático de rate limit
Execution log mostrando o controle automático de rate limit

Veja no log acima: o script consultou o /v1/usage, identificou que o limite estava zerado, esperou exatamente os segundos necessários até o reset e continuou automaticamente.

O script parou no meio — e agora?

Sem problema. O código verifica automaticamente se cada linha já foi preenchida antes de fazer uma consulta. Basta executar novamente e ele continuará de onde parou, pulando as linhas que já têm dados.

Limites por plano

PlanoRequisições por minutoVolume mensal estimado
Free5 req/min~216.000
Basic10 req/min~432.000
Pro90 req/min~3.888.000

Para planilhas grandes, considere fazer upgrade de plano para reduzir o tempo de espera entre as consultas.

Quer personalizar o código?

Este script preenche as colunas C, D, E e F com os dados mais comuns. Mas a API retorna muito mais informações: telefone, e-mail, sócios, situação cadastral, Simples Nacional, capital social, e muito mais.

Se quiser adaptar o script para suas necessidades, copie o código e cole em uma IA (ChatGPT, Claude, Gemini) descrevendo o que quer. Por exemplo:

"Quero adicionar uma coluna G com o telefone da empresa e uma coluna H com a situação cadastral"

"Quero que o script pule empresas com situação BAIXADA e deixe a linha em vermelho"

"Quero buscar também os sócios e colocar na coluna I"

A IA vai adaptar o código para você em segundos, sem precisar entender nada de programação.

Note

Ainda não tem um token? Crie sua conta gratuitamente em cnpj-api.com e comece a usar em minutos. O plano gratuito já é suficiente para testar e para planilhas pequenas.