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

Go to Workflow
1 views
Built by David Olusola David Olusola
Created on June 05, 2026

Description

๐Ÿš€ Automated Lead Management: Google Sheets โ†’ Instantly + n8n Data Tables

๐Ÿ“‹ Overview

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.

โš™๏ธ Complete Setup Guide

1๏ธโƒฃ Create Your Google Sheet

Option A: Use Our Template (Recommended)
Copy this template with test data: Google Sheets Template
Click File โ†’ Make a copy to create your own version
Populate with your lead data

Option B: Create Your Own
Create a Google Sheet with these required columns:
Firstname - Contact's first name
Email - Contact's email address
Website - Company website URL
Company - Company name
Title - Job title/position

๐Ÿ’ก Pro Tip: Add as many leads as you want - the workflow handles batching automatically!

2๏ธโƒฃ Set Up n8n Data Table

The workflow uses one Data Table to track leads and their sync status.

Create the "Leads" Data Table:

In your n8n workflow editor, add a Data Table node
Click "Create New Data Table"
Name it: Leads
Add the following columns:

| Column Name | Type | Purpose |
|------------|------|---------|
| Firstname | string | Contact's first name |
| Lastname | string | Contact's last name |
| email | string | Contact's email (unique identifier) |
| website | string | Company website |
| company | string | Company name |
| title | string | Job title |
| campaign | string | Sync status (e.g., "start", "added to instantly") |
| focusarea | string | Enriched data from Title field |

Click Save

๐Ÿ“Œ Important: The campaign field is crucial - it tracks which leads have been synced to prevent duplicates!

3๏ธโƒฃ Connect Your Google Sheets Account

In the "Get row(s) in sheet" node, click "Create New Credential"
Select Google Sheets OAuth2 API
Follow the OAuth flow:
Sign in with your Google account
Grant n8n permission to access your sheets
Select your spreadsheet from the dropdown
Choose the correct sheet name (e.g., "instantly leads")
Test the connection to verify it works

4๏ธโƒฃ Connect Your Instantly Account

Go to Instantly.ai and log in
Navigate to Settings โ†’ API
Copy your API Key
Back in n8n, open the "Create a lead" node
Click "Create New Credential"
Select Instantly API
Paste your API key
Important: Update the campaign ID:
Current ID: 100fa5a2-3ed0-4f12-967c-b2cc4a07c3e8 (example)
Replace with your actual campaign ID from Instantly
Find this in Instantly under Campaigns โ†’ Your Campaign โ†’ Settings

5๏ธโƒฃ Configure the Data Table Nodes

You'll need to update three Data Table nodes to point to your newly created "Leads" table:

Node 1: "Get row(s)"
Operation: Get
Data Table: Select Leads
Filter: campaign = "start"
This fetches only new, unsynced leads

Node 2: "Update row(s)1" (Top Flow)
Operation: Update
Data Table: Select Leads
Filter: Match by email field
Update: Set focusarea to Title value
This enriches lead data

Node 3: "Update row(s)" (Bottom Flow)
Operation: Update
Data Table: Select Leads
Filter: Match by Email field
Update: Set campaign = "added to instantly"
This prevents duplicate sends

6๏ธโƒฃ Configure the Schedule (Optional)

The workflow includes a Schedule Trigger for automation:

Default: Runs every hour

To customize:
Click the "Schedule Trigger" node
Choose your interval:
Every 30 minutes
Every 2 hours
Daily at specific time
Custom cron expression

๐Ÿ’ก For testing: Use the "When clicking 'Execute workflow'" manual trigger instead!

๐Ÿ”„ How It Works

Flow 1: Data Transfer (Top Path)

This flow moves leads from Google Sheets โ†’ n8n Data Table

Manual Trigger โ†’ Get Google Sheets โ†’ Batch Split (30) โ†’ Update Data Table โ†’ Loop

Step-by-step:

Manual Trigger - Click to start the workflow manually
Get row(s) in sheet - Fetches ALL leads from your Google Sheet
Loop Over Items - Splits into batches of 30 leads
Update row(s)1 - For each lead:
Searches Data Table by email
Updates or creates the lead record
Stores Title โ†’ focusarea for enrichment
Loop continues - Processes next batch until all leads transferred

โš™๏ธ Why 30 at a time?
Prevents API timeouts
Respects rate limits
Allows monitoring of progress
Can be adjusted in the node settings

Flow 2: Instantly Sync (Bottom Path)

This flow syncs qualified leads from Data Table โ†’ Instantly

Schedule Trigger โ†’ Get Data Table (filtered) โ†’ Individual Loop โ†’ Create in Instantly โ†’ Update Status

Step-by-step:

Schedule Trigger - Runs automatically (every hour by default)
Get row(s) - Queries Data Table for leads where campaign = "start"
Only fetches NEW, unsynced leads
Ignores leads already processed
Loop Over Items1 - Processes ONE lead at a time
Create a lead - Sends lead to Instantly:
Campaign: "Launchday 1"
Maps: Email, Firstname, Company, Website
Adds to email sequence
Update row(s) - Updates Data Table:
Sets campaign = "added to instantly"
Prevents duplicate sends on next run
Loop continues - Next lead until all processed

๐Ÿ” Why one at a time?
Instantly API works best with individual requests
Ensures accurate status tracking
Prevents partial failures
Better error handling per lead

โœ… Key Features Explained

Batch Processing
Processes 30 Google Sheet leads at once
Configurable in Loop Over Items node
Prevents timeouts on large datasets

Duplicate Prevention
Uses campaign field as status tracker
Only syncs leads where campaign = "start"
Updates to "added to instantly" after sync
Re-running workflow won't create duplicates

Data Enrichment
Stores job title in focusarea field
Can be used for personalization later
Extensible for additional enrichment

Two-Trigger System
Manual Trigger**: For testing and one-time runs
Schedule Trigger**: For automated hourly syncs
Both triggers use the same logic

Error Tolerance
Individual lead processing prevents cascade failures
One failed lead won't stop the entire batch
Easy to identify and fix problematic records

๐Ÿงช Testing Your Workflow

Step 1: Test Data Transfer (Flow 1)
Add 5 test leads to your Google Sheet
Click the Manual Trigger node
Click "Execute Node"
Check your Leads Data Table - should see 5 new rows
Verify focusarea field has data from Title column

Step 2: Test Instantly Sync (Flow 2)
In Data Table, ensure at least one lead has campaign = "start"
Click the Schedule Trigger node
Click "Execute Node" (bypasses schedule for testing)
Check Instantly dashboard - should see new lead(s)
Check Data Table - campaign should update to "added to instantly"

Step 3: Test Duplicate Prevention
Re-run the Schedule Trigger
No new leads should be created in Instantly
Data Table shows no changes (already marked as synced)

๐Ÿšจ Troubleshooting

Issue: Google Sheets not fetching data
โœ… Check OAuth credentials are valid
โœ… Verify spreadsheet ID in node settings
โœ… Ensure sheet name matches exactly
โœ… Check Google Sheet has data

Issue: Data Table not updating
โœ… Verify Data Table exists and is named "Leads"
โœ… Check column names match exactly (case-sensitive)
โœ… Ensure email field is populated (used for matching)

Issue: Instantly not receiving leads
โœ… Verify Instantly API key is correct
โœ… Update campaign ID to your actual campaign
โœ… Check campaign = "start" in Data Table
โœ… Verify email format is valid

Issue: Workflow runs but nothing happens
โœ… Check if Data Table has leads with campaign = "start"
โœ… Verify loop nodes aren't stuck (check execution logs)
โœ… Ensure batch size isn't set to 0

๐Ÿ’ก Pro Tips & Best Practices

For Beginners:
Start small - Test with 5-10 leads first
Use manual trigger - Don't enable schedule until tested
Check each node - Execute nodes individually to debug
Monitor Data Table - Use it as your source of truth
Keep backups - Export Data Table regularly

For Optimization:
Adjust batch size - Increase to 50-100 for large datasets
Add delays - Insert "Wait" nodes if hitting rate limits
Filter in Google Sheets - Only fetch new rows (use formulas)
Archive old leads - Move synced leads to separate table
Add error notifications - Connect Slack/email for failures

For Scaling:
Use multiple campaigns - Add campaign selection logic
Implement retry logic - Add "IF" nodes to retry failed syncs
Add data validation - Check email format before syncing
Log everything - Add "Set" nodes to track execution details
Monitor API usage - Track Instantly API quota

๐Ÿ“Š Expected Results

After Setup:
โœ… Google Sheets connected and fetching data
โœ… Data Table populated with lead information
โœ… Instantly receiving leads automatically
โœ… No duplicate sends occurring
โœ… Campaign status updating correctly

Performance Metrics:
100 leads** - Processes in ~5-10 seconds
1000 leads** - Processes in ~15-20 seconds
Instantly API** - 1 lead per second typical speed
Schedule runs** - Every hour by default

๐Ÿ“ฌ Need Help?

Customization Services:
Advanced filtering and segmentation
Multi-campaign management
Custom field mapping and enrichment
Webhook integrations for real-time sync
Error handling and monitoring setup
Scale to 10K+ leads per day

Contact:
๐Ÿ“ง [email protected]
๐ŸŽฅ Watch Full Tutorial

๐ŸŽ“ What You'll Learn

By setting up this workflow, you'll master:

โœ… n8n Data Tables - Creating, querying, and updating data
โœ… Batch Processing - Handling large datasets efficiently
โœ… API Integrations - Connecting Google Sheets and Instantly
โœ… Workflow Logic - Building complex multi-path automations
โœ… Error Prevention - Implementing duplicate checking
โœ… Scheduling - Automating workflows with triggers

Happy Flogramming! ๐ŸŽ‰

Nodes Used (1)

Google Sheets
n8n-nodes-base.googleSheets