Administrator Guide

Rings AI
for Salesforce

Relationship intelligence, synced onto your records and surfaced where your team works.

Read-only against your CRM Read-only against Rings Read-only integration

01 Overview

What Rings AI Is

Rings brings relationship intelligence into Salesforce — analyzing your organization's real-world email and meeting activity to understand who knows whom, and how well.

The app does two things

01 — Enrich

It enriches your records

A sync matches Accounts, Contacts, Leads, and Opportunities to Rings' data and fills namespaced ringsai__ fields: verified contact info, connection strength (PathPower), email and meeting counts, next meeting, days since last interaction, and which internal users hold the strongest relationships. These fields work everywhere Salesforce fields do — list views, reports, dashboards, routing rules, and Flows.

02 — Surface

It adds a live panel

The Rings record panel — a Lightning component on Account, Contact, Lead, and Opportunity pages — shows live, user-contextual data: an AI-generated summary, activity history, relationship paths ("who can introduce me?"), and detailed profile data, fetched from the Rings API in real time as the user views the record.

Two properties worth internalizing

Read-only against your CRM. Rings data lands only in the app's own ringsai__ fields. Standard fields your team maintains are never touched.

Read-only against Rings. The app fetches data from Rings. The only data it sends is the identifiers needed to match your records — email, name, website domain, LinkedIn URL. Nothing is ever written into your Rings tenant.

02 What Gets Installed

What Gets Installed

The ringsai managed package adds the following — and its uninstall cleanly removes all of it.

Component What it is
App storage General Settings (a protected custom setting holding the app's configuration), plus custom objects — Rings User Mapping (Salesforce user ↔ Rings identity), API Log (the app's own log), and Rings List / Rings List Member (filterable, reportable list membership maintained by the sync).
Custom fields On Account, Contact, Lead, and Opportunity — all namespaced ringsai__, all additive. No standard fields are modified.
Lightning components The record panel and its sections, plus the Rings AI Settings admin page.
Permission sets (2) Rings_AI_Admin and Rings_AI_Standard_Access.
Named Credentials (2) Rings_AI_API_Production and Rings_AI_API_Sandbox — where the API key lives.
Rings AI Lightning app Standard object tabs plus the settings tab.

On install, the post-install script creates the default settings record and schedules the daily log-cleanup job. Permission sets are not auto-assigned — assign them as Quick Start step 2.

Not included

Record page layouts. Admins place the panel on their own record pages (Quick Start, step 5) — the app never alters your page layouts.

03 Setup

Quick Start

The fastest path from installed package to working app. Each step is expanded in the sections that follow.

Prerequisites

The app is installed in your org (installation is coordinated with Rings), you have a Rings API key, and you have System Administrator access.

  1. Set the API key

    Setup → Named Credentials → External Credentials tab → Rings_AI_API_Production → in Custom Headers, set the x-api-key value. (Sandbox orgs: Rings_AI_API_Sandbox.)

  2. Assign permission sets

    Rings_AI_Admin + Rings_AI_Standard_Access to admins; Rings_AI_Standard_Access to everyone who should see Rings data.

  3. Enable the app

    Open Rings AI Settings → turn on App Enabled → turn on sync for the objects you want → set Sync Frequency and Bulk Sync Hour → Save. Leave all "Use Mock" toggles off.

  4. Map your users

    Rings AI Settings → User Mappings: link each Salesforce user to their Rings identity. Unmapped users don't get relationship paths or per-user data.

  5. Add the panel to record pages

    In Lightning App Builder, add the recordPanel component to your Account, Contact, Lead, and Opportunity record pages.

  6. Run the first sync

    Rings AI Settings → Run Now on the Data Sync card. For large orgs, set Max Records Per Sync Run to ~1,000 first and raise it after checking the results.

  7. Schedule the incremental sync

    Rings AI Settings → Incremental Sync Schedule → accept the default hourly cron → Schedule. This keeps matched records fresh.

  8. Verify

    Open a Contact you know is active — the panel should load with data, and the Rings fields should populate with Match Status Matched.

That's a working install. Everything below is detail and tuning.

04 Mechanics

How the App Works

Matching

Before any data lands on a record, the record must be matched to its Rings counterpart:

  • Contacts / Leads match by email or LinkedIn URL in the scheduled bulk sync. Name-only records can still match — through the panel's search, or automatically on creation — but the nightly bulk matcher requires an email or LinkedIn URL.
  • Accounts match by name, website domain, or LinkedIn URL.
  • Opportunities match through their parent Account's identifiers.

The result is stamped on the record:

Match Status Meaning
Matched Record linked to a Rings profile; fields populate on every sync.
No Match Rings had no matching profile. Fixing an identifier (email, LinkedIn, website, name) automatically retries the match; until then the record is skipped.
Overridden A user manually picked the match from the record panel. Automatic re-matching leaves it alone.
(blank) Record hasn't been processed yet.

The Rings profile link is stored in ringsai__Rings_Record_Id__c ("Rings ID").

Three sync paths

Path What it does
Bulk match-and-sync (scheduled) The main job. Finds unmatched records (newest first), matches them against Rings in batches, and writes the full field set — profile data, PathPower, activity counts, best-contact and top-user fields. Runs on the schedule set in Settings, or on demand via Run Now.
Incremental sync (scheduled) Keeps already-matched records fresh. Polls Rings for profiles modified since the last run and re-applies data. Without it, records go stale after the initial match.
On-create auto-match (instant) When a record is created with usable identifiers, the app immediately queues a match — the full field set, including interaction counts, populates within moments instead of waiting for the next scheduled run. During very large data loads the instant match steps aside automatically and the scheduled sync picks those records up.

The record panel (live data)

The panel fetches from the Rings API at view time — it does not read the synced fields. Sections, in display order:

Section Shows
Record Panel header Match state, Rings profile link, manual match override. The strength badge and path count jump to Relationship Paths.
Summary Insights Opportunity-oriented cards including PathPower (with an explainer tooltip on the score).
Relationship Paths Paths from the viewing user to the person/company — requires the viewer to have a user mapping. The top recommended contact's path graph opens expanded.
Interactions Email/meeting stats by period, interaction list with detail view. Clicking a period cell filters the list to that window and shows a breakdown.
Details Profile data from Rings (title, company, location, bio/description).
Contact Info Verified emails and contact channels.
AI Summary Generated relationship brief for this person or company.

Panel data is user-contextual where it matters: relationship paths and interaction context are computed relative to the logged-in user. Two users can see different paths on the same record — that's by design.

Restricted interactions

Interactions the viewing user did not participate in appear in the list with a lock and a "Restricted" label, and their contents are not viewable — interaction details are visible only to participants. This is the same access model that governs email bodies; it is expected behavior, not a configuration problem.

05 Configuration

Settings Reference

All settings live on the Rings AI Settings page, backed by the protected General_Settings__c custom setting.

Master switches

Setting Effect
App Enabled Master switch. Off = no callouts, no syncs, panel shows disabled state.
Environment Which Rings API the org talks to (Sandbox / Production Named Credential). Auto-detected from org type when unset. Also drives the "Open in Rings" deep link.

Data sync

Setting Effect
Bulk Sync Enabled Enables the scheduled bulk match-and-sync job.
Sync Contact / Lead / Account / Opportunity Enabled Per-object opt-in, honored by every sync path — the bulk chain (Contact → Lead → Account → Opportunity), the incremental sync, and the on-create auto-match.
Sync Frequency Hourly / Daily / Weekly cadence for the bulk job.
Bulk Sync Hour Hour of day the Daily/Weekly run fires — in the timezone of the admin who saves the settings (shown next to the field). Weekly runs fire on Sunday. Ignored for Hourly.
Max Records Per Sync Run Cap on records processed per run across the whole chain. 0 = unlimited. Start ~1,000 on large orgs and raise once API usage looks right.

The Data Sync card also shows the next scheduled run and offers Run Now (with confirmation) and Cancel Scheduled Sync. Run Now refuses while a previous run is still working — same for the scheduled fire, which skips itself rather than starting an overlapping run.

Incremental sync

Scheduled from its own card with a cron expression. Common values:

Cron Cadence
0 0 * * * ? Hourly (recommended)
0 0 */4 * * ? Every 4 hours
0 0 2 * * ? Daily at 2 AM

The first run after install looks back 30 days; each later run only pulls changes since the last successful run (watermarks visible on the card). Run Now works with or without an active schedule.

Panel features

Setting Effect
Enable AI Summary / Interaction Timeline / Relationship Path Turn individual panel sections on/off org-wide.
Interaction Display Limit Max interactions listed in the panel.
Use Mock AI Summary / Interaction History / Relationship Paths Serve canned data instead of calling the API — for demos/testing only. Keep OFF in real use.

Performance & logging

Setting Effect
Cache TTL Seconds to cache API responses (reduces repeat callouts while a user works a record).
Enable Verbose Logging Logs every API call detail to Api_Log__c. Turn on only while troubleshooting.
Log Retention Days Auto-delete Api_Log__c records older than N days, enforced by a daily cleanup job scheduled automatically at install. 0 disables cleanup (logs accumulate indefinitely — not recommended).

06 Identity

User Mappings

A user mapping links a Salesforce User to their Rings identity. It powers everything user-specific:

  • Relationship Paths — computed from the viewing user; no mapping, no paths.
  • Top user / strongest relationship fieldsStrongest_Int_Rel_*_User__c, Top_Email_User_*, Top_Meeting_User_*, and the Best Ext "Top Int" fields only resolve to a Salesforce User when that person is mapped. Unmapped = blank, even when Rings has the data.
  • Interaction context — per-user email/meeting detail in the panel.

Manage under Rings AI Settings → User Mappings: pick the Salesforce user, pick the matching Rings user from the dropdown (loaded live from Rings), save.

Rule of thumb

Map every user who works records. A partial mapping table is the most common cause of "why is this field blank?"

07 Data Model

Fields on Records

Every Rings field is namespaced ringsai__ and labeled "Rings …". By category:

Category Fields Objects
Identity & sync Rings ID, Match Status, Last Synced, Rings Name/Email/Website/LinkedIn, description/bio, location (City, State, Country) All four
Interactions Last Interaction, Next Meeting, Days Since Last Interaction, email/meeting counts for 3/6/12 months + all-time All four (counts on Opportunity mirror Account)
PathPower Total PathPower (text) + PathPower Score (numeric 1–5) All four
Top users (90-day) Top Email User, Top Meeting User (+ that user's meeting count) Account, Contact, Lead
Strongest relationships Strongest Int Rel 1/2 — User, Score, Last At Contact, Lead
Best external contacts Best Ext 1/2 — Contact link, Title, Role, PathPower, Top Int users Account
Lists Rings Lists / Company Lists (list memberships from Rings) Account, Contact, Lead

Filterable list membership

The Rings Lists / Company Lists text fields are display-only (long text can't be filtered). For filtering and reporting, the app also maintains Rings List (one record per Rings list) and Rings List Member (one record per list/record pair) — kept in sync automatically. Use them to build list views, report filters, and cross filters like "Accounts on the Q3 list with no open Opportunity." Rows are read-only; the sync reconciles them on every run.

Three Contact/Lead fields (Person_Title_Updated_At__c, Person_Company_Updated_At__c, and the Days Since Last Job Change formula built on them) are installed but stay blank — the Rings API doesn't supply their source data yet. They'll populate automatically once it does.

PathPower, as a color

PathPower comes in a text form (WEAK → STRONGEST) and a numeric Score (1–5). The spectrum runs cool to warm as the relationship gets stronger:

WEAK MODERATE STRONG VERY_STRONG STRONGEST

Sort by the Score

Sort list views and reports by the numeric Score field. The text field sorts alphabetically, which puts STRONGEST (the highest level) between STRONG and VERY_STRONG, and WEAK (the lowest) last.

Points an admin should know

  • Rings Days Since Last Interaction is a formula over Rings Last Interaction — usable directly in "gone quiet" list views and report filters on all four objects.
  • Opportunity engagement fields mirror Account (counts, PathPower, next meeting), so a report built for Accounts translates to Opportunities by swapping the object.
  • Fields are read-only for users and overwritten by sync — treat them as a feed.

08 Routing

Choosing a "Best User" Field

Contacts and Leads carry three fields that each answer "which internal user should own this relationship?" — but they measure different things. Pick by use case.

Field What it measures Use when
Rings Strongest Int Rel 1 User Rings' relationship-strength score between the internal user and this person, precomputed on the Rings side. A second slot holds the runner-up. Default for routing, assignment, and warm-intro requests. Best single answer to "who knows this person best."
Rings Top Email User Last 3 Months Who exchanged the most emails with this person in the last 90 days. Active-correspondence routing — who should follow up on a thread now. Blank if nobody emailed them recently.
Rings Top Meeting User Last 3 Months Who met with this person the most in the last 90 days. Meeting-context routing — who saw them recently and can speak to current state. Blank if nobody met them recently.

Practical guidance

  • Assignment rules / lead routing: use Strongest_Int_Rel_1_User__c. It's populated whenever any internal relationship exists, while the Top fields go blank when there's no recent activity.
  • "Gone quiet" alerts: combine — Strongest_Int_Rel_1_User__c tells you who should re-engage; blank Top fields tell you nobody currently is.
  • Tie-breaking / fallback order: Strongest_Int_Rel_1_User__cTop_Meeting_User_Last_3_Months__cTop_Email_User_Last_3_Months__cStrongest_Int_Rel_2_User__c.
  • All resolve to a Salesforce User only when that person has a Rings user mapping. If a field is unexpectedly empty, check the mapping first.
  • Companion fields: each Strongest slot has a Score and Last At; the Top Meeting user has Top_Meeting_User_Meetings_Last_3_Months__c.

09 Design Rationale

Why Rings Fields Shadow Standard Fields

Many Rings fields intentionally duplicate a standard field: ringsai__Name__c vs Name, ringsai__Email__c vs Email, ringsai__Job_Title__c vs Title, and ringsai__Last_Interaction_At__c vs LastActivityDate, among others. This is deliberate — the Rings fields are a Rings-verified shadow copy.

  • The sync never overwrites your CRM data. Standard fields stay hand-maintained; Rings writes only to its own namespaced fields. Installing the app cannot clobber an email or company name your team curated.
  • Side-by-side comparison is the point. When Email and Rings Email disagree, that's signal — Rings has seen a newer address in live communication. Reports comparing the two surface stale CRM data.
  • Rings fields are read-only by design. They're overwritten on every sync, so hand edits don't stick. Treat them as a feed, not a place to type.
  • Standard-field meaning differs. Standard LastActivityDate reflects Salesforce tasks/events; Rings Last Interaction reflects real-world email/meeting interactions observed by Rings — often earlier and more complete.

If you want Rings data to flow into standard fields, do it deliberately with your own Flow on the fields you choose — the app will never do it for you.

10 Operations

Monitoring & Troubleshooting

Where to look

  • Api_Log__c — the app's log object. Errors from syncs, callouts, and background jobs land here with source class, severity, endpoint, and status code. First stop for any "data didn't populate" question.
  • Rings AI Settings page — sync cards show schedule state, next run, and last-sync watermarks.
  • Setup → Apex Jobs — status of the batch (RingsMatchAndSyncBatch) and queueable (RingsIncrementalSyncQueueable, RingsRematchQueueable) runs.
  • Enable Verbose Logging temporarily to capture full call detail while reproducing a problem; turn it off after.

Common issues

Symptom Likely cause Fix
Panel shows "couldn't load" / all callouts fail The user lacks external-credential access Ensure the user has Rings_AI_Standard_Access. Background jobs run as the user who started them.
Fields blank but panel works Bulk sync hasn't processed the record, or object sync is off Check Match Status; check the object's sync toggle; Run Now.
"Best user" / top-user fields blank The internal user isn't mapped Add the user mapping, then re-sync the record.
Relationship Paths empty or warning banner The viewing user isn't mapped Map the viewer.
Record stuck on "No Match" Identifiers too thin or wrong (typo'd website, missing email) Fix the identifier — the match retries automatically. Or use the panel's manual match ("Overridden").
Records went stale Incremental sync not scheduled Schedule it (Quick Start, step 7).
Leads with only a name never match in bulk The bulk matcher uses email / LinkedIn / domain, not name Populate an email or LinkedIn URL; matches on the next run (or instantly via the panel's Find Match).
Sync stops partway on a huge org Max Records Per Sync Run cap reached Raise the cap or let the next scheduled run continue.
All callouts fail with 401 in Api_Log__c API key invalid, expired, or not set Re-enter the x-api-key value on the External Credential (Quick Start step 1). If this started after a sandbox refresh, that's expected — see the note below.

After a sandbox refresh

Salesforce does not copy External Credential secrets into refreshed sandboxes. The API key must be re-entered on the sandbox's External Credential after every refresh — a panel that "broke after the refresh" is almost always this.

11 Governance

Security & Permissions

  • Two permission sets. Rings_AI_Standard_Access ("Rings AI Viewer") grants read-only access to every Rings field plus the external-credential access needed for callouts — assign it to everyone, admins included. Rings_AI_Admin layers on settings, job, and user-mapping management; it is assigned alongside Standard Access, not instead of it.
  • Users cannot edit Rings fields. All record fields are read-only in the permission sets; only the sync writes them.
  • The API key lives in the External Credential (Setup → Named Credentials), never in code, settings records, or logs.
  • SOC 2. Rings AI has completed a SOC 2 Type II audit, with the distributed Salesforce application in scope. Report available on request.
  • Logs are sanitized. Api_Log__c entries have query strings stripped and PII scrubbed before they're written.
  • What leaves your org. To match your records against Rings, the app sends only the identifiers needed to match — email, name, website domain, LinkedIn URL. No other CRM data leaves your org, and nothing is ever written into your Rings tenant. Everything else is data fetched from Rings, and the app never writes to your standard fields.

12 Lifecycle

Disabling & Uninstalling

Kill switch

Turning off App Enabled stops everything immediately — callouts, scheduled syncs, trigger processing. The panel shows a disabled state. Nothing needs to be unscheduled first. Use this if anything ever misbehaves; leave the app installed while investigating.

Uninstall (Setup → Installed Packages) removes everything the app added: objects, fields, components, permission sets, Named Credentials. Before uninstalling, cancel the app's scheduled jobs — Cancel Scheduled Sync on the Data Sync card, remove the incremental sync schedule, and abort the log-cleanup job under Setup → Scheduled Jobs — since Salesforce can block uninstall while an app's scheduled jobs are active. Be aware:

  • Data in the app's custom objects — settings, user mappings, logs — is deleted with them.
  • The Rings fields on Account/Contact/Lead/Opportunity and the data in them are removed.
  • Standard fields and their data are untouched — the app never wrote there.

API usage note

Rings enforces a monthly API request quota per tenant — your Rings contact can tell you your tenant's quota and current usage. The initial bulk sync of a large org is the biggest consumer — use Max Records Per Sync Run to spread the initial match over multiple runs, and raise it once you've seen a run's usage. To see exactly what the app is calling, turn on Enable Verbose Logging temporarily; every request lands in Api_Log__c with its endpoint and status.

Compatibility

Requires Lightning Experience and a Salesforce edition with API access (Enterprise Edition and above). Person Accounts are not currently supported — the matching model assumes business Accounts with separate Contact records; the app is untested in Person Accounts orgs. Talk to Rings before installing into one. The app uses only standard platform features (Apex, Named Credentials, Lightning components) and has no Hyperforce-specific dependencies; it does not read or write currency fields, so multi-currency orgs are unaffected. It is untested with Shield Platform Encryption and in Government Cloud — talk to Rings before installing into either.