Skip to main content

Salesforce

Sync contacts from Salesforce into your event pipeline, push leads back to Salesforce, and optionally enable live inbound updates.

What you get​

  • Import Salesforce Contacts as leads on a Pana event.
  • Update existing leads matched by email or Salesforce contact ID.
  • Push leads from Pana to Salesforce — one at a time or in bulk — with the Pana event fields.
  • Enable auto-sync to configure Salesforce outbound messaging for live contact updates.

Salesforce is one connection per workspace. Each workspace uses its own Salesforce Connected App (Consumer Key and Consumer Secret).


Before you start​

  • A Salesforce org with API access (Production or Sandbox).
  • Permission to create an External Client App or Connected App in that org.
  • At least one event in Pana to attach synced contacts to.
  • Workspace admin access.

Step 1 — Create a Connected App in Salesforce​

Create the app in the same Salesforce org you want to connect (your customer’s org or your own).

Open the app manager​

  1. In Salesforce, go to Setup.
  2. Search for App Manager (or External Client Apps on newer orgs).
  3. Click New Connected App or New External Client App.

OAuth settings​

SettingValue
Callback URLCopy from Pana (see below) — must match exactly
OAuth scopesapi, id (and refresh_token, offline_access if available)
App authorizationAll users can self-authorize
Distribution / TypeLocal is fine — you do not need Package unless listing on AppExchange

Callback URL format

https://YOUR_APP_DOMAIN/auth/oauth/callback?provider=salesforce

Example (Pana production):

https://events.pana.space/auth/oauth/callback?provider=salesforce

Local development:

http://localhost:3000/auth/oauth/callback?provider=salesforce

:::caution Exact match required The callback URL in Salesforce must include the query string ?provider=salesforce.
Do not use legacy paths such as /auth/salesforce/callback unless your deployment is configured for them. :::

Copy credentials​

  1. Save the app and wait a few minutes for Salesforce to activate it.
  2. Open Consumer Key and Secret (or Settings → OAuth).
  3. Copy the Consumer Key (Client ID) and Consumer Secret.

Sandbox orgs: use https://test.salesforce.com when signing in during OAuth. Production orgs use https://login.salesforce.com.


Step 2 — Connect in Pana​

  1. Go to Settings → Integrations.
  2. Find Salesforce under CRM.
  3. Click Connect.
  4. In the dialog:
    • Confirm the Callback URL shown matches what you registered in Salesforce.
    • Paste your Consumer Key and Consumer Secret.
  5. Click Continue to Salesforce.
  6. Sign in to the target org and approve access.
  7. You return to Pana; the card shows as connected with your instance URL (e.g. yourorg.my.salesforce.com).

Sync contacts manually​

  1. On the Salesforce card, click Sync contacts.
  2. Select a Pana event.
  3. Click Sync.

New Salesforce contacts become leads on that event. Existing leads with the same email are updated.


Fields Pana adds to Salesforce​

When you connect, Pana sets up these fields on Salesforce Leads and Contacts so you never have to create them by hand. Every push fills them with the lead's current values, alongside first name, last name, email, phone, job title and company.

Salesforce fieldTypeWhat Pana writes
Lead SourcePicklist (Salesforce's own)Always Pana Events, so leads from Pana are easy to identify. Written to Salesforce's built-in Lead Source picklist.
Event NameText(255)The event the lead is mapped to.
Event Lead Interest LevelPicklist — Cold, Warm, HotThe lead's interest level from Pana.
Event Lead TagsPicklist (Multi-Select) — Exhibitor, Sponsor, Investor, Partner, High Priority, Decision Maker, Urgent, VIPThe lead's tags. A lead marked as a decision maker always carries Decision Maker.
Event Conversation NotesLong Text AreaThe latest note on the lead. Each push replaces it with the newest note.
Next Follow-up DateDate/TimeWhen the lead is due a follow-up, with the time of day.
LinkedIn ProfileURLThe lead's LinkedIn profile URL.
Pana Lead URLURLA link back to the lead in Pana.

Each field is created on both Lead and Contact, because a Pana lead can land as either. Salesforce hides a new field from every profile until access is granted, so Pana also creates a Pana Events permission set with read and edit access to these fields and assigns it to the connected user. If a field with one of these names already exists, Pana reuses it instead of creating a duplicate — so reconnecting is always safe. Empty values are never sent, so a push never clears something typed in Salesforce.

Creating fields needs the connected user to have the Customize Application, Manage Profiles and Permission Sets and Assign Permission Sets permissions (System Administrators have them all). Without it, pushes still create and update records with the standard fields. If your org's Lead Source picklist is restricted, add a Pana Events value to it — otherwise Pana leaves Lead Source empty.

Edits made in Salesforce​

Event Lead Interest Level, Event Lead Tags, Event Conversation Notes, Next Follow-up Date and LinkedIn Profile come back with the Lead or Contact, so edits made in Salesforce show up on the Pana lead — on every contact sync, and live once auto-sync is enabled (Pana reads them from the record when Salesforce reports a change). This works for leads that came from Salesforce and for leads captured in Pana and pushed to Salesforce.

  • A note changed in Salesforce joins the lead's notes thread as the newest note.
  • Company comes back on live updates too: a Lead's Company, or a Contact's Account name.
  • Tags Pana does not provision are left on the lead untouched; Decision Maker keeps the lead's decision-maker flag in step.
  • An empty field in Salesforce never clears the lead.
  • Lead Source, Event Name and Pana Lead URL are set by Pana and are not read back.

Re-create the fields​

Connecting creates the fields, and a push quietly re-creates a missing one (at most once an hour). To re-run it right away — after someone deleted a field, or after you grant the connected user the permissions above — call:

POST /api/v1/integrations/salesforce/provision-fields/
{ "workspace_id": "<workspace id>" }

The response lists the fields created and reused, and any errors Salesforce returned. Existing fields are reused, never duplicated.


Push leads to Salesforce​

Single lead​

  1. Open Leads.
  2. On a lead row, click the cloud icon and choose Salesforce.
  3. Pana looks for a Salesforce Contact with the lead's email, then an open Lead, and updates it. If there is none, Pana creates a new Salesforce Lead.

The lead must have an email address. A new Salesforce Lead needs a last name and company; when the Pana lead has none, Pana sends Unknown.

Bulk push​

  1. Select one or more leads in Leads.
  2. Open the push menu in the toolbar and choose Salesforce.

Leads without an email are skipped and reported in the summary.


Enable auto-sync​

  1. After connecting, click Enable auto-sync on the Salesforce card.
  2. Pana configures Salesforce outbound messaging for your org.
  3. When successful, the button shows Auto-sync on (green).

Use this when you want Salesforce contact changes to flow into Pana without manual syncs.


Disconnect​

Turn off the toggle on the Salesforce card. Outbound message configuration in Salesforce may need to be removed separately in your org.


Troubleshooting​

IssueWhat to try
redirect_uri_mismatchCallback URL in Salesforce must match the dialog character-for-character, including ?provider=salesforce. Re-save the app and wait 5–10 minutes.
Wrong Consumer Key in OAuth URLThe Consumer Key you paste in Pana must be from the same Connected App where the callback URL is registered.
Connected to wrong orgDisconnect and reconnect; sign in to the correct Salesforce org.
Sandbox vs productionSandbox apps must authorize via test.salesforce.com; production via login.salesforce.com.
Type: LocalLocal distribution is correct for your own integration. Package is only needed for AppExchange.
Auto-sync setup errorsConfirm OAuth scopes include api and id; verify your Salesforce user is an admin.
Token / scope errorsEnsure refresh_token and offline_access are enabled on the Connected App if refresh fails.

Callback URL checklist​

  • https (not http) in production
  • No trailing slash after salesforce
  • Query string is ?provider=salesforce
  • Same URL in Salesforce and in the Pana connect dialog

Self-hosted deployments (optional)​

Platform operators can set default Connected App credentials in the backend environment so workspaces can connect without pasting keys:

SALESFORCE_CLIENT_ID=<Consumer Key>
SALESFORCE_CLIENT_SECRET=<Consumer Secret>

Per-workspace credentials entered in the connect dialog override these defaults when provided.


API reference​

Integrations API — Salesforce