Connect Salesforce to Zaags

Setup guide for your Salesforce administrator · last updated September 2026 · about 15 minutes

The Zaags Assistant answers your customers on WhatsApp, email and your website, using your Salesforce as its source of truth, and hands the conversation to your team, inside Salesforce, whenever a human should take over. This guide walks you through connecting your org, and spells out exactly what Zaags is allowed to read and write there.

0What you need

You will copy two values from Salesforce into Zaags (a Consumer Key and a Consumer Secret), and one value from Zaags into Salesforce (a callback address). Nothing is installed in your org.

1Create an integration user (recommended)

Connect Zaags through a dedicated user rather than a person's login. It keeps the audit trail clean (“created by Zaags Assistant”), survives staff changes, and lets you cap what Zaags can do with a permission set, even a bug on our side could then not exceed it.

  1. Setup → Users → New User.
  2. First name Zaags, last name Assistant, a mailbox you control (for example zaags-integration@yourcompany.com).
  3. User License: Salesforce (or Salesforce Integration if your org has that licence, it is cheaper and made for this). Profile: Minimum Access – Salesforce (or Minimum Access – API Only Integrations with the Integration licence).
  4. Tick Knowledge User if your org uses Salesforce Knowledge and the licence allows it. Save.
  5. Set the password from the activation email, and enable the org's usual two-factor method.

Skipping this step? You can connect with your own admin account. Zaags will still only perform the operations listed in section 7, but the ceiling would then be your account's permissions, not the narrow set below.

2Grant exactly the right permissions

Create one permission set and assign it to the integration user. This is the complete list, nothing else is needed, and we recommend granting nothing else.

  1. Setup → Permission Sets → New. Label Zaags Assistant. Licence: leave None. Save.
  2. System Permissions: tick API Enabled. Nothing else.
  3. Object Settings, set per object:
ObjectReadCreateEditDeleteWhy
Accounts✓,,,Identify who a customer belongs to
Contacts✓,,,Recognise a customer by phone or email
Leads✓✓,,Recognise a known lead; add a new prospect (if you enable it)
Cases✓✓,,Show a verified customer their own case status; open a case when a human is needed
Case Comments✓✓,,Keep the conversation on the case Zaags opened
Tasks (Activities)✓✓,,Log a finished conversation on the contact (if you enable it)
Opportunities✓,,,Alert your team faster for high-value accounts. Never shown to customers.
Knowledge (articles)✓,,,Ground answers in your published articles

Field-level security: give Read on the standard fields of those objects. Zaags reads only standard fields unless you explicitly add a custom field by API name in the Zaags settings.

  1. Manage Assignments → Add Assignment → pick the Zaags Assistant user. Done.

Do not grant

Modify All Data, View All Data, Edit or Delete on any object, Author Apex, Customize Application. Zaags does not use them and will work correctly without them.

3Create the app in Salesforce

This is where the two values Zaags needs, the Consumer Key and Consumer Secret (Salesforce's name for the app's passkeys; elsewhere called client id / client secret), come from. Salesforce lets outside software connect through an External Client App (newer orgs) or a Connected App (older orgs). Either works. Use the one your Setup offers.

Finding your way (first time in Salesforce?)

  1. Everything happens in Setup: click the gear ⚙ icon at the top right of any Salesforce page → Setup. A new tab opens.
  2. On the left is a Quick Find search box. You never browse the menu tree, type what you need (e.g. App Manager, Permission Sets, Users) and click the result.
  3. Type App Manager → open it → the buttons are at the top right of the list: New External Client App and New Connected App.
  4. Don't see “New External Client App”? Type External Client App Settings in Quick Find and switch ON “Allow creation of External Client Apps”, brand-new orgs (including free Developer orgs) sometimes ship with it off. If it still isn't there, simply use New Connected App (Option B below) it works identically for Zaags.

Option A, External Client App (recommended if available)

  1. Setup → App Manager → New External Client App.
  2. Name Zaags Assistant, API name auto-fills, contact email = your admin address. Distribution state: Local.
  3. Open API (Enable OAuth Settings) → tick Enable OAuth.
  4. Callback URL, paste exactly:
    https://zaags.app/sf/callback
  5. OAuth Scopes, add these four and no others:
    • Manage user data via APIs api
    • Perform requests at any time refresh_token, offline_access
    • Access the identity URL service id, profile, email, address, phone
    • Access unique user identifiers openid
  6. Flow Enablement: tick Enable Authorization Code and Credentials Flow. Leave Device Flow, JWT and Client Credentials off.
  7. Security: tick Require Proof Key for Code Exchange (PKCE), Require secret for Web Server Flow, Require secret for Refresh Token Flow. Save.
  8. After saving, open Policies → OAuth Policies: Permitted Users Admin approved users are pre-authorized → then under Permission Sets add Zaags Assistant. IP Relaxation: Relax IP restrictions (Zaags calls from cloud addresses). Refresh Token Policy: Refresh token is valid until revoked. Save.

Option B, Connected App (if your Setup has no “External Client App”)

  1. Setup → App Manager → New Connected App. Same name and contact email.
  2. Tick Enable OAuth Settings, paste the same Callback URL above, add the same four scopes.
  3. Tick Require Proof Key for Code Exchange (PKCE) and Require Secret for Web Server Flow and Require Secret for Refresh Token Flow. Save. Salesforce says it may take up to 10 minutes to activate.
  4. Manage → Edit Policies: Permitted Users Admin approved users are pre-authorized, IP Relaxation Relax IP restrictions, Refresh Token Policy valid until revoked. Save. Then Manage Permission Sets → add Zaags Assistant.

4Copy the Consumer Key & Secret

  1. External Client App: Setup → Quick Find App Manager → click your app's name → Settings tab → open OAuth Settings → button Consumer Key and Secret. Connected App: App Manager → find the app in the list → click the little ▾ at the end of its row → View → button Manage Consumer Details.
  2. Salesforce will ask you to verify your identity (code by email or authenticator).
  3. Copy the Consumer Key and the Consumer Secret. Treat the secret like a password, paste it straight into Zaags, do not email it.

5Connect in Zaags

  1. In Zaags open 🧰 Tools → 🤝 ZaagsForce Assistant → 1 · Connect Salesforce.
  2. Paste the Consumer Key and Consumer Secret.
  3. Login URL: leave https://login.salesforce.com for production, use https://test.salesforce.com for a sandbox, or paste your My Domain address (for example https://yourcompany.my.salesforce.com) if your org requires it.
  4. Click Authorize. Salesforce opens: sign in as the integration user (not as yourself), review the four permissions, click Allow. You are returned to Zaags.
  5. Zaags runs a connection check and shows a checklist: who is connected, which objects and fields are reachable, whether Knowledge has published articles, your remaining daily API requests, and any picklist values it could not find (see next section). Green across the board means you are done.

What we hold, and what we never see

We never see your password. You sign in on Salesforce's own page; Salesforce hands Zaags a token. What Zaags does hold is the Consumer Key and Secret you created and that token, every integration that must work while you are offline holds the same, including Salesforce's own connectors. They are encrypted at rest with a key that is not stored in our database, never logged, never shown again in full, never shared with other Zaags customers, and limited to the four permissions above. You can cut them off at any moment from Salesforce itself, without asking us (section 8).

6Picklists & Knowledge

Two small things make the records Zaags creates fit your org neatly:

7What Zaags reads, and the complete list of what it writes

This is a promise, not a summary. The Zaags software has no code path for anything outside these tables.

Reads

ObjectFieldsUsed for
Contactname, email, phone, mobile, account, owner, last activityRecognise the customer
Leadname, email, phone, company, status, owner, converted?Recognise a known lead; avoid duplicates
Accountname, owner, type, industryContext for your team
Casenumber, subject, status, priority, origin, dates, contact, owner; description (team alert only)A customer sees only cases linked to their own contact record
Opportunityname, stage, amount, close date, account, ownerInternal only, prioritises alerts for high-value accounts. Never shown to a customer.
Username, email of record ownersAddress the alert to the right colleague
Knowledgepublished articles: title, summary, bodyGrounded answers

Custom fields are read only if you add them yourself, one by one, in the Zaags settings.

Writes, the complete list

WhatWhenFields setYour control
Create a CaseA conversation needs a humanSubject, Description (transcript + why), Origin, Priority (if mapped), Contact (only when identified with certainty, otherwise the “Supplied” name/email/phone fields), Owner (only if you chose one; else your assignment rules)On / off
Add a Case CommentEach new message after hand-overComment body, only on the case Zaags itself created for that conversationOn / off
Create a LeadA new prospect shows buying intent and matches no existing Contact or LeadFirst/last name, company, email, phone, Lead Source (if mapped), DescriptionOff · Ask me first (default) · Automatic
Create a TaskA conversation with an identified customer endsSubject, summary, status Completed, linked to the contact/lead and accountOff (default) / on

Zaags never

  • Updates any record, no status changes, no owner changes, no closing cases, no “correcting” a contact's phone or email.
  • Deletes anything.
  • Creates or changes Contacts, Accounts, Opportunities, Knowledge articles or users. New people become Leads, never Contacts.
  • Converts leads, merges cases, changes sharing, runs Apex, uses bulk or metadata tools, or posts to Chatter.
  • Uploads customer files into Salesforce, attachments stay in Zaags and are linked.
  • Shows a customer anything about another customer, or anything from Opportunities.

Every write attempt successful or refused, is listed in the Zaags Activity tab with its payload and Salesforce's response, and can be exported. A retried message can never create a duplicate case or lead.

8Revoking access

9Troubleshooting

You seeCauseFix
redirect_uri_mismatchCallback URL differs by one characterPaste exactly https://zaags.app/sf/callback, https, no trailing slash
invalid_client_id right after creating a Connected AppSalesforce is still activating itWait up to 10 minutes and retry
OAUTH_APP_ACCESS_DENIED / “user is not admin approved”Policy is “Admin approved” but the permission set is not attached to the appSection 3, last step: add the Zaags Assistant permission set under the app's policies
invalid_grant later onToken revoked, user deactivated, password policy expired the session, or IP restrictionRe-authorize from Zaags; check IP Relaxation is “Relax”
“API is not enabled for this user / org”Missing API Enabled or an edition without APISection 2, step 2, or see edition note in section 0
Connection check: “Knowledge: 0 articles”Knowledge off, nothing published, or user lacks Knowledge accessPublish articles; tick Knowledge User on the integration user; check data-category visibility
A case was refused: REQUIRED_FIELD_MISSING / FIELD_CUSTOM_VALIDATION_EXCEPTIONA validation rule or required custom fieldExempt the integration user in the rule, or make the field optional. Your team was still alerted.
“Approaching daily API limit”Your org's shared daily request budget is nearly used up (by all integrations)Zaags pauses lookups and answers from its article cache until the rolling 24-hour window frees up

10Questions

Does Zaags copy my Salesforce data? No. Customer records are read live, used for the answer or the alert, and not stored beyond the alert itself and the conversation transcript. Published Knowledge articles are cached for up to 24 hours so answers stay fast.

Where do the conversations live? With you. Connect your own Google Drive (zero setup) or your own Supabase project in Zaags and every conversation is archived there, plus, escalated conversations are already in Salesforce as Cases. Zaags keeps a working copy only while a conversation is open and for 7 days after it closes, then deletes it (90 days if you connect no storage of your own). The one thing we keep longer is the log of what Zaags wrote to your org, 13 months, as your audit trail.

Who is the data processor? Zaags is operated by RUDLU Unipessoal Lda (Lisbon, Portugal) and acts as your processor under the GDPR. See our Privacy Policy and Terms.

Can I try it on a sandbox first? Yes, create the app in the sandbox, use https://test.salesforce.com as the login URL, then repeat in production when you are happy.

Will this count against my API limits? A little. Zaags makes at most three calls per customer message and caches what it can. Typical support volumes use a small fraction of an Enterprise org's daily budget. Zaags shows your remaining requests in the connection check.

Need help? Write to contact [at] zaags.app with a screenshot of the connection check.