Deal desk app for discount approvals that sales teams trust
Build a deal desk app for discount approvals with a simple request form, tiered routing, and a full decision log for reporting and audits.

Why discount approvals get messy without a deal desk
Discount approvals fall apart when they live in chat threads and scattered emails. A rep asks for “a quick exception,” someone replies “ok,” and a week later nobody remembers what was approved, why it was approved, or what conditions were attached.
The issues usually start small, then stack up:
- Key details vanish (discount, term, start date, special clauses).
- Decisions happen in private, so the rest of the team can’t see what’s going on.
- Approvals get inconsistent (the wrong person signs off, or people approve different versions).
A discount touches more people than most teams expect. Sales owns the deal, but finance cares about margin and payment terms, managers care about consistency, and legal cares about contract risk. Without one place to coordinate, every deal becomes a special case.
A deal desk app fixes this by giving everyone one shared path: submit a request, route it to the right approver, capture a clear decision, and store it for later. The point isn’t to add red tape. It’s to stop rework and “approval by memory.”
Here’s what that looks like in real life. A rep offers 20% to win a renewal, then procurement asks for 25% plus net-60 terms. In chat, a manager might approve “25% is fine,” while finance later objects because the payment terms changed the economics. With a proper request and approval flow, the rep submits the full package once, the right people review the same version, and the final answer is unambiguous.
You’ll know it’s working when sales gets faster answers, last-minute exceptions drop, arguments about “what was agreed” disappear, and you finally have clean data you can report on.
Decide what your request form needs to capture
A discount request form should answer one question quickly: is this deal worth approving at this price?
Start with the minimum set of fields that lets an approver understand the deal without digging through spreadsheets:
- Customer name and segment (new vs. existing, size)
- Product/package, term length, and quantity
- List price and requested price (auto-calculate discount %)
- Expected close date and start date
- Deal owner and team
Numbers alone don’t explain why the discount exists. Add a small amount of structured context, plus one short notes box. For example: a dropdown for the primary reason (competitive match, renewal risk, expansion, pilot), a field for main competitor, and a notes box for specifics like “Competitor is offering 25% off if we sign this week.”
Guardrails keep low-quality requests from clogging the queue. Focus on the few requirements that actually reduce rework:
- A required justification tied to a reason code (a few sentences, not “need discount to win”)
- Evidence required only above a threshold (quote, pricing sheet, competitor email)
- A clear way to flag exceptions (bundles, custom terms, sensitive deals)
Keep the form fast by making only what you truly use required. If a field rarely affects a decision, make it optional or conditionally required (for example, require “competitor” only when the reason is “competitive match”).
Decide access rules early: who can submit (all sales vs. Sales Ops), and who can view requests (requester, manager, finance, deal desk). Permissions matter when notes include margin, renewal risk, or customer issues.
Set discount tiers and approval rules people will follow
Discount approval breaks down when the rules are fuzzy. People guess, approvals bounce around, and results depend on who happens to be online.
Start with tiers that match how your business thinks about risk. Keep them simple enough that sales can self-serve:
- 0 to 10%: sales manager
- 11 to 20%: sales manager + finance
- 21 to 30%: sales director + finance
- 31%+: executive approval
Then add a small number of override rules for the things that really change economics or risk: new logo vs. renewal, multi-year terms, strategic accounts, non-standard contract language, and non-standard payment terms. Make the overrides explicit so a 15% renewal isn’t treated the same as a 12% new logo.
Assign approvers by role, not by name. Roles survive vacations and org changes. For each tier, define who must approve and in what order. Finance typically checks margin and payment terms; legal should step in only when terms change or risk increases. If legal is required for every request, approvals slow down and people look for workarounds.
Sales works on deadlines, so response expectations matter. Set a clear target like “first response within 4 business hours,” plus a backup plan (delegate, on-call rotation, or escalation after a set time).
Make decision reasons mandatory so outcomes are useful later. Keep it consistent and short:
- Approved: discount and any conditions (“20% approved, 2-year term”)
- Rejected: specific reason (“margin below floor”)
- Changes needed: what to change (“reduce to 15% or add annual prepay”)
Build a sales-friendly request form
If reps avoid the form, approvals will drift back into chat and you’ll lose the record.
Keep the form predictable and hard to mess up. Use clear labels, smart defaults, and pick-lists instead of free text when possible (deal type, region, currency). Cut anything that doesn’t affect a decision or reporting.
Keep it short, but ask the right follow-ups
The fastest forms use conditional questions. Ask for the discount first, then reveal only what’s needed for that tier.
Common follow-ups that work well:
- Higher discount: require stronger justification and (if relevant) competitor details
- Special terms: collect contract notes and route to legal when needed
- Non-standard payment terms: include finance details
- Multi-year deals: capture the trade-off (commitments, renewal plan)
Validate inputs before they hit approvers
Approvers shouldn’t have to reject basic mistakes. Add simple checks (discount in range, close date not in the past, required justification for larger discounts). If you have a margin floor, validate against it.
A small but high-impact improvement is a “preview before submit.” Show the rep the expected tier and who will be asked to approve. Example: “22% discount: Sales Manager + Finance.” That prevents surprises and cuts back-and-forth.
Make it usable on mobile: single-column layout, large tap targets, and short text fields.
Step-by-step: route approvals from submission to decision
A good routing flow feels invisible to sales. They submit one request, get a clear answer fast, and always know what’s next.
A practical flow most teams can adopt:
- Create the request and calculate the tier automatically. Calculate discount percent from list price vs. offered price, then map it to a tier in the app so reps don’t guess.
- Assign the approver based on tier and deal type. Low tiers might go to a sales manager; higher tiers add finance; certain deal types (renewals, multi-year, strategic) can route to a different queue.
- Notify approvers with a clear summary and simple actions. Include the key numbers, the reason, and the supporting notes. Keep actions obvious: Approve, Reject, Request changes.
- Handle revisions without starting over. If changes are needed, return it to the rep with a required comment. Keep the same request ID so everyone stays aligned.
- Escalate when response times slip. If someone doesn’t respond in time, escalate to a backup or delegate.
When a final decision is made, close the request, notify stakeholders (rep, manager, finance, deal desk), and lock fields that shouldn’t change post-approval.
Log every decision for a clean audit trail
Fast approvals matter, but the record matters just as much. You want a trail that answers: who approved, when, based on what information, and what changed along the way?
Log every status change as an event, not just the final outcome. Each event should include a timestamp and the person (or system) that made the change.
Capture what you’ll actually need later:
- Status history (Submitted, Returned, Approved, Rejected, Expired) with time and actor
- Decision details (approved discount, conditions, comments, required attachments)
- Key field changes (price, discount %, term, tier), before and after
- Basic context (deal/account ID, rep, approver role)
Revisions are where teams get burned. If a rep changes term length or payment terms after submission, the audit trail should show it clearly and trigger re-approval if your policy requires it. Treat changes as new events, not silent edits.
Decide retention and export rules early: how long you keep requests and attachments, who can export, and whether exports should be logged.
Use reporting to improve discounting over time
The real payoff isn’t just “faster approvals.” It’s using the history to make future decisions faster, fairer, and easier to defend.
Start with a few metrics you can trust: time to decision, approval rate, and average discount. Once those are stable, slice by the dimensions that match how your team runs: rep/manager, region, product, deal size, tier, and reason code.
These views surface patterns you won’t see in chat threads and spreadsheets: frequent overrides, repeated rejection reasons, bottlenecks tied to one approver, and discounting that’s creeping up in specific segments.
Monthly reporting stays practical when it starts with questions:
- Where did approvals take the longest, and why?
- Which reason codes get approved most often, and do they still make sense?
- Are tiers being used as intended, or are people working around them?
- Which rejection reasons repeat, and what can sales fix before submitting?
To keep reporting clean, standardize the fields that drive analysis. Notes can be free text, but key inputs should be structured: segment, product, list price, requested discount, final approved discount, tier, and a stable list of reason codes.
Example: approving a 22% discount request end to end
A sales rep, Maya, is closing an annual plan worth $48,000. The prospect asks for a 22% discount because a competitor is offering 20%, and they want the contract signed by Friday.
Maya submits a request with the deal basics (account, plan, term, close date), the numbers (list price, requested price, discount %), and brief context (competitor pressure, timeline, what the customer commits to in return). She attaches proof if required by the tier.
The workflow calculates the tier. In this example, anything 21%+ routes to a manager first, then finance. The manager approves with a condition: 12-month term and annual upfront payment. Finance reviews the margin and payment terms, then either approves with conditions, rejects with a clear reason, or sends it back for a specific revision.
Maya receives a decision she can copy into customer communication, with conditions written in plain language. Every step is logged: who decided, when, what changed, and why.
Common mistakes that slow approvals down
Most delays aren’t caused by “slow approvers.” They happen because the workflow leaves room for debate, rework, or blind spots.
Mistake 1: Rules that sound simple but aren’t actionable
“Big discounts need leadership sign-off” falls apart the moment someone asks, “How big?” Make tiers specific and write down what changes the route (term length, payment terms, new vs. renewal, non-standard language).
Mistake 2: Forms so heavy reps avoid them
When the form feels like paperwork, reps work around it. A reliable rule: if a field isn’t used to decide or to report later, don’t require it. Auto-fill what you can, and keep attachments threshold-based.
Mistake 3: No reason codes, so reporting becomes noise
If every request is a unique story, you can’t learn from it. Use a short, stable list of reason codes and keep free text for supporting detail.
Mistake 4: Edits after approval without re-approval
If price, discount %, term, or payment schedule changes after approval, treat it as a meaningful change. Re-route automatically when protected fields are edited.
Mistake 5: Poor visibility and noisy notifications
Reps get stuck when they can’t see where a request sits. Approvers tune out when every request pings everyone. Keep status clear (“Waiting on Finance”) and notifications targeted to the requester and current approver.
Quick checklist and next steps
Before rolling this out, do a quick “real life” test: can a rep submit in under two minutes, can approvers decide without chasing details, and can finance explain the decision months later?
Use this checklist to catch the common problems early:
- Form basics: required fields are truly required (pricing, discount %, term, product, region, close date).
- Tier logic: tiers and override rules match how deals are actually approved.
- Role mapping: each tier has a primary approver and a backup.
- Notifications: submitter and approvers get the right alerts, without duplicates.
- Audit quality: every decision has an owner, timestamp, and a clear reason.
Operational rules matter as much as the form: what happens when a rep revises after feedback, how escalation works, and how out-of-office delegation is handled.
If you want to prototype quickly, build the data model first (requests, approvals, comments, versions), then the form, then routing, then the automatic decision log.
If you’re building this with AppMaster (appmaster.io), you can create the request data model in the Data Designer and set up the routing in the Business Process Editor, so the form, workflow, and audit trail live in one place and stay consistent as your rules change.


