

How to Import Google Sheets Leads into Salesforce with N8n
Auto-create or update Salesforce leads when new rows are added to a Google Sheet with N8n's self-hosted workflow builder.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams that need custom data transformation and already run N8n infrastructure.
Not ideal for
Teams wanting zero-maintenance automation or lacking technical resources for setup.
Sync type
pollingUse case type
importReal-World Example
A 25-person B2B software company uses this to import leads from their conference signup spreadsheet into Salesforce every 15 minutes. Before automation, their sales team manually copy-pasted 50-100 leads after each event, taking 2+ hours and often missing leads or creating duplicates. Now leads flow automatically with proper deduplication and data validation.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into n8n
Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured — you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Last Name | LastName | |
Email | ||
| Company | Company | |
4 optional fields▸ show
| First Name | FirstName |
| Phone | Phone |
| Lead Source | LeadSource |
| Industry | Industry |
Step-by-Step Setup
Workflows > New Workflow
Create New Workflow
Start a fresh workflow in N8n to handle the Google Sheets to Salesforce sync. You'll build this as a polling workflow that checks for new rows every 15 minutes.
- 1Click 'New Workflow' from the N8n dashboard
- 2Name your workflow 'Google Sheets Lead Import'
- 3Click 'Save' to create the empty workflow canvas
Node Library > Trigger Nodes > Schedule Trigger
Add Google Sheets Trigger
Connect to your lead spreadsheet and configure N8n to poll for new rows. Set this up as a schedule trigger since Google Sheets doesn't support real-time webhooks.
- 1Click the '+' button next to the Start node
- 2Search for 'Schedule Trigger' and select it
- 3Set interval to 'Every 15 Minutes'
- 4Toggle 'Trigger at startup' to ON
Node Library > Google > Google Sheets
Configure Google Sheets Connection
Add the Google Sheets node to read your lead data. You'll need to authenticate with Google and specify which spreadsheet contains your leads.
- 1Click '+' after the Schedule Trigger node
- 2Search for 'Google Sheets' and select it
- 3Click 'Create New Credential' for Google Sheets API
- 4Follow OAuth flow to authenticate with your Google account
- 5Select 'Read' operation and choose your spreadsheet
Node Library > Data > Set, Filter
Set Up Row Detection Logic
Configure the workflow to only process new rows since the last run. N8n doesn't track this automatically, so you'll use a simple timestamp comparison.
- 1In Google Sheets node, set Range to 'A:Z' to capture all columns
- 2Set 'Return All' to get complete dataset
- 3Add 'Set' node after Google Sheets
- 4Create a variable 'last_run_time' with value '{{ $now.minus({minutes: 15}) }}'
- 5Add 'Filter' node to compare timestamps
Node Library > Logic > Function, IF
Add Data Validation
Clean and validate the lead data before sending to Salesforce. Check for required fields like email and company name to avoid API errors.
- 1Add 'Function' node after the Filter
- 2Write validation logic to check for empty email fields
- 3Add 'IF' node to branch valid vs invalid records
- 4Route invalid records to a separate 'Set' node for logging
Node Library > CRM > Salesforce
Connect Salesforce Credentials
Set up authentication to your Salesforce org. N8n supports both username/password and OAuth flows, but OAuth is more secure for production.
- 1Add 'Salesforce' node on the valid records path
- 2Click 'Create New Credential' for Salesforce
- 3Choose 'OAuth2' authentication method
- 4Enter your Salesforce domain (e.g., https://yourorg.salesforce.com)
- 5Complete OAuth authorization flow
Salesforce Node > Parameters
Configure Lead Creation
Set the Salesforce node to create leads and handle potential duplicates. Use upsert operation to update existing leads based on email address.
- 1Set Operation to 'Upsert'
- 2Set Object to 'Lead'
- 3Choose 'Email' as the External ID field
- 4Enable 'Return All' to get created record IDs
Salesforce Node > Fields
Map Lead Fields
Connect your Google Sheets columns to Salesforce Lead fields. Map the essential fields first, then add custom fields as needed.
- 1Click 'Add Field' in the Salesforce node
- 2Map 'Email' field to your sheets email column
- 3Add mappings for FirstName, LastName, Company
- 4Map 'LeadSource' to a static value like 'Web Form'
- 5Add any custom fields your org requires
Node Settings > Error Handling
Add Error Handling
Configure what happens when Salesforce API calls fail. Set up retry logic and error logging so you don't lose lead data.
- 1Click the Salesforce node settings gear icon
- 2Set 'On Error' to 'Continue Next Item'
- 3Add 'HTTP Request' node connected to error output
- 4Configure error webhook or email notification
- 5Add 'Set' node to log failed records
Workflow Canvas > Execute Workflow
Test with Sample Data
Run the workflow manually with a few test rows to verify field mapping and error handling. Check both success and failure scenarios.
- 1Add 2-3 test rows to your Google Sheet
- 2Click 'Execute Workflow' button
- 3Check execution log for any errors
- 4Verify test leads appear in Salesforce
- 5Test with an invalid email to trigger error path
Workflow Settings > Active
Enable Production Monitoring
Set up logging and monitoring for the live workflow. Configure alerts for failures and track import volume over time.
- 1Add 'Set' node at workflow end to log success metrics
- 2Configure webhook to your monitoring system
- 3Set workflow to 'Active' status
- 4Add workflow to a monitoring folder
- 5Test the 15-minute schedule fires correctly
Drop this into an n8n Code node.
JavaScript — Code Node// Clean company names from email domains when company field is empty▸ Show code
// Clean company names from email domains when company field is empty
if (!items[0].json.Company && items[0].json.Email) {
const domain = items[0].json.Email.split('@')[1];... expand to see full code
// Clean company names from email domains when company field is empty
if (!items[0].json.Company && items[0].json.Email) {
const domain = items[0].json.Email.split('@')[1];
items[0].json.Company = domain.split('.')[0].replace(/^\w/, c => c.toUpperCase());
}
return items;Scaling Beyond 100+ leads per import+ Records
If your volume exceeds 100+ leads per import records, apply these adjustments.
Add Batch Processing
Use SplitInBatches node to process leads in groups of 50. Google Sheets API paginates at 100 records and Salesforce performs better with smaller batches.
Increase Polling Interval
Move from 15-minute to 30+ minute intervals to avoid API quota issues. Most lead import scenarios don't need real-time processing anyway.
Implement Queue System
Add a Redis queue between Google Sheets and Salesforce to handle processing spikes. This prevents workflow timeouts during large imports.
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use N8n for this if you need custom data transformation logic or you're already running N8n for other workflows. The code nodes let you clean messy spreadsheet data before it hits Salesforce — something Zapier struggles with. Plus you control the hosting and data never leaves your infrastructure. Skip N8n if you want zero maintenance — Make handles Google Sheets polling better and Zapier's Salesforce connector has more built-in deduplication.
This workflow uses about 4 executions per run (trigger, sheets read, filter, salesforce write). At 100 new leads per month with 15-minute polling, that's roughly 3,000 executions monthly. N8n Cloud starts at $20/month for 5,000 executions. The same volume costs $30/month on Zapier's Team plan and $29/month on Make's Core plan. N8n wins on price, especially if you're self-hosting.
Make handles Google Sheets better — it tracks new rows automatically without timestamp gymnastics. Zapier's Salesforce app includes smart duplicate detection and field validation that catches errors before API calls. But N8n's code nodes let you build complex data cleaning that the other platforms can't match. If your spreadsheet data is clean and consistent, stick with Make. If you need to parse company names from email domains or merge duplicate columns, N8n is worth the setup complexity.
Google Sheets API paginates at 100 rows, so imports over that size need the SplitInBatches node or you'll miss data. Salesforce has a 200 API calls per hour limit on some orgs — check your limits in Setup before going live. The OAuth tokens expire every 2 hours by default, but N8n handles refresh automatically. Your biggest headache will be mapping custom Salesforce fields that don't match your sheet headers — build a lookup table in the Function node rather than hardcoding field mappings.
Ideas for what to build next
- →Add Lead Assignment Rules — Create workflow branches to assign leads to specific sales reps based on company size, industry, or geographic location pulled from the spreadsheet.
- →Set Up Slack Notifications — Add a Slack node to notify your sales channel when high-value leads (based on company size or other criteria) are imported from the spreadsheet.
- →Create Import Summary Reports — Build a daily digest that emails your team the count of imported leads, any errors encountered, and duplicate leads updated in the past 24 hours.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup