Pular para conteúdo

Advanced Matching

Melhore a precisão do rastreamento do Facebook Pixel identificando usuários autenticados de forma segura e conforme com a LGPD usando a API Complyr.


📖 O que é Advanced Matching?

Advanced Matching é um recurso do Facebook Pixel que permite enviar dados identificáveis do usuário (email, telefone, nome) de forma hasheada (SHA-256) para melhorar:

  • 🎯 Precisão de atribuição: Rastreamento cross-device (mobile, desktop, tablet)
  • 📊 Match Rate: Taxa de correspondência entre eventos e usuários do Facebook
  • 🔄 Conversões Offline: Ligar conversões online com dados CRM
  • 📈 Audiências Personalizadas: Criar audiences baseadas em dados de clientes

Benefícios: - Aumenta match rate de ~40% para ~70%+ - Melhora relatórios de ROAS - Habilita Enhanced Conversions - Permite Customer Match


🔒 Privacidade e Segurança

Hashing SHA-256

Todos os dados identificáveis são automaticamente hasheados pelo Complyr antes de enviar ao Facebook:

// O QUE VOCÊ ENVIA
window.complyr.identify('email', 'usuario@example.com');

// O QUE O FACEBOOK RECEBE
{
  em: '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8'
  // Hash SHA-256 de 'usuario@example.com'
}

Impossível reverter: - ❌ Facebook não vê email original - ❌ Ninguém consegue "decodificar" o hash - ✅ Apenas correspondência (match) é possível


🚀 Usando Advanced Matching

1. Após Login do Usuário

A forma mais comum é identificar o usuário logo após o login:

// Em sua página de login bem-sucedido
document.addEventListener('DOMContentLoaded', function() {
  // Usuário fez login
  const userEmail = getUserEmail();  // Função que retorna email do usuário logado

  // Identificar no Complyr
  window.complyr.identify('email', userEmail);
});

Exemplo real (Next.js):

// hooks/useComplyrIdentify.ts
import { useEffect } from 'react';
import { useUser } from '@/contexts/user-context';

export function useComplyrIdentify() {
  const { user } = useUser();

  useEffect(() => {
    if (user?.email && window.complyr) {
      window.complyr.identify('email', user.email);
    }
  }, [user]);
}

// app/dashboard/layout.tsx
export default function DashboardLayout({ children }) {
  useComplyrIdentify();  // Identifica automaticamente após login

  return <div>{children}</div>;
}

2. Na Página de Cadastro

Identifique imediatamente após cadastro completo:

// Formulário de cadastro
async function handleRegister(email, password) {
  // 1. Criar conta
  await api.register({ email, password });

  // 2. Identificar no Complyr
  window.complyr.identify('email', email);

  // 3. Disparar evento de conversão
  fbq('track', 'CompleteRegistration', {
    value: 50.00,  // Valor estimado de um novo usuário
    currency: 'BRL'
  });
}

3. Em Aplicações SPA (Single Page App)

Identifique uma vez após login e mantenha identificação em todas as páginas:

// auth-service.js
class AuthService {
  async login(email, password) {
    const user = await api.login({ email, password });

    // Salvar usuário
    this.currentUser = user;

    // Identificar no Complyr
    if (window.complyr) {
      window.complyr.identify('email', user.email);
    }

    return user;
  }

  async logout() {
    // Limpar identificação (opcional)
    this.currentUser = null;

    // Revogar consentimento se usuário solicitou
    if (userRequestedDataDeletion) {
      window.complyr.revokeConsent('User requested logout and data deletion');
    }
  }
}

📊 Dados Suportados

O Complyr suporta os seguintes tipos de identificação para Advanced Matching:

Email (Recomendado)

window.complyr.identify('email', 'usuario@example.com');

Requisitos: - Formato válido de email - Será normalizado (lowercase, trim) - Hasheado com SHA-256


Telefone

window.complyr.identify('phone', '+5511999999999');

Requisitos: - Formato internacional (+55 para Brasil) - Apenas números (sem espaços, parênteses, traços) - Exemplo: +5511987654321


Nome Completo

window.complyr.identify('name', 'João da Silva');

Requisitos: - Nome completo (primeiro + sobrenome) - Será normalizado (lowercase, trim)


Múltiplos Dados (Melhor Match Rate)

Envie múltiplos identificadores para maior precisão:

// Forma 1: Múltiplas chamadas
window.complyr.identify('email', 'usuario@example.com');
window.complyr.identify('phone', '+5511987654321');
window.complyr.identify('name', 'João da Silva');

// Forma 2: Objeto (futuro)
window.complyr.identifyMultiple({
  email: 'usuario@example.com',
  phone: '+5511987654321',
  name: 'João da Silva'
});

Match Rate esperado: - Apenas email: ~60-70% - Email + telefone: ~75-85% - Email + telefone + nome: ~85-95%


🔄 Fluxo Completo

sequenceDiagram
    participant U as Usuário
    participant W as Website
    participant C as Complyr
    participant P as Facebook Pixel
    participant F as Facebook

    U->>W: Faz login
    W->>W: Valida credenciais
    W->>C: complyr.identify('email', email)
    C->>C: Hasheia email (SHA-256)
    C->>P: Atualiza Advanced Matching
    P->>F: Envia hash para Facebook
    F->>F: Faz match com usuário FB
    Note over F: Match rate +30%

    U->>W: Navega (próximas páginas)
    W->>P: fbq('track', 'ViewContent')
    P->>F: Envia evento + hash
    F->>F: Associa ao usuário correto
    Note over F: Cross-device tracking

🧪 Testando Advanced Matching

1. Verificar Identificação

No console do navegador:

// Após chamar window.complyr.identify()
// Verifique se função existe
typeof window.complyr.identify  // → "function"

// Verifique se eventos subsequentes incluem dados hasheados
// (visível no Facebook Pixel Helper)

2. Facebook Pixel Helper

  1. Instale Facebook Pixel Helper
  2. Faça login no site
  3. Chame window.complyr.identify()
  4. Dispare um evento (ex: fbq('track', 'PageView'))
  5. Pixel Helper mostra "Advanced Matching" ✅

Exemplo de output:

PageView
✓ Advanced Matching Enabled
  - em: 5e884898da28047151d0e56f...  (email hasheado)

3. Events Manager - Data Quality

  1. Acesse Facebook Events Manager
  2. Selecione seu Pixel
  3. Vá em "Qualidade de Dados" (Data Quality)
  4. Verifique "Match Quality Score"

Scores: - < 3.0: Ruim (sem Advanced Matching) - 3.0 - 5.0: Médio - 5.0 - 7.0: Bom - > 7.0: Excelente ✅

Meta: Score > 6.0

Com Advanced Matching via Complyr, você deve atingir score entre 6.0 e 8.0.


⚙️ Configuração Avançada

Identificação Condicional

Identifique apenas se usuário aceitou consentimento:

async function identifyUser(email) {
  // Verificar se consentimento de marketing foi concedido
  const consent = JSON.parse(localStorage.getItem('complyr_consent'));

  if (consent && consent.purposes.marketing === true) {
    window.complyr.identify('email', email);
  } else {
    console.log('Advanced Matching bloqueado - sem consentimento de marketing');
  }
}

Automático

O Complyr já faz essa verificação internamente, mas você pode adicionar camada extra se desejar.


Normalização de Dados

Sempre normalize dados antes de enviar:

function normalizeEmail(email) {
  return email.toLowerCase().trim();
}

function normalizePhone(phone) {
  // Remove tudo exceto dígitos e +
  return phone.replace(/[^\d+]/g, '');
}

// Uso
const email = normalizeEmail(userInput.email);
const phone = normalizePhone(userInput.phone);

window.complyr.identify('email', email);
window.complyr.identify('phone', phone);

🎯 Casos de Uso

E-commerce: Rastreamento Completo

// 1. Usuário visita produto (anônimo)
fbq('track', 'ViewContent', {
  content_ids: ['produto-123'],
  value: 99.90,
  currency: 'BRL'
});
// Match rate: ~40%

// 2. Usuário faz login
window.complyr.identify('email', 'usuario@example.com');

// 3. Adiciona ao carrinho (identificado)
fbq('track', 'AddToCart', {
  content_ids: ['produto-123'],
  value: 99.90,
  currency: 'BRL'
});
// Match rate: ~70%+

// 4. Finaliza compra (cross-device)
// Usuário pode concluir em outro dispositivo
fbq('track', 'Purchase', {
  content_ids: ['produto-123'],
  value: 99.90,
  currency: 'BRL'
});
// Facebook consegue atribuir corretamente

SaaS: Funil de Conversão

// 1. Página de preços (anônimo)
fbq('track', 'ViewContent', {
  content_name: 'Pricing Page'
});

// 2. Cadastro + identificação
async function handleSignup(email, password) {
  await api.signup({ email, password });

  // Identificar imediatamente
  window.complyr.identify('email', email);

  // Evento de conversão
  fbq('track', 'CompleteRegistration', {
    value: 50.00,
    currency: 'BRL'
  });
}

// 3. Trial (identificado)
fbq('trackCustom', 'StartTrial', {
  plan: 'professional'
});

// 4. Upgrade (atribuição precisa)
fbq('track', 'Subscribe', {
  value: 199.90,
  currency: 'BRL'
});
// Facebook sabe toda a jornada do usuário

🔒 Conformidade LGPD

Consentimento Obrigatório

Advanced Matching requer consentimento de marketing:

// Complyr verifica automaticamente
window.complyr.identify('email', 'usuario@example.com');

// Se usuário NÃO aceitou marketing:
// → Email NÃO é hasheado
// → NÃO é enviado ao Facebook
// → Advanced Matching bloqueado

// Se usuário ACEITOU marketing:
// → Email hasheado com SHA-256
// → Enviado ao Facebook
// → Advanced Matching ativo

Direito de Exclusão

Se usuário revogar consentimento:

window.complyr.revokeConsent('User requested data deletion');

// Resultado:
// 1. Identificação removida
// 2. Advanced Matching desativado
// 3. Eventos futuros sem identificação
// 4. Facebook não recebe mais dados hasheados

  • Art. 7º, I: Consentimento explícito para compartilhamento
  • Art. 9º: Dados hasheados (pseudonimização)
  • Art. 18, VI: Direito de exclusão (revokeConsent)
  • Art. 46: Histórico de identificações no backend

📊 Comparação: Com vs Sem Advanced Matching

Métrica Sem Advanced Matching Com Advanced Matching Melhoria
Match Rate ~35-45% ~65-75% +30-40%
ROAS Accuracy Baixa Alta +40-60%
Cross-Device Não Sim N/A
Audiências Precisas Não Sim N/A
Customer Match Não Sim N/A
Enhanced Conversions Não Sim N/A

❓ Perguntas Frequentes

Preciso implementar manualmente no código do Pixel?

Não. O Complyr gerencia tudo automaticamente. Basta chamar:

window.complyr.identify('email', 'usuario@example.com');


O email do usuário fica exposto?

Não. O email é hasheado com SHA-256 antes de enviar. O Facebook recebe apenas o hash, que não pode ser revertido.


Funciona sem consentimento?

Não. Advanced Matching respeita consentimento de marketing. Se negado, nenhum dado é enviado.


Posso identificar usuários em navegação anônima?

Tecnicamente sim, mas não recomendamos. Se o usuário está em modo anônimo, provavelmente não deseja ser rastreado. Respeite a privacidade.


🔗 Próximos Passos


📞 Suporte

Dúvidas sobre Advanced Matching?