Skip to content

Automation  ·  Revenue operations

How to build deal desk approvals

A rep needs an 18% discount approved before Friday, the request sits in a manager's inbox, and the quote goes out anyway. Here is the model behind deal desk approvals that are fast and stick, the prompts that build it, and what it takes to run in production.

Built with Tray Headless

  1. System Salesforce
  2. Step Match the request to a rule
  3. Step Approve in Slack
  4. Step Lock the quote
  5. System DealHub
Also Escalate on silence

The quote can only go out at the terms that were approved, and every decision is kept on the deal.

The short answer

What are deal desk approvals?

Deal desk approvals come down to four things: a rules table that decides who approves what, based on discount, deal size and term, a request that reaches the approver where they work with the whole deal in view, a quote that can only go out at the terms that were approved, and a record of every decision on the deal itself. Most teams get the third one wrong. An approval that the quote can quietly drift away from is a suggestion, and finance finds the difference after the contract is signed.

Stage 5 of 8: Deal desk approvals. Part of Revenue operations automation, end to end : every stage, the systems it runs on and the guide that builds it.

What matters here

  • Keep the approval rules in a table RevOps can edit. Who approves a 15% discount changes more often than the workflow does.
  • Send the request with the deal attached: amount, discount, term, margin and the rep's reason. An approver who has to open the CRM to decide will decide later.
  • Tie the approval to the exact terms. If the quote changes after approval, the approval no longer applies.
  • Escalate on silence, not on a calendar reminder. A request with no answer by its deadline goes to the next approver automatically.
  • Store every decision on the opportunity, with who decided and why. That is the record the auditor and the next deal desk review both ask for.

Who this is for

You run revenue operations or the deal desk. Discount approvals happen in email threads and direct messages, nobody can say how long one takes, and quotes sometimes go out at terms nobody signed off.

How it works in practice

Everything between a rep asking for non-standard terms and the quote going to the customer.

  1. 1

    The rep submits the request from the deal

    Discount, payment terms, contract length or a custom clause, with a reason. Nothing to fill in twice.

  2. 2

    The rules table picks the approver

    Up to 10% the sales manager, up to 20% the regional VP, anything with custom payment terms goes to finance too.

  3. 3

    The approver decides in Slack

    One message with the deal summary and Approve, Reject or Ask a question. The decision writes back to Salesforce.

  4. 4

    Silence escalates

    No answer by the deadline and the request moves to the next approver, with the rep told where it is.

  5. 5

    The quote is locked to the approved terms

    If the rep changes the discount after approval, the quote can't be sent until it is approved again.

  6. 6

    The decision is recorded on the deal

    Who approved, what they approved, when, and the reason given, on the opportunity and in the warehouse.

What deal desk approvals are made of

Four parts. The third is the one that makes the other three worth having.

An editable rules table

Thresholds by discount, deal size, term length and region, with the approver for each. RevOps changes it without a rebuild.

A request with the deal in it

Everything the approver needs in the message itself, so the decision takes a minute rather than a meeting.

A lock between approval and quote

The approval covers the exact terms requested. Any change to those terms clears it, so the quote matches what was signed off.

A decision record

Every approval, rejection and question kept on the deal, which is what turns approval time from an anecdote into a number.

The Tray Headless prompts

Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.

Once per project, run /tray-workflows:set-workspace to pick the workspace these build in. Point it at a sandbox first.

  1. 1

    Set up, then find where requests live today

    Approvals that start outside the deal record can't be locked to it.

    Headless skills build-workflow

    Use build-workflow. The systems in play are Salesforce for the deal,
    DealHub for the quote, Slack for approvers and Snowflake for reporting,
    or whatever we run in those seats.
    
    I need the Opportunity and Quote objects, the discount, term length,
    payment terms and amount fields, and any approval fields that already
    exist on the quote.
    
    Tell me where approval requests come from today. If they start in email
    or direct messages, the first job is a request button on the deal.
  2. 2

    Build the rules table

    The rules change every quarter. The workflow shouldn't have to.

    Headless skills build-workflow

    Use build-workflow. Build an approval rules table I can edit, not rules
    in code:
    
      discount        deal size        approver
      up to 10%       any              sales manager
      10% to 20%      under 100k       regional VP
      10% to 20%      100k and above   regional VP, then CRO
      above 20%       any              CRO and finance
    
    Plus these regardless of discount:
    
      Payment terms longer than 30 days    add finance
      Contract longer than 36 months       add finance
      Any custom clause                    add legal
    
    Every request carries which rule matched, so the rep can see why it went
    where it went.
  3. 3

    Send the request where the approver works

    The difference between a decision today and a decision next week.

    Send each approver one Slack message per request with: account, amount,
    discount requested, list price, term, payment terms, the rep's reason
    and a link to the deal.
    
    Buttons for Approve, Reject and Ask a question. Ask a question opens a
    thread with the rep and pauses the deadline until the rep answers.
    
    Write the decision, the approver and the time back to the quote in
    Salesforce the moment the button is pressed.

    Put the margin or the discount against list in the message itself. An approver who has to work it out will put it off.

  4. 4

    Lock the quote and escalate on silence

    Two rules that decide whether anyone trusts the approval.

    Headless skills tray-gotchas

    Use tray-gotchas, then build both rules.
    
    Lock: store the exact terms that were approved. If the discount, term,
    payment terms or amount on the quote change after approval, clear the
    approval and block sending until it is approved again. Tell the rep why.
    
    Escalate: every request gets a deadline from the rules table, for
    example four working hours for a manager and one working day for a VP.
    No answer by then and it goes to the next approver up, with the original
    approver and the rep both told.
    
    Never approve anything automatically because time ran out. Silence moves
    the request up, it never says yes.
  5. 5

    Record every decision and measure the wait

    The step that turns approval time into a number someone can improve.

    Land every request and decision in Snowflake: rule matched, approver,
    decision, time to decide, and whether the deal closed.
    
    Then report:
    
      Median time to decision per approver and per rule.
      Requests that escalated, and who they escalated from.
      Approved discount against closed-won rate, by band.
      Quotes blocked by the lock, which shows where terms change late.
    
    If one rule sends most requests to the CRO, the thresholds are wrong,
    and that is a rules table change, not a workflow change.
  6. 6

    Prove it works, then hand the rules to the deal desk

    Because pricing policy changes faster than anyone plans for.

    Run the per-step checks and the whole-workflow audit before this touches
    a live quote.
    
    Then open the same workflow in Tray Build so the deal desk can change
    thresholds, approvers and deadlines in the visual canvas without a
    ticket.

What it connects to

Approvals read the deal, reach the approver and hold the quote to the decision.

Salesforce

Read the opportunity and quote, and write the request, the decision and who made it back to the deal.

Reads and writes

DealHub

Read the quote terms, and block sending when the approved terms no longer match.

Reads and writes

Slack

Send each approver the request with the deal in view, and take the decision from the buttons.

Reads and writes

DocuSign

Read envelope status, so a contract can't go for signature at terms that were never approved.

Reads

Snowflake

Land every request and decision, so time to approve and approval against win rate are measurable.

Writes

Same build, other stacks

The design does not change if you run something else in one of these seats. The same prompts build it against Microsoft Dynamics 365, Google BigQuery, Microsoft Teams, HubSpot, Databricks or Google Chat.

Connections in this build

Field mapping, templates and common problems for each pairing: DealHub + Salesforce, Salesforce + Slack, DocuSign + Salesforce and DealHub + DocuSign.

Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.

Running it in production

This sits between a rep and a customer at the end of the quarter. It has to be fast, and it has to hold.

It runs on the platform, not on someone's laptop

Requests, reminders, escalations and the lock run on the same engine, with a history of every step.

Silence never approves

A request with no answer moves up the chain. Nothing is approved because a deadline passed.

Credentials are managed, never written into the build

Write access is limited to the approval fields on the quote and the opportunity. Price and amount stay with the rep.

The deal desk owns the rules

Thresholds, approvers and deadlines open in Tray Build, changed by the people who set pricing policy.

Every decision is kept

Who approved what and when is on the deal and in the warehouse, which is what an audit or a pricing review asks for.

Questions people ask

Why not just use the approval process built into the CRM?

Use it if it covers you. Most teams outgrow it when approvals need to reach people in Slack, depend on more than one system, escalate when nobody answers, or need a record outside the CRM for reporting.

What happens if the rep changes the quote after approval?

The approval is cleared and the quote can't be sent until it is approved again. The approval covers the exact terms that were requested, nothing else.

What happens if the approver doesn't answer?

The request moves to the next approver up when its deadline passes, and the rep is told where it is. It is never approved automatically.

How is this different from contract approval in order-to-cash?

Deal desk approvals happen before the quote goes to the customer. The contract and signature stage of order-to-cash checks that the signed contract matches what was quoted. The two share the decision record.

Last reviewed October 2026.