Salesforce Google Sheets Integration: Two-Way Sync
A Salesforce Google Sheets integration can send CRM data to a spreadsheet for reporting and return reviewed changes to Salesforce. The safest design does not let both systems overwrite the same fields whenever they want. It keeps a stable Salesforce ID on every row, limits which fields Sheets can change, and orders the two sync directions so an outbound refresh cannot erase an unprocessed edit.
This guide compares the main connector, automation, and API approaches. It then shows how to build a scheduled two-way Salesforce and Google Sheets workflow with Supaflow using separate outbound and writeback pipelines.
Can Salesforce and Google Sheets Sync Both Ways?
Yes. Salesforce and Google Sheets can sync in both directions when the integration supports both of these operations:
- Salesforce to Google Sheets: read Salesforce records and refresh rows in a spreadsheet.
- Google Sheets to Salesforce: insert, update, or upsert Salesforce records from spreadsheet rows.
Google's Data connector for Salesforce supports importing reports or queried records, editing data in Sheets, and sending inserts, updates, upserts, or deletes back to Salesforce. Other add-ons, automation tools, custom API pipelines, and Supaflow can implement the same two directions with different scheduling and control models.
Two-way does not automatically mean real-time or conflict-free. It means data can travel in both directions. A reliable design still needs a record key, field ownership, run ordering, validation, and a policy for conflicting edits.
Salesforce Google Sheets Integration Methods Compared
| Method | Salesforce to Sheets | Sheets to Salesforce | Best fit | Main tradeoff |
|---|---|---|---|---|
| Google Data connector for Salesforce | Reports, query-builder results, and SOQL imports; manual or scheduled refresh | Insert, update, upsert, and delete selected spreadsheet data | Analysts working primarily inside one Google Sheet | Add-on workflow; scheduled report refresh intervals are 4, 8, or 24 hours |
| G-Connector | Salesforce reports and queries with scheduled refresh | Bulk insert and update from Sheets | Salesforce operations teams that want a spreadsheet add-on | Features and schedules vary by plan; governance remains centered on the workbook |
| Coefficient | Scheduled Salesforce imports | Scheduled exports and writeback | Teams that want an add-on spanning Salesforce and other business systems | Import and export jobs must be coordinated to avoid stale or conflicting writes |
| Zapier | Triggered workflows can add or update spreadsheet rows | Triggered workflows can create or update Salesforce records | Event-level automations such as creating a Lead from a new row | A bidirectional workflow needs separate automations plus loop prevention; it is not a complete table refresh by default |
| Custom Apps Script and Salesforce APIs | Defined by your code | Defined by your code | Specialized business rules that packaged connectors cannot express | Your team owns OAuth, API limits, retries, state, monitoring, schema changes, and conflict handling |
| Supaflow | A Salesforce ingestion pipeline writes a controlled Google Sheets snapshot | A Google Drive activation source merges approved rows into Salesforce | Governed, scheduled data movement with field mapping, monitoring, and private-agent deployment options | Implemented as two scheduled pipelines rather than an instantaneous record-by-record sync |
Which Salesforce Google Sheets connector should you choose?
Choose the Google Data connector when an analyst owns the workflow inside one spreadsheet and its refresh options meet the requirement. Google warns that the add-on can update or delete Salesforce records, so access to the workbook still needs the same care as access to a bulk data tool.
Choose G-Connector or Coefficient when spreadsheet users need richer scheduling, saved queries, or bulk operations without leaving Google Sheets.
Choose Zapier when each event has a clear trigger and action, such as creating a Salesforce Lead when a new form-response row appears. It is less natural for repeatedly reconciling a complete Salesforce object with a complete worksheet.
Build a custom integration when your organization has unusual matching, approval, or transformation rules and can operate the code over time.
Choose Supaflow when the workflow should behave like a monitored data pipeline: one controlled path publishes Salesforce data, another controlled path writes approved changes back, and each direction has explicit mappings and run history.
What a Safe Two-Way Sync Looks Like
The safest default is to treat Salesforce as the system of record and Google Sheets as a controlled review and writeback surface.
Salesforce
|
| Pipeline 1: full selected-object snapshot
v
Google Sheets outbound workbook (Supaflow-managed, read-only for most users)
Google Sheets writeback workbook (user-managed, only approved changes)
|
| Pipeline 2: Merge using Salesforce ID or external ID
v
Salesforce
This two-workbook pattern is safer than asking users to edit the same managed worksheet that the outbound pipeline replaces. It also prevents a routine Salesforce refresh from making an unchanged writeback sheet look newly modified.
For a small, low-risk workflow, both directions can use one workbook. If you choose that design, keep the writeback data on a separate user-created worksheet and do not overlap the two pipeline runs. Google Drive records changes at the file level, so an edit to one worksheet can cause selected worksheets in that file to be read again.
The five rules that prevent most sync failures
- Keep a stable record key. Use the Salesforce
Idor a unique External ID. Never match records by row number, display name, or email address alone. - Assign field ownership. Decide which fields Salesforce owns and which fields spreadsheet users may update.
- Make writeback idempotent. Use Merge so rerunning the same approved rows updates the same Salesforce records instead of creating duplicates.
- Run the directions in order. Apply approved Sheet changes before publishing the next Salesforce snapshot.
- Test Salesforce rules, not just connectivity. Field-level security, required fields, validation rules, restricted picklists, flows, and triggers can all reject a technically valid API request.
Salesforce's import guidance confirms that an upsert needs an ID field as its key and can use either a Salesforce ID or an External ID. See Importing Data into Salesforce.
Plan the Salesforce-to-Sheets Data Contract
Define the worksheet contract before creating either pipeline. Start with one Salesforce object and the smallest useful field set.
| Column | Owner | Editable in Sheets? | Purpose |
|---|---|---|---|
Id | Salesforce | No | Stable merge key for updates |
Name | Salesforce | Usually no | Human-readable record context |
StageName | Shared by policy | Yes | Example field a revenue operations team may review |
CloseDate | Shared by policy | Yes | Example forecast correction |
NextStep | Shared by policy | Yes | Example operational note |
RequestedBy | Sheets process | Yes | Audit context for the proposed change |
RequestedAt | Sheets process | Yes | Time the change was prepared |
The Salesforce field API names and writable fields depend on your org. Confirm them with the Salesforce administrator before mapping. A connected user can read a field without necessarily having permission to update it.
For picklists, send the stored Salesforce API value, not a translated label that only appears in the user interface. Supaflow's Salesforce source can expose picklist value-to-label metadata for reporting, but activation should use values accepted by the destination field.
How to Sync Salesforce to Google Sheets with Supaflow
The outbound direction creates a browsable snapshot of selected Salesforce objects.
Prerequisites
- A Salesforce org with API access
- A Salesforce user that can read the required objects and fields
- A Google Drive destination folder
- A Supaflow workspace with active Salesforce and Google Drive connections
- A decision about which objects, fields, and users belong in the workflow
Use a dedicated Drive folder such as Salesforce Sync/Outbound. Keeping pipeline-owned workbooks away from ad hoc spreadsheets makes permissions and ownership easier to understand.
Step 1: Create the Google Drive destination
In Supaflow, open Destinations, choose Google Drive, and configure:
- An authentication method with write access to the destination folder.
- Allow Write Access.
- The outbound folder URL.
- Destination Output: GOOGLE_SHEETS.
- Workbook Layout: FILE_PER_OBJECT for the clearest ownership boundary.
Managed service-account destinations require a Google Shared Drive folder with sufficient access. OAuth can use a Google account that already has write access. The Google Drive destination documentation covers all authentication options and workbook layouts.
Step 2: Create the Salesforce-to-Sheets pipeline
Create a pipeline project that uses the Google Drive destination, then create an ingestion pipeline with Salesforce as its source.
For an editable current-state worksheet, choose Historical Only so each run provides a complete selected-object snapshot, then use Truncate and Load at the Google Sheets destination. Truncate and Load replaces only Supaflow's managed rows while preserving user-created worksheets and supported formatting outside the managed range.
Do not combine an incremental-only Salesforce read with Truncate and Load. An incremental run contains only records changed in that window; replacing the worksheet with that partial set would remove unchanged rows from the visible snapshot. Use a full selected-object read for the snapshot, or introduce a warehouse model that maintains current state before publishing to Sheets.
Select only the Salesforce objects and fields the spreadsheet needs. Run the pipeline manually once and verify:
- The expected object workbook and worksheet were created.
Idis present on every record that may be written back.- Dates, numbers, booleans, and null values are represented as expected.
- Users who should only review the data cannot edit the managed workbook.
Supaflow identifies a managed file by stored identity, so renaming the file or worksheet does not make later writes adopt an unrelated workbook. Read the Salesforce source documentation for object discovery and cursor behavior.
How to Sync Google Sheets Back to Salesforce
The inbound direction should contain only rows and fields that are approved for Salesforce writeback.
Step 3: Create a dedicated writeback workbook
Create a separate folder such as Salesforce Sync/Writeback and a workbook such as Opportunity Writeback. Give it one header row and at least these columns:
Idor your approved Salesforce External ID- Every Salesforce field that users may update
- Optional audit columns such as
RequestedBy,RequestedAt, andChangeReason
Protect the key column and use Google Sheets data validation for known values. Restrict workbook editing to the people allowed to request CRM changes. Do not copy sensitive Salesforce fields into the workbook unless the writeback process requires them.
The writeback workbook should be a queue, not a second CRM. Keep the row set small, remove or archive completed requests under your retention policy, and avoid formulas that silently produce new Salesforce values without review.
Before creating the Google Drive source, copy one representative disposable record from the outbound snapshot into row 2. Include its Salesforce Id or approved External ID and representative values for the fields you plan to map. Google Drive discovers a worksheet only when it has valid headers and at least one populated data row; a blank or merely formatted second row is not enough. Use a sandbox record or other test record that is safe to update in Step 7.
Step 4: Create the Google Drive source
In Supaflow, open Sources, choose Google Drive, and configure the dedicated writeback folder with Source File Type: GOOGLE_SHEETS.
Supaflow discovers each worksheet with valid headers and at least one populated data row as a source object. The first row becomes the field header. When a workbook changes, Google Drive supplies file-level modification information and the selected worksheet is read in full; this is not cell-level change capture.
Use a separate writeback folder so the source does not discover unrelated spreadsheets or the pipeline-managed outbound workbook. See the Google Drive source documentation for worksheet discovery and spreadsheet limits.
Step 5: Create the Salesforce destination
Create or reuse a Salesforce connection whose user can update only the intended objects and fields. Apply least privilege:
- API access is required.
- Object and field write permissions must match the mapping.
- Record-level sharing still applies to the connected user.
- Validation rules, duplicate rules, flows, and Apex automation still execute according to the org's configuration.
Use a dedicated integration user when the workflow needs a distinct audit identity or narrower permissions than an administrator account.
Step 6: Create the Sheets-to-Salesforce activation pipeline
Create a second pipeline project using the Google Drive writeback source, then choose Create Activation and select Salesforce as the destination.
Configure the activation:
- Select the writeback worksheet.
- Choose the intended Salesforce object, such as Opportunity.
- Use Merge load mode.
- Map the Sheet
Idcolumn to the SalesforceIdfield and set it as the merge key. - Map only the approved writable fields.
- Leave audit-only spreadsheet columns unmapped unless matching Salesforce fields exist for them.
- Review required destination fields before saving.
If the business key originates outside Salesforce, use a Salesforce field configured as a unique External ID and map that field as the merge key. Do not substitute a merely convenient field that is not guaranteed to be unique.
The Activation Pipelines guide explains object selection, mappings, merge keys, and run monitoring.
Step 7: Test the complete loop
Use a Salesforce sandbox or a small set of disposable test records for the first run.
- Publish the Salesforce snapshot to Google Sheets.
- Confirm that the representative test record seeded in Step 3 is still present in the writeback workbook.
- Change one field to a value Salesforce accepts.
- Run the activation pipeline.
- Verify the field on the Salesforce record.
- Make and save a harmless edit in an unmapped audit cell on the same test row, then rerun the activation. Confirm that the run details show the test row was processed and that Salesforce still has only one record for that key. The saved edit forces Google Drive to read the workbook again; immediately rerunning an unchanged workbook may supply zero rows and would not prove that Merge is idempotent. Alternatively, use Historical Only for this test or choose Full Resync before the second run.
- Run the outbound snapshot again and confirm the accepted value returns to Sheets.
- Test one invalid picklist value or blocked field and confirm the failure appears in the activation run details without changing unrelated records.
A completed pipeline run proves that data moved. The round-trip check proves that identity, mappings, Salesforce rules, and refresh ordering work together.
How to Schedule Bidirectional Sync Without a Loop
Two-way sync should have an explicit sequence. Do not run both directions at the same time.
| Time | Action | Reason |
|---|---|---|
| 08:00 | Refresh Salesforce snapshot in the outbound workbook | Gives reviewers a current starting point |
| Business day | Users prepare approved changes in the writeback workbook | Separates review from pipeline-owned output |
| 16:45 | Run Google Sheets-to-Salesforce activation | Applies approved changes using Merge |
| 17:00 | Refresh the Salesforce snapshot after activation succeeds | Shows the accepted Salesforce state back in Sheets |
| 17:15 | Review failed rows in Activities | Keeps rejected values from disappearing into a silent loop |
For more frequent updates, keep the same dependency: writeback first, snapshot refresh second. If the activation fails, retain the writeback rows, resolve the Salesforce error, and retry before treating the outbound workbook as confirmation.
Use Supaflow Schedules for recurring runs and Activities to inspect per-object results. Start manually, measure the actual runtime, and leave enough separation that one direction cannot overlap the other.
Salesforce Google Sheets Sync Limitations
It is scheduled, not instantaneous
The workflow provides bidirectional data movement on a cadence. It does not lock a Salesforce record while a person edits a Sheet, and it does not resolve simultaneous edits at the cell level.
If seconds-level propagation is required, evaluate an event-driven design using Salesforce events and a service that owns conflict resolution. A spreadsheet remains a weak coordination surface for concurrent transaction processing.
A changed spreadsheet is read in full
Google Drive exposes file-level modification state. When any relevant worksheet changes, the selected worksheet is read again. Limit the writeback workbook to the records and columns that belong in the activation rather than treating it as an unbounded Salesforce mirror.
The outbound worksheet is not a merge destination
Google Sheets destination output supports Append and Truncate and Load. It does not merge individual Salesforce rows into the existing managed range. A clean current-state worksheet therefore needs a complete source snapshot with Truncate and Load.
Supaflow preserves supported formatting and custom columns outside its managed range, but values inside the managed source columns follow the chosen load mode and may be replaced. Keep manual writeback outside that range, preferably in another workbook.
Salesforce can reject individual writes
Common causes include:
- Missing object or field permission
- A required field that is absent on an insert
- An invalid restricted-picklist API value
- A validation or duplicate rule
- A flow or Apex trigger that rejects the transaction
- An ID that belongs to a different Salesforce object
- An External ID that is blank or not unique
Inspect the failed object's details, correct the writeback row, and rerun it. Do not weaken Salesforce validation merely to make a spreadsheet import pass.
Deletes require a separate policy
Do not infer a Salesforce deletion from a missing Sheet row. A row can disappear because of sorting, filtering, manual cleanup, or a refreshed snapshot. Treat deletion as an explicit, separately authorized operation with its own review and recovery plan.
If the Salesforce Connector for Google Sheets Is Not Working
Start by identifying which connector and direction failed. “The sync is broken” can describe at least four different problems: login, Salesforce import, spreadsheet refresh, or Salesforce writeback.
For Google's Data connector for Salesforce:
- Confirm that the add-on is installed and visible under Extensions.
- Reauthorize the correct Salesforce production or sandbox environment.
- Verify API access plus object- and field-level permissions for the connected user.
- Check whether the failure affects a report import, SOQL import, update, upsert, or delete.
- Review the add-on's results column and reduce the selected range to one test record.
- Test a manual refresh before relying on the 4-, 8-, or 24-hour schedule.
Community discussions sometimes describe availability or reliability problems, but Google currently maintains official setup and operation instructions. Verify the current listing and your Workspace policy before assuming the add-on has been removed for every account.
For a Supaflow workflow, inspect each direction separately:
- If Salesforce-to-Sheets fails, check the Salesforce source activity, Google Drive write access, and whether a complete snapshot was supplied for Truncate and Load.
- If Sheets-to-Salesforce fails, check worksheet headers, the merge-key mapping, field permissions, and the Salesforce error in the activation activity.
- If no writeback records appear, confirm that the Google Drive source points to the dedicated writeback folder and that the worksheet contains a header plus at least one data row.
Frequently Asked Questions
Can Google Sheets update Salesforce records?
Yes. A connector can update Salesforce when each Sheet row includes a Salesforce ID or unique External ID and the connected user can write the mapped fields. Use an upsert or Merge operation to update a matching record and insert only when no match exists.
Can I automatically export a Salesforce report to Google Sheets?
Yes. Google's Data connector can import an existing Salesforce report and refresh it manually or every 4, 8, or 24 hours. G-Connector and Coefficient offer their own report and query refresh schedules. Supaflow reads selected Salesforce objects rather than importing a saved Salesforce report.
Is a bidirectional sync the same as a real-time sync?
No. Bidirectional means both Salesforce-to-Sheets and Sheets-to-Salesforce paths exist. Real-time additionally describes how quickly changes move. Conflict-free real-time synchronization also needs locking, version checks, or a deterministic conflict policy that a basic spreadsheet workflow does not provide.
What is the safest key for Salesforce writeback?
Use the Salesforce record Id when the row already represents a Salesforce record. Use a unique Salesforce External ID when another system owns the business identifier. Do not use a Sheet row number, record name, or non-unique email address as the update key.
How do I prevent an infinite Salesforce Google Sheets sync loop?
Use separate outbound and writeback workbooks, give each field one owner, make Salesforce writes idempotent with Merge, and schedule the writeback before the next outbound refresh. Do not trigger a Salesforce update merely because a pipeline refreshed a display-only worksheet.
Can I sync Salesforce custom objects with Google Sheets?
Yes, when the connected Salesforce user can access the custom object and its fields and the integration can query or write that object. Test required fields, custom validation, triggers, and External ID behavior in a sandbox before scheduling production writeback.
What happens if two people edit the same Salesforce record?
Without a version check, the later accepted write can replace the earlier value. Assign field ownership, limit spreadsheet editors, use a review queue, and shorten the time between approval and activation. For high-conflict records, keep editing in Salesforce instead of Sheets.
Can the same design use Excel files in SharePoint?
Yes. The same two-direction pattern can use a SharePoint destination for outbound Excel workbooks and a SharePoint source for writeback. Keep the worksheet-row workflow separate from general Salesforce document management, and account for SharePoint workbook concurrency plus the destination's Append or Truncate and Load semantics.
Build the Sync Around Ownership, Not Just Connectivity
Connecting Salesforce and Google Sheets is the easy part. The durable design decisions are which system owns each field, which identifier matches a row to a record, who can approve a change, and what happens when Salesforce rejects it.
Start with one object, one dedicated writeback workbook, and a handful of test records. Prove the full round trip before expanding the schedule or field set. Then monitor each direction independently so a fresh-looking spreadsheet never hides a failed Salesforce update.
Ready to build the workflow? Create a Supaflow account, configure the Salesforce source and Google Drive destination, then add the Google Drive activation source and Salesforce destination for controlled writeback.
