Ao solicitar o CPF no início do formulário e consultar a API CPFHub.io, você preenche automaticamente nome completo, data de nascimento e gênero — reduzindo de 8 para 5 campos de preenchimento manual e cortando o tempo médio de cadastro pela metade, sem sacrificar a qualidade dos dados.
Introdução
Cada campo adicional em um formulário reduz a taxa de conversão. Pesquisas de UX indicam que formulários com mais de 5 campos têm taxas de abandono significativamente maiores do que aqueles com 3 ou menos. No contexto brasileiro, onde nome completo, data de nascimento e gênero são frequentemente solicitados junto ao CPF, o formulário pode rapidamente se tornar extenso e desestimulante.
A solução é o enriquecimento de dados via CPF. Ao consultar a API da CPFHub.io, você obtém nome, gênero e data de nascimento automaticamente — eliminando a necessidade de o usuário preencher esses campos.
O problema dos formulários extensos
Impacto na conversão
Estudos de usabilidade mostram que:
- Cada campo adicional reduz a taxa de conversão em 5-10%.
- Formulários com mais de 7 campos têm taxa de abandono acima de 50%.
- O tempo de preenchimento é o fator que mais influencia a decisão de abandonar.
Campos típicos de um cadastro brasileiro
Um formulário de cadastro completo costuma incluir:
- CPF
- Nome completo
- Data de nascimento
- Gênero
- Telefone
- Senha
- Confirmação de senha
Com enriquecimento via CPF, os campos 2, 3 e 4 podem ser preenchidos automaticamente, reduzindo o formulário de 8 para 5 campos de preenchimento manual.
Implementação do formulário com enriquecimento
Vamos criar um formulário que solicita o CPF primeiro e preenche os demais campos automaticamente.
<form id="formCadastro" class="form-cadastro">
<div class="form-section">
<h3>Identificacao</h3>
<div class="campo">
<label for="cpf">CPF</label>
<input
type="text"
id="cpf"
inputmode="numeric"
placeholder="000.000.000-00"
maxlength="14"
required
/>
<p class="feedback" id="cpfFeedback"></p>
</div>
</div>
<div class="form-section enriquecido" id="secaoDados" style="display: none;">
<h3>Dados pessoais</h3>
<div class="campo">
<label for="nome">Nome completo</label>
<input type="text" id="nome" required />
<span class="badge-auto" id="badgeNome" style="display: none;">Preenchido automaticamente</span>
</div>
<div class="campo-row">
<div class="campo">
<label for="nascimento">Data de nascimento</label>
<input type="date" id="nascimento" required />
<span class="badge-auto" id="badgeNasc" style="display: none;">Preenchido automaticamente</span>
</div>
<div class="campo">
<label for="genero">Genero</label>
<select id="genero" required>
<option value="">Selecione</option>
<option value="M">Masculino</option>
<option value="F">Feminino</option>
</select>
<span class="badge-auto" id="badgeGenero" style="display: none;">Preenchido automaticamente</span>
</div>
</div>
</div>
<div class="form-section" id="secaoContato" style="display: none;">
<h3>Contato</h3>
<div class="campo">
<label for="email">E-mail</label>
<input type="email" id="email" placeholder="seu@email.com" required />
</div>
<div class="campo">
<label for="telefone">Telefone</label>
<input type="tel" id="telefone" placeholder="(11) 99999-9999" required />
</div>
</div>
<div class="form-section" id="secaoSenha" style="display: none;">
<h3>Seguranca</h3>
<div class="campo">
<label for="senha">Senha</label>
<input type="password" id="senha" placeholder="Minimo 8 caracteres" required />
</div>
</div>
<button type="submit" id="btnSubmit" style="display: none;">Criar conta</button>
</form>
<style>
.form-cadastro { max-width: 500px; margin: 0 auto; }
.form-section {
margin-bottom: 24px;
padding: 20px;
background: #fff;
border: 1px solid #e0e0e0;
border-radius: 12px;
}
.form-section h3 { margin-bottom: 16px; color: #2c3e50; }
.campo { margin-bottom: 12px; }
.campo label { display: block; font-weight: 600; margin-bottom: 4px; font-size: 0.9rem; }
.campo input, .campo select {
width: 100%;
padding: 10px 12px;
border: 2px solid #ddd;
border-radius: 8px;
font-size: 1rem;
outline: none;
transition: border-color 0.2s;
}
.campo input:focus, .campo select:focus { border-color: #3498db; }
.campo-row { display: flex; gap: 12px; }
.campo-row .campo { flex: 1; }
.feedback { font-size: 0.85rem; margin-top: 4px; min-height: 20px; }
.badge-auto {
display: inline-block;
font-size: 0.75rem;
background: #d4edda;
color: #155724;
padding: 2px 8px;
border-radius: 4px;
margin-top: 4px;
}
.enriquecido input[readonly], .enriquecido select[disabled] {
background: #f8f9fa;
color: #333;
}
button[type="submit"] {
width: 100%;
padding: 14px;
background: #2ecc71;
color: #fff;
border: none;
border-radius: 8px;
font-size: 1.1rem;
font-weight: bold;
cursor: pointer;
}
button[type="submit"]:hover { background: #27ae60; }
</style>
Lógica de enriquecimento
A lógica monitora o campo de CPF e, ao completar 11 dígitos válidos, consulta a API para preencher os campos.
const cpfInput = document.getElementById('cpf');
const cpfFeedback = document.getElementById('cpfFeedback');
function maskCPF(value) {
const d = value.replace(/\D/g, '').slice(0, 11);
let r = '';
for (let i = 0; i < d.length; i++) {
if (i === 3 || i === 6) r += '.';
if (i === 9) r += '-';
r += d[i];
}
return r;
}
function validarCPF(cpf) {
if (cpf.length !== 11 || /^(\d)\1{10}$/.test(cpf)) return false;
let soma = 0;
for (let i = 0; i < 9; i++) soma += parseInt(cpf[i]) * (10 - i);
let resto = (soma * 10) % 11;
if (resto === 10) resto = 0;
if (resto !== parseInt(cpf[9])) return false;
soma = 0;
for (let i = 0; i < 10; i++) soma += parseInt(cpf[i]) * (11 - i);
resto = (soma * 10) % 11;
if (resto === 10) resto = 0;
return resto === parseInt(cpf[10]);
}
cpfInput.addEventListener('input', async function () {
this.value = maskCPF(this.value);
const digits = this.value.replace(/\D/g, '');
if (digits.length < 11) {
cpfFeedback.textContent = '';
return;
}
if (!validarCPF(digits)) {
cpfFeedback.textContent = 'CPF invalido.';
cpfFeedback.style.color = '#e74c3c';
return;
}
cpfFeedback.textContent = 'Buscando seus dados...';
cpfFeedback.style.color = '#3498db';
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 10000);
try {
const res = await fetch(`https://api.cpfhub.io/cpf/${digits}`, {
headers: {
'x-api-key': 'SUA_CHAVE_DE_API',
'Accept': 'application/json'
},
signal: controller.signal
});
clearTimeout(timeoutId);
const json = await res.json();
if (json.success) {
preencherDados(json.data);
cpfFeedback.textContent = 'Dados preenchidos automaticamente!';
cpfFeedback.style.color = '#2ecc71';
} else {
habilitarPreenchimentoManual();
cpfFeedback.textContent = 'CPF valido. Preencha seus dados abaixo.';
cpfFeedback.style.color = '#f39c12';
}
} catch (err) {
clearTimeout(timeoutId);
habilitarPreenchimentoManual();
cpfFeedback.textContent = 'Nao foi possivel buscar automaticamente. Preencha manualmente.';
cpfFeedback.style.color = '#f39c12';
}
// Exibir secoes restantes
document.getElementById('secaoDados').style.display = 'block';
document.getElementById('secaoContato').style.display = 'block';
document.getElementById('secaoSenha').style.display = 'block';
document.getElementById('btnSubmit').style.display = 'block';
});
function preencherDados(data) {
const nomeInput = document.getElementById('nome');
nomeInput.value = data.name;
nomeInput.setAttribute('readonly', 'true');
document.getElementById('badgeNome').style.display = 'inline-block';
const nascInput = document.getElementById('nascimento');
nascInput.value = `${data.year}-${data.month.padStart(2, '0')}-${data.day.padStart(2, '0')}`;
nascInput.setAttribute('readonly', 'true');
document.getElementById('badgeNasc').style.display = 'inline-block';
const generoSelect = document.getElementById('genero');
generoSelect.value = data.gender;
generoSelect.setAttribute('disabled', 'true');
document.getElementById('badgeGenero').style.display = 'inline-block';
}
function habilitarPreenchimentoManual() {
document.getElementById('nome').removeAttribute('readonly');
document.getElementById('nascimento').removeAttribute('readonly');
document.getElementById('genero').removeAttribute('disabled');
document.querySelectorAll('.badge-auto').forEach(b => b.style.display = 'none');
}
Permitindo edição dos dados auto-preenchidos
Mesmo com auto-preenchimento, o usuário deve poder editar os dados. Adicione um botão "Editar" discreto.
function adicionarBotaoEditar() {
const secao = document.getElementById('secaoDados');
const btn = document.createElement('button');
btn.type = 'button';
btn.textContent = 'Editar dados';
btn.className = 'btn-editar';
btn.onclick = () => {
habilitarPreenchimentoManual();
btn.style.display = 'none';
};
secao.querySelector('h3').appendChild(btn);
}
.btn-editar {
float: right;
background: transparent;
border: 1px solid #3498db;
color: #3498db;
padding: 4px 12px;
border-radius: 4px;
font-size: 0.8rem;
cursor: pointer;
}
.btn-editar:hover { background: #3498db; color: #fff; }
Revelação progressiva de campos
A técnica de revelação progressiva -- mostrar campos adicionais apenas quando necessário -- reduz a carga cognitiva do usuário. No nosso formulário, as seções de dados, contato e senha só aparecem após a validação do CPF.
Essa abordagem tem dois benefícios:
- Percepção de simplicidade -- o usuário vê apenas 1 campo inicialmente.
- Compromisso gradual -- ao investir tempo no primeiro campo, o usuário está mais propenso a completar os demais.
Métricas de impacto do enriquecimento
Para medir o impacto do enriquecimento de dados, compare antes e depois da implementação:
| Metrica | Antes (sem enriquecimento) | Depois (com enriquecimento) |
|---|---|---|
| Campos de preenchimento manual | 7-8 | 4-5 |
| Tempo medio de cadastro | 45-60s | 20-30s |
| Taxa de abandono | 40-55% | 15-25% |
| Erros de digitacao no nome | 8-12% | ~0% (auto-preenchido) |
LGPD e transparência no enriquecimento
O enriquecimento de dados via CPF exige transparência com o usuário. A LGPD determina que o titular deve saber como seus dados estão sendo utilizados.
Boas práticas
- Informe que os dados serão preenchidos automaticamente antes de solicitar o CPF.
- Exiba claramente quais dados foram obtidos via API (os badges "Preenchido automaticamente" ajudam nisso).
- Permita que o usuário edite ou recuse o auto-preenchimento.
- Não armazene dados da API além do necessário para o cadastro.
A API da CPFHub.io retorna apenas dados de identificação básica — nome, gênero e data de nascimento — sem expor informações sensíveis como endereço ou situação fiscal, facilitando a adequação à LGPD.
Enriquecimento em formulários de checkout
No e-commerce, o enriquecimento via CPF é especialmente poderoso. Ao solicitar o CPF no início do checkout, você pode preencher automaticamente o nome do titular e, combinado com o CEP, completar quase todos os campos de entrega.
async function enriquecerCheckout(cpfDigits) {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 10000);
try {
const res = await fetch(`https://api.cpfhub.io/cpf/${cpfDigits}`, {
headers: {
'x-api-key': 'SUA_CHAVE_DE_API',
'Accept': 'application/json'
},
signal: controller.signal
});
clearTimeout(timeoutId);
const json = await res.json();
if (json.success) {
document.getElementById('nomeCompleto').value = json.data.name;
// O usuario so precisa preencher: endereco, email e forma de pagamento
}
} catch (err) {
clearTimeout(timeoutId);
// Fallback: preenchimento manual
}
}
Perguntas frequentes
Quais campos do formulário posso eliminar com enriquecimento via CPF?
Com a API CPFHub.io, você preenche automaticamente nome completo, data de nascimento e gênero — os três campos que mais aumentam o tempo de preenchimento em cadastros brasileiros. O usuário continua inserindo apenas CPF, e-mail, telefone e senha, reduzindo de 8 para 5 campos de preenchimento manual.
O que acontece se o CPF informado não retornar dados na API?
Quando a API não encontra dados para o CPF (resposta com success: false), o formulário habilita o preenchimento manual dos campos. O usuário preenche normalmente, sem perceber a tentativa de enriquecimento. Essa lógica de fallback garante que nenhum cadastro seja bloqueado por indisponibilidade de dados.
O enriquecimento via CPF está em conformidade com a LGPD?
Sim, desde que seja implementado com transparência. Informe o usuário antes de solicitar o CPF que os dados serão preenchidos automaticamente, exiba badges indicando o que foi auto-preenchido, permita edição e armazene apenas o necessário para o cadastro. A ANPD orienta que o tratamento de dados deve seguir o princípio da necessidade e ter base legal documentada.
A API CPFHub.io suporta o volume de requisições de um formulário em produção?
Sim. O plano gratuito oferece 50 consultas mensais sem cartão de crédito — adequado para testes e projetos iniciais. Para produção, o plano Pro inclui 1.000 consultas mensais por R$149. A API nunca bloqueia ao atingir o limite: cobra R$0,15 por consulta adicional, garantindo que o formulário continue funcionando mesmo em picos de cadastro.
Conclusão
O enriquecimento de dados via CPF é uma das formas mais eficazes de reduzir o número de campos em formulários brasileiros. Ao eliminar a necessidade de digitar nome, data de nascimento e gênero manualmente, você reduz o tempo de preenchimento, diminui erros de digitação e aumenta significativamente a taxa de conversão — sem pedir nada ao usuário além do CPF que ele já precisaria fornecer.
A API da CPFHub.io responde em ~900ms e retorna os dados prontos para preencher os campos do formulário. Cadastre-se em cpfhub.io e comece com 50 consultas gratuitas, sem cartão de crédito — o suficiente para implementar e validar a experiência em ambiente de desenvolvimento.
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
Sobre a redação
Redação CPFHub.io
Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.



