Negotiation analytics
What this page is — the capability that turns a negotiation trail into numbers: which topics are contested, how many rounds each has taken, which are stalled, and which side is blocking.
What it is for — so when a deal drags, the conversation is about the one topic that is actually holding it up, backed by a round count, rather than about a general sense that things are slow.
The problem it solves — a slow deal gets a vague "things are dragging" instead of the one topic actually holding it up.
Route: /org/papers/documents/<document>/ai → Negotiate → Negotiation analytics ·
Permission: Use AI drafting/extraction/Q&A for documents. ·
Utility: papers_negotiation_analytics · Cost: 450 credits estimated, 1,800 maximum.
1. What it is
Where Negotiation summary describes the argument in prose, this measures it. It reads the exchanged suggestions and redline comments and returns one entry per contested topic, each carrying a round count, a status and a blocking side — plus deal-level tallies and a single recommended next move.
The two outputs that do not exist anywhere else in Papers:
| Output | Why it matters |
|---|---|
rounds | Distinguishes a hard topic from a stuck one. Four rounds on a liability cap is a different problem from four rounds across the whole deal |
blocking_side | Says whether the delay is theirs, yours, or mutual. Teams are consistently wrong about this |
conceded_by_us and conceded_by_them in metrics are the other uncomfortable pair: a running
count of who has actually moved.
| Returns | |
|---|---|
| Negotiation analytics | Rounds, status, blocking side, deal metrics |
| Negotiation summary | Positions and recommended moves in prose |
| Fairness / balance | How one-sided the terms are, ignoring the process |
Run analytics to decide what to work on; run the summary to decide what to say about it.
2. Why you would use it
"This deal is taking forever" is not actionable. "The liability cap has been through four rounds, is stalled, and they are the ones blocking it" is.
- It prioritises objectively. Most-blocking first, with a round count behind the ordering. That ends the argument about which point to escalate.
- It names the blocker, including when it is you.
blocking_side: our_sideis the finding teams least expect and most need — the delay is often an internal approval nobody is chasing. conceded_by_usversusconceded_by_themis a reality check. A negotiation where you have conceded six points and they have conceded one is a pattern worth seeing before round seven.stalledis distinguished fromopen. A topic nobody has touched in three rounds is a different failure from one being actively argued, and it needs a phone call rather than a redline.- It makes escalation credible. A manager asked to intervene gets numbers, not an impression.
3. What you provide
Nothing. It is a one-press capability with no parameters.
| Input | Required | Notes |
|---|---|---|
| — | — | No parameters. It measures the document's own trail |
This measures exchanged suggestions and redlines. On a document that has not actually been negotiated it returns no bottlenecks and zeroed metrics, and says so. That is not a failure; it is the only honest answer when there is nothing to measure.
4. What it reads automatically
| Read from the document | Used for |
|---|---|
| Title & family — e.g. "MSA" | Framing |
| Party names | Resolving blocking_side to our side or the counterparty |
| Negotiation trail — suggestion and redline comments, oldest first, with author side and accepted/rejected status | Everything else |
Note what is not on this list: the document body. Analytics measures the process, not the text. A topic can be stalled regardless of what the clause currently says.
5. What you get back
bottlenecks[] — one per contested topic, most-blocking first.
| Field | Type | Values | Means |
|---|---|---|---|
topic | string | — | Short label — "Liability cap" |
rounds | number | — | Back-and-forth exchanges on this topic |
status | enum | open, resolved, stalled | stalled = nobody has moved it recently |
blocking_side | enum | our_side, counterparty, both, none | Who is holding it up |
first_raised | string | — | Where it entered the negotiation — "Round 1 redline on cl. 11" |
note | string | — | Why it is stuck, and what would unblock it |
metrics — deal-level tallies.
| Field | Means |
|---|---|
total_rounds | Rounds across the whole negotiation |
open_topics | Topics not yet resolved |
conceded_by_us | Points your side has given |
conceded_by_them | Points the counterparty has given |
summary — 2–3 sentences on how far the deal is from closing and the single biggest bottleneck.
recommendation — the concrete next move that would clear the most valuable blockage.
6. Worked example
A deal has been running six weeks and the sales lead wants to know what to escalate.
Input: none.
The first entry of bottlenecks[]:
Liability cap rounds:
4· status:stalled· blocking_side:counterpartyfirst_raised: "Round 1 redline on cl. 11" note: "They insist on 12-month fees cap; we want 24. Offering a supercap for the data-breach carve-out would likely unblock it."
What the lead does with it. Three facts settle the escalation: it has been contested since round
one, nobody has moved recently, and the block is on their side. That is a call to their commercial
lead, not another redline — a stalled topic does not get unstuck by sending the same document back.
metrics on the same run read total_rounds: 4, open_topics: 2, conceded_by_us: 5,
conceded_by_them: 1. That asymmetry is what the lead actually opens the call with.
7. Running it
- Open the document in Orbit Papers — one that has genuinely been negotiated.
- Open the AI Assistant drawer, or go to the document's AI workspace.
- Choose Negotiation analytics under Negotiate.
- The bottleneck list and metrics appear in a result tab and are saved to the document.
Re-run after each counterparty round; that is when round counts and statuses change. A result cached
from two rounds ago will understate rounds on every topic.
Available for auto-run from the type's AI Config tab, where on_round is the only event that
makes sense — a submit or finalize event has no new trail to measure. See
AI configuration.
8. The admin contract
| Must be true | Where | What happens if it is not |
|---|---|---|
| Your role holds Use AI drafting/extraction/Q&A for documents. | Role editor | The AI Assistant button does not appear |
The papers_negotiation_analytics utility is active | Orbit AI Flow → utilities | "This utility is currently disabled" |
| The utility is enabled for your organisation | /org/ai-utilities | Absent from Negotiate, with no error |
papers.ai_monthly_credit_cap not yet reached | System Config | "monthly AI credit cap reached: n of n credits used this month" |
| Suggestions and comments are enabled on the type | Behaviour settings | There is no trail, so every metric is zero |
| Counterparty rounds are recorded on the document | Redlines and rounds | rounds undercounts, and a stalled topic can look active |
For a confidential document, auto-run is default-denied — a platform administrator must set
papers.ai_confidential_cloud to the literal allow, and the block appears only in the server log.
A manual press still works, and where a local model key is configured the run is forced on-prem and
audited on the timeline as ai_local_routed.
9. Don't confuse this with…
| Negotiation summary | Positions in prose. This is rounds and blocking sides in numbers |
| Analytics | Module-wide reporting across all documents. This is one negotiation |
| Fairness / balance | Judges the terms. This judges the process |
| Approval routing | Where a document should go internally. This is about the external back-and-forth |
10. Troubleshooting
| Symptom | Cause |
|---|---|
| Zero bottlenecks and zeroed metrics | No trail — the document has not been negotiated on-platform (§3) |
rounds looks far too low | Exchanges happened by email and were never captured as comments or redlines |
blocking_side: our_side on something we thought was theirs | Usually an internal approval or review that has not moved. Check the approvals inbox |
A topic shows stalled but we replied yesterday | The reply was not recorded on the document, or did not move the position |
conceded_by_them is 0 | Either a genuinely one-sided negotiation, or their concessions arrived off-document |
| The metrics did not change after a round | The result is cached with the document — re-run (§7) |
| The capability is missing from Negotiate | Role lacks Use AI drafting/extraction/Q&A for documents., or the utility is off for the organisation (§8). The document type does not gate it — AI Config controls auto-run only |