Como consumir API de CPF em Google Apps Script para automacoes no Google Sheets

Aprenda a criar funções personalizadas no Google Sheets que consultam CPF via API usando Google Apps Script com menus e validação em lote.

Lucas Vieira
Lucas Vieira
··9 min de leitura
Como consumir API de CPF em Google Apps Script para automacoes no Google Sheets

Para consumir a API de CPF no Google Apps Script, use UrlFetchApp.fetch com o endpoint https://api.cpfhub.io/cpf/{CPF} e o header x-api-key configurado via PropertiesService. A resposta chega em ~900ms e pode ser usada diretamente em fórmulas personalizadas como =CONSULTAR_CPF_NOME(A2) ou em menus de validação em lote. A documentação completa do Google Apps Script está disponível em developers.google.com/apps-script.

Google Sheets é uma das ferramentas mais utilizadas no ambiente corporativo brasileiro. Equipes de RH, financeiro, compliance e operações frequentemente gerenciam listas de CPFs em planilhas — para validação de cadastros, conferência de dados de funcionários ou verificação de clientes. O Google Apps Script permite estender o Sheets com funções personalizadas que se conectam a APIs externas, transformando uma planilha simples em uma ferramenta de validação poderosa.


Configuração inicial

Para adicionar o script ao Google Sheets:

  1. Abra a planilha no Google Sheets.
  2. Acesse Extensões > Apps Script.
  3. Substitua o conteúdo do editor pelo código abaixo.
  4. Salve e autorize as permissões necessárias.

Função de consulta básica

A função principal que consulta a API da CPFHub.io:

// Constantes
var API_URL = "https://api.cpfhub.io/cpf";
var TIMEOUT_MS = 10000;

/**
    * Recupera a chave de API armazenada nas propriedades do script.
    * Configure em: Arquivo > Propriedades do projeto > Propriedades do script
    */
function getApiKey() {
    var props = PropertiesService.getScriptProperties();
    var key = props.getProperty("CPFHUB_API_KEY");

    if (!key) {
    throw new Error(
    "Chave de API nao configurada. " +
    "Va em Arquivo > Propriedades do projeto e adicione CPFHUB_API_KEY."
    );
    }

    return key;
}

/**
    * Consulta dados de um CPF na API CPFHub.io.
    * @param {string} cpf - Numero do CPF (com ou sem formatacao).
    * @return {object} Dados do CPF ou mensagem de erro.
    */
function consultarCPF(cpf) {
    var cpfLimpo = String(cpf).replace(/\D/g, "");

    if (cpfLimpo.length !== 11) {
    return { sucesso: false, erro: "CPF deve ter 11 digitos" };
    }

    var apiKey = getApiKey();

    var options = {
    method: "get",
    headers: {
    "x-api-key": apiKey,
    "Accept": "application/json"
    },
    muteHttpExceptions: true,
    followRedirects: true
    };

    try {
    var response = UrlFetchApp.fetch(API_URL + "/" + cpfLimpo, options);
    var statusCode = response.getResponseCode();

    if (statusCode !== 200) {
    return { sucesso: false, erro: "Erro HTTP " + statusCode };
    }

    var dados = JSON.parse(response.getContentText());

    if (!dados.success || !dados.data) {
    return { sucesso: false, erro: "CPF nao encontrado" };
    }

    return {
    sucesso: true,
    dados: dados.data
    };
    } catch (error) {
    return { sucesso: false, erro: "Erro: " + error.message };
    }
}

Note que o Google Apps Script usa UrlFetchApp.fetch em vez do fetch padrão. O timeout é gerenciado pelo próprio runtime do Apps Script (até 6 minutos por execução).


Função personalizada para células

Crie uma função que pode ser usada diretamente como fórmula na planilha:

/**
    * Retorna o nome associado a um CPF.
    * Uso na celula: =CONSULTAR_CPF_NOME(A2)
    *
    * @param {string} cpf - Numero do CPF.
    * @return {string} Nome do titular ou mensagem de erro.
    * @customfunction
    */
function CONSULTAR_CPF_NOME(cpf) {
    if (!cpf) return "";

    var resultado = consultarCPF(cpf);

    if (resultado.sucesso) {
    return resultado.dados.name;
    }

    return "ERRO: " + resultado.erro;
}

/**
    * Retorna dados completos de um CPF em colunas separadas.
    * Uso na celula: =CONSULTAR_CPF_COMPLETO(A2)
    * Retorna: [Nome, Genero, Data Nascimento]
    *
    * @param {string} cpf - Numero do CPF.
    * @return {Array} Array com nome, genero e data de nascimento.
    * @customfunction
    */
function CONSULTAR_CPF_COMPLETO(cpf) {
    if (!cpf) return [["", "", ""]];

    var resultado = consultarCPF(cpf);

    if (resultado.sucesso) {
    return [[
    resultado.dados.name,
    resultado.dados.gender === "M" ? "Masculino" : "Feminino",
    resultado.dados.birthDate
    ]];
    }

    return [["ERRO: " + resultado.erro, "", ""]];
}

Após salvar o script, use na planilha como qualquer fórmula:

  • =CONSULTAR_CPF_NOME(A2) — Retorna apenas o nome.
  • =CONSULTAR_CPF_COMPLETO(A2) — Retorna nome, gênero e data de nascimento em 3 colunas.

Adicione um menu na planilha para operações em lote:

/**
    * Cria menu personalizado ao abrir a planilha.
    */
function onOpen() {
    var ui = SpreadsheetApp.getUi();
    ui.createMenu("CPFHub")
    .addItem("Validar CPFs selecionados", "validarSelecionados")
    .addItem("Validar toda a coluna A", "validarColunaA")
    .addSeparator()
    .addItem("Configurar chave de API", "configurarChaveAPI")
    .addToUi();
}

/**
    * Dialog para configurar a chave de API.
    */
function configurarChaveAPI() {
    var ui = SpreadsheetApp.getUi();
    var resultado = ui.prompt(
    "Configurar CPFHub.io",
    "Informe sua chave de API:",
    ui.ButtonSet.OK_CANCEL
    );

    if (resultado.getSelectedButton() === ui.Button.OK) {
    var chave = resultado.getResponseText().trim();
    PropertiesService.getScriptProperties().setProperty(
    "CPFHUB_API_KEY",
    chave
    );
    ui.alert("Chave de API configurada com sucesso.");
    }
}

/**
    * Valida os CPFs nas celulas selecionadas.
    * Espera: Coluna A = CPF, escreve resultados nas colunas B, C, D.
    */
function validarSelecionados() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var range = sheet.getActiveRange();
    var valores = range.getValues();
    var primeiraLinha = range.getRow();

    for (var i = 0; i < valores.length; i++) {
    var cpf = String(valores[i][0]).trim();

    if (!cpf) continue;

    var resultado = consultarCPF(cpf);
    var linha = primeiraLinha + i;

    if (resultado.sucesso) {
    sheet.getRange(linha, 2).setValue(resultado.dados.name);
    sheet.getRange(linha, 3).setValue(
    resultado.dados.gender === "M" ? "Masculino" : "Feminino"
    );
    sheet.getRange(linha, 4).setValue(resultado.dados.birthDate);
    sheet.getRange(linha, 5).setValue("Valido");
    } else {
    sheet.getRange(linha, 5).setValue(resultado.erro);
    }

    // Delay para respeitar rate limits
    Utilities.sleep(500);
    }

    SpreadsheetApp.getUi().alert(
    "Validacao concluida. " + valores.length + " CPFs processados."
    );
}

/**
    * Valida todos os CPFs da coluna A (a partir da linha 2).
    */
function validarColunaA() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var ultimaLinha = sheet.getLastRow();

    if (ultimaLinha < 2) {
    SpreadsheetApp.getUi().alert("Nenhum CPF encontrado na coluna A.");
    return;
    }

    var range = sheet.getRange(2, 1, ultimaLinha - 1, 1);
    var valores = range.getValues();
    var processados = 0;

    // Adicionar cabecalhos se nao existirem
    sheet.getRange(1, 2).setValue("Nome");
    sheet.getRange(1, 3).setValue("Genero");
    sheet.getRange(1, 4).setValue("Data Nascimento");
    sheet.getRange(1, 5).setValue("Status");

    for (var i = 0; i < valores.length; i++) {
    var cpf = String(valores[i][0]).trim();

    if (!cpf) continue;

    var resultado = consultarCPF(cpf);
    var linha = i + 2;

    if (resultado.sucesso) {
    sheet.getRange(linha, 2).setValue(resultado.dados.name);
    sheet.getRange(linha, 3).setValue(
    resultado.dados.gender === "M" ? "Masculino" : "Feminino"
    );
    sheet.getRange(linha, 4).setValue(resultado.dados.birthDate);
    sheet.getRange(linha, 5).setValue("Valido");
    } else {
    sheet.getRange(linha, 5).setValue(resultado.erro);
    }

    processados++;
    Utilities.sleep(500);
    }

    SpreadsheetApp.getUi().alert(processados + " CPFs processados.");
}

Armazenamento seguro da chave de API

O Google Apps Script oferece o PropertiesService para armazenar dados sensíveis:

  • Script Properties — Compartilhadas entre todos os usuários do script. Ideal para a chave de API.
  • User Properties — Específicas de cada usuário. Úteis se cada usuário tiver sua própria chave.
  • Document Properties — Vinculadas ao documento. Evite para segredos, pois qualquer editor do documento pode acessá-las.

A chave de API é armazenada em Script Properties, acessíveis apenas por quem tem acesso de edição ao script.


Limites do Google Apps Script

O Apps Script possui limitações que afetam a validação em lote:

LimiteValor
Tempo de execução6 minutos por execução
Chamadas UrlFetchApp20.000 por dia
Tamanho de resposta50 MB por chamada
Triggers por usuário20 por script

Para 50 consultas mensais (plano gratuito da CPFHub.io), esses limites são mais que suficientes. Para volumes maiores, considere dividir a validação em execuções menores com triggers temporais.


Automação com triggers

Configure triggers para validação automática de novos CPFs adicionados:

/**
    * Trigger que executa quando a planilha e editada.
    * Valida automaticamente CPFs adicionados na coluna A.
    */
function onEdit(e) {
    var range = e.range;
    var sheet = range.getSheet();

    // Verificar se a edicao foi na coluna A (CPF)
    if (range.getColumn() !== 1 || range.getRow() < 2) return;

    var cpf = String(range.getValue()).trim();
    if (!cpf || cpf.replace(/\D/g, "").length !== 11) return;

    var resultado = consultarCPF(cpf);
    var linha = range.getRow();

    if (resultado.sucesso) {
    sheet.getRange(linha, 2).setValue(resultado.dados.name);
    sheet.getRange(linha, 3).setValue(
    resultado.dados.gender === "M" ? "Masculino" : "Feminino"
    );
    sheet.getRange(linha, 4).setValue(resultado.dados.birthDate);
    sheet.getRange(linha, 5).setValue("Valido");
    } else {
    sheet.getRange(linha, 5).setValue(resultado.erro);
    }
}

Perguntas frequentes

Por que usar UrlFetchApp em vez do fetch padrão no Apps Script?

O Google Apps Script roda no lado do servidor do Google, não no navegador, por isso não tem acesso ao fetch nativo do JavaScript. O UrlFetchApp é a API oficial do Apps Script para requisições HTTP e suporta headers, autenticação e tratamento de erros. Ele também escala automaticamente sem precisar de infraestrutura própria.

Como armazenar a chave de API sem expô-la no código?

Use o PropertiesService.getScriptProperties() para guardar a chave como uma propriedade de script. Assim ela fica fora do código-fonte, não aparece em commits ou compartilhamentos da planilha, e pode ser atualizada pelo menu que configuramos na função configurarChaveAPI. Nunca cole a chave diretamente como string no código.

Quantas consultas de CPF cabem dentro dos limites gratuitos do Apps Script?

O Apps Script permite até 20.000 chamadas ao UrlFetchApp por dia, o que é muito superior ao limite da CPFHub.io. No plano Gratuito da CPFHub.io, o gargalo real são as 50 consultas/mês. Ao ultrapassar esse limite, a API não bloqueia — cobra R$0,15 por consulta adicional. Para validações em lote frequentes, o plano Pro (1.000 consultas/mês por R$149) é mais indicado.

Dá para automatizar a validação sem abrir a planilha manualmente?

Sim. Configure um trigger temporal em Apps Script > Gatilhos para executar validarColunaA em horários definidos — por exemplo, toda manhã às 8h. O Apps Script executa o script no servidor do Google mesmo com a planilha fechada, validando os CPFs novos adicionados desde a última execução.


Conclusão

Google Apps Script transforma o Google Sheets em uma ferramenta de validação de CPF acessível para equipes não-técnicas. Com funções personalizadas, menus intuitivos e triggers automáticos, qualquer planilha de cadastros pode ser enriquecida com dados validados pela API da CPFHub.io.

O plano gratuito cobre 50 consultas/mês sem cartão de crédito — suficiente para equipes pequenas que validam cadastros pontualmente. Para times que processam centenas de CPFs por mês, o plano Pro entrega 1.000 consultas por R$149. Consultas além do limite nunca bloqueiam: são cobradas automaticamente a R$0,15 cada.

Crie sua conta em cpfhub.io e comece a validar CPFs direto no Google Sheets.

CPFHub.io

Pronto para integrar a API?

50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.

WhatsAppFale conosco via WhatsApp