
Sync Leads from Google Sheets to Instantly Email Campaigns with Data Tables
Description
Categories
⚙️ Automation
Nodes Used
n8n-nodes-base.dataTablen8n-nodes-base.dataTablen8n-nodes-base.dataTablen8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNote
PriceGratuit
Views0
Last Updated11/28/2025
workflow.json
{
"meta": {
"instanceId": "2000c64071c20843606b95c63795bb0797c41036047055a6586498e855b96efc"
},
"nodes": [
{
"id": "d9b2217b-b45a-4db6-8cc7-b68e78e51005",
"name": "When clicking 'Execute workflow'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
688,
416
],
"parameters": {},
"typeVersion": 1
},
{
"id": "529ec24f-9d4a-4ed6-aefa-dcd35760498b",
"name": "Get row(s) in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
912,
416
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1610785882,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1idx3Q3Lr_qbF8trCUKVY3uw52SF513_oZ6oFeuc73Zk/edit#gid=1610785882",
"cachedResultName": "apollo-contacts-export 9"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1idx3Q3Lr_qbF8trCUKVY3uw52SF513_oZ6oFeuc73Zk",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1idx3Q3Lr_qbF8trCUKVY3uw52SF513_oZ6oFeuc73Zk/edit?usp=drivesdk",
"cachedResultName": "instantly leads"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "b0RUCwZZREhRN85o",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "263f1adf-0b26-41fc-92e1-f32c1e100d7f",
"name": "Create a lead",
"type": "n8n-nodes-instantly.instantly",
"position": [
1360,
640
],
"parameters": {
"email": "={{ $json.Email }}",
"resource": "lead",
"last_name": "=",
"first_name": "={{ $json.Firstname }}",
"company_name": "={{ $json.company }}",
"additionalFields": {
"phone": "",
"website": "={{ $json.Website }}",
"campaign": {
"__rl": true,
"mode": "list",
"value": "100fa5a2-3ed0-4f12-967c-b2cc4a07c3e8",
"cachedResultName": "Launchday 1"
},
"personalization": ""
}
},
"credentials": {
"instantlyApi": {
"id": "6gElDlyPqlkpMJst",
"name": "Instantly account"
}
},
"typeVersion": 1
},
{
"id": "b58654f2-d495-48fe-979b-d78a6ef62001",
"name": "Get row(s)",
"type": "n8n-nodes-base.dataTable",
"position": [
912,
712
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "campaign",
"keyValue": "start"
}
]
},
"operation": "get",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "QEMYdGHKp3cvy0JN",
"cachedResultUrl": "/projects/NkfS7q6flnrTbJ9e/datatables/QEMYdGHKp3cvy0JN",
"cachedResultName": "Leads"
}
},
"typeVersion": 1
},
{
"id": "54706dc1-33aa-4133-b5ad-a8628bf398a8",
"name": "Update row(s)",
"type": "n8n-nodes-base.dataTable",
"position": [
1584,
712
],
"parameters": {
"columns": {
"value": {
"campaign": "added to instantly"
},
"schema": [
{
"id": "Firstname",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Firstname",
"defaultMatch": false
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Website",
"defaultMatch": false
},
{
"id": "campaign",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "campaign",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "Email",
"keyValue": "={{ $json.email }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "QEMYdGHKp3cvy0JN",
"cachedResultUrl": "/projects/NkfS7q6flnrTbJ9e/datatables/QEMYdGHKp3cvy0JN",
"cachedResultName": "Leads"
}
},
"typeVersion": 1
},
{
"id": "6b3ee2b0-becc-4be0-b123-9b8e4a9aa5b5",
"name": "Loop Over Items1",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1136,
712
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "35d42df5-1699-4d3a-b76d-a094e9f7b9d8",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1136,
416
],
"parameters": {
"options": {},
"batchSize": 30
},
"typeVersion": 3
},
{
"id": "a679401b-7118-4473-9b05-889121744bd6",
"name": "Update row(s)1",
"type": "n8n-nodes-base.dataTable",
"position": [
1360,
416
],
"parameters": {
"columns": {
"value": {
"focusarea": "={{ $json.Title }}"
},
"schema": [
{
"id": "Firstname",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Firstname",
"defaultMatch": false
},
{
"id": "Lastname",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Lastname",
"defaultMatch": false
},
{
"id": "website",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "website",
"defaultMatch": false
},
{
"id": "company",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "company",
"defaultMatch": false
},
{
"id": "title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "title",
"defaultMatch": false
},
{
"id": "email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "email",
"defaultMatch": false
},
{
"id": "campaign",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "campaign",
"defaultMatch": false
},
{
"id": "focusarea",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "focusarea",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "email",
"keyValue": "={{ $json.Email }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "QEMYdGHKp3cvy0JN",
"cachedResultUrl": "/projects/NkfS7q6flnrTbJ9e/datatables/QEMYdGHKp3cvy0JN",
"cachedResultName": "Leads"
}
},
"typeVersion": 1
},
{
"id": "d1564c42-4f8c-4cc3-b3cc-e3802fdbecb5",
"name": "Sticky Note - Main Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
48,
-144
],
"parameters": {
"color": 7,
"width": 480,
"height": 2800,
"content": "### Automated Lead Management: Google Sheets → Instantly + n8n Data Tables\n\n@[youtube](c8iv1u_jxDY)\n\n## 📋 Overview\n\nThis workflow automates lead management by syncing data from Google Sheets to Instantly email campaigns while maintaining tracking through n8n Data Tables. It processes leads in batches to avoid rate limits and ensures no duplicates are sent.\n\n---\n\n## ⚙️ How to Set It Up\n\n### 1️⃣ **Create Your Google Sheet**\n\nUse this template with test data:\n👉 [Google Sheets Template](https://docs.google.com/spreadsheets/d/1eFXld6aiZvnQXg1lgt1COFyUh-zcy9VGx2GmFXwmYzM/edit?usp=sharing)\n\n**Required Columns:**\n- `Firstname`\n- `Email`\n- `Website`\n- `Company`\n- `Title`\n\n### 2️⃣ **Set Up n8n Data Table**\n\nCreate Data Table in your n8n instance:\n\n#### **Table : Leads**\nColumns:\n- `Firstname` (string)\n- `Lastname` (string)\n- `email` (string)\n- `website` (string)\n- `company` (string)\n- `title` (string)\n- `campaign` (string)\n- `focusarea` (string)\n\n### 3️⃣ **Connect Your Accounts**\n\n**Google Sheets:**\n1. Add Google Sheets OAuth2 credentials in n8n\n2. Authorize access to your spreadsheet\n\n**Instantly:**\n1. Get your API key from [Instantly.ai](https://app.instantly.ai)\n2. Add Instantly API credentials in n8n\n3. Configure your campaign ID\n\n---\n\n## 🔄 How It Works\n\n### **Workflow Flow 1: Data Transfer**\n1. **Manual Trigger** - Start the workflow\n2. **Get Rows from Google Sheets** - Fetch all leads\n3. **Batch Processing** - Process 30 leads at a time\n4. **Loop** - Continue until all leads processed\n\n\n### **Workflow Flow 2: Instantly Sync**\n1. **Get Leads** - Fetch leads where `campaign = \"start\"`\n2. **Individual Processing** - Loop through each lead\n3. **Create Lead in Instantly** - Add to \"Launchday 1\" campaign\n4. **Update Status** - Mark as `\"added to instantly\"`\n5. **Loop** - Continue until all qualified leads synced\n\n---\n\n\n\nInstantly \n**Scalable** - Easily handles hundreds of leads\n\n---\n\n## 📬 Need Help?\n\nCustomizations available for:\n- Advanced filtering logic\n- Multi-campaign management\n- Custom field mapping\n- Webhook integrations\n- Error handling & notifications\n\n**Contact:**\n- 📧 **[email protected]**\n- 🔗 **[Watch Tutorial](https://www.youtube.com/watch?v=c8iv1u_jxDY)**\n\n---\n\n## 🚀 Pro Tips\n\n1. **Test with small batches first** - Start with 5-10 leads\n2. **Monitor rate limits** - Adjust batch size if needed\n3. **Use proper campaign filters** - Set `campaign = \"start\"` for new leads\n4. **Keep Data Tables clean** - Regularly archive processed leads\n5. **Set up error notifications** - Add Slack/email alerts for failures"
},
"typeVersion": 1
},
{
"id": "2fae1102-0410-43e8-85c2-0027fb44cb56",
"name": "Sticky Note - Enrichment Flow",
"type": "n8n-nodes-base.stickyNote",
"position": [
656,
16
],
"parameters": {
"color": 5,
"width": 380,
"height": 320,
"content": "## 📊 Data TransferFlow\n\n**Purpose:** Transfer lead records from Gsheets to N8N DataTable\n\n**Process:**\n1. Fetches all leads from Google Sheets\n2. Processes in batches of 30 (configurable)\n3. Extracts Title field → stores as Focus Area\n4. Updates \"Leads\" Data Table\n5. Loops back until complete\n\n**Why batches?** Prevents API timeouts and respects rate limits"
},
"typeVersion": 1
},
{
"id": "12ddfb56-524e-4fe9-84c8-1bf8f3bada57",
"name": "Sticky Note - Instantly Sync",
"type": "n8n-nodes-base.stickyNote",
"position": [
1600,
400
],
"parameters": {
"color": 6,
"width": 380,
"height": 360,
"content": "## 🚀 Instantly Campaign Sync\n\n**Purpose:** Sends qualified leads to Instantly email campaigns\n\n**Process:**\n1. Queries leads where `campaign = \"start\"`\n2. Processes one lead at a time\n3. Creates lead in Instantly → \"Launchday 1\" campaign\n4. Updates status to `\"added to instantly\"`\n5. Prevents duplicate sends\n\n**Key Fields:**\n- Email, Firstname, Company, Website\n- Campaign assignment\n- Personalization variables"
},
"typeVersion": 1
},
{
"id": "d6290b10-be6b-4e09-8646-411345998514",
"name": "Sticky Note - Configuration",
"type": "n8n-nodes-base.stickyNote",
"position": [
1920,
-32
],
"parameters": {
"color": 7,
"width": 320,
"height": 440,
"content": "### 🔧 Configuration Notes\n\n**Google Sheets:**\n- Template: [View Here](https://docs.google.com/spreadsheets/d/1eFXld6aiZvnQXg1lgt1COFyUh-zcy9VGx2GmFXwmYzM/edit?usp=sharing)\n- Sheet: \"instantly leads\"\n- Required columns: Firstname, Email, Website, Company, Title\n\n**Instantly Campaign:**\n- Campaign: \"Launchday 1\"\n- ID: 100fa5a2-3ed0-4f12-967c-b2cc4a07c3e8\n- Change this to match your campaign!\n\n**Rate Limiting:**\n- Batch size: 30 leads\n- Adjust if you hit API limits\n- Consider adding delay nodes for slower APIs"
},
"typeVersion": 1
},
{
"id": "54ec470a-0751-4071-bf71-4005cf847c03",
"name": "Sticky Note - Batch Size",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
240
],
"parameters": {
"color": 5,
"height": 120,
"content": "⚙️ **Batch Size: 30**\n\nProcesses 30 leads at a time to avoid overwhelming APIs and prevent timeouts.\n\nAdjust `batchSize` parameter if needed."
},
"typeVersion": 1
},
{
"id": "722857e3-f8fb-4f0d-a53b-378b917a4516",
"name": "Sticky Note - Filter",
"type": "n8n-nodes-base.stickyNote",
"position": [
864,
864
],
"parameters": {
"color": 6,
"height": 120,
"content": "🔍 **Lead Filter**\n\nOnly fetches leads where:\n`campaign = \"start\"`\n\nThis ensures only new, unprocessed leads are sent to Instantly."
},
"typeVersion": 1
},
{
"id": "7476128b-1ecc-421c-b41e-dedf700ca792",
"name": "Sticky Note - Loop",
"type": "n8n-nodes-base.stickyNote",
"position": [
1120,
864
],
"parameters": {
"color": 6,
"height": 200,
"content": "🔄 **Individual Loop**\n\nProcesses leads one at a time through Instantly to ensure:\n- Proper API rate limiting\n- Accurate status updates\n- No partial batch failures"
},
"typeVersion": 1
},
{
"id": "f5acade0-7310-4a2f-a9b9-774a46ca7f0f",
"name": "Sticky Note - Update",
"type": "n8n-nodes-base.stickyNote",
"position": [
1552,
896
],
"parameters": {
"color": 6,
"height": 120,
"content": "✅ **Status Update**\n\nMarks campaign as:\n`\"added to instantly\"`\n\nPrevents duplicate sends on subsequent runs."
},
"typeVersion": 1
},
{
"id": "acdfba6c-c728-4c96-afd7-ed116a43cfb5",
"name": "Sticky Note - Schema",
"type": "n8n-nodes-base.stickyNote",
"position": [
1616,
-32
],
"parameters": {
"color": 3,
"width": 280,
"height": 420,
"content": "### 📋 Data Tables Schema\n\n**Leads Table:**\n```\nFirstname | string\nEmail | string\nWebsite | string\ncampaign | string\n```\n\n**John Instantly Table:**\n```\nFirstname | string\nLastname | string\nemail | string\nwebsite | string\ncompany | string\ntitle | string\ncampaign | string\nfocusarea | string\n```"
},
"typeVersion": 1
},
{
"id": "24e571c4-bcb1-43d2-967b-60e5ed3d1351",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
688,
712
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
}
],
"pinData": {},
"connections": {
"Get row(s)": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Create a lead": {
"main": [
[
{
"node": "Update row(s)",
"type": "main",
"index": 0
}
]
]
},
"Update row(s)": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Update row(s)1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Update row(s)1",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items1": {
"main": [
[],
[
{
"node": "Create a lead",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get row(s)",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"When clicking 'Execute workflow'": {
"main": [
[
{
"node": "Get row(s) in sheet",
"type": "main",
"index": 0
}
]
]
}
}
}