Connecting Salesforce to Golden Suite

Set up the Salesforce OAuth connector. Production-ready in 10 minutes.

The Salesforce connector ingests Account, Contact, Lead, and (optionally) Opportunity records via OAuth — the standard auth flow you've seen on every SaaS integration. No service account, no SOQL writing by hand.

What you need before starting

  • A Salesforce org you're a System Administrator on (or an admin willing to authorize the connector once)
  • The Salesforce edition supports the REST API (most paid editions; Essentials does NOT — Professional and above)
  • About 10 minutes

Setup (~5 clicks)

  1. In Golden Suite, go to /golden/sources → "Add source" → "Salesforce."
  2. OAuth redirect: Golden Suite redirects to Salesforce's login. Pick the org you want to ingest from.
  3. Authorize the scope. Golden Suite requests api refresh_token — read-only API access plus a refresh token so we can re-ingest without re-auth.
  4. Pick the object (Account / Contact / Lead). One source = one object. Add the source three times if you want all three.
  5. Pick the entity type in Golden Suite — usually "person" for Contact/Lead, "organization" for Account.

The first ingest pulls everything; subsequent ingests use LastModifiedDate as a cursor (incremental).

Field mapping

InferMap auto-proposes a mapping from Salesforce field names → Golden Suite target schema. Typical results:

Salesforce fieldGolden Suite fieldConfidence
Emailemail1.0 (exact match)
Phonephone1.0
FirstNamefirst_name0.95
LastNamelast_name0.95
MailingAddressaddress (composite)0.85 — needs expansion
Account.Namecompany0.90
Titletitle1.0
LeadSourcesource0.75 — review

Review the proposed mapping in the autoconfig wizard before committing. Custom Salesforce fields (MyCustomField__c) won't auto-map — you'll be prompted to map them manually if they're relevant.

Sample config

# What the autoconfig produces under the hood — you don't usually need
# to write this by hand, but it's useful to know what's there.
source_config = {
    "source_type": "salesforce",
    "object_type": "Lead",          # or Contact, Account
    "credential_type": "oauth",
    "fields_to_pull": [
        "Id", "Email", "Phone",
        "FirstName", "LastName", "Title",
        "Company", "LeadSource",
        "CreatedDate", "LastModifiedDate",
    ],
    "incremental_field": "LastModifiedDate",
    "page_size": 200,
}

Common gotchas

  • API limits. Salesforce caps API calls per 24 hours by edition (Enterprise: 100k+/day usually plenty). The connector batches at 200 records per call. A 100k-record initial ingest = 500 API calls. Easily under the limit unless you're already heavily integrated.
  • Refresh-token expiry. Salesforce refresh tokens don't expire by default but admins can configure expiry (90 days, 1 year, etc.). If the connector starts erroring with invalid_grant, the refresh token expired — re-auth via the OAuth flow.
  • Sandbox vs production. The connector uses production by default. If you want to test against a Salesforce sandbox, set up a separate Golden Suite source and use the sandbox login URL during OAuth.
  • Field-level security. Golden Suite can only see fields your authorizing user has read access to. If a field is hidden by FLS, it'll appear NULL in Golden Suite. Run the OAuth as a user with full read access (typically a service account admin).
  • Person-account vs business-account model. Salesforce supports both. Golden Suite handles standard B2B (separate Account + Contact) cleanly; person-account orgs need extra config — contact ben@bensevern.dev for the field-mapping pattern.
  • Tasks + Notes objects aren't supported. Only the core Account/Contact/Lead/Opportunity. Activity history isn't an MDM-shape problem.

Re-auth procedure

When the refresh token expires:

  1. Go to /golden/sources → click the Salesforce source
  2. Click "Re-authorize"
  3. Sign in to Salesforce again
  4. Golden Suite stores the new refresh token; the next ingest works automatically

The ingest never silently fails — the source row shows an error state with the last error message, and ingest history surfaces "invalid_grant" so you know exactly what to fix.

Cost considerations

  • Golden Suite side: Salesforce as 1 source counts against your tier's source quota (Free: 3, Pro: 25, Enterprise: custom).
  • Salesforce side: API call costs are usually $0 (included in your Salesforce edition). The connector batches efficiently.

Next steps