Fraudes em programas de indicação acontecem quando fraudadores criam múltiplas contas falsas para simular indicações e embolsar bônus indevidos. A CPFHub.io permite validar cada CPF cadastrado em ~900ms, garantindo que indicador e indicado são pessoas reais e distintas — bloqueando a fraude na raiz antes que qualquer bônus seja liberado.
Introdução
Programas de indicação -- conhecidos como referral programs -- são uma das estratégias de crescimento mais eficazes no e-commerce e em aplicativos. A lógica é simples: um cliente existente indica um amigo, ambos ganham um benefício, e a plataforma adquire um novo usuário a um custo menor do que canais pagos. O problema é que essa mecânica é extremamente vulnerável a fraudes.
Fraudadores criam dezenas de contas falsas para simular indicações, embolsando os bônus de ambos os lados. A validação de CPF via API é a forma mais eficaz de garantir que cada indicação envolve pessoas reais e distintas.
Anatomia da fraude em referral
O esquema clássico
O fraudador cria uma conta principal com dados reais. Em seguida, gera dezenas de contas secundárias com e-mails descartáveis, usando o link de indicação da conta principal. Cada conta secundária completa a ação necessária -- geralmente uma primeira compra de valor mínimo -- e o bônus é creditado tanto para a conta principal quanto para a secundária.
Variações mais sofisticadas
Fraudes mais elaboradas envolvem redes de fraudadores que trocam indicações entre si, cada um usando seu CPF real mas combinando para maximizar os bônus. Outras variações incluem o uso de CPFs de terceiros (familiares falecidos, por exemplo) para criar contas que parecem legítimas.
Impacto nos negócios
Além do prejuízo financeiro direto -- que pode representar milhares de reais por mês em bônus indevidos -- a fraude em referral distorce métricas críticas como CAC (custo de aquisição de cliente), taxa de conversão e lifetime value. Decisões estratégicas baseadas em dados contaminados levam a investimentos errados.
Estratégia de proteção com CPF
A validação de CPF atua em três pontos do fluxo de indicação.
Ponto 1 -- Cadastro do indicador
Antes de permitir que um usuário gere links de indicação, exija a verificação de CPF. Isso garante que a conta principal pertence a uma pessoa real.
Ponto 2 -- Cadastro do indicado
Quando alguém se cadastra usando um link de indicação, solicite o CPF e valide-o. Compare com o CPF do indicador para garantir que são pessoas diferentes.
Ponto 3 -- Liberação do bônus
Antes de creditar o bônus, faça uma verificação final: confirme que o CPF do indicado não está associado a nenhuma outra conta na plataforma e que não coincide com o CPF do indicador.
Implementação em Node.js
O exemplo a seguir demonstra um sistema de referral com proteção por CPF.
const express = require("express");
const axios = require("axios");
const crypto = require("crypto");
const app = express();
app.use(express.json());
const CPFHUB_API_URL = "https://api.cpfhub.io/cpf";
const CPFHUB_API_KEY = "SUA_CHAVE_DE_API";
const REQUEST_TIMEOUT = 10000; // 10 segundos
// Simulação de banco de dados
const usuarios = new Map();
const indicacoes = new Map();
const cpfsRegistrados = new Set();
function limparCpf(cpf) {
return cpf.replace(/\D/g, "");
}
async function consultarCpf(cpf) {
const cpfLimpo = limparCpf(cpf);
try {
const response = await axios.get(`${CPFHUB_API_URL}/${cpfLimpo}`, {
headers: {
"x-api-key": CPFHUB_API_KEY,
Accept: "application/json",
},
timeout: REQUEST_TIMEOUT,
});
if (response.data.success) {
return response.data.data;
}
return null;
} catch (error) {
if (error.code === "ECONNABORTED") {
throw new Error("Timeout na consulta de CPF");
}
if (error.response) {
const { status } = error.response;
if (status === 401) throw new Error("API key inválida");
if (status === 404) return null;
}
throw new Error("Erro na consulta de CPF");
}
}
function gerarCodigoReferral() {
return crypto.randomBytes(4).toString("hex").toUpperCase();
}
// Endpoint: verificar CPF e habilitar referral
app.post("/api/referral/habilitar", async (req, res) => {
const { usuarioId, cpf } = req.body;
if (!usuarioId || !cpf) {
return res.status(400).json({ erro: "usuarioId e cpf são obrigatórios" });
}
const cpfLimpo = limparCpf(cpf);
// Verifica se CPF já está em uso
if (cpfsRegistrados.has(cpfLimpo)) {
const usuarioExistente = [...usuarios.values()].find(
(u) => u.cpf === cpfLimpo
);
if (usuarioExistente && usuarioExistente.id !== usuarioId) {
return res.status(409).json({
erro: "Este CPF já está vinculado a outra conta",
});
}
}
try {
const dados = await consultarCpf(cpfLimpo);
if (!dados) {
return res.status(422).json({
erro: "CPF não encontrado na base de dados",
});
}
const codigoReferral = gerarCodigoReferral();
usuarios.set(usuarioId, {
id: usuarioId,
cpf: cpfLimpo,
nome: dados.name,
dataNascimento: dados.birthDate,
codigoReferral,
indicacoesRealizadas: 0,
bonusAcumulado: 0,
habilitadoEm: new Date().toISOString(),
});
cpfsRegistrados.add(cpfLimpo);
res.json({
sucesso: true,
codigoReferral,
mensagem: `Referral habilitado para ${dados.name}`,
});
} catch (error) {
res.status(503).json({ erro: error.message });
}
});
// Endpoint: cadastro via indicação
app.post("/api/referral/cadastro", async (req, res) => {
const { nome, email, cpf, codigoReferral } = req.body;
if (!cpf || !codigoReferral) {
return res.status(400).json({
erro: "CPF e código de indicação são obrigatórios",
});
}
const cpfLimpo = limparCpf(cpf);
// Verifica se o código de referral existe
const indicador = [...usuarios.values()].find(
(u) => u.codigoReferral === codigoReferral
);
if (!indicador) {
return res.status(404).json({ erro: "Código de indicação inválido" });
}
// Proteção 1: CPF do indicado não pode ser igual ao do indicador
if (cpfLimpo === indicador.cpf) {
return res.status(403).json({
erro: "Não é possível usar o próprio código de indicação",
});
}
// Proteção 2: CPF não pode estar em uso
if (cpfsRegistrados.has(cpfLimpo)) {
return res.status(409).json({
erro: "Este CPF já possui uma conta na plataforma",
});
}
// Proteção 3: validar CPF via API
try {
const dados = await consultarCpf(cpfLimpo);
if (!dados) {
return res.status(422).json({
erro: "CPF não encontrado na base de dados",
});
}
// Proteção 4: verificar que são pessoas diferentes
// (mesmo sobrenome + mesma data nascimento pode indicar fraude familiar)
const sobrenomeIndicador = indicador.nome.split(" ").pop().toUpperCase();
const sobrenomeIndicado = dados.name.split(" ").pop().toUpperCase();
const mesmoSobrenome = sobrenomeIndicador === sobrenomeIndicado;
const mesmaFamilia =
mesmoSobrenome &&
dados.birthDate &&
indicador.dataNascimento &&
dados.year === indicador.dataNascimento.split("/").pop();
const novoUsuarioId = crypto.randomUUID();
usuarios.set(novoUsuarioId, {
id: novoUsuarioId,
cpf: cpfLimpo,
nome: dados.name,
dataNascimento: dados.birthDate,
indicadoPor: indicador.id,
codigoReferral: gerarCodigoReferral(),
indicacoesRealizadas: 0,
bonusAcumulado: 0,
habilitadoEm: new Date().toISOString(),
});
cpfsRegistrados.add(cpfLimpo);
// Registra a indicação (bônus pendente até primeira compra)
indicacoes.set(`${indicador.id}-${novoUsuarioId}`, {
indicadorId: indicador.id,
indicadoId: novoUsuarioId,
status: "PENDENTE",
alertaFamiliar: mesmaFamilia,
criadoEm: new Date().toISOString(),
});
res.json({
sucesso: true,
usuarioId: novoUsuarioId,
indicadoPor: indicador.nome,
bonusPendente: true,
alertaRevisao: mesmaFamilia,
mensagem: mesmaFamilia
? "Cadastro realizado. Bônus sujeito a revisão manual."
: "Cadastro realizado. Bônus será liberado após primeira compra.",
});
} catch (error) {
res.status(503).json({ erro: error.message });
}
});
// Endpoint: liberar bônus após primeira compra
app.post("/api/referral/liberar-bonus", async (req, res) => {
const { indicadoId, valorCompra } = req.body;
const indicado = usuarios.get(indicadoId);
if (!indicado || !indicado.indicadoPor) {
return res.status(404).json({ erro: "Indicação não encontrada" });
}
const chave = `${indicado.indicadoPor}-${indicadoId}`;
const indicacao = indicacoes.get(chave);
if (!indicacao || indicacao.status !== "PENDENTE") {
return res.status(400).json({ erro: "Bônus já processado ou inexistente" });
}
// Verifica se a compra atinge o valor mínimo
const VALOR_MINIMO = 50.0;
if (valorCompra < VALOR_MINIMO) {
return res.status(400).json({
erro: `Compra mínima de R$ ${VALOR_MINIMO} para ativar bônus`,
});
}
// Se há alerta familiar, requer revisão manual
if (indicacao.alertaFamiliar) {
indicacao.status = "REVISAO_MANUAL";
return res.json({
sucesso: true,
status: "REVISAO_MANUAL",
mensagem: "Bônus encaminhado para revisão manual",
});
}
// Libera bônus para ambos
const BONUS_INDICADOR = 25.0;
const BONUS_INDICADO = 25.0;
const indicador = usuarios.get(indicado.indicadoPor);
indicador.bonusAcumulado += BONUS_INDICADOR;
indicador.indicacoesRealizadas += 1;
indicado.bonusAcumulado += BONUS_INDICADO;
indicacao.status = "LIBERADO";
res.json({
sucesso: true,
bonusIndicador: BONUS_INDICADOR,
bonusIndicado: BONUS_INDICADO,
mensagem: "Bônus liberado para ambos os participantes",
});
});
app.listen(3000, () => {
console.log("Servidor rodando na porta 3000");
});
Detecção de padrões suspeitos
Além da validação unitária de CPF, é importante monitorar padrões que indicam fraude organizada. A FEBRABAN recomenda que plataformas digitais implementem camadas de análise comportamental complementares à validação de identidade.
Indicadores de alerta
Existem vários sinais que merecem atenção. Um indicador que acumula um número anormal de indicações bem-sucedidas em curto período. Indicações em que indicador e indicado compartilham o mesmo sobrenome e faixa etária. Múltiplos cadastros originados do mesmo endereço IP em sequência. Indicados que fazem apenas a compra mínima para ativar o bônus e nunca mais retornam.
Score de risco
Atribua um score de risco a cada indicação com base nesses indicadores. Indicações com score alto devem passar por revisão manual antes da liberação do bônus.
Limites e controles
Para complementar a validação de CPF, implemente limites operacionais no programa de referral.
Defina um número máximo de indicações por CPF por mês -- um valor entre 5 e 10 é razoável para a maioria dos programas. Estabeleça um valor mínimo de primeira compra que seja significativo o suficiente para desencorajar fraudes -- se o bônus é de R$ 25, a compra mínima deve ser consideravelmente maior. Implemente um período de carência entre o cadastro e a liberação do bônus, permitindo que análises de fraude sejam executadas. Considere liberar o bônus em crédito na plataforma em vez de dinheiro, reduzindo a atratividade para fraudadores.
Métricas de saúde do programa
A validação de CPF permite acompanhar métricas que revelam a saúde do programa de referral.
A taxa de rejeição por CPF duplicado indica a proporção de tentativas de fraude por duplicação de conta. A taxa de indicações entre parentes (mesmo sobrenome) ajuda a calibrar as regras -- nem toda indicação familiar é fraude, mas uma taxa muito alta merece investigação. O lifetime value dos indicados comparado com o de usuários orgânicos revela se o programa está atraindo clientes genuínos ou apenas caçadores de bônus.
Custo-benefício
O custo de validação de CPF é insignificante comparado ao potencial de perda com fraude em referral. Com o plano Pro da CPFHub.io, a plataforma realiza até 1.000 consultas mensais por R$149 — o equivalente a menos de R$0,15 por verificação, muito abaixo do valor de qualquer bônus de indicação.
Perguntas frequentes
Como funciona a fraude em programas de indicação?
O fraudador cria múltiplas contas falsas (com CPFs diferentes) e usa o código de indicação da conta principal para simular indicações legítimas. Cada "indicação" gera crédito para o indicador, sem que nenhuma conta secundária seja de um usuário real.
Como a validação de CPF detecta auto-referência?
Ao verificar que cada CPF cadastrado é único, real e com nome correspondente, a plataforma elimina as contas fictícias criadas para simular indicações. Sem contas falsas, não há indicações falsas — o bônus de referral é pago apenas por indicações de pessoas reais.
Além do CPF, que outras verificações fortalecem o programa de referral?
Validação de número de telefone (SMS OTP), verificação de e-mail, análise de IP (identificar múltiplas contas do mesmo dispositivo) e período de carência antes de liberar o bônus (para confirmar que o indicado realmente usou o serviço). O CPF é a camada de identidade; as demais reduzem bots.
Qual o impacto financeiro da fraude em programas de referral?
Depende do valor do bônus e do volume. Empresas com bônus de R$50 por indicação e escala de campanhas podem perder centenas de milhares de reais em fraude de referral. O custo de implementar validação de CPF é uma fração desse valor.
Conclusão
Programas de indicação são motores de crescimento poderosos, mas apenas quando os participantes são reais. A validação de CPF via API transforma o referral de um canal vulnerável a fraudes em um mecanismo confiável e mensurável de aquisição de clientes. Com a CPFHub.io, cada verificação custa menos de R$0,15 e retorna em ~900ms — uma proteção de altíssimo custo-benefício para qualquer programa de indicação.
Cadastre-se em cpfhub.io — 50 consultas mensais gratuitas, sem cartão de crédito — e comece hoje mesmo.
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.



