US$ 400 milhões. Esse é o preço que o TikTok pagou — de novo — por falhar em algo que, na minha experiência construindo sistemas web há anos, é absurdamente fácil de errar: tratar crianças como adultos no código. Não é má-fé da maioria dos devs. É falta de cuidado em fluxos de cadastro, em validações de idade e em políticas de retenção de dados. Segundo o Olhardigital.com.br, o acordo com o Departamento de Justiça dos EUA encerra um processo de 2024 que acusava o TikTok de coletar dados de menores sem consentimento dos pais, violando a COPPA. E o pior: essa é a segunda vez. Em 2019, a empresa já tinha pago US$ 5,7 milhões pelo mesmo problema com o Musical.ly.
O caso não é só sobre o TikTok. É sobre como a indústria inteira trata dados de menores — e sobre como a gente, como devs, escreve (ou deixa de escrever) as verificações que importam. Deixa eu destrinchar isso do jeito que um dev precisa entender.
O que a COPPA realmente exige — e por que devs ignoram
A Children’s Online Privacy Protection Act (COPPA) é clara: qualquer serviço direcionado a crianças menores de 13 anos nos EUA precisa obter consentimento parental verificável antes de coletar qualquer informação pessoal. “Informação pessoal” inclui nome, e-mail, geolocalização, fotos, identificadores de dispositivo e até cookies persistentes usados para rastreamento comportamental.
Na prática, o que a lei obriga:
- Verificação de idade no cadastro (e não só na criação da conta — em cada ponto de coleta)
- Consentimento parental verificável via métodos como cartão de crédito, documento, videochamada ou-knowledge-based authentication
- Política de privacidade legível, com link direto, descrevendo exatamente o que é coletado
- Direito de exclusão dos dados mediante solicitação dos pais
- Retenção limitada — dados de crianças devem ser deletados após o propósito ser atendido
Eu vejo muita gente ignorando isso porque “o produto não é focado em criança”. Mas a COPPA se aplica também a serviços que sabem que têm usuários menores — independentemente do público-alvo. Se um dev de growth implementa um campo de data de nascimento e ignora a validação, ou se um sistema de ads começa a segmentar usuários com base em comportamento compatível com menores, o problema começa ali.
O erro técnico central: validação de idade como “checkbox”
A maioria dos sistemas que eu analiso trata idade como uma checkbox booleana. Algo assim:
// O jeito ERRADO que eu vejo em 90% dos códigos
function handleSignup(data) {
if (data.birthdate) {
const age = calculateAge(data.birthdate);
if (age >= 13) {
return createAccount(data);
}
}
return showError("Você precisa ter 13+");
}
Isso parece funcionar. Mas é frágil por três razões que já vi quebrarem em produção:
- O usuário pode mentir. Não existe validação server-side da data real.
- Mesmo após o cadastro, o sistema continua coletando dados via analytics, pixels de ads, logs de uso — sem revalidar.
- Remoção é tratada como exceção, não como fluxo padrão. Quando os pais pedem para deletar a conta, o sistema demora semanas (ou nunca responde).
Foi exatamente isso que o processo de 2024 alegou contra o TikTok: funcionários internos já tinham levantado preocupações, mas os ajustes eram cosméticos. A empresa continuou coletando e usando dados de menores para ads direcionadas.
Na Prática: implementando um age gate à prova de COPPA
Quando eu construo fluxos com potencial de atingir menores, sigo um padrão que vou compartilhar. Não é bala de prata — cada caso tem suas nuances — mas cobre os pontos que os processos normalmente atacam.
1. Coleta mínima e explícita
interface ConsentRecord {
userId: string;
declaredAge: number;
consentMethod: 'parental_verified' | 'age_gate_passed' | 'unknown';
consentTimestamp: Date;
ipAddress: string;
consentText: string;
withdrawnAt?: Date;
}
async function recordConsent(record: ConsentRecord): Promise<void> {
// Audit trail imutável
await db.consentLog.create({
data: {
...record,
hash: sha256(JSON.stringify(record)),
},
});
}
Note: toda interação com dados de menor precisa de audit trail. Se você não consegue provar quando, como e por quê coletou, você perde na justiça.
2. Age gate com camada server-side
from datetime import datetime, date
def verify_age_and_gate(birthdate: date, ip: str, user_agent: str) -> dict:
today = date.today()
age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day))
if age < 13:
return {
"allowed": False,
"reason": "COPPA_RESTRICTED",
"action": "block_collection",
"next_step": "parental_consent_flow"
}
if age < 16:
# GDPR-K ainda se aplica se a UE for mercado
return {
"allowed": True,
"reason": "MINOR_WITH_RESTRICTIONS",
"action": "disable_targeted_ads",
"data_retention_days": 30
}
return {"allowed": True, "action": "standard_flow"}
3. Bloqueio de coleta secundária
Esse é o ponto que o TikTok falhou. Mesmo após descobrir que tinha menores na plataforma, o sistema continuou coletando telemetria, eventos de uso, métricas de engajamento. A solução: tag de restrição no perfil que propaga para todos os sistemas downstream.
// Middleware global
app.use((req, res, next) => {
const user = req.user;
if (user?.privacyRestrictions?.includes('no_analytics')) {
req.analyticsDisabled = true;
// Desabilita pixels, eventos customizados, etc.
}
next();
});
// Em cada evento de tracking
trackEvent(userId, eventName, payload) {
if (this.isRestrictedUser(userId)) return; // No-op total
return this.sendToAnalytics(eventName, payload);
}
4. Fluxo de exclusão em < 30 dias
A COPPA exige que pedidos de exclusão sejam atendidos em prazo razoável. FTC já multou empresas por demorar mais de 40 dias. Implemente:
- Endpoint dedicado para solicitações de pais (não esconda atrás de formulário genérico)
- Verificação de parentalidade antes de executar
- Cascade delete em todos os data warehouses, incluindo backups — ou ao menos expiração acelerada
- Confirmação por escrito ao solicitante
Erros comuns que devs cometem (e que viram processo)
Ao longo da minha carreira, vi esses padrões se repetirem em startups, big techs e tudo no meio:
- Confiar na autodeclaração. “O usuário disse que tem 15 anos” não é consentimento parental. Ponto.
- Esquecer do pixel de ads. Você bloqueou no cadastro, mas o Facebook Pixel continua coletando page views de crianças. Use Conditional Pixel Loading baseado em status de consentimento.
- Logs de erro que vazam dados. Quando o sistema quebra, ele não pode logar e-mail, IP e birthdate de um menor num Sentry público. Filtre tudo.
- Política de privacidade em PDF escondido. FTC já processou empresas por isso. Link visível, linguagem clara, separado dos ToS.
- Não ter DPO ou responsável documentado. Nos EUA, a FTC quer nome, e-mail e telefone de quem responde por privacidade. Sem isso, processo.
- Tratar COPPA como “problema de jurídico”. Não é. É problema de arquitetura. Se o dado de menor entra no sistema, ele tem que ter tratamento especial desde o INSERT no banco.
Comparação: o que gigantes fazem (e onde ainda falham)
| Empresa | Abordagem | Ponto fraco |
|---|---|---|
| TikTok | Age gate + verificação por vídeo | Falha em detectar menores reais; dados pré-coletados não deletados |
| YouTube | Modo restrito + login Google com idade | Depende da honestidade do cadastro Google |
| Roblox | Verificação facial opcional para chat | Adoção baixa; friction mata conversão |
| Contas teen com restrição default | Mudança recente; eficácia ainda em avaliação |
O trade-off é sempre o mesmo: friction vs. compliance. Mas US$ 400 milhões de multa colocam em perspectiva quanto o “atalho” custa.
FAQ — perguntas que devs realmente fazem
1. Meu app não é “para crianças”. Eu preciso me preocupar com COPPA?
Sim, se você sabe que tem menores usando. Mesmo que seu público-alvo sejam adultos, a FTC avalia o conhecimento real que você tem sobre a base. Logs de idade cadastrada já contam como conhecimento.
2. Qual a diferença prática entre COPPA (EUA) e GDPR-K (UE)?
COPPA é específica para menores de 13 e exige consentimento parental. GDPR-K (proposta/recomendação europeia) pode subir esse limite para 16 anos, dependendo do país. No Brasil, o LGPD tem bases legais mais flexíveis, mas o Estatuto da Criança e do Adolescente (ECA) complementa.
3. Como verifico parentalidade sem fricção absurda?
Os métodos aceitos pela FTC incluem: cartão de crédito (pequeno valor), documento digital, videochamada com checagem, conta parental verificada (ex.: Google Family Link). Não existe bala de prata — o importante é escolher um e documentar.
4. Posso usar analytics em apps com crianças?
Pode, mas com vendor agreements específicos (COPPA-compliant) e dados agregados/anônimos. Google Analytics padrão não é compliant para menores sem configuração extra.
5. Quanto custa implementar tudo isso direito?
Depende do tamanho do sistema, mas na minha experiência: entre 15% e 30% a mais no esforço de um fluxo de cadastro típico. É caro? Sim. Mas US$ 400 milhões é mais caro.
O que eu levo desse caso
O TikTok já tinha pago US$ 5,7 milhões em 2019 e mesmo assim continuou falhando. Isso mostra que multa não muda comportamento de plataforma grande — o que muda é repensar a arquitetura. E esse repensar começa em cada dev, em cada PR, em cada fluxo de cadastro que aceita uma data de nascimento sem pensar duas vezes.
Se você está construindo qualquer produto que possa ter menores entre os usuários (e hoje, com apps sociais e educacionais, isso é quase todo produto), trate idade como dado sensível desde o schema do banco. Não como afterthought. Isso não é conformidade — é engenharia de qualidade.
Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.