TL;DR: A 120-person B2B SaaS company in Austin closes 340 deals a year. Roughly 31% carry a term outside standard policy: a discount above 20%, a non-standard payment schedule, a legal redline, or a multi-year commitment. Those deals need sign-off from finance, legal, and the VP of Sales. There is no queue, no owner, and no deadline. Approval requests go out as Slack messages and sit until somebody notices them. Median cycle time from submission to release: eleven days. Last year $1.4M of pipeline slipped from one quarter into the next because the paperwork was still circulating on the last day of the month. We designed a four-stage agent that parses each quote, classifies every deviation, routes each one to the single approver who owns it, and escalates silence after 24 hours. Running cost: $88 to $170 per month.
Thursday, Day Nine
Marcus submits a deal on a Tuesday morning. Annual contract value $142,000, three-year term, 24% discount, and a request to pay annually in arrears rather than in advance.
Three things there are outside standard policy. The discount exceeds the 20% threshold that finance owns. The payment schedule reverses the standard terms, which finance also owns. The three-year commitment needs the VP of Sales, because anything past two years affects the forecast.
Marcus posts in the #deal-desk Slack channel. He tags all three people, because he does not know which one needs to answer first and has learned that tagging one produces a slower answer than tagging everybody.
Finance replies Wednesday afternoon asking whether the 24% is on list or on the already-discounted enterprise rate. Marcus answers within the hour. Finance does not come back.
Legal has not opened the thread. The customer's procurement team attached a redlined MSA with a modified liability cap, and legal is in a two-day offsite that nobody flagged.
The VP of Sales replies Thursday: "Fine by me, what did finance say?"
On Monday Marcus reposts the thread with "bumping this". On Tuesday finance approves the discount and asks legal about the payment terms, which are not legal's to approve. On Wednesday legal returns from the offsite, reads the MSA, and approves with one change. On Thursday, day nine, the quote is released.
The customer signed on day eleven. It was the third of the month, which meant a $142,000 deal that Marcus had worked since April landed in the following quarter.
This is, when stated precisely, an approval process whose routing mechanism is an @-mention, whose queue is a Slack channel that also contains birthday messages, and whose deadline is the point at which somebody feels awkward enough to bump the thread. Marcus did not choose to wait eleven days. He tagged three people and waited for whichever of them opened Slack first.

The Company
B2B SaaS company in Austin, Texas. One hundred and twenty employees: 22 in sales, 9 in customer success, 44 in engineering and product, 12 in marketing, 8 in finance, 3 in legal, the rest in operations and support. $28M annual recurring revenue. Average contract value $84,000, ranging from $12,000 for a team plan to $400,000 for a multi-year enterprise agreement.
Deals closed last year: 340. Of those, 106 carried at least one non-standard term and required deal desk approval. That is 31%, and it has risen from 19% in two years as the company has moved upmarket and encountered procurement departments that redline as a matter of routine.
The approvers are the VP of Finance, the General Counsel, and the VP of Sales. None of them has deal desk in their job description. All three approve between 8 and 12 deals a month alongside their actual roles.
Median cycle time from submission to release: 11 days. The fastest was under two hours, on a deal where the CFO happened to be standing next to the rep. The slowest ran 34 days and involved a customer who eventually asked, reasonably, whether the company wanted the business.
Marcus and the other 21 reps spend an estimated 3 to 5 hours per approved deal chasing, reposting, and answering clarification questions that arrive one at a time. Across 106 deals that is 318 to 530 hours a year. At a loaded rep cost of $58 per hour, $18,444 to $30,740 in selling time spent on internal logistics.
The number that matters more sits in the quarter-end report. Deals submitted in the final two weeks of a quarter that released after the quarter closed: 14 last year, worth $1.4M. Every one of them eventually signed. All of them signed in the wrong quarter, which for a company reporting to a board on quarterly growth is a different thing entirely from signing late.
The pattern behind every slipped deal: three people with veto rights, no shared view of what is waiting, and a channel that gives no signal about which message is worth $142,000 and which is a question about the offsite.
The Design
Four stages. The core insight: most deals do not need approval at all, and the ones that do usually need it from one person rather than three. The current process treats every non-standard deal as a committee decision because nothing separates a 21% discount from a rewritten liability cap.
Stage 1: Quote parsing on submission
Triggered when a rep marks a quote as ready for approval in the CPQ system. The agent extracts the commercial shape: discount against list, contract term, payment schedule, billing frequency, and any attached legal document.
Each field is checked against the standard policy table. A deal that clears every threshold is approved automatically, logged with the policy version it was checked against, and released to the rep within a minute. On last year's deal mix, 69% of submissions clear without a human involved. The deal desk exists for the other 31%.
Stage 2: Deviation classification
For deals that do not clear, Claude Sonnet names each deviation individually and maps it to the single approver who owns it. Discount above 20%: finance. Non-standard payment schedule: finance. Redlined liability, indemnity or termination clauses: legal. Term beyond 24 months: VP Sales.
Attached MSAs and order forms are compared against the company's standard paper, and every substantive change is extracted as a plain-language summary with the clause reference. Legal reads a list of what moved rather than a 40-page document with tracked changes.
Where a clause is ambiguous or the extraction confidence is low, it routes to legal marked as requiring a full read. The agent flags rather than guesses, and legal reads rather than trusts.
Stage 3: Parallel routing with escalation
Each approver receives only the deviations they own, with the deal value, the customer name, the close date the rep is working to, and a one-line rationale from the rep. Approve or reject in the message, no context switch.
Requests go out in parallel rather than in sequence. This is the change that moves the median. Under the old process the three approvals happened one after another because nobody knew the others were waiting; the deviations are independent, so there is no reason for legal to wait on finance.
No response after 24 hours triggers a reminder carrying the deal value and the days remaining to the rep's close date. No response after 48 hours escalates to the CRO with the same context. Silence stops being free.
Stage 4: Release, return, and the precedent library
All approvals in: the quote releases automatically and the rep is notified. Any rejection: the deal returns to the rep with the reason and, where the approver supplied one, a counter-term they can take back to the customer. A rejection that says "discount too high" costs another round trip; one that says "24% works at a four-year term, or 18% at three" does not.
Every decision writes to a precedent library indexed by deal shape. When a similar deal arrives, the classification step surfaces what was approved last time and for whom. After two quarters the library is doing real work: the recurring exceptions become policy, and the policy table absorbs them, which raises the auto-approval rate.
Design Notes
Parallel routing is the whole intervention. Everything else is useful; this is the part that moves eleven days to two. The three deviations on Marcus's deal were independent, and the sequence in which they were resolved was determined by nothing more than who happened to read Slack first. Routing each deviation to its owner simultaneously removes the dependency that was never real.
Auto-approval needs a logged policy version. When 69% of deals release without a human, somebody will eventually ask which rules a given deal was checked against, usually during an audit or after a deal goes wrong. Every auto-approval records the policy table version and the values checked. Without that, the auto-approval rate becomes a liability rather than a saving.
The Dana pattern recurs. Dana in Charlotte distributed a printed renewal list to five account managers who had every intention of calling. The list went under a keyboard. Same structure: work assigned to people with real intentions and no deadline, tracked by a document that records without escalating. Intention is not a system, and neither is an @-mention.
How to Build This
Recommended stack: n8n for orchestration. Salesforce CPQ or equivalent (DealHub, PandaDoc, Subskribe) for quote data and the approval trigger. Claude Sonnet for deviation classification and contract comparison, Haiku for routing decisions. Slack API for approver messages with interactive buttons. Postgres for the policy table, decision log, and precedent library.
Step 1: Build the policy table (Days 1-3). Deploy n8n, set up Postgres, configure CPQ credentials. Build the standard policy table: maximum discount by segment, standard payment terms, standard contract length, approved clause language. This is the answer key and the entire auto-approval path depends on it. Get finance, legal and the VP of Sales to sign off on the thresholds before anything is built on top of them.
Step 2: Build quote parsing and auto-approval (Days 3-6). Trigger on quote submission. Extract discount, term, payment schedule and billing frequency from the CPQ record. Compare against the policy table. Clear on every field: approve, log the policy version, notify the rep. Any field outside policy: pass to Stage 2. Test against 50 historical quotes where the outcome is known.
Step 3: Build deviation classification (Days 6-10). Claude Sonnet names each deviation and maps it to its owner. For attached contracts, compare against the standard template and extract substantive changes with clause references. Return structured JSON with a confidence score per deviation. Low confidence routes to a full human read. This is the highest-risk component; spend the extra days here.
Step 4: Build parallel routing and escalation (Days 10-13). Slack messages to each approver carrying only their deviations, plus deal value, customer, and target close date, with approve and reject buttons. Schedule reminders at 24 hours and escalation to the CRO at 48. Collect responses, hold the deal until all are in.
Step 5: Build release, return and precedent (Days 13-15). All approved: release the quote in CPQ and notify the rep. Any rejection: return with reason and counter-term. Write every decision to the precedent library indexed by deal shape. Build the dashboard: cycle time by stage, time waiting per approver, auto-approval rate, deals at risk against quarter end.
Step 6: Run in parallel (Days 16-30). The existing Slack process continues. The agent routes independently and its decisions are compared against what the humans decided. Target: the agent's auto-approvals match what would have been approved manually on 95% of cases, and its deviation classification routes to the correct owner on 90%. Two full weeks before switching over.
Estimated build time: 15 to 17 days for a competent n8n developer. Five to six weeks if learning alongside. Contract comparison is the component that will consume the overrun.
Cost Breakdown
Monthly running costs:
Component | Estimated Monthly Cost |
|---|---|
n8n (Cloud Starter or self-hosted) | $25-$50 |
Claude API (Sonnet classification and contract comparison, Haiku routing) | $52-$98 |
Postgres | $8-$15 |
Document storage | $3-$7 |
Total | $88-$170 |
Claude API detail: deviation classification across roughly 9 non-standard deals a month costs about $6. Contract comparison is the driver, at roughly $8 per redlined MSA against 5 a month, so about $40. Routing via Haiku, under $1. Vision is not required, because the contracts arrive as text.
Build costs if hiring: 15 to 17 days at $500 to $700 per day = $7,500 to $11,900. Self-built: $0 plus two days building the policy table with finance and legal.
Year-one total: $8,556 to $13,940 with a developer, or $1,056 to $2,040 self-built. Compared against $18,444 to $30,740 in rep time spent chasing approvals, and 14 deals worth $1.4M that landed in the wrong quarter.

What Could Go Wrong
The policy table is wrong or out of date. Every auto-approval compares against it, so a stale discount threshold approves deals that finance would have rejected. Review quarterly and whenever pricing changes. Log the policy version on every decision so a bad threshold can be traced to the deals it affected.
Contract comparison misses a substantive change. A modified indemnity clause read as standard language is the failure mode that matters most, because it is invisible until it is expensive. Route anything below high confidence to a full legal read, and track extraction accuracy across the first 30 contracts before trusting it.
Approvers ignore Slack messages too. The escalation is the answer, and it only works if the CRO acts on it. Agree before go-live that a 48-hour escalation gets a same-day response. An escalation nobody answers is the original problem with an extra step.
Reps game the thresholds. A 20% discount cap produces a suspicious number of 19.5% deals. Track the distribution. Clustering just under a threshold is a signal that the threshold is wrong rather than that the reps are dishonest.
The auto-approval rate becomes a target. It is a measurement, not a goal. Raising it by loosening policy moves risk from the approval process into the contracts. Watch it alongside discount distribution and average contract value.
Rejections lose their reasoning. An approver clicking reject without a counter-term sends the deal back to a rep who now guesses. Make the reason field mandatory on rejection and prompt for a counter-term. This is a small interface decision that determines whether a rejection costs one round trip or three.
The Pattern
If your business needs several people to approve the same document and none of them owns a queue, your cycle time is being set by whoever checks their messages most often.
Marcus is a good rep. The deal was sound, the discount was defensible, and every approver said yes to it in the end. None of that helped, because the three approvals were treated as a sequence when they were actually independent, and because nothing in the process distinguished a $142,000 decision from a message about the offsite.
The agent does not decide which deals to approve. Finance still owns the discount, legal still owns the paper, the VP of Sales still owns the forecast. The agent reads the quote, names what is non-standard, puts each question in front of the one person who can answer it, and refuses to let silence be free.
Eleven days or two. Same deal. Same terms. Same three people saying yes. Different quarter.
This is Blueprint #55 in the AdAI series. Every week we publish the full architecture of a real AI agent design: the bottleneck, the build guide, and the costs. Free to read. Free to build from.
Want the next one? Subscribe to AdAI News. New blueprint every week.
by JH
for the AdAI Ed. Team


