

How to Sync Contacts Between Salesforce and Google Sheets with Zapier
Automatically sync contact updates between Salesforce and Google Sheets in both directions whenever a record changes in either system.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams under 200 monthly contact updates who need simple bi-directional sync without coding
Not ideal for
High-volume sales teams or organizations requiring real-time contact synchronization
Sync type
pollingUse case type
syncReal-World Example
A 25-person B2B marketing agency uses this to keep contact data consistent between their Salesforce sales pipeline and Google Sheets campaign tracking. Account managers update contact details in Salesforce after calls, while marketing coordinators add campaign response data in Sheets. Before automation, the team spent 30 minutes daily copying contact changes between systems and frequently worked with outdated information.
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
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| First Name | FirstName | |
| Last Name | LastName | |
| Email Address | Email | |
| Salesforce ID | Id | |
4 optional fields▸ show
| Phone Number | Phone |
| Company Name | Account.Name |
| Job Title | Title |
| Lead Source | LeadSource |
Step-by-Step Setup
Dashboard > Create Zap > Salesforce > Updated Record
Create Salesforce to Sheets Zap
Start with the first direction of your sync. This Zap will watch for updated contacts in Salesforce and push changes to your Google Sheet.
- 1Click 'Create Zap' from your Zapier dashboard
- 2Search for 'Salesforce' in the app selector
- 3Choose 'Updated Record in Salesforce' as your trigger
- 4Select 'Contact' as the Salesforce object type
Trigger > Account > Sign in to Salesforce
Connect Your Salesforce Account
Zapier needs permission to read contact updates from your Salesforce org. Use an admin account or ensure your user has API access enabled.
- 1Click 'Sign in to Salesforce'
- 2Enter your Salesforce username and password
- 3Click 'Allow' when prompted for permissions
- 4Select your Salesforce org if you have multiple
Trigger > Test > Continue
Test Salesforce Trigger
Zapier pulls a recent contact update to map your data. If no recent updates exist, manually edit a contact in Salesforce first.
- 1Click 'Test trigger' button
- 2Wait for Zapier to find a sample contact record
- 3Review the contact data fields that appear
- 4Click 'Continue with selected record'
Action > Google Sheets > Update Spreadsheet Row
Add Google Sheets Action
Now configure where contact updates will be written. You'll update existing rows in Sheets rather than creating new ones each time.
- 1Click the + button to add an action step
- 2Search for and select 'Google Sheets'
- 3Choose 'Update Spreadsheet Row' as the action
- 4Select 'Custom' for the update method
Action > Setup > Spreadsheet > Lookup Column
Configure Sheet and Lookup Column
Tell Zapier which spreadsheet and row to update. You'll match contacts using Salesforce ID or email address stored in your sheet.
- 1Select your contact spreadsheet from the dropdown
- 2Choose the worksheet tab (usually 'Sheet1')
- 3Set 'Salesforce ID' or 'Email' as your lookup column
- 4Map the lookup value to the corresponding Salesforce field
Action > Setup > Row Values
Map Contact Fields
Connect Salesforce contact fields to your Google Sheets columns. Map the essential contact data you need to keep in sync.
- 1Click in the 'First Name' field and select Salesforce First Name
- 2Map Last Name, Email, Phone, and Company fields
- 3Add any custom fields you need synced
- 4Leave unmapped columns blank to preserve existing data
Action > Test > View Results
Test Sheets Update
Verify the integration works by updating your test contact data in the connected Google Sheet. Check that field mapping works correctly.
- 1Click 'Test step' to run the action
- 2Open your Google Sheet to verify the update
- 3Check that the correct row was updated, not a new row created
- 4Confirm all mapped fields contain the expected data
Dashboard > Create Zap > Google Sheets > Updated Spreadsheet Row
Create Reverse Sync Zap
Now build the second Zap for updates flowing from Google Sheets back to Salesforce. This completes your bi-directional sync.
- 1Click 'Create' to start a new Zap
- 2Select 'Google Sheets' as the trigger app
- 3Choose 'Updated Spreadsheet Row' as the trigger
- 4Select the same spreadsheet and worksheet
Trigger > Test > Continue
Test Sheets Trigger
Pull sample data from your Google Sheet to configure the Salesforce update. Edit a contact row if needed to generate test data.
- 1Click 'Test trigger' to fetch sample data
- 2Review the row data that Zapier found
- 3Verify your Salesforce ID column appears in the data
- 4Click 'Continue with selected record'
Action > Salesforce > Update Record > Contact
Add Salesforce Update Action
Configure the action to update existing Salesforce contacts when your Google Sheet changes. Use the ID field to match records.
- 1Add an action step and select Salesforce
- 2Choose 'Update Record' as the action
- 3Set 'Contact' as the record type
- 4Map your Salesforce ID column to the Record ID field
Action > Setup > Field Mapping
Map Fields Back to Salesforce
Connect your Google Sheets columns back to Salesforce contact fields. Use the same field mapping as your first Zap but in reverse.
- 1Map First Name column to Salesforce First Name field
- 2Connect Last Name, Email, Phone, and Company columns
- 3Add any custom field mappings you set up earlier
- 4Skip the ID field since it's already used for lookup
Test > Publish > My Zaps
Test and Activate Both Zaps
Run a final test of your reverse sync, then turn on both Zaps to enable bi-directional contact synchronization.
- 1Click 'Test step' to verify Salesforce update works
- 2Check Salesforce to confirm the contact was updated
- 3Turn on both Zaps using the toggle switches
- 4Name your Zaps clearly: 'SF to Sheets - Contacts' and 'Sheets to SF - Contacts'
Drop this into a Zapier Code step.
JavaScript — Code Step{{if(contains(trigger.Last_Modified_By, "zapier"), "skip", "process")}}▸ Show code
{{if(contains(trigger.Last_Modified_By, "zapier"), "skip", "process")}}... expand to see full code
{{if(contains(trigger.Last_Modified_By, "zapier"), "skip", "process")}}Scaling Beyond 200+ contact updates per month+ Records
If your volume exceeds 200+ contact updates per month records, apply these adjustments.
Add Rate Limit Delays
Insert 2-3 second delays between trigger and action to avoid Google Sheets API throttling. Without delays, rapid updates will cause sync failures and missed contact changes.
Switch to Make for Cost Efficiency
Make's $9/month plan handles 1,000+ operations while Zapier charges per task. At 500+ monthly updates, Make saves $30-50/month compared to Zapier's Professional plan.
Implement Batch Processing
Group contact updates and process them in scheduled batches rather than real-time. This reduces API calls and improves reliability for bulk contact imports or updates.
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 Zapier for this if your team needs bi-directional sync without coding and you're updating fewer than 200 contacts per month. The guided setup makes field mapping straightforward, and error handling is built-in. Pick Make instead if you need real-time sync — Zapier polls every 1-5 minutes while Make can trigger instantly.
This workflow burns 2 tasks per contact update (one for each direction). At 100 updates monthly, that's 200 tasks fitting the Starter plan at $20/month. Make charges $9/month for 1,000 operations, making it cheaper for the same volume. N8n is free for unlimited tasks but requires hosting your own server.
Make handles lookup matching better with its built-in 'Search Records' modules that won't fail on missing contacts. N8n gives you direct database-style upsert operations that create or update in one step. But Zapier's error recovery emails you when syncs break, and the visual editor makes field mapping obvious for non-technical team members.
You'll hit Google Sheets' 100 requests per 100 seconds rate limit if multiple team members edit contacts simultaneously. Salesforce's API occasionally returns stale data during heavy usage periods, causing 5-10 minute sync delays. Your lookup column must contain exact Salesforce record IDs — if someone manually types an email that doesn't match perfectly, the entire sync fails silently until you check error logs.
Ideas for what to build next
- →Add Opportunity Sync — Extend your contact sync to include associated opportunities and deals, creating a complete sales pipeline view in Google Sheets.
- →Create Activity Logging — Set up a separate Zap to log all contact changes in a Google Sheets audit trail with timestamps and change details.
- →Build Lead Assignment Rules — Add logic to automatically assign new contacts to sales reps based on territory, company size, or lead source criteria.
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