Draft each rep's review from the deals they actually closed in Salesforce
PerfCopilot reads the Salesforce opportunities each rep owned and closed during the review cycle, then drafts a performance review where every claim links back to the deal record behind it, bias-checked before you send it. Access is read-only, Opportunity records only, and nothing is ever written back into Salesforce.
Connect Salesforce, free up to 5 seats → · read-only, no credit card, no seat minimum
✓ Closed deals, renewals and upsells · ✓ Every line cited to a deal record · ✓ Bias-checked before you send
What PerfCopilot reads from Salesforce
The connection is an org-wide OAuth install with read-only access to Opportunity objects. Each employee is mapped to their Salesforce OwnerId, and the query is scoped to deals that closed inside the cycle window:
SELECT Id, Name, StageName, Amount, CloseDate, Type
FROM Opportunity
WHERE OwnerId = '<id>' AND IsClosed = true AND CloseDate >= <cycle start>
Those five fields are all standard Salesforce Opportunity fields: StageName and Type are picklists, IsClosed is a system-managed checkbox, and Amount and CloseDate carry the deal value and the date it landed (Salesforce field reference, Opportunity). PerfCopilot turns them into three signal types:
- Closed deals. Every opportunity the rep owned that closed in the cycle, won or lost, with its name, amount, close date, and pipeline.
- Renewals. Deals typed as existing-business renewals, tracked by the ARR they retained.
- Upsells. Expansion deals that closed won, tracked by amount.
Each deal lands as its own evidence row, timestamped by its close date, which is what makes a line in the finished review clickable back to a specific opportunity rather than a dashboard aggregate.
What actually reaches the review draft
The model that writes the review does not see a CRM dump. Every closed opportunity is stored, but what reaches the prompt is a four-field summary:
[CRM DATA]
deals_won: 8
close_rate: 73%
arr_retained: $142,000
renewals_closed: 4
Losses are not shown as a separate count. They are in the close_rate denominator, which is every closed opportunity in the cycle, so a rep who closed eight of eleven and a rep who closed eight of thirty do not read the same.
Alongside it sits a median for deals won taken from the organization's own previously submitted reviews, so "closed eight" is assessed against what this team has actually delivered before rather than against a number someone picked in January. That baseline deliberately excludes the cycle being reviewed, so the draft is never a same-cycle ranking of one rep against another. In a single-rep organization it falls back to that rep's own history. The draft then cites the individual deals behind any claim it makes.
Why closed-won alone is an unfair review
Revenue is the obvious number and the easiest one to misread. Two reps with identical skill will post different numbers if one inherited a mature patch and the other opened a new one. Harvard Business Review made this argument plainly for territory design: once you know an account's real potential, you can judge a rep on their own execution rather than on the territory they were handed, and compensate for performance instead of luck (HBR, 2012).
The second failure is in the language, not the numbers. HBR's 2024 research on calibration meetings found they can introduce bias as readily as they remove it, and the pattern to watch is personality language standing in for evidence: in an analysis of performance evaluations in tech cited by the Equality Action Center's Bias Interrupters project, 66% of women's reviews contained at least one negative personality criticism, against 1% of men's. A sales review is unusually exposed to this, because so much of the job is described in style terms: pushy, polished, too soft, not hungry enough.
PerfCopilot works against both:
- Context next to the number. Deals won, close rate, ARR retained, renewals closed, and the historical median sit together, so a smaller book is not silently read as a weaker rep.
- A bias and fairness check on the draft before the manager sees it, flagging language that rewards style over outcome, leans on the last month of the cycle, or reads differently for two people with similar evidence. The same screen that stops an engineering review becoming a commit-count contest stops a sales review becoming a bookings leaderboard.
Where this is honest about its limits
A few things are worth knowing before you connect it:
- Owner mapping is required. The query filters strictly by
OwnerId, so an unmapped employee returns nothing rather than a partial picture. - Renewal and upsell splits follow the
Typepicklist. Salesforce lets admins define their own opportunity types, and the standard examples are values like Existing Business and New Business (Salesforce Help, Opportunity Fields). PerfCopilot keys renewals offExisting Customer - Renewaland upsells offExisting Customer - Upgrade. If your org renamed those, the deals still count as wins, they just will not be broken out. - One CRM per organization. Salesforce or HubSpot, not both at once. The shared mechanics for either are in the CRM integration docs.
- Cycle windows are strict. A deal that closed the Friday before the cycle opened belongs to the previous cycle, by design, so evidence cannot drift between review periods.
- This is a review-writing layer. It is not a commission engine, a forecasting tool, or a territory planner, and it does not replace them.
Salesforce reports, revenue tools, and HR platforms compared
| Salesforce reports & dashboards | Sales performance / commission tools | HR review platforms | PerfCopilot | |
|---|---|---|---|---|
| Pulls closed opportunities per rep | ✓ | ✓ | ✗ | ✓ |
| Cites the specific deal behind a claim | ✗ (aggregates) | ✗ (totals and payouts) | ✗ | ✓ |
| Bias and fairness check on the review | ✗ | ✗ | partial (language hints) | ✓ |
| Writes the review, not just the metric | ✗ | ✗ | ✗ (blank form) | ✓ |
| Combines CRM with calls, email, and tickets | ✗ | ✗ | ✗ | ✓ |
| Sealed PDF with public hash verification | ✗ | ✗ | ✗ | ✓ |
| Cost floor | included in your edition | varies by vendor | varies by vendor | Free up to 5 seats, no seat minimum |
The cell that matters is the second row. A dashboard tells a manager a rep closed $142k. A cited review shows which eight opportunities made it up, which three renewals held, and which claim rests on which record, so the rating survives the comp conversation that follows it.
Pair Salesforce with the rest of the cycle
CRM evidence tells you what closed. It does not tell you how. Most go-to-market reviews get sharper when the deal record sits next to the work that produced it:
- Aircall call activity for outbound cadence, connect rate, and dispositions on the way to the close.
- RingCentral activity for contact-center and inbound coverage.
- Email collaboration signals, headers and volume only, never message bodies, for the follow-up discipline behind a long cycle.
One cycle, several sources, one cited draft. If you want the broader picture of how this category fits together, the performance review software buyer's guide covers where a writing layer sits relative to a full HR platform, and the performance review phrases guide has competency-by-competency framings you can reuse for revenue roles.
Setting it up
- Open Admin → Integrations and connect the Salesforce card through OAuth, granting read-only access to Opportunity records.
- Set your org's instance URL, for example
https://acme.my.salesforce.com, used for every query. - Map each rep to their 18-character Salesforce OwnerId in the unmapped-employees list.
- Run Sync All for the active cycle, then generate. The full walkthrough, including troubleshooting for zero-deal syncs, is in the Salesforce setup docs.
Prefer to see the output before connecting anything? Run the performance review generator or the standalone bias checker first, and read how data is stored and retained on the security page.
Connect Salesforce, free up to 5 seats → · read-only, no credit card, no seat minimum
FAQ
What does PerfCopilot read from Salesforce? Closed opportunity records owned by each mapped employee inside the review cycle: name, stage, amount, close date, and type. From those it derives whether each deal was won or lost, renewals and whether each renewed, and upsells. The review prompt itself is shown a four-field summary: deals won, close rate, ARR retained, and renewals closed. Access is read-only and limited to Opportunity records, and nothing is written back to Salesforce.
Does it read my customer records or contacts? No. The connection queries Opportunity records only, filtered to the owning rep and to deals that closed inside the cycle window. Contacts, leads, accounts, cases, notes, and email logged against a record are out of scope.
Will the review just rank reps by revenue closed? No. Revenue arrives with context: deals won, close rate, ARR retained, renewals closed, and a median for deals won drawn from the organization's previously submitted reviews, so a rep in a tougher territory is not read as a weaker rep. That baseline excludes the cycle being reviewed, so it is not a same-cycle leaderboard. A bias and fairness check then runs on the draft before a manager sees it.
Why are my renewals or upsells missing?
Renewal and upsell detection keys off the opportunity Type picklist, using Existing Customer - Renewal and Existing Customer - Upgrade. Those values are configurable per org, so if your team renamed them the deals still count as wins, they are simply not split out.
Do I have to move my team off Lattice, 15Five, or BambooHR? No. PerfCopilot drafts from Salesforce activity and hands you the finished review as a sealed PDF to file wherever your records already live. It is a writing layer, not a system of record, so there is nothing to migrate. There is no seat minimum, so one sales manager can run it for one team.