Automate job searching & resume customization with AI, LinkedIn & Google Sheets
Pull contacts, verify each address with BillionVerify, and continue to LinkedIn — only deliverable addresses get through.
Why verify before the send
Sending to invalid, risky, catch-all, or disposable addresses spikes your bounce rate and erodes sender reputation. A verification gate before the LinkedIn step removes that risk automatically — only deliverable addresses continue, the rest are flagged.
The workflow
BillionVerify — verification sits right before the send.
Node by node
- 1Mistral Cloud Chat ModelSource· n8n
Provides or transforms the contact data flowing through the workflow.
- 2Structured Output ParserSource· n8n
Provides or transforms the contact data flowing through the workflow.
- 3Mistral Cloud Chat Model4Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 4Schedule Trigger1Trigger· n8n
Starts the workflow — on a schedule, a webhook, or manually while you test.
- 5Download Resume1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 6Get row(s) in Job Search1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 7Extract from Resume1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 8Compare Datasets1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 9Resume Breakdown1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 10Loop Over ItemsSource· n8n
Provides or transforms the contact data flowing through the workflow.
- 11LinkedIn Search URL7Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 12LinkedIn Search URLSource· n8n
Provides or transforms the contact data flowing through the workflow.
- 13LinkedIn Search URL5Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 14LinkedIn Search URL6Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 15Get row(s) in sheet1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 16Job Matching AI Agent1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 17Fetch jobs from LinkedIn5Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 18Fetch jobs from LinkedInSource· n8n
Provides or transforms the contact data flowing through the workflow.
- 19Fetch jobs from LinkedIn3Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 20Fetch jobs from LinkedinSource· n8n
Provides or transforms the contact data flowing through the workflow.
- 21Sort1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 22Edit Fields3Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 23MergeSource· n8n
Provides or transforms the contact data flowing through the workflow.
- 24Limit1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 25Resume Analysis AI Agent1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 26HTML3Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 27Aggregate1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 28Append or update row in Job Search1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 29Split OutSource· n8n
Provides or transforms the contact data flowing through the workflow.
- 30Verify Email (BillionVerify)Verify· billionverify
The BillionVerify node verifies the address — status (valid / invalid / risky / catch-all / role / disposable), is_deliverable, and a confidence score — before anything is sent.
- 31Loop Over Items3Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 32IF deliverableLogic· n8n
Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.
- 33Wait1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 34Send a messageSend· n8n
Sends only to verified, deliverable addresses. Swap in your own provider node if you send elsewhere.
- 35HTTP Request1Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 36HTML2Source· n8n
Provides or transforms the contact data flowing through the workflow.
- 37Edit Fields2Source· n8n
Provides or transforms the contact data flowing through the workflow.
Workflow JSON
Copy or download this workflow, then import it in n8n (Workflows → Import from File / Paste). Install the BillionVerify community node first, then add your API key credential.
{
"name": "Automate job searching & resume customization with AI, LinkedIn & Google Sheets + BillionVerify",
"nodes": [
{
"id": "e08473bb-0b75-4ceb-81c0-92be71165fb4",
"name": "Mistral Cloud Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud",
"position": [
-1968,
2048
],
"parameters": {},
"typeVersion": 1
},
{
"id": "6716f4ea-2529-4665-bdfa-8943a8cd5ffc",
"name": "HTML2",
"type": "n8n-nodes-base.html",
"position": [
-1056,
2368
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "01e0b4e5-4b4d-4102-8a67-a1c0ab90717a",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
-880,
1920
],
"parameters": {},
"typeVersion": 1
},
{
"id": "7214a29b-f4d2-456a-a77e-15938361a61e",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-400,
2080
],
"parameters": {},
"executeOnce": true,
"typeVersion": 3
},
{
"id": "244d669c-b275-47ce-ade8-bf33dd5761f5",
"name": "Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
528,
2000
],
"webhookId": "2a252ec0-2b36-4a2a-a502-9adf5e5c9752",
"parameters": {},
"typeVersion": 2.1
},
{
"id": "e1a36beb-28ad-40c6-b534-28c9e84a5b9c",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-1824,
2048
],
"parameters": {},
"typeVersion": 1.3
},
{
"id": "933481cf-5018-489b-8679-43faf6c21791",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
-1248,
1888
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "92eda0a2-50f8-43e8-946b-52014ad79eeb",
"name": "Mistral Cloud Chat Model4",
"type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud",
"position": [
-192,
2624
],
"parameters": {},
"typeVersion": 1
},
{
"id": "65b3a2cd-d78b-4f44-9bd1-16be870bf431",
"name": "Resume Breakdown1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1968,
1840
],
"parameters": {},
"typeVersion": 2.2
},
{
"id": "7a0078d7-8566-465c-ae95-6287ec352ca3",
"name": "Job Matching AI Agent1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-192,
2208
],
"parameters": {},
"typeVersion": 2.2
},
{
"id": "676d5633-9739-4c84-8607-836941b42162",
"name": "Resume Analysis AI Agent1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-192,
2416
],
"parameters": {},
"typeVersion": 2.2
},
{
"id": "5f720ba5-cccd-4428-a948-d74dbd02e9ba",
"name": "Get row(s) in Job Search1",
"type": "n8n-nodes-base.googleSheets",
"position": [
-1024,
1584
],
"parameters": {},
"executeOnce": true,
"typeVersion": 4.7
},
{
"id": "6d15572d-5eb3-4959-b8ae-df09c4746d27",
"name": "Append or update row in Job Search1",
"type": "n8n-nodes-base.googleSheets",
"position": [
112,
2416
],
"parameters": {},
"typeVersion": 4.7
},
{
"id": "fe0bc527-e772-4c99-9566-aef4cadefc55",
"name": "Extract from Resume1",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-2112,
1840
],
"parameters": {},
"typeVersion": 1
},
{
"id": "571dd21c-635a-4198-9013-37670859bcf0",
"name": "Download Resume1",
"type": "n8n-nodes-base.googleDrive",
"position": [
-1872,
1584
],
"parameters": {},
"typeVersion": 3
},
{
"id": "90041e96-9f01-497c-bea3-1c8cb1d4cf1d",
"name": "Schedule Trigger1",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-2048,
1584
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "65c5c979-8b77-47c5-856b-68a6d8e24203",
"name": "Compare Datasets1",
"type": "n8n-nodes-base.compareDatasets",
"position": [
-624,
2000
],
"parameters": {},
"typeVersion": 2.3
},
{
"id": "a80f67f7-8dde-45f7-ba11-74db416877ea",
"name": "LinkedIn Search URL",
"type": "n8n-nodes-base.code",
"position": [
-1616,
1696
],
"parameters": {},
"typeVersion": 2
},
{
"id": "361256c2-5e01-4195-bc02-c8d7071a9356",
"name": "LinkedIn Search URL5",
"type": "n8n-nodes-base.code",
"position": [
-1616,
1840
],
"parameters": {},
"typeVersion": 2
},
{
"id": "454faa82-eee8-4faa-b9e9-c6832452fbc6",
"name": "LinkedIn Search URL6",
"type": "n8n-nodes-base.code",
"position": [
-1616,
1984
],
"parameters": {},
"typeVersion": 2
},
{
"id": "b109d1ed-191b-4d6d-a1a9-40add6168f5b",
"name": "LinkedIn Search URL7",
"type": "n8n-nodes-base.code",
"position": [
-1616,
2128
],
"parameters": {},
"typeVersion": 2
},
{
"id": "e11488d7-d8c2-4924-a092-b67db957ecee",
"name": "Fetch jobs from LinkedIn",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1440,
1696
],
"parameters": {},
"retryOnFail": true,
"typeVersion": 4.2,
"waitBetweenTries": 3000
},
{
"id": "f4e30a7b-74ed-426d-a73c-9edef904edee",
"name": "Fetch jobs from LinkedIn3",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1440,
1840
],
"parameters": {},
"retryOnFail": true,
"typeVersion": 4.2,
"waitBetweenTries": 3000
},
{
"id": "a0af0c7d-d6e5-47bc-a92b-dc8ae23736fc",
"name": "Fetch jobs from Linkedin",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1440,
1984
],
"parameters": {},
"retryOnFail": true,
"typeVersion": 4.2,
"waitBetweenTries": 3000
},
{
"id": "1b86a6e1-e74b-45e5-a044-7061a4217c53",
"name": "Fetch jobs from LinkedIn5",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1440,
2128
],
"parameters": {},
"retryOnFail": true,
"typeVersion": 4.2,
"waitBetweenTries": 3000
},
{
"id": "1e4498be-6780-4dd8-8229-1916a31b6779",
"name": "Wait1",
"type": "n8n-nodes-base.wait",
"position": [
-1056,
2192
],
"webhookId": "1f33d10b-6071-480b-865b-835b93a7841d",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "cb0aa113-f1ec-42ad-b0da-afc039c7ba27",
"name": "HTTP Request1",
"type": "n8n-nodes-base.httpRequest",
"position": [
-880,
2192
],
"parameters": {},
"retryOnFail": true,
"typeVersion": 4.2,
"waitBetweenTries": 5
},
{
"id": "c61f2149-3375-44eb-8d2c-4abfcec7ecea",
"name": "HTML3",
"type": "n8n-nodes-base.html",
"position": [
-1056,
1920
],
"parameters": {},
"retryOnFail": true,
"typeVersion": 1.2
},
{
"id": "ba3ae6dd-5525-46e6-8afd-64f370a6707c",
"name": "Loop Over Items3",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-1232,
2144
],
"parameters": {},
"typeVersion": 3
},
{
"id": "c60ca1ba-ce73-4769-a71b-46729ed0ec68",
"name": "Edit Fields2",
"type": "n8n-nodes-base.set",
"position": [
-880,
2368
],
"parameters": {},
"typeVersion": 3.4
},
{
"id": "627c9f8a-0f9c-4583-b15f-6fbd63fa99e1",
"name": "Edit Fields3",
"type": "n8n-nodes-base.set",
"position": [
96,
2208
],
"parameters": {},
"typeVersion": 3.4
},
{
"id": "9b639e1e-8eef-43fb-a457-dbd5cdbef864",
"name": "Get row(s) in sheet1",
"type": "n8n-nodes-base.googleSheets",
"position": [
-192,
2000
],
"parameters": {},
"typeVersion": 4.7
},
{
"id": "1f464b53-ccf2-45ad-8990-6c801912cebc",
"name": "Sort1",
"type": "n8n-nodes-base.sort",
"position": [
-16,
2000
],
"parameters": {},
"typeVersion": 1
},
{
"id": "1e005421-67ec-4144-a705-1149443a73af",
"name": "Limit1",
"type": "n8n-nodes-base.limit",
"position": [
160,
2000
],
"parameters": {},
"typeVersion": 1
},
{
"id": "02e430ca-d7d5-4ae2-ae72-99c51a613962",
"name": "Aggregate1",
"type": "n8n-nodes-base.aggregate",
"position": [
336,
2000
],
"parameters": {},
"typeVersion": 1
},
{
"id": "201a41c3-5476-4b63-875e-34a245561231",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1824,
1424
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "c6c9dce9-3c79-4945-812e-4e5bcfad1437",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
1424
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "84e3a6d4-21a6-4781-8961-53c162eb9084",
"name": "Sticky Note13",
"type": "n8n-nodes-base.stickyNote",
"position": [
288,
2432
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "e330aea3-2d21-4647-a691-807e24aff418",
"name": "Sticky Note14",
"type": "n8n-nodes-base.stickyNote",
"position": [
512,
1776
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "2417ee79-3ee9-4d9c-ac44-f10911b26148",
"name": "Sticky Note15",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
1904
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "9f744607-6ba2-49a8-9ee4-14d14cffb8ac",
"name": "Sticky Note16",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
1984
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "68df2a48-8d51-45f8-8d92-baea1f928d88",
"name": "Sticky Note17",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1648,
1632
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "c9f349a1-cfa2-4884-a7da-4d3cd7bfc92a",
"name": "Sticky Note18",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1648,
2320
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "f749941b-3679-4fe3-9975-0f51a2138f31",
"name": "Sticky Note19",
"type": "n8n-nodes-base.stickyNote",
"position": [
-656,
1584
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "0d8031cf-bda3-4e70-a717-9bc56634e91c",
"name": "Sticky Note20",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
2176
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "178064f1-34fb-4668-a92a-2b2dadbd42ae",
"name": "Sticky Note21",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
2640
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"parameters": {
"operation": "verify",
"email": "={{ $json.email || $json.Email }}",
"additionalOptions": {}
},
"type": "n8n-nodes-billionverify.billionVerify",
"typeVersion": 1,
"position": [
168,
2000
],
"name": "Verify Email (BillionVerify)",
"credentials": {
"billionVerifyApi": {
"id": "",
"name": "BillionVerify account"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "is-deliverable",
"leftValue": "={{ $json.is_deliverable }}",
"rightValue": "",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
}
}
]
}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
348,
2000
],
"name": "IF deliverable"
}
],
"connections": {
"HTML2": {
"main": [
[
{
"node": "Edit Fields2",
"type": "main",
"index": 0
}
]
]
},
"HTML3": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "HTML3",
"type": "main",
"index": 0
}
]
]
},
"Sort1": {
"main": [
[
{
"node": "Limit1",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "HTTP Request1",
"type": "main",
"index": 0
}
]
]
},
"Limit1": {
"main": [
[
{
"node": "Aggregate1",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Loop Over Items3",
"type": "main",
"index": 0
}
]
]
},
"Aggregate1": {
"main": [
[
{
"node": "Verify Email (BillionVerify)",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields2": {
"main": [
[
{
"node": "Loop Over Items3",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields3": {
"main": [
[
{
"node": "Resume Analysis AI Agent1",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request1": {
"main": [
[
{
"node": "HTML2",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Get row(s) in sheet1",
"type": "main",
"index": 0
}
],
[
{
"node": "Job Matching AI Agent1",
"type": "main",
"index": 0
}
]
]
},
"Download Resume1": {
"main": [
[
{
"node": "Extract from Resume1",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items3": {
"main": [
[
{
"node": "Compare Datasets1",
"type": "main",
"index": 1
}
],
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"Compare Datasets1": {
"main": [
[],
[],
[],
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Resume Breakdown1": {
"main": [
[
{
"node": "LinkedIn Search URL7",
"type": "main",
"index": 0
},
{
"node": "LinkedIn Search URL",
"type": "main",
"index": 0
},
{
"node": "LinkedIn Search URL5",
"type": "main",
"index": 0
},
{
"node": "LinkedIn Search URL6",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger1": {
"main": [
[
{
"node": "Download Resume1",
"type": "main",
"index": 0
},
{
"node": "Get row(s) in Job Search1",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Search URL": {
"main": [
[
{
"node": "Fetch jobs from LinkedIn",
"type": "main",
"index": 0
}
]
]
},
"Extract from Resume1": {
"main": [
[
{
"node": "Resume Breakdown1",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet1": {
"main": [
[
{
"node": "Sort1",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Search URL5": {
"main": [
[
{
"node": "Fetch jobs from LinkedIn3",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Search URL6": {
"main": [
[
{
"node": "Fetch jobs from Linkedin",
"type": "main",
"index": 0
}
]
]
},
"LinkedIn Search URL7": {
"main": [
[
{
"node": "Fetch jobs from LinkedIn5",
"type": "main",
"index": 0
}
]
]
},
"Job Matching AI Agent1": {
"main": [
[
{
"node": "Edit Fields3",
"type": "main",
"index": 0
}
]
]
},
"Fetch jobs from LinkedIn": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Fetch jobs from Linkedin": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 2
}
]
]
},
"Mistral Cloud Chat Model": {
"ai_languageModel": [
[
{
"node": "Resume Breakdown1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Resume Breakdown1",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Fetch jobs from LinkedIn3": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Fetch jobs from LinkedIn5": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 3
}
]
]
},
"Get row(s) in Job Search1": {
"main": [
[
{
"node": "Compare Datasets1",
"type": "main",
"index": 0
}
]
]
},
"Mistral Cloud Chat Model4": {
"ai_languageModel": [
[
{
"node": "Resume Analysis AI Agent1",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Job Matching AI Agent1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Resume Analysis AI Agent1": {
"main": [
[
{
"node": "Append or update row in Job Search1",
"type": "main",
"index": 0
}
]
]
},
"Append or update row in Job Search1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Verify Email (BillionVerify)": {
"main": [
[
{
"node": "IF deliverable",
"type": "main",
"index": 0
}
]
]
},
"IF deliverable": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
],
[]
]
}
},
"settings": {}
}When to use this
- Cleaning a list before a LinkedIn send or sync.
- Protecting LinkedIn deliverability and sender reputation.
- Keeping bounce rates low so your sending is never throttled.
FAQ
Why verify before sending in LinkedIn?
Verifying first keeps your bounce rate low, which protects your sender reputation and your results.
How do I import this workflow?
Download the JSON, then in n8n go to Workflows → Import from File (or paste it). Install the BillionVerify community node and add your API key credential.
What happens to risky or catch-all addresses?
They are routed to the false branch and excluded from the send. You decide whether to retry, review, or drop them.
Add verification to your workflow
Create a free account, grab your API key, and stop bounces before they happen.
Get started free