How to

How to build a deal desk discount approval app

Discount requests arrive in Slack at 6pm on the last day of the quarter. Here is the model behind a deal desk that can handle that, the prompts to build it, and what it takes to run it.

The short answer

A deal desk approval app is four parts: a request that captures the full deal economics, a routing ladder set by discount depth and contract value, an approver view with real context, and an exception record. The failure mode is speed: a deal desk that takes two days at quarter end gets routed around, and once it is routed around it stops being a control. Optimise for time to decision, not for thoroughness.

deal-desk.helix-app.ai

Deal desk

7

Waiting on you

41 min

Median to decision

22%

Median discount

4

Above the ladder

Auto-cleared 3

Brightsea

135K · 12%

Fenwick

48K · 9%

With manager 2

Kestrel Ltd

64K · 18% · 12 min

With VP 1

Halden Foods

410K · 27% · 1 day

With CRO 2

Northrise

240K · 32% · 3h

Vantor

88K · 41% · 6h

A sketch of the desk at quarter end. Two cards are flagged for waiting, not for size: a desk that is slow in the last week of a quarter is a desk people route around.

What matters here

  • A deal desk app is four parts: a request with real deal economics, a routing ladder, an approver view with context, and an exception record.
  • Route on discount depth and contract value together. A 30% discount on a small deal and on your largest contract are different decisions.
  • Capture margin impact, not just percentage off list. Approvers who only see a percentage approve the wrong things.
  • Time to decision is the metric that determines whether the desk is used or bypassed. Track it from the first day.
  • Every approval needs a reason from a fixed list plus free text. The list is what makes the exception report readable a quarter later.
  • The app reads from your CRM and influences what gets signed, so managed credentials and scoped access are part of the build, not an afterthought.

Who this is for

You run a deal desk, revenue operations or sales finance. You already know your discount ladder. What you want is for reps to get an answer in minutes instead of a day, and for you to be able to answer what your discounting actually cost last quarter.

How it works in practice

What a rep and an approver each do, and why speed is the whole design.

  1. 1

    A rep sees the ladder before they ask

    Entering the numbers shows which tier the request lands in and what the next tier down would need. Most requests shrink at this point.

  2. 2

    The request captures the economics, not a percentage

    List, proposed, term, payment terms, ramp and committed volume. A percentage alone hides the difference between a small deal and your largest contract.

  3. 3

    It routes by depth and value together

    A ladder based on both, published in the app, so nobody has to ask who approves what.

  4. 4

    An approver decides in minutes

    Account history and what comparable deals cleared at, on the same screen. Seeing that similar deals closed at 18 percent makes a 30 percent request answer itself.

  5. 5

    Nothing waits on someone travelling

    Every approver has a deputy and requests reroute automatically. Quarter end is when this matters and when people are least reachable.

  6. 6

    Every exception carries a reason code

    Which turns a quarter of individual decisions into a discount policy conversation you can actually have.

What a deal desk app is made of

A deal desk app is not an approval chain with a discount field. It is four parts, and the first one is where most implementations go wrong.

A request with real economics

List price, proposed price, discount percentage and absolute amount, term length, payment terms, ramp structure, committed volume, and any non-standard terms. Discount percentage alone hides the deals that matter.

A routing ladder

Who approves what, based on discount depth and contract value together, with a clear ceiling for each level. Published in the app so reps know before they ask.

An approver view

Everything needed to decide on one screen: the request, the account history, what similar deals got, and the margin impact. An approver who has to open the CRM will approve later, which means slower.

An exception record

What was approved, by whom, when, and why, with the reason chosen from a fixed list. This is the artefact that lets you change the discount policy with evidence rather than opinion.

These prompts start from a Helix project, which is what handles sign-in, credentials and hosting. Start with Helix

The prompts

Paste these into Claude Code, Codex or Cursor in order. Each one leaves you with something that runs, so you can stop after any step.

  1. The request, and showing the ladder first

    Capturing what an approver needs, and shrinking the ask before it is made.

    In this Helix project, build me a deal desk approval app.
    
    A rep asks for a discount, so capture what the discount actually is: list
    price, proposed price, term length, payment terms, any ramp, committed
    volume, and any non-standard terms. Derive the discount percentage and
    amount from the prices so a rep cannot enter them inconsistently.
    
    Keep the approval ladder in one editable file: tiers defined by discount
    depth and contract value together, each with an approver role and a
    ceiling. Not depth alone. Thirty percent off a small deal and off our
    largest contract are different decisions.
    
    Then do the one thing that changes behaviour: as the rep types the
    numbers, show them which tier they are about to land in and what the next
    tier down would require. A rep who can see that 24 percent clears one
    approver and 26 clears three will usually ask for 24.
    
    I sign in through Helix, so do not build a login page. Read the signed-in
    user from the runtime. And do not put any key or connection string in the
    code: if this needs to reach another system, tell me and I will create the
    connection in my workspace.

    Worth knowing. Showing the tier before submission is the cheapest discount control that exists, and it costs one screen.

  2. The approver's screen, built for speed

    Everything needed to decide, without opening the CRM.

    Now the screen an approver opens, and treat time to decision as the thing
    you are optimising.
    
    Show the economics: list, proposed, discount as percentage and amount,
    annual and total contract value, term, and margin impact if I give you a
    cost basis. Show what we have sold this account before and what discounts
    they have had. And show comparable deals: what similar-sized deals in this
    segment were approved at, with the median and the range.
    
    That comparables panel changes approver behaviour more than any policy
    document, so make it prominent.
    
    Actions: approve, approve at a lower figure they counter with, reject, or
    ask the rep a question without ending the request.
  3. Nothing stalls at quarter end

    Deputies, escalation, and the metric that tells you if this is working.

    Route each request through every approver its tier requires, in sequence,
    and stop the chain on the first rejection.
    
    Give every approver a named deputy, and reroute automatically after a
    number of hours I set. Quarter end is exactly when people are travelling
    and exactly when this matters.
    
    Track time to decision per request, per approver and per tier, and put it
    on a dashboard. A desk that takes two days in the last week of a quarter
    gets routed around, and once it is routed around it has stopped being a
    control. That number is the early warning.
  4. Turn a quarter of decisions into a policy conversation

    Reason codes, and the report they make possible.

    Every approval and rejection records who, when, the figure approved, and a
    reason chosen from a short fixed list plus free text. Keep the list to
    about six options and make it editable. Free text alone produces a log
    nobody can summarise, which is why discount policy never changes.
    
    Append an audit entry for every state change with a snapshot of what the
    approver saw.
    
    Then report: total discount granted by quarter, segment, rep and reason.
    Median discount by tier. And a single list of every deal approved above
    the standard ladder, which is where a discount policy review should
    start.
  5. Connect it to real systems

    The step that turns a working prototype into something with your data in it.

    Now connect it to the systems we actually run, so it works on real data
    rather than the rows you seeded.
    
    Anything in angle brackets is a placeholder. Swap it for whatever we use
    instead, and have the app name the connection it wants rather than assume
    a vendor, so changing my mind later is a config change and not a rewrite.
    
    <Salesforce>. Read the opportunity, the account history and comparable
    closed deals, then write the approved pricing back.
    
    <Salesforce CPQ>. Read list price and any ramp structure, so the discount
    is calculated rather than typed.
    
    <Slack>. Reach an approver at quarter end, which is when speed is the
    whole point.
    
    <Okta>. Read the manager chain and group membership, so the approval
    ladder is derived from the real org rather than a hardcoded list of names.
    
    <Gong>. Read what was actually said on the call, which is often the
    justification a rep did not write down.
    
    <DocuSign>. Read whether the quote at the approved discount was ever
    signed, which closes the loop on exceptions.
    
    <Snowflake>. Land each approved exception beside the closed deal, which is
    what turns whether we are discounting more than last year into a query.
    
    Only write where I have said to write. Everything else is read only.
    
    Do not write a key, a token or a connection string anywhere in the code,
    and do not ask me to paste one. Tell me which connections you need and I
    will create each as an authentication in my Helix workspace. Reference
    them by alias.

    Worth knowing. Every name in angle brackets is a placeholder for whatever you run. Helix holds the credential as a workspace authentication, so the app references an alias and never the secret itself.

  6. Ship it

    The last step of every build: a URL, and the right people on it.

    Deploy my app.

    Worth knowing. Your assistant runs helix deploy underneath and the app comes back as a URL. Set Access Control before sharing: reps see their own requests, the desk sees everything.

What it connects to

A deal desk lives next to the CRM. Almost everything an approver needs to decide is already in it.

  • Salesforce

    Read the opportunity, the account history and comparable closed deals, then write the approved pricing back.

  • Salesforce CPQ

    Read list price and any ramp structure, so the discount is calculated rather than typed.

  • Slack

    Reach an approver at quarter end, which is when speed is the whole point.

  • Okta

    Read the manager chain and group membership, so the approval ladder is derived from the real org rather than a hardcoded list of names.

  • Gong

    Read what was actually said on the call, which is often the justification a rep did not write down.

  • DocuSign

    Read whether the quote at the approved discount was ever signed, which closes the loop on exceptions.

  • Snowflake

    Land each approved exception beside the closed deal, which is what turns whether we are discounting more than last year into a query.

Each line says whether the app reads, writes or both. Anything not described as writing should be read only.

Named systems are the ones most teams actually run, not a list of the only ones that work. Swap in whatever you use.

Each connection is an authentication in your Helix workspace, referenced by alias. The app names the connection it wants and never holds the credential, so nothing here ends up in your code and any of it can be rotated or revoked without a redeploy.

Running it for real

The build gets you a working desk. It reads CRM data, decides what pricing gets offered, and produces the record a revenue audit asks for, so it needs to be run properly.

AI Deployment

Get it to a URL people can open

One command takes the app from your assistant to a live address, so the people who need it get a link rather than instructions for running it locally.

App Security

Put your identity provider in front of it

Discount authority maps to real roles. SSO means approvers sign in with their existing account, and access is scoped so a rep sees their own requests while the desk sees everything.

App Security

Connect the system of record with managed credentials

Reading opportunities and writing approved pricing back needs real CRM access. Granting it to the app rather than pasting a key into it means it can be rotated or revoked without a redeploy.

App Registry

Put a name on it

Every app carries a named owner and an entry IT can see, so the tool does not become nobody's problem when the person who built it changes role.

Cost Management

Know what it costs to run

Per-app spend visibility, with budgets and caps, so an internal tool cannot quietly become a line item nobody can explain.

Questions people ask

What is a deal desk approval app?

It routes non-standard pricing requests to the right approvers based on discount depth and contract value, gives those approvers the context to decide quickly, and records every exception with its reason. It is a control that only works if it is fast enough to use.

What should a discount request capture?

The full economics: list and proposed price, discount as both a percentage and an amount, term, payment terms, ramp, committed volume and any non-standard terms. Percentage alone hides the difference between a small deal and your largest contract.

How should discount approvals be routed?

On discount depth and contract value together, in a published ladder with a ceiling per tier. Routing on percentage alone sends trivial deals up the chain and lets large ones through at the same threshold.

Why do deal desks get bypassed?

Because they are slow at quarter end, which is exactly when reps have least tolerance for waiting. Measure time to decision from the first day and set up deputies for every approver, or the desk quietly stops being a control.

What makes exception reporting useful?

A short fixed list of reasons alongside the free text. Free text alone produces a log nobody can summarise, so the discount policy never changes. Six reason codes make a quarter of decisions readable in one chart.

Can I build this without an engineering team?

Yes. The prompts here are written for Claude Code, Codex or Cursor and stage the build. The judgement calls are your ladder thresholds and your reason codes, and neither is something a tool can decide for you.

Last reviewed September 2026.

Build it, then run it properly

Helix is the governed runtime for AI-built apps. Deploy what you build, put SSO in front of it, connect it to your systems with managed credentials, and give it a named owner.