AutomationFlowsMarketing & Ads › Sync Leads From Google Sheets to Instantly Email Campaigns with Data Tables

Sync Leads From Google Sheets to Instantly Email Campaigns with Data Tables

ByDavid Olusola @dae221 on n8n.io

This 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.

Event trigger★★★★☆ complexity18 nodesGoogle SheetsN8N Nodes InstantlyData Table
Marketing & Ads Trigger: Event Nodes: 18 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #9743 — we link there as the canonical source.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "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": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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 \u2192 Instantly + n8n Data Tables\n\n@[youtube](c8iv1u_jxDY)\n\n## \ud83d\udccb 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## \u2699\ufe0f How to Set It Up\n\n### 1\ufe0f\u20e3 **Create Your Google Sheet**\n\nUse this template with test data:\n\ud83d\udc49 [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\ufe0f\u20e3 **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\ufe0f\u20e3 **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## \ud83d\udd04 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## \ud83d\udcec 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- \ud83d\udce7 **david@daexai.com**\n- \ud83d\udd17 **[Watch Tutorial](https://www.youtube.com/watch?v=c8iv1u_jxDY)**\n\n---\n\n## \ud83d\ude80 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": "## \ud83d\udcca 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 \u2192 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": "## \ud83d\ude80 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 \u2192 \"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": "### \ud83d\udd27 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": "\u2699\ufe0f **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": "\ud83d\udd0d **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": "\ud83d\udd04 **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": "\u2705 **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": "### \ud83d\udccb 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
    }
  ],
  "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
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This 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.

Source: https://n8n.io/workflows/9743/ — original creator credit. Request a take-down →

More Marketing & Ads workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Marketing & Ads

This workflow automates the import of leads into the Company table of a CRM built with Airtable.

Data Table, Gmail, Airtable +1
Marketing & Ads

This n8n workflow automates the process of finding ecommerce seller leads, enriching them with product and business details, discovering company websites, and extracting contact information such as em

Google Sheets, N8N Nodes Mrscraper, HTTP Request
Marketing & Ads

This template is for B2B sales teams, SDRs, growth marketers, and founders who maintain a spreadsheet of prospects and need verified contact details -- emails and mobile numbers -- without manual rese

Google Sheets, HTTP Request
Marketing & Ads

This workflow finds local businesses from Google Maps and automatically enriches them with emails, social profiles, AI summaries, and personalized outreach messages — all saved to Google Sheets. Searc

HTTP Request, Google Sheets
Marketing & Ads

This workflow leverages n8n to perform automated Google Maps API queries and manage data efficiently in Google Sheets. It's designed to extract specific location data based on a given list of ZIP code

Execute Workflow Trigger, Stop And Error, HTTP Request +1