Integration

Connect Salesforce to Google Sheets

Give a stakeholder a Salesforce view they can open without a login, and let a team maintain a lookup table a flow reads live: a pipeline sheet refreshed on a schedule with a last-updated stamp, and a routing sheet the sales ops team edits that drives lead assignment. Rows are keyed by a column, not a shifting row number, and every write is an ordered run.

Two-way
Direction
Scheduled, or on record change
Latency
Schedule, or Salesforce record changed
Common trigger
A key column, not the row number
Row identity

Why teams connect Salesforce and Google Sheets

A sheet is where a non-technical stakeholder wants a report, and where a team wants to keep a lookup table they can edit without a ticket. The manual version is a rep exporting a report each Monday, or an ops person copy-pasting a routing table into a flow's configuration.

  • A pipeline or forecast sheet is refreshed on a schedule, with headers, formatting, and a last-updated cell, so a manager reads current data without a Salesforce seat
  • A routing, pricing, or threshold sheet is read live by a flow, so a change the sales ops team makes takes effect on the next run with no deploy
  • Rows are matched on a key column you choose, an ID or an email, never the row number, so an insert or a sort does not corrupt the sync
  • Every write is an ordered run log with the range and the values, so a bad refresh can be traced and rolled forward

Worked example

The two flows most revenue-ops teams turn on first.

A refreshed open-pipeline sheet, and a routing sheet that drives lead assignment

One scheduled export flow, and one flow that reads the sheet as a config.

  1. 1Export trigger: a schedule every weekday at 07:00 in the sales leader's timezone.
  2. 2Query: Salesforce Query (SOQL) for open opportunities with the owner, stage, amount, close date, and next step.
  3. 3Write: Google Sheets Update range writes the result to Pipeline!A2:H after a Clear range, keeping the header row and a formula summary below untouched, and sets Meta!B1 to now().
  4. 4Routing trigger: a lead-routing flow runs when a Salesforce Lead is created without an owner.
  5. 5Read the table: Google Sheets Find row in Routing!A:D where country matches and segment matches, returning owner_email. A catch-all row with country = ANY covers the gaps.
  6. 6Assign: Salesforce Update record sets OwnerId from the resolved email. If no rule matches, the flow appends a row to Unrouted!A:D for sales ops to fix.
  7. 7Reprocess: a second flow polls Unrouted and re-runs assignment once a matching rule is added.

Field mapping

The starting map for the open-pipeline export. The header row is the schema; the key column is what a later update matches on.

Salesforce fieldSheet column (header)Notes
Opportunity.Idopp_idKey column. A row update matches on this, never on position.
Opportunity.Namename
Account.NameaccountResolved in the SOQL, written flat.
Owner.Nameowner
StageNamestage
AmountamountWritten as a number, not a currency string, so the sheet can sum it.
CloseDateclose_dateWritten as an ISO date string so Sheets parses it as a date.
NextStepnext_stepTruncated to keep the row readable.
(flow-generated)Meta!B1 last-updatedSet to now() on every successful refresh, outside the data range.

For the routing sheet the direction reverses: the sheet's columns (

country

,

segment

,

owner_email

,

notes

) are the source, and

Find row

returns

owner_email

for the flow to write to

Lead.OwnerId

.

What syncs, each direction

  • Scheduled exports. Pipeline, forecast, activity, and renewal reports refreshed on a schedule with a last-updated stamp. (Salesforce to Sheets)
  • Row-level updates. A specific opportunity or account row is updated in place when the record changes, matched on the key column. (Salesforce to Sheets)
  • Config tables. Routing rules, discount thresholds, territory maps, and enum lookups are read live by flows so a business team owns them. (Sheets to Salesforce)
  • Bulk edits and imports. A sheet a team fills in, new leads, account updates, is validated row by row and upserted into Salesforce, with errors flagged in a status column. (Sheets to Salesforce)

Governance and audit

The same controls apply to this sync as to every other Neblex workload.

  • Ordered run log. Every write records the spreadsheet, the range, and the values. A bad refresh is visible and can be re-run against the last good query.
  • Approval on bulk import. A sheet-to-Salesforce import can pause for review before the first run, so a mis-keyed column does not update a thousand records.
  • Scoped access. Google uses OAuth scoped to the specific spreadsheets, or a service account only those sheets are shared with. Salesforce uses a permission set limited to the objects read and written.
  • Environments. Build against a Salesforce sandbox and a copy of the sheet, then promote the same flow to production with the production spreadsheet.

Frequently asked questions

Can it update one row without rewriting the whole sheet?

Yes. The update matches on a key column you choose, an ID or an email, and changes only that row's cells. It never uses the row number, which shifts when rows are inserted or sorted.

How fresh is an exported sheet?

As fresh as the schedule. Common choices are every weekday morning for a pipeline sheet, or every 15 minutes for an ops dashboard. A row-level flow can also update a specific record on change.

Is a Google Sheet a safe place for a routing table?

For a small, human-maintained table, yes. Past tens of thousands of rows or with several flows writing it, move the data to a database and keep the sheet as a view. The connector flags this.

What happens if the sheet is missing a required column?

The flow stops with a clear error naming the column, rather than writing to the wrong place. Fix the header and replay.

Can it react to a sheet edit on the schedule you set?

Not natively. Google Sheets has no change webhook. The flow polls on a schedule, or you add an Apps Script trigger to the sheet for an event-driven start.

Connectors on this page

Salesforce

CRM

Operations
1,296
Typed outputs
57.9%
Change triggers
95 (poll)
Authentication
OAuth2

Google Sheets

Google

Operations
17
Typed outputs
100%
Change triggers
Poll or inbound webhook
Authentication
OAuth2
See it on your data

Bring one real integration

We will build it with you against your own systems, with the run log open.