This guide shows you how to integrate n8n with Salesforce using two secure methods :-
- OAuth 2.0
- JSON Web Token (JWT)
You’ll create a Connected App in Salesforce, configure credentials in n8n, and run a first workflow to confirm everything works.
- What is n8n?
- n8n is an automation tool. It lets you connect services, build flows visually, and run them on a schedule or when something happens.
- Why connect n8n with Salesforce?
- Because you can orchestrate Salesforce with hundreds of other apps, call AI models, build lightweight agents, and automate cross-system tasks without writing heavy glue code. Salesforce Flows are great inside Salesforce; with n8n you step outside the wall and still act on your org. The possibilities are open-ended.
To do that, you first need to connect n8n and Salesforce, and in this post I’ll show you how to do it.
Prerequisites
- Salesforce org (Production or Sandbox) with permission to create a Connected App.
- API enabled on your profile.
- My Domain deployed (recommended for OAuth).
- n8n (Cloud or self-hosted) with access to Credentials and Workflows.
- If you don't have one you can create one.
- For JWT: ability to generate and store a private key securely.
Part 1 — Create a Connected App in Salesforce
You will use the same Connected App for both OAuth 2.0 and JWT (you’ll enable settings for each).
- Go to Setup → App Manager → New Connected App.
- Basic Info
- Connected App Name:
n8n Integration - Contact Email: your email
- Connected App Name:
- Enable OAuth Settings
- ✅ Enable OAuth Settings
- Callback URL: use the Redirect URL that n8n shows for Salesforce OAuth2 credentials (you’ll copy it from n8n in Part 2).
Tip: you can paste a placeholder for now and update later. - Selected OAuth Scopes (minimum):
Access and manage your data (api)Perform requests on your behalf at any time (refresh_token, offline_access)(for long-lived access)- Optionally:
Manage user data via APIs (refresh_token, offline_access)if listed; add others you truly need.
- Require Secret for Web Server Flow: ✅ (recommended)
- Digital Signatures (for JWT)
- ✅ Use digital signatures
- Upload your public certificate (you’ll generate it in Part 3).
- Save. Wait a minute for the app to propagate.
- Open the app’s Manage page → Edit Policies:
- Permitted Users: “Admin approved users are pre-authorized” (optional, but gives you control)
- Relax IP restrictions if your n8n host changes IPs often (you can tighten later).
- Copy the Consumer Key (Client ID) and Consumer Secret.
(Image) Suggested: “Connected App settings with scopes highlighted”
Part 2 — Method A: Connect with OAuth 2.0
This is the classic, interactive sign-in flow. Good for Cloud and self-hosted.
Step A1 — Create Salesforce OAuth Credentials in n8n
- In n8n, go to Credentials → create Salesforce OAuth2 (or “Salesforce OAuth2 API”) credentials.
- Fill:
- Environment / Login URL:
- Production:
https://login.salesforce.com - Sandbox:
https://test.salesforce.com
- Production:
- Client ID (Consumer Key): from the Connected App
- Client Secret (Consumer Secret): from the Connected App
- OAuth Scopes: include
apiandrefresh_token/offline_accessequivalents (match what you set in Salesforce).
- Environment / Login URL:
- n8n will show an OAuth Redirect URL. Copy it.
Step A2 — Add Callback URL in Salesforce
- Back in Connected App → Edit, paste the Exact Redirect URL into Callback URL.
- Save.
Step A3 — Finish the OAuth handshake
- Return to n8n credentials, click Connect / Authorize.
- You’ll be redirected to Salesforce to log in and grant access.
- On success, n8n stores the token and refresh token.
(Image) Suggested: “n8n credential screen with Redirect URL callout”
Part 3 — Method B: Connect with JWT (Server-to-Server)
JWT is ideal for headless/service automations. No interactive login after setup.
Step B1 — Generate Keys (locally)
Keep your private key safe. Never commit it to a repo.
# Generate a 2048-bit private key
openssl genrsa -out n8n-salesforce.key 2048# Generate a public certificate (valid 1 year)
openssl req -x509 -new -key n8n-salesforce.key -days 365 -out n8n-salesforce.crt -subj "/CN=n8n-integration"
You now have:
- Private key:
n8n-salesforce.key(keep in n8n secret storage) - Public cert:
n8n-salesforce.crt(upload to Salesforce)
Step B2 — Upload Certificate to Connected App
- In Salesforce Connected App → Edit, tick Use digital signatures.
- Upload
n8n-salesforce.crt. Save.
Step B3 — Create Salesforce JWT Credentials in n8n
- In n8n, create Salesforce JWT credentials (or “Salesforce JWT API”).
- Fill:
- Login URL: Production or Sandbox as above.
- Client ID (Consumer Key): from Connected App.
- User (Username/Email): the Salesforce username that the JWT will impersonate.
- Private Key: paste contents of
n8n-salesforce.key. - Audience: usually your Login URL (n8n handles this, but ensure it matches).
- Save and Test. n8n will sign a JWT, exchange it for an access token, and store it.
(Image) Suggested: “JWT flow diagram: n8n → JWT → Salesforce token endpoint”
Part 4 — Run Your First Workflow (Quick Sanity Check)
Let’s confirm access works with a simple read.
- Create a new workflow in n8n.
- Add a Salesforce node.
- Authentication: select the credentials you created (OAuth or JWT).
- Resource:
Record - Operation:
Get All - SObject:
Account - Limit:
1
- Execute Node. You should see one Account record.
If your org has no Accounts, switch toUserand fetch 1.
(Image) Suggested: “n8n canvas with a single Salesforce node returning data”
Common Use Cases (Quick Ideas)
- Orchestrate Salesforce with other apps and AI models.
- Build agents that fetch, decide, and act.
- Schedule tasks that keep your org clean and in sync.
(Image) Suggested: “High-level capabilities map (Salesforce in the loop with apps/AI)”
Troubleshooting
redirect_uri_mismatch during OAuth
Make sure the Callback URL in Salesforce exactly matches the Redirect URL shown by n8n.
invalid_grant (OAuth or JWT)
- Wrong environment URL (Production vs Sandbox).
- User doesn’t have API Enabled.
- In JWT, the Username must be the exact Salesforce username.
- Connected App not fully propagated yet (wait a minute and retry).
insufficient_scope
Add the required OAuth scopes to the Connected App and re-authorize.
signature_invalid (JWT)
- The certificate uploaded to Salesforce must match the private key in n8n.
- Check for extra spaces when pasting the key.
- Ensure the key is RSA 2048+ and not password-protected.
IP / Session errors
If you restrict IPs at the Connected App level, whitelist your n8n host or relax IP restrictions.
(Image) Suggested: “Callout screenshot of a typical error and where to fix it”
Security Notes
- Limit scopes to what you truly need.
- Store the private key only inside n8n credentials/secret storage.
- Consider a dedicated Integration User in Salesforce with the least privileges required.
- Review Connected App policies (session timeout, refresh token policy).
Quick Checklist
- Connected App created with OAuth enabled and correct Callback URL
- Scopes include
apiand refresh-token/ offline access (for OAuth) - Digital signature (cert) uploaded for JWT
- n8n credentials saved and tested (OAuth or JWT)
- First workflow runs and returns data
OAuth vs JWT — which should I choose?
- OAuth 2.0: easiest to start, interactive login, good for user-context automations.
- JWT: headless, reliable for server-to-server jobs, no refresh tokens, clean rotation via certs.