NextSay AI
Documentation
Get started
Overview
Integrations
Overview Salesforce HubSpot
Salesforce

Connect Salesforce to NextSay

NextSay reads the open deal before each call — contact, opportunity, stage, next step — in Copilot and Intel, and, if you allow it, logs a one-line read of the call back onto the deal afterward. You control the direction; NextSay never sees your password.

Set up once, by an admin. The connection is workspace-wide — your other members just get the features (contact search, live deal context, auto-logged calls) and never touch any of this. Plan ~10 minutes.

Before you start

Salesforce admin
Creating the app and its OAuth settings is a Salesforce admin task.
NextSay workspace admin
Connecting is admin-only in NextSay.
A standard org
Use a normal or Developer Edition org. Agentforce-only orgs enforce device verification that browser OAuth can't complete.

1 · Create the app in Salesforce

Salesforce restricts new Connected Apps as of Spring '26 — use an External Client App. An admin does this once, all in Salesforce Setup:

  1. Open External Client App Manager. In Setup, use Quick Find → External Client App Manager → New External Client App.
  2. Name it. Enter an External Client App Name (API Name auto-fills) and a Contact Email; leave Distribution State = Local.
  3. Enable OAuth. Check Enable OAuth to reveal the OAuth settings.
  4. Set the Callback URL to the exact value in NextSay's Set up dialog (production https://nextsay.ai/app) — it must match byte-for-byte.
  5. Add the scopes. Move to Selected OAuth Scopes: Manage user data via APIs (api) and Perform requests at any time (refresh_token, offline_access). Create.
  6. Copy the keys. Open the app → Settings → OAuth Settings → Consumer Key and Secret (complete the identity check if prompted) → copy the Consumer Key and Consumer Secret.

Include the refresh-token scope. The full scope does not include it — without Perform requests at any time the connection drops after about an hour.

Salesforce's own steps, in full: Configure External Client App OAuth Settings · OAuth Tokens & Scopes

2 · Connect in NextSay

  1. Settings → Integrations → Salesforce → Set up.
  2. Paste the Consumer Key and Secret; choose your login host.
  3. Connect. You approve on Salesforce's own page. NextSay stores only the returned token, server-side — never your password.
Consumer KeyFrom the app's OAuth settings.
Consumer SecretFrom the same place (reveal it in Salesforce).
Login hostProduction login.salesforce.com · Sandbox test.salesforce.com · or your My Domain URL.

3 · Choose the sync direction

On the connected card, set the Sync switch (you confirm before it changes).

Inbound only
Reads context from Salesforce; never writes back.
Bidirectional
Also logs a call activity onto the matched deal. There is no outbound-only — writing includes reading.

Members use their own login (optional)

Off (default)
Everyone reads through the admin's connection.
On
Each member connects their own Salesforce; reads run under their permissions — Salesforce enforces sharing + field security natively, so a rep sees only their records.

Who does what

Workspace admin (NextSay)Connected Salesforce card → turn on Members use their own login.
Salesforce adminConnected App → Permitted Users = All users may self-authorize. Give each rep their own Salesforce user.
Each member (NextSay)Integrations → Salesforce → Connect your own Salesforce → sign in. One click, no keys, never a secret.

To actually restrict what a rep sees (Salesforce enforces this, not NextSay): Sharing Settings → Org-Wide Defaults → set Account, Contact, Opportunity → Private (else everyone sees all), and records must be owned by the right user (a rep sees records they own + anything shared or below them in the role hierarchy). A member who hasn't connected falls back to the shared connection. Salesforce-only — HubSpot tokens are account-wide.

What's synced & to which object

Reads (live, never copied) — fetched when you pick the prospect, used for the call, not stored:

Contact / Leadname, email, title, account
Opportunity (open)name, stage, amount, close date, type, next step

Writes (only when Sync = Bidirectional) — one object:

Task (Completed Call)WhoId = contact, WhatId = the opportunity — a one-line read + the single top ⚠ Risk + a pull-link back to NextSay.

Never written: Salesforce-owned fields — outcome, stage, amount, close date, next step. The full read, transcript, and signals stay in NextSay, linked not copied. The write is self-healing, idempotent (a retry never duplicates), and the opportunity link is best-effort.

Integration status

A session's Details tab shows the CRM sync state:

SuccessThe read was logged — tap it to open the Task on the opportunity.
PendingThe log is in flight.
FailedIt didn't log — the saved error shows inline (expand it); Retry re-runs it.
Not syncedCRM-linked but nothing logged yet (e.g. Inbound-only) — opens the contact.

Where it shows up

Prospects
Search Salesforce contacts; "View in Salesforce" on any saved prospect.
Session detail
Sync status in the header (opens the activity); "Sync to Salesforce" in the ⋮ menu.
Copilot & Intel
Live deal state rides along as context.

Security

Sign in on Salesforce
NextSay never receives your password.
Tokens server-side
Stored on our servers, never in your browser.
Admin-only, reversible
Only admins connect or change sync; disconnect any time.

FAQ

Do all users have to set this up?

No. An admin connects once; the connection is workspace-wide. Other members just get contact search, deal context, and auto-logged calls — they never repeat the setup or see any keys.

Can each rep see only their own records?

Yes — an admin turns on Members use their own login, then each member connects their own Salesforce (one click, no keys). Their reads run under their own login, so Salesforce enforces their permissions and they see only their records. Salesforce-only; HubSpot's tokens are account-wide.

Does NextSay change my Salesforce records?

No. It only adds a Completed-call activity; it never edits fields Salesforce owns (outcome, stage, amount, close date).

Where is a call logged, and could it duplicate?

As a completed Call activity on the matched opportunity and contact. One per call — it updates in place, never duplicates.

Can I keep NextSay read-only?

Yes. Set Sync to Inbound only.

Do you copy my Salesforce data into NextSay?

No. Fields are read live; NextSay stores only a reference, never a mirror.

Does NextSay see my Salesforce password?

No. You sign in on Salesforce; NextSay gets only a token, kept server-side.

Can I connect a sandbox?

Yes — use login host test.salesforce.com or your sandbox My Domain URL.

Who can set this up?

Workspace admins only.

What happens to logged calls if I disconnect?

They stay in Salesforce. Disconnecting only stops future reads and write-backs.

Troubleshooting

redirect_uri_mismatch
The app's Callback URL doesn't match NextSay's exactly. Copy it from the Set up dialog.
Asks to verify a device
An Agentforce-grade org blocks browser OAuth. Use a standard org.
Drops after an hour
Missing refresh_token scope — add it and reconnect.
"Inbound-only" on log
Sync is Inbound only. Switch to Bidirectional.
Note only shows a link
A very short call synced before its read existed. Open the session once and it fills in.

Disconnect

Settings → Integrations → Salesforce → expand → Disconnect. Reads and write-backs stop immediately; your Salesforce data is untouched, and you can reconnect any time.