Integração · Automação
Zapier conecta 7000+ apps, mas não faz loop de polling — e a API do EmailChecker é assíncrona. O padrão honesto aqui são dois Zaps: um acumula os emails e envia o lote num horário agendado, outro roda depois e consulta o lote. Não dá para validar e ler o resultado dentro do mesmo Zap.
Como integrar
Zap 1: trigger do formulário (Typeform, Jotform, etc.) grava uma linha no Google Sheets ou Airtable. Nada é validado aqui — a validação acontece por lote, não por contato.
Zap 2: Schedule by Zapier (uma vez por dia) → Google Sheets "Get Many Spreadsheet Rows" → Formatter (Utilities > Text to Line-item) para montar o array de emails → Webhooks by Zapier > Custom Request POST em https://app.emailchecker.email/api/v1/batch.
A resposta 201 traz data.id. Salve esse valor com Storage by Zapier (Set Value) ou numa aba de controle da planilha — é ele que o segundo Zap vai consultar.
Zap 3: Schedule by Zapier de hora em hora → Storage by Zapier (Get Value) pega o id → Webhooks by Zapier GET em /api/v1/batch/{id} → Filter só continua se data.status for exatamente "completed". Sem loop nativo, o lote que ainda estiver processando simplesmente é reavaliado na próxima execução agendada.
Looping by Zapier percorre data.emails e Paths bifurcam por result: deliverable vai pro CRM/ESP, risky pra uma aba de revisão, undeliverable e unknown pra lista de supressão.
Exemplo · JSON
{
"zap_2_enviar_lote": {
"action": "Webhooks by Zapier > Custom Request",
"method": "POST",
"url": "https://app.emailchecker.email/api/v1/batch",
"headers": {
"Authorization": "Bearer ec_live_SUA_CHAVE",
"Content-Type": "application/json"
},
"data": {
"emails": ["lead1@exemplo.com", "lead2@exemplo.com"],
"name": "zapier-diario"
},
"resposta_201": { "data": { "id": "<uuid>", "size": 2 } },
"proximo_passo": "Storage by Zapier > Set Value | key: ultimo_lote_id | value: data.id"
},
"zap_3_consultar_lote": {
"action": "Webhooks by Zapier > Custom Request",
"method": "GET",
"url": "https://app.emailchecker.email/api/v1/batch/{{storage.ultimo_lote_id}}",
"headers": { "Authorization": "Bearer ec_live_SUA_CHAVE" },
"filter": "data status (Text) Exactly matches completed",
"loop": "Looping by Zapier sobre data emails, Paths por result"
}
}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
O lead entra numa planilha de espera e só é promovido a contato ativo no CRM depois que o lote da madrugada confirmar que o email é entregável.
Inscrições do Zoom/WebinarJam acumulam durante o dia; o lote roda à noite e só os entregáveis entram na sequência de lembretes.
Quando o Zap de consulta encontra o lote concluído, manda no #vendas quantos vieram undeliverable — sinal de formulário sendo abusado ou base comprada.
Troubleshooting
Os erros que mais aparecem ao conectar o Zapier — e como resolver cada um.
Não é possível, e forçar isso é a causa mais comum de Zap quebrado aqui. O lote leva de segundos a minutos e o Zapier não espera nem repete um passo até mudar de estado. Separe em dois Zaps agendados: um envia o lote e guarda o id, outro consulta. Se o volume for baixo e você precisar do resultado no mesmo fluxo, use n8n ou Make, que têm nó de espera e loop.
O campo "Data" precisa receber JSON com a chave emails como array — {"emails": ["a@b.com"], "name": "lote"} — e o header Content-Type: application/json. Se você usar o passo POST simples (não o Custom Request), o Zapier envia os campos como form e a API rejeita. Um único email também vai dentro do array.
Use "(Text) Exactly matches" comparando data status com completed. "Contains" deixa passar qualquer coisa e o passo seguinte recebe data emails vazio, porque a lista de resultados só existe quando o lote conclui. Trate também failed e cancelled num Path separado para não reconsultar um id morto pra sempre.
Comece grátis com 500 créditos. Sem cartão, sem compromisso.