Docs
For admins and reviewers: how to set up KPI Shield, review findings and keep going after the audit.
Getting started
- Connect your dialer under Setup → Integrations (Salesloft), or upload a call export under Setup → Import.
- Under Setup → Dispositions, approve which dispositions assert a live human conversation (for example “Conversation” or “Meeting booked”). “Connected” means a technical connection only. The disposition rule runs only on the meanings you approve; unapproved ones go to the Ops queue.
- Under Setup → Teams, check that every rep is on a team and assign each manager the teams they review. A manager sees only the reps on their teams.
- Set each rep's work state under Setup → Compliance. Reps in New York and Delaware aren't analyzed until they acknowledge the monitoring notice for their state.
- Have counsel review and publish the notices (Setup → Compliance), then send reps their portal links from the same page.
- Add protected numbers (HR, legal, unions, hotlines), internal numbers and conference lines under Setup → Numbers.
- Read Setup → Capability report: what your source provides and which checks it allows. Anything it lists as missing is out of scope.
- Managers take the short reviewer check (Review queue → How to review), then work the Review queue.
The in-app Get started checklist tracks these steps for you.
Connect Salesloft
A Salesloft admin creates an API key in Salesloft (Settings → API; menu names can differ). In KPI Shield: Setup → Integrations → paste the key, pick your team's time zone and how many days of history to load (30 by default).
- What it reads: call records, logged calls, users and teams (scope
calls:read), and transcripts of selected calls (conversations:read, optional; without it the transcript checks don't run). A call is selected when a check needs its transcript (at most 40 per rep per week, including ordinary long conversations) or it is already in an open finding. Only recorded calls of 60 seconds or more are fetched, and only on plans with transcript checks. - What it writes: it registers webhook subscriptions so Salesloft tells it about new calls (only when the app runs at a public https address), and removes them when you disconnect. It never writes call data.
- History loads newest first; new calls sync every 15 minutes. The key is stored encrypted and never shown again.
- Setup → Integrations shows progress, errors, rate-limit waits and a sync log. Disconnecting deletes the key and the webhook subscriptions and keeps the calls already synced.
Import a CSV
Any dialer export with one row per call works. Upload it under Setup → Import; we detect the columns, you confirm them, the time zone and the duration unit, and re-uploading the same file adds nothing twice. Rows we can't trust are held back with a reason, never guessed. A file can be up to 100 MB. It is stored encrypted while it is imported and deleted as soon as the import finishes. For dates like 05/09/2026 you choose month first or day first; the mapper suggests one when the data shows it.
| Column | Required | Also recognized as |
|---|---|---|
| Call ID | Yes | call id, id, call sid, callsid |
| Rep email | Yes | rep email, user email, agent email, owner email |
| Number dialed | Yes | to, to number, dialed number, called number |
| Start time | Yes | started at, start time, started, call start |
| Duration | Yes | duration, call duration, duration sec, duration seconds |
| End time | ended at, end time, ended, call end | |
| Answered time | answered at, answer time, connected at, answered | |
| Ring time | ring time, ring duration, ring s, ring seconds | |
| Caller ID used | from, from number, caller id, caller | |
| Direction | direction, call direction, type | |
| Status | status, call status, result, outcome status | |
| Disposition | disposition, call disposition, outcome, call outcome | |
| Disposition set by | disposition set by, disposition author, disposition source, disposition by | |
| Who hung up | hangup by, hung up by, disconnected by, hangup side | |
| Dialer mode | dialer mode, mode, dial mode | |
| Team | team, team name, group | |
| CRM record id | crm record id, contact id, lead id, record id | |
| Link to the call | source url, call url, link, recording url | |
| Recording state | recording state, recording status, recorded, recording | |
| Session id (legs of one call) | session id, conference id, parent call id, call session |
Duration can come from a duration column or an end-time column. Transcripts can't be uploaded, so the transcript checks don't run on CSV data, and hand-logged calls can't be told apart from dialer calls.
Reviewing findings
The Review queue shows one row per current finding; a group of calls to one destination is one row. It is sorted by evidence strength, then the time involved, then how often it recurs. There is no score or ranking of people. Managers see the teams assigned to them under Setup → Teams; HR and admins see everyone.
Open a finding and open its evidence (that is recorded), then record two separate things:
- A factual decision: Confirmed, Dismissed or Inconclusive. “Need more evidence” keeps the finding in review.
- The business context: legitimate navigation, wrong or bad destination, routing issue, logging error, policy concern, or unresolved.
A dismissal or a policy concern needs a short reason. Confirming an observation is not a finding of misconduct. There are no bulk actions, and the history is append-only. When new evidence arrives, the finding is worked out again: the earlier version and its decision stay, marked as replaced by newer evidence.
Data and system problems (unapproved dispositions, a stale sync, reps not matched, held-back import rows, a destination several reps reach) go to the Ops queue, never to a rep. Rep-weeks picked at random for calibration are not put in managers' queue.
A documented review record (every finding decided, the rep's notice acknowledged and side heard, peers compared where that applies, a second reviewer who agrees, and no open appeal) can be exported by the HR role. It records how the review was done; it is not a disciplinary decision. See the methodology.
Suppressions
When a pattern is expected, such as a phone tree every call to one clinic goes through, suppress the rule for that scope instead of deciding it again and again. A suppression covers one rule for one destination, rep, team or the whole organization, has an owner, a reason and an expiry (30 days by default, 180 at most), and can be revoked.
- It hides matching unresolved findings from the Review queue. It never deletes a finding or its history, and never hides a decided finding. “Include suppressed” shows them, labeled.
- Managers can suppress for reps and teams they review; a destination or the whole organization needs an owner or admin.
- Setup → Suppressions lists active and recently ended suppressions.
Reps: notices, portal and personal numbers
Reps don't need an account. Owners, admins and HR send each rep a personal portal link (valid 30 days) from Setup → Compliance. The link is emailed to the rep's address on file, and staff never see it. Setup → Weekly summary shows whether email sending is on for your account; while it is off, the email is recorded and not sent.
In the portal a rep acknowledges notices and registers personal numbers so calls to them are left out. A rep always sees the decisions made about their own calls (confirmed, dismissed or inconclusive, with the business context), can add context to any of them, and can appeal a confirmed observation to a different reviewer. Findings nobody has reviewed yet are shown to reps only when your company turns on “Reps also see open observations before review” (always on in California and outside the US).
Number lists
- Protected: never analyzed and never sent to an AI model.
- Conference lines and meeting bridges: long quiet calls to them aren't treated as open lines.
- Internal: company lines, optionally with the person who owns each one.
Questions
Do you score reps?
No. There is no score or ranking of people, only findings with evidence.
What does “verified” mean?
Supported by the available evidence and the current analysis method. Where the evidence is missing or partial, the finding says “insufficient evidence” instead of guessing.
Do you record calls?
No. Transcript checks use the transcripts your dialer already makes, fetched only for selected recorded calls of 60 seconds or more and deleted after 30 days at most.
What about personal calls?
Registered personal numbers are excluded. On plans with AI review, before the model reads a transcript it sees only about the first minute and answers one question: is this a work call? When the call is clearly personal and nothing in it points to work, only the label “non-business call” is kept, the text is deleted, and the rest of the transcript is never read. A transcript the full review later finds personal is deleted the same way.
