EmailCheckerEmailChecker

Integração · ESP / Email Marketing

EmailChecker + Mautic

Mautic é a alternativa open-source ao HubSpot/Marketo. A integração real com o EmailChecker é higienização em lote: um script pagina os contatos pela API do Mautic, manda todos os emails de uma vez, espera o lote concluir e grava o resultado num campo customizado usado para segmentar as campanhas.

Como integrar

5 passos pra conectar

  1. 1

    Crie um campo customizado "email_status"

    Em Configuration > Custom Fields > Contact, adicione o campo "email_status" do tipo Text. É nele que o resultado (deliverable, risky, undeliverable, unknown) vai ser gravado.

  2. 2

    Exporte os contatos pela API do Mautic

    GET /api/contacts?limit=1000&start=... paginando a base e juntando os emails num array. Não existe validação dentro do formulário do Mautic — a API do EmailChecker é assíncrona e trabalha por lote.

  3. 3

    Envie o lote: POST /api/v1/batch

    POST https://app.emailchecker.email/api/v1/batch com {"emails": [...], "name": "mautic-higiene"} e o header Authorization: Bearer ec_live_... Guarde o data.id da resposta 201.

  4. 4

    Consulte até o status virar completed

    GET https://app.emailchecker.email/api/v1/batch/{id} a cada 30 segundos. O EmailChecker não chama nenhum webhook seu quando termina: o script é quem pergunta. Só quando status = "completed" o array data.emails vem preenchido.

  5. 5

    Reimporte o resultado e segmente

    PATCH /api/contacts/{id}/edit no Mautic gravando email_status com o result. Depois crie o segmento "email_status = deliverable" e aponte suas campanhas só pra ele.

Exemplo · JAVASCRIPT

// Higienização em lote: Mautic -> EmailChecker -> Mautic
const EC = 'https://app.emailchecker.email/api/v1';
const MAUTIC = 'https://seu-mautic.com';
const ecH = {
  Authorization: `Bearer ${process.env.EC_API_KEY}`,
  'Content-Type': 'application/json',
};
const mauticH = {
  Authorization: `Bearer ${process.env.MAUTIC_TOKEN}`,
  'Content-Type': 'application/json',
};
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

// 1) pagina os contatos do Mautic
const lista = await fetch(`${MAUTIC}/api/contacts?limit=1000`, { headers: mauticH }).then((r) => r.json());
const contatos = Object.values(lista.contacts); // { id, fields: { all: { email } } }

// 2) envia UM lote (1 a 100.000 emails por chamada)
const criado = await fetch(`${EC}/batch`, {
  method: 'POST',
  headers: ecH,
  body: JSON.stringify({
    emails: contatos.map((c) => c.fields.all.email),
    name: 'mautic-higiene',
  }),
}).then((r) => r.json());

// 3) polling: não há webhook de retorno do EmailChecker
let lote;
do {
  await sleep(30_000);
  lote = await fetch(`${EC}/batch/${criado.data.id}`, { headers: ecH }).then((r) => r.json());
} while (lote.data.status === 'pending' || lote.data.status === 'processing');
if (lote.data.status !== 'completed') throw new Error(`lote ${lote.data.status}`);

// 4) devolve o resultado pro Mautic
const porEmail = new Map(lote.data.emails.map((e) => [e.email, e.result]));
for (const c of contatos) {
  const status = porEmail.get(c.fields.all.email);
  if (!status) continue;
  await fetch(`${MAUTIC}/api/contacts/${c.id}/edit`, {
    method: 'PATCH',
    headers: mauticH,
    body: JSON.stringify({ email_status: status }),
  });
}

A API do EmailChecker é REST com Bearer auth (`Authorization: Bearer ec_live_...`) na base `https://app.emailchecker.email` e é assíncrona: você envia o lote em `POST /api/v1/batch` e busca o resultado em `GET /api/v1/batch/{id}` até o `status` virar `completed`. Não existe endpoint de validação unitária nem webhook de retorno — quem descobre que o lote terminou é o polling. Limites: 1 a 100.000 emails por lote, 300 requisições/minuto e 10.000/hora. A API é exclusiva do plano Gold.

Casos de uso

Quando usar essa integração

Suprimir bounces antes de campanhas

Segmento "email_status = deliverable" recebe os disparos; o resto fica de fora. Reduz hard bounce drasticamente e protege o domínio de envio.

Limpar a base existente em massa

Um único lote de até 100.000 endereços cobre bases inteiras — muito mais barato e rápido do que uma chamada por contato (que nem existe na API).

Higienização periódica trimestral

Cron a cada 3 meses reenvia os contatos cuja última verificação passou de 90 dias. Mantém a base fresca sem esperar o bounce acontecer.

Troubleshooting

Problemas comuns

Os erros que mais aparecem ao conectar o Mautic — e como resolver cada um.

Configurei um webhook no Mautic esperando o retorno do EmailChecker

Não existe callback: a plataforma nunca chama uma URL sua. O contact_post_save do Mautic serve só pra empilhar o email numa fila; quem descobre o resultado é o seu script consultando GET /api/v1/batch/{id}. Se você tentou POST /api/v1/validate/single, ele responde 404 — esse endpoint não existe.

O custom field email_status não aceita o valor

O alias no PATCH precisa bater com o alias gerado (geralmente email_status), não com o label "Email Status". Veja o alias real em Custom Fields. Campos do tipo Select só aceitam valores pré-definidos — use Text pra aceitar deliverable, risky, undeliverable e unknown livremente.

A Mautic API responde 403 mesmo com credenciais certas

A API REST vem desabilitada por padrão. Ative em Configuration > API Settings ("API enabled: Yes") e garanta permissão de edit em Contacts pro usuário/OAuth. O access_token OAuth2 expira — renove antes de assumir que a chave está errada. Do lado do EmailChecker, 401 costuma ser plano fora do Gold, que é o único com API.

Mais integrações

Outras ferramentas suportadas

Comece agora

Pronto pra parar de mandar email pra endereço morto?

Comece grátis com 500 créditos. Sem cartão, sem compromisso.