ONGs podem validar o CPF de doadores gratuitamente usando a API da CPFHub.io: basta cadastrar-se, gerar uma chave e fazer uma chamada GET com o número do documento. O plano Gratuito oferece 50 consultas por mês sem cartão de crédito — suficiente para a maioria das organizações de pequeno e médio porte. A validação confirma o nome do titular em ~900ms, garantindo recibos com dados corretos e proteção contra doações fraudulentas.
Por que ONGs precisam validar CPF de doadores
Emissão de recibos para dedução no IR
Doações para ONGs com certificação de utilidade pública podem ser deduzidas no Imposto de Renda. Para isso, o recibo precisa conter o nome e CPF corretos do doador. Um recibo com dados errados não tem validade fiscal.
Prevenção à lavagem de dinheiro
ONGs podem ser usadas como fachada para lavagem de dinheiro. Doações de valores significativos feitas com CPFs falsos ou de terceiros são um sinal de alerta. A validação do CPF é uma medida básica de prevenção.
Prestação de contas
Organizações que recebem recursos públicos ou de fundações precisam prestar contas detalhadas sobre seus doadores. Dados incorretos comprometem a credibilidade da prestação de contas.
Transparência institucional
Manter um cadastro de doadores com dados validados demonstra seriedade e profissionalismo na gestão da organização.
Como funciona na prática
Consulta rápida via cURL
curl -X GET "https://api.cpfhub.io/cpf/12345678900" \
-H "x-api-key: SUA_CHAVE_GRATUITA" \
-H "Accept: application/json" \
--connect-timeout 10 \
--max-time 30
Resposta:
{
"success": true,
"data": {
"cpf": "12345678900",
"name": "Juliana Mendes Barbosa",
"nameUpper": "JULIANA MENDES BARBOSA",
"gender": "F",
"birthDate": "1978-12-03",
"day": "03",
"month": "12",
"year": "1978"
}
}
O nome "JULIANA MENDES BARBOSA" vai para o recibo de doação com a certeza de que está correto.
Implementação para o sistema de doações
Validação no momento da doação
import requests
import logging
from typing import Dict, Optional
logger = logging.getLogger(__name__)
API_KEY = "SUA_CHAVE_GRATUITA"
TIMEOUT = 30
def validar_doador(cpf: str, nome_informado: str) -> Dict:
"""
Valida CPF do doador e compara com o nome informado.
Returns:
Dicionário com status da validação e dados para o recibo
"""
cpf_limpo = cpf.replace(".", "").replace("-", "").strip()
try:
response = requests.get(
f"https://api.cpfhub.io/cpf/{cpf_limpo}",
headers={
"x-api-key": API_KEY,
"Accept": "application/json"
},
timeout=TIMEOUT
)
response.raise_for_status()
dados = response.json()
if not dados.get("success"):
return {
"valido": False,
"motivo": "CPF nao encontrado",
"dados_recibo": None
}
nome_api = dados["data"]["nameUpper"]
nome_confere = nome_informado.upper().strip() == nome_api
cpf_fmt = f"{cpf_limpo[:3]}.{cpf_limpo[3:6]}.{cpf_limpo[6:9]}-{cpf_limpo[9:]}"
if nome_confere:
return {
"valido": True,
"motivo": "Dados confirmados",
"dados_recibo": {
"nome_completo": dados["data"]["name"],
"cpf_formatado": cpf_fmt,
"nascimento": dados["data"]["birthDate"]
}
}
else:
return {
"valido": False,
"motivo": f"Nome divergente: informado='{nome_informado}' / registrado='{dados['data']['name']}'",
"dados_recibo": None,
"nome_sugerido": dados["data"]["name"]
}
except requests.exceptions.Timeout:
logger.error("Timeout ao validar doador")
return {"valido": None, "motivo": "Servico indisponivel", "dados_recibo": None}
except requests.exceptions.RequestException as e:
logger.error(f"Erro: {e}")
return {"valido": None, "motivo": f"Erro: {e}", "dados_recibo": None}
# Exemplo de uso
resultado = validar_doador(
cpf="123.456.789-00",
nome_informado="Juliana Mendes Barbosa"
)
if resultado["valido"]:
recibo = resultado["dados_recibo"]
print(f"Recibo para: {recibo['nome_completo']}")
print(f"CPF: {recibo['cpf_formatado']}")
else:
print(f"Validacao falhou: {resultado['motivo']}")
Gerando recibos de doação com dados validados
from datetime import datetime
def gerar_recibo_doacao(dados_doador: Dict, valor: float, descricao: str) -> str:
"""Gera recibo de doação com dados validados via API."""
data_atual = datetime.now().strftime("%d/%m/%Y")
numero_recibo = datetime.now().strftime("%Y%m%d%H%M%S")
recibo = f"""
=============================================
RECIBO DE DOACAO N. {numero_recibo}
=============================================
Data: {data_atual}
Doador: {dados_doador['nome_completo']}
CPF: {dados_doador['cpf_formatado']}
Valor: R$ {valor:,.2f}
Descricao: {descricao}
=============================================
Este recibo e valido para fins de deducao
no Imposto de Renda conforme legislacao vigente.
=============================================
"""
return recibo
# Uso
resultado = validar_doador("123.456.789-00", "Juliana Mendes Barbosa")
if resultado["valido"]:
recibo = gerar_recibo_doacao(
dados_doador=resultado["dados_recibo"],
valor=500.00,
descricao="Doacao para projeto educacional"
)
print(recibo)
Validação em lote de base de doadores
ONGs com bases de doadores existentes podem validar os dados periodicamente:
import csv
import time
def validar_base_doadores(arquivo_csv: str) -> Dict:
"""Valida base de doadores existente e identifica inconsistências."""
estatisticas = {"total": 0, "validos": 0, "invalidos": 0, "erros": 0}
inconsistencias = []
with open(arquivo_csv, "r", encoding="utf-8") as f:
leitor = csv.DictReader(f)
for linha in leitor:
estatisticas["total"] += 1
cpf = linha.get("cpf", "")
nome = linha.get("nome", "")
resultado = validar_doador(cpf, nome)
if resultado["valido"] is True:
estatisticas["validos"] += 1
elif resultado["valido"] is False:
estatisticas["invalidos"] += 1
inconsistencias.append({
"cpf": cpf[:3] + "***" + cpf[-2:],
"motivo": resultado["motivo"]
})
else:
estatisticas["erros"] += 1
time.sleep(0.5) # respeitar rate limits
return {"estatisticas": estatisticas, "inconsistencias": inconsistencias}
Fluxo para campanhas de arrecadação
Durante campanhas de arrecadação com grande volume de doações, a validação pode ser incorporada ao formulário online:
- Doador preenche nome, CPF e valor da doação no site.
- Sistema válida o CPF em tempo real via API.
- Se válido: doação é processada e recibo é gerado automaticamente.
- Se inválido: doador é informado da inconsistência e pode corrigir os dados.
Essa abordagem evita que doações com dados incorretos entrem no sistema, reduzindo retrabalho posterior.
Custo zero para a maioria das ONGs
| Porte da ONG | Doadores novos/mês | Plano ideal | Custo |
|---|---|---|---|
| Pequena (local) | 5-20 | Gratuito | R$ 0 |
| Média (regional) | 20-50 | Gratuito | R$ 0 |
| Grande (nacional) | 100-500 | Pro | R$ 149/mês |
| Instituto / fundação | 500+ | Corporativo | Sob consulta |
A maioria das ONGs opera com volumes que se encaixam perfeitamente no plano Gratuito da CPFHub.io, que oferece 50 consultas mensais sem cartão de crédito. Quando o limite é ultrapassado, a API não bloqueia o acesso: cada consulta extra é cobrada a R$0,15, mantendo a operação sem interrupções.
Boas práticas de proteção de dados
ONGs que lidam com dados de doadores devem observar a LGPD:
- Finalidade: use os dados apenas para a finalidade declarada (emissão de recibos, prestação de contas).
- Minimização: armazene apenas os dados necessários.
- Transparência: informe aos doadores que seus dados serão validados.
- Segurança: proteja o banco de dados de doadores com medidas técnicas adequadas.
A CPFHub.io não armazena os CPFs consultados após retornar a resposta, o que facilita a conformidade com os princípios de minimização e segurança previstos na Lei Geral de Proteção de Dados.
Perguntas frequentes
ONGs precisam de CNPJ para usar a API CPFHub.io gratuitamente?
Não. O plano Gratuito da CPFHub.io está disponível para qualquer pessoa ou organização — basta criar uma conta com e-mail e gerar a chave de API no painel. ONGs, associações e projetos sociais podem começar a validar CPFs de doadores sem burocracia e sem apresentar documentação institucional.
A API retorna erro ou bloqueia quando o limite gratuito é atingido?
Não. Ao atingir as 50 consultas mensais do plano Gratuito, a API não bloqueia nem retorna erro. Cada consulta adicional é cobrada a R$0,15 — a operação segue sem interrupção. Isso é relevante para ONGs em período de campanha, quando o volume de novos doadores pode ser imprevisível.
Quanto tempo leva para a API retornar o nome do doador?
A latência média é de ~900ms. Para a maioria dos fluxos de cadastro de doadores, esse tempo é imperceptível para o usuário. Se a validação ocorre em segundo plano (assíncrona), o tempo de resposta não impacta a experiência do doador no formulário.
Como garantir conformidade com a LGPD ao validar CPF de doadores?
Use o CPF apenas para a finalidade declarada (emissão de recibos, prestação de contas), armazene somente o necessário, implemente controle de acesso aos registros de consulta e informe ao doador que seus dados serão verificados. A ANPD orienta que dados de identificação devem ser tratados com o princípio da necessidade e com base legal clara — no caso de ONGs, a base costuma ser obrigação legal ou legítimo interesse devidamente documentado.
Conclusão
A validação de CPF de doadores é uma prática que fortalece a transparência, garante a validade fiscal dos recibos e protege a ONG contra fraudes. Para organizações com orçamento limitado, o plano Gratuito da CPFHub.io cobre o volume de consultas da maioria das ONGs de pequeno e médio porte sem nenhum custo mensal. Quando a organização crescer, o plano Pro (R$149/mês) acompanha o aumento de volume sem mudança de integração.
Cadastre-se em cpfhub.io e comece a validar os dados dos seus doadores ainda hoje.
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.



