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:
- Abra a planilha no Google Sheets.
- Acesse Extensões > Apps Script.
- Substitua o conteúdo do editor pelo código abaixo.
- 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.
Menu personalizado para validação em lote
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:
| Limite | Valor |
|---|---|
| Tempo de execução | 6 minutos por execução |
| Chamadas UrlFetchApp | 20.000 por dia |
| Tamanho de resposta | 50 MB por chamada |
| Triggers por usuário | 20 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.




