{"name":"Filtrat — Clean Email List","nodes":[{"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 6 * * 1"}]}},"id":"schedule-trigger","name":"Weekly Monday 6 AM","type":"n8n-nodes-base.scheduleTrigger","typeVersion":1.2,"position":[240,300]},{"parameters":{"operation":"read","documentId":{"__rl":true,"mode":"id","value":""},"sheetName":{"__rl":true,"mode":"id","value":""}},"id":"read-sheet","name":"Read Email List","type":"n8n-nodes-base.googleSheets","typeVersion":4.5,"position":[460,300],"credentials":{"googleSheetsOAuth2Api":{"id":"","name":"Google Sheets"}}},{"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":[680,300],"credentials":{"httpHeaderAuth":{"id":"","name":"Filtrat API"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":""},"conditions":[{"leftValue":"={{ $json.total_balance }}","rightValue":"={{ $('Read Email List').all().length * 1 }}","operator":{"type":"number","operation":"gt"}}]}},"id":"enough-credits","name":"Enough Credits?","type":"n8n-nodes-base.if","typeVersion":2,"position":[900,300]},{"parameters":{"errorMessage":"={{ 'Insufficient Filtrat credits. Need ' + ($('Read Email List').all().length * 1) + ' credits but balance is ' + $json.total_balance + '. Top up at app.filtrat.io.' }}"},"id":"error-low-credits","name":"Error: Low Credits","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1120,420]},{"parameters":{"method":"POST","url":"https://api.filtrat.io/v1/bulk/jobs/from-list","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendBody":true,"specifyBody":"json","jsonBody":"={{ JSON.stringify({ emails: $('Read Email List').all().map(i => i.json.email), file_name: 'n8n-weekly-clean' }) }}"},"id":"create-bulk-job","name":"Create Bulk Job","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[1120,200],"credentials":{"httpHeaderAuth":{"id":"","name":"Filtrat API"}}},{"parameters":{"amount":30,"unit":"seconds"},"id":"wait-processing","name":"Wait 30s","type":"n8n-nodes-base.wait","typeVersion":1.1,"position":[1340,200]},{"parameters":{"method":"GET","url":"=https://api.filtrat.io/v1/bulk/jobs/{{ $('Create Bulk Job').item.json.job_id }}","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"id":"check-status","name":"Check Job Status","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[1560,200],"credentials":{"httpHeaderAuth":{"id":"","name":"Filtrat API"}}},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":""},"conditions":[{"leftValue":"={{ $json.status }}","rightValue":"completed","operator":{"type":"string","operation":"notEquals"}}]}},"id":"still-running","name":"Still Running?","type":"n8n-nodes-base.if","typeVersion":2,"position":[1780,200]},{"parameters":{"method":"GET","url":"=https://api.filtrat.io/v1/bulk/jobs/{{ $('Create Bulk Job').item.json.job_id }}/rows?status=verified&limit=1000","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth"},"id":"get-verified","name":"Get Verified Emails","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[2000,300],"credentials":{"httpHeaderAuth":{"id":"","name":"Filtrat API"}}},{"parameters":{"operation":"append","documentId":{"__rl":true,"mode":"id","value":""},"sheetName":{"__rl":true,"mode":"id","value":""},"columns":{"mappingMode":"autoMapInputData"}},"id":"write-results","name":"Write Clean List","type":"n8n-nodes-base.googleSheets","typeVersion":4.5,"position":[2220,300],"credentials":{"googleSheetsOAuth2Api":{"id":"","name":"Google Sheets"}}},{"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. **Connect Google Sheets credential:**\n   - Go to Credentials → Add Credential → Google Sheets OAuth2\n   - Follow the Google OAuth flow\n\n3. **Set your Spreadsheet ID** in the \"Read Email List\" and \"Write Clean List\" nodes\n   - Copy the ID from your spreadsheet URL\n   - `https://docs.google.com/spreadsheets/d/`**THIS_PART**`/edit`\n\n4. **Set the sheet names** — input sheet and output sheet/tab","width":440,"height":400,"color":4},"id":"note-setup","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[220,-160]},{"parameters":{"content":"## Google Sheets format\n\n### Input sheet\nYour sheet must have an `email` column header in row 1:\n\n| email |\n|---|\n| john@company.com |\n| jane@acme.io |\n\nAdditional columns are fine — only `email` is read.\n\n### Output\nVerified emails are written to your output sheet tab.\nOnly emails with status = `verified` are included.\n\n### Schedule\nThis runs **every Monday at 6 AM**. Edit the \"Weekly Monday 6 AM\" node to change the schedule.\n\n### Credit costs\n- 1 credit per email verified\n- Catch-all / risky / unknown → free","width":440,"height":400,"color":6},"id":"note-sheets","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[680,-160]},{"parameters":{"content":"## How it works\n\n1. Reads all emails from your sheet\n2. Checks you have enough credits\n3. Submits them as a bulk verification job\n4. Polls every 30s until the job completes\n5. Fetches verified emails and writes to output sheet\n\nThe bulk API handles rate limiting and parallelization — you don't need to loop yourself.\n\n### For manual testing\nReplace the Schedule Trigger with a Manual Trigger to test on demand before activating the schedule.","width":380,"height":320,"color":6},"id":"note-flow","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[1140,-160]}],"connections":{"Weekly Monday 6 AM":{"main":[[{"node":"Read Email List","type":"main","index":0}]]},"Read Email List":{"main":[[{"node":"Check Balance","type":"main","index":0}]]},"Check Balance":{"main":[[{"node":"Enough Credits?","type":"main","index":0}]]},"Enough Credits?":{"main":[[{"node":"Create Bulk Job","type":"main","index":0}],[{"node":"Error: Low Credits","type":"main","index":0}]]},"Create Bulk Job":{"main":[[{"node":"Wait 30s","type":"main","index":0}]]},"Wait 30s":{"main":[[{"node":"Check Job Status","type":"main","index":0}]]},"Check Job Status":{"main":[[{"node":"Still Running?","type":"main","index":0}]]},"Still Running?":{"main":[[{"node":"Wait 30s","type":"main","index":0}],[{"node":"Get Verified Emails","type":"main","index":0}]]},"Get Verified Emails":{"main":[[{"node":"Write Clean List","type":"main","index":0}]]}},"pinData":{},"settings":{"executionOrder":"v1"},"staticData":null,"tags":[{"name":"filtrat","id":"filtrat"},{"name":"email-verification","id":"email-verification"},{"name":"list-cleaning","id":"list-cleaning"}],"triggerCount":0,"versionId":"bulk-clean-v2"}