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 ManagerNew 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.

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.

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.