{"name":"Filtrat — Real-Time Lead Gate","nodes":[{"parameters":{"httpMethod":"POST","path":"verify-lead","responseMode":"responseNode"},"id":"webhook-trigger","name":"Webhook Trigger","type":"n8n-nodes-base.webhook","typeVersion":2,"position":[240,300]},{"parameters":{"method":"GET","url":"https://api.filtrat.io/v1/billing/status","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"id":"check-balance","name":"Check Balance","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[460,300],"credentials":{"httpHeaderAuth":{"id":"","name":"Filtrat API"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":""},"conditions":[{"leftValue":"={{ $json.total_balance }}","rightValue":5,"operator":{"type":"number","operation":"gt"}}]}},"id":"enough-credits","name":"Enough Credits?","type":"n8n-nodes-base.if","typeVersion":2,"position":[680,300]},{"parameters":{"method":"POST","url":"https://api.filtrat.io/v1/verify/email","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendBody":true,"specifyBody":"json","jsonBody":"={{ JSON.stringify({ email: $('Webhook Trigger').item.json.email, resolve_catchall: true }) }}"},"id":"verify-email","name":"Verify Email","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[900,200],"credentials":{"httpHeaderAuth":{"id":"","name":"Filtrat API"}},"retryOnFail":true,"maxTries":3,"waitBetweenTries":2000},{"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ accepted: false, error: 'insufficient_credits', message: 'Email verification unavailable — please try again later.' }) }}"},"id":"respond-no-credits","name":"Respond: No Credits","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.1,"position":[900,420]},{"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":""},"conditions":[{"leftValue":"={{ $json.status }}","rightValue":"verified","operator":{"type":"string","operation":"equals"}}]},"renameOutput":true,"outputKey":"Verified"},{"conditions":{"options":{"caseSensitive":true,"leftValue":""},"conditions":[{"leftValue":"={{ $json.status }}","rightValue":"invalid","operator":{"type":"string","operation":"equals"}}]},"renameOutput":true,"outputKey":"Invalid"},{"conditions":{"options":{"caseSensitive":true,"leftValue":""},"conditions":[{"leftValue":"={{ $json.status }}","rightValue":"catchall","operator":{"type":"string","operation":"equals"}}]},"renameOutput":true,"outputKey":"Catch-All"}]}},"id":"route-status","name":"Route by Status","type":"n8n-nodes-base.switch","typeVersion":3,"position":[1120,200]},{"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ accepted: true, status: $json.status, email: $json.email, confidence: $json.confidence }) }}"},"id":"respond-verified","name":"Accept Lead","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.1,"position":[1340,100]},{"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ accepted: false, status: $json.status, email: $json.email, message: 'This email address does not exist.' }) }}"},"id":"respond-rejected","name":"Reject Lead","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.1,"position":[1340,300]},{"parameters":{"content":"## Setup — do this first\n\n1. **Create a Filtrat API credential:**\n   - Go to Credentials → Add Credential → Header Auth\n   - Name: `Filtrat API`\n   - Header Name: `Authorization`\n   - Header Value: `Bearer ak_your_key_here`\n   - Get your key in filtrat on API → API keys: [filtrat.io/app/api?tab=keys](https://filtrat.io/app/api?tab=keys)\n\n2. **Activate the workflow** — the webhook becomes live at:\n   `https://your-n8n.com/webhook/verify-lead`\n\n3. **Send a test POST request:**\n   ```\n   curl -X POST https://your-n8n.com/webhook-test/verify-lead \\\n     -H 'Content-Type: application/json' \\\n     -d '{\"email\": \"john@company.com\"}'\n   ```\n\n### Credit costs\n- 1 credit per verified/invalid result\n- Catch-all resolution included (`resolve_catchall: true`)\n- Catch-all resolved → 5 credits (instead of 1)","width":440,"height":440,"color":4},"id":"note-setup","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[220,-180]},{"parameters":{"content":"## How it works\n\nThis workflow acts as a real-time API gateway for lead forms.\n\nYour form/CRM sends a POST with `{\"email\": \"...\"}` → the workflow verifies it → responds with `accepted: true/false`.\n\n### Routing logic\n- **verified** → Accept Lead (the email exists)\n- **invalid** → Reject Lead (the email doesn't exist)\n- **catch-all** → Accept Lead (domain accepts all, can't be sure — safer to accept)\n\n### Integration tips\n- Wire this into your form's backend or Zapier/Make as a validation step\n- Response time: ~2-5 seconds\n- The webhook path is `/webhook/verify-lead` — change it in the Webhook Trigger node if needed","width":400,"height":380,"color":6},"id":"note-flow","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[900,-180]}],"connections":{"Webhook Trigger":{"main":[[{"node":"Check Balance","type":"main","index":0}]]},"Check Balance":{"main":[[{"node":"Enough Credits?","type":"main","index":0}]]},"Enough Credits?":{"main":[[{"node":"Verify Email","type":"main","index":0}],[{"node":"Respond: No Credits","type":"main","index":0}]]},"Verify Email":{"main":[[{"node":"Route by Status","type":"main","index":0}]]},"Route by Status":{"main":[[{"node":"Accept Lead","type":"main","index":0}],[{"node":"Reject Lead","type":"main","index":0}],[{"node":"Accept Lead","type":"main","index":0}]]}},"pinData":{},"settings":{"executionOrder":"v1"},"staticData":null,"tags":[{"name":"filtrat","id":"filtrat"},{"name":"email-verification","id":"email-verification"},{"name":"lead-gen","id":"lead-gen"}],"triggerCount":0,"versionId":"lead-gate-v2"}