Back to the build library
Professional services
Advanced

Proposal to Contract Automation

Proposal sent, viewed, signed and countersigned, all tracked in one pipeline, with the chase handled before anybody has to remember it.

Industry
Professional services
Build effort
Advanced
Typical time to launch
3–5 weeks
On this page
The problemWhat gets builtHow it runsAutomations in detailWhat changesBefore you start
Want this built for you?

Bring your stack to a call and we will scope it against how your business actually runs.

Book a call
01

The problem

Between the scoping call and the countersigned agreement sits the least managed stretch of a professional services firm's revenue process. A partner has a good conversation, promises a proposal by Friday, and writes it on Sunday night. It goes out as an attachment on a long email. Then nothing measurable happens. Nobody knows whether the client opened it, which page they lingered on, or whether it went straight to a procurement inbox that will not reply for three weeks. The partner waits a polite week, sends a one-line nudge, waits another, and either gets a yes or quietly reclassifies the deal as something that went cold. Ask the firm what its proposal win rate is and the answer is an estimate, because nobody recorded what was sent, when, at what value, or how it ended.

The money leaks in four places. First, latency: proposals that go out six days after the call convert worse than proposals that go out in two, and nothing in most firms enforces the gap. Second, invisible stalls: a proposal sitting unopened and a proposal read four times by three different people need completely different follow-up, and without view tracking both get the same limp nudge. Third, the signature gap, which is the one firms consistently underestimate. The client says yes on a call, and then the agreement takes eleven days to execute because the partner was going to draft it, the signer turned out to be a director who was never on the thread, and the countersignature sat in a partner's inbox for four days after the client had already signed. Work cannot start, the project slips, and revenue that was won in week one gets recognized in week four.

Fourth, and worst, the loss record. When a proposal dies, almost nothing is captured. No reason, no competitor, no indication of whether it was price, timing, or the fact that the firm proposed a phased engagement to a client who wanted a fixed fee. Two years of that and the firm still cannot say which of its proposal formats wins. This build makes the whole stretch one instrumented pipeline: a scoping intake that forces the inputs, an internal clock on drafting, view tracking that drives different follow-up for different behavior, option selection the client makes themselves, an envelope raised from the acceptance rather than from memory, and a countersignature that gets chased as hard as the client's.

02

What gets built

Pipeline and stages

One pipeline, Proposals, carrying the deal from scoping call to executed agreement. Stage movement is almost entirely automated, which is the point - a pipeline that depends on partners dragging cards is a pipeline that lies.

  • Scoping Call Booked - a dated call exists. Entry is automatic from the calendar.
  • Scoping Call Held - appointment marked showed. The drafting clock starts here.
  • Drafting - internal only, with an SLA attached.
  • Proposal Sent - the proposal link has gone out.
  • Proposal Viewed - the client has opened it. Automatic, from the view webhook.
  • Questions or Revision - the client has asked something or requested a change. Suppresses the nudge ladder.
  • Verbal Yes - acceptance recorded, by form or by the partner.
  • Out for Signature - the envelope exists with the named signer.
  • Client Signed - Awaiting Countersign - the gap most firms do not see.
  • Fully Executed - both signatures in, deposit raised, handover triggered.
  • Lost - No Decision, Lost - Price, Lost - Chose Other Provider, Lost - Timing or Internal Change - four separate closed-lost stages, because one generic lost stage teaches you nothing.

Calendars

  • Scoping Call - 45 minutes, round-robin across partners by practice area, 1 day minimum notice, 21 day window, 15 minute buffer after. Booking requires the scoping questionnaire.
  • Proposal Walkthrough - 30 minutes, offered in the proposal-sent email as an alternative to reading it cold. Assigned to the proposal owner only.
  • Decision Call - 20 minutes, surfaced only on the viewed-not-decided path, framed as "ten minutes on the two open questions".
  • Signature Walkthrough - 15 minutes, surfaced only when an envelope has been open more than five days, usually because procurement has a question about terms.

Custom fields

  • engagement_type - dropdown: Fixed fee, Retainer, Time and materials, Phased
  • scope_summary - long text, the one-paragraph description used in both the proposal and the agreement
  • proposal_version - number, incremented on every reissue
  • proposal_url - the hosted proposal link, unique per deal
  • proposal_sent_date, proposal_first_viewed_date - date and time
  • proposal_view_count - number, incremented by the view webhook
  • proposal_expiry_date - date, typically sent date plus 21 days
  • option_selected - dropdown: Option A, Option B, Option C, Custom
  • revision_count - number
  • decision_maker_confirmed - checkbox
  • decision_process_notes - long text: who signs, who approves, whether procurement is involved
  • expected_decision_date - date, as stated by the client
  • legal_entity_name - text, the exact contracting entity, not the trading name
  • signer_name, signer_email, signer_title
  • billing_contact_email, po_number
  • countersigner - user reference, the partner who must sign for the firm
  • envelope_id - text, written back by the signature integration
  • signature_sent_date, client_signed_date, countersigned_date
  • deposit_invoice_status - dropdown: Not raised, Raised, Paid
  • loss_reason_detail - long text, required on close
  • competitor_named - text, if the client volunteered one

Tags

  • proposal-drafting, proposal-sent, proposal-viewed, proposal-unopened
  • proposal-questions - suppresses every nudge in the ladder while a human owns the thread
  • proposal-expiring - applied 5 days before proposal_expiry_date
  • signature-sent, client-signed, countersign-overdue, fully-executed
  • procurement-involved - lengthens every wait in the chase ladder and swaps in longer-cycle copy
  • high-value-proposal - applied by threshold, routes escalations to the managing partner rather than the practice lead
  • proposal-paused - the manual brake. Excludes the contact from every workflow in this build.
  • proposal-lost

Forms

  • Scoping Questionnaire - required before the scoping call is confirmed. Captures the problem in the client's words, the outcome they want, timing, who else is involved in the decision, and whether a budget range exists. Writes scope_summary, decision_process_notes and expected_decision_date.
  • Proposal Acceptance - linked from inside the proposal. The client selects an option, confirms the start date they want, and confirms the legal entity. Writes option_selected and legal_entity_name, moves the opportunity to Verbal Yes.
  • Signer and Billing Details - presented immediately after acceptance. Captures signer_name, signer_email, signer_title, billing_contact_email and po_number. This single form removes the most common cause of signature delay, which is sending an envelope to the wrong person.
  • Revision Request - linked from the proposal. Structured: which section, what should change, and why. Increments revision_count.
  • Loss Reason - internal, required to move a card into any Lost stage. Reason dropdown mapped to the four lost stages, plus competitor_named and free text.

BO's role and guardrails

BO covers the gaps between partner touches, which in this build is most of the elapsed time.

  • BO answers process and logistics questions on inbound replies: what happens next, how long the work takes, what the proposal covers at a scope level, who needs to sign, how to get the agreement to procurement.
  • BO may read back scope_summary verbatim and may state dates - when the proposal was sent, when it expires, when the envelope went out.
  • BO may book a Proposal Walkthrough, Decision Call or Signature Walkthrough.
  • BO may chase the signer by email and SMS on the schedule set in workflow 8, and may resend the signature link.
  • BO may never state, confirm, discount, adjust or negotiate a fee, and may never confirm what is in or out of scope beyond the stored summary. Any inbound message containing a currency symbol, a figure, or the words price, fee, cost, discount, budget, cheaper or reduce is routed to the proposal owner with the message quoted, and BO replies only: "That one is for [owner] - I have flagged it and they will come back to you today."
  • BO may never agree to amend contractual terms, indemnities, liability caps, payment terms or notice provisions. Those replies apply proposal-questions, stop all sequences and notify the owner and the countersigning partner.
  • BO stands down the instant a human replies in the thread.

Numbers and channels

  • Email is the primary channel and carries everything of substance. Sends come from the proposal owner's own address on the authenticated firm domain. Nothing in this build sends from a marketing subdomain.
  • One registered SMS number, used only for short logistics prompts: walkthrough reminders, "the envelope is in your inbox", expiry warnings. Never for anything commercial.
  • Proposals are delivered as a hosted link rather than an attachment, because a link is what makes view tracking possible. The PDF is available for download from inside the link for clients who need it for procurement.
  • Internal notifications by Slack or Teams webhook to a deals channel, plus direct notification to the owner. The countersign-overdue alert goes to the partner and their practice lead both.
  • Quiet hours 8am to 7pm recipient local time, weekdays, on SMS.
03

How it runs, step by step

  1. An inquiry books a Scoping Call. The booking form requires the Scoping Questionnaire: the problem in their words, the outcome wanted, timing, who else decides, whether a budget exists. The opportunity is created in Proposals at Scoping Call Booked and scope_summary, decision_process_notes and expected_decision_date are written.
  2. Ninety minutes before the call the owner receives a brief containing the questionnaire answers verbatim, not summarized, plus anything already on the contact record. Reminders have gone to the client at 24 hours and 2 hours.
  3. The call is held and marked showed. The opportunity moves to Drafting, the drafting clock starts, and a task lands on the owner due in 2 business days: "Draft proposal for [client] - [engagement_type]." The client receives a same-day note: "Good to talk. Proposal with you by [date] - it will cover [scope_summary in one line]."
  4. The owner builds the proposal from the template, sets engagement_type to Phased, publishes it to a unique proposal_url, sets value and proposal_expiry_date to 21 days out, and moves the card to Proposal Sent. The send workflow emails the link, applies proposal-sent and proposal-unopened, and offers a Proposal Walkthrough slot as an alternative to reading it cold.
  5. Nineteen hours later the client opens it. The view webhook fires: proposal_first_viewed_date written, proposal_view_count set to 1, proposal-unopened removed, proposal-viewed applied, card moved to Proposal Viewed, and the owner notified in real time - "[Client] is reading the proposal now."
  6. Over the next three days the view count reaches 5 across two different devices. The nudge ladder reads engagement as high and sends the engaged-reader version of its first message rather than the generic one, offering a 20-minute Decision Call on the two questions the proposal most often raises.
  7. The client replies asking whether phase two can be deferred to the next financial year. BO recognizes this as a scope and timing question with commercial implications, applies proposal-questions, stops the ladder, and routes the message to the owner quoted in full within minutes.
  8. The owner answers directly, reissues the proposal with phase two shown as optional, which increments proposal_version to 2 and revision_count to 1, and removes proposal-questions. The ladder resumes from the beginning on the new version.
  9. The client submits the Proposal Acceptance form, selecting Option B with a start date of the first of next month and confirming the legal entity as the parent company rather than the trading name they have been emailing from. The card moves to Verbal Yes. Immediately they are shown the Signer and Billing Details form and complete it: the signer is a finance director who has not been on a single thread so far.
  10. The acceptance workflow assembles the agreement from the signed-off scope, option_selected, legal_entity_name and the firm's standard terms, raises the envelope to the named signer with the countersigning partner as the second recipient, writes envelope_id and signature_sent_date, applies signature-sent, and moves the card to Out for Signature.
  11. The signer does not act for three days. BO sends the first chase by email, then an SMS prompt the following day, then on day five offers a 15-minute Signature Walkthrough - which is the right move, because the hold-up turns out to be a procurement question about payment terms. That question routes to the owner and the countersigning partner, not to BO.
  12. Payment terms are agreed, the client signs. client_signed_date is written, client-signed applied, and the card moves to Client Signed - Awaiting Countersign. The countersigning partner is notified immediately and given a 24-hour clock.
  13. Twenty-six hours pass. The countersign-overdue workflow fires, applies countersign-overdue, notifies the partner again and copies the practice lead, because a client who has signed and is waiting on the firm is the single worst state in this pipeline.
  14. The partner countersigns. countersigned_date written, fully-executed applied, card moved to Fully Executed. The handoff workflow fires: executed copy to both parties and the billing contact, deposit invoice raised in the connected accounting system with the PO number attached, deposit_invoice_status set to Raised, delivery lead notified with the scope summary and start date, kickoff booking link sent to the client, and the retainer or project record created so the next build in the chain can pick it up.
  15. Had the proposal expired instead, the expiry workflow would have warned the client five days out, warned the owner, then on the expiry date required the owner to complete the Loss Reason form, which routes the card to one of the four Lost stages and records any named competitor for the quarterly win-loss review.
04

Automations in detail

1. Scoping Intake and Call Preparation

Trigger: a booking is created on the Scoping Call calendar.

Conditions: the Scoping Questionnaire must be complete. An incomplete questionnaire holds the booking as provisional and runs the completion branch.

Actions in order:

  1. Create the opportunity in Proposals at Scoping Call Booked. Write scope_summary, decision_process_notes and expected_decision_date from the questionnaire. Assign the owner from the round-robin.
  2. If the questionnaire answer to "who else is involved in this decision" mentions procurement, legal, a board or a committee, apply procurement-involved.
  3. Send the confirmation email: "Thanks [first name] - [owner] has you at [time] on [date]. They have read what you sent, so we can skip the background and spend the 45 minutes on what you actually want to change. If anything shifts before then, this link moves it: [reschedule link]."
  4. Incomplete questionnaire branch: wait 2 hours, send "Hi [first name] - one thing outstanding before [owner] can prepare properly: [form link], takes four minutes." Wait 24 hours, send one SMS prompt. If still incomplete 12 hours before the slot, notify the owner that they are going in blind.
  5. Wait until 24 hours before the slot. Send email reminder with the agenda.
  6. Wait until 2 hours before. Send SMS within quiet hours: "See you at [time] - [owner], [firm]."
  7. Wait until 90 minutes before. Send the owner the internal brief: every questionnaire answer in the client's own words, contact history, source, and whether procurement-involved is set.
  8. Wait until 1 hour after the slot. Branch on appointment status. Showed hands to workflow 2. No-show sends one rebooking link, waits 2 days, sends a second, then marks the opportunity Lost - No Decision if nothing moves in 7 days.

Exit: appointment status resolved.

2. Drafting SLA

Trigger: scoping call marked showed, or opportunity moved to Drafting.

Conditions: none. The SLA applies to every proposal, including the ones partners are sure they will write tonight.

Actions in order:

  1. Move the opportunity to Drafting. Apply proposal-drafting. Set the drafting due date at 2 business days from now.
  2. Send the client a same-day holding note from the owner: "Good to talk, [first name]. Short version of what I heard: [scope_summary]. If that is wrong in any way, tell me now rather than when you read the proposal. You will have it by [drafting due date]."
  3. Create a task on the owner due at the drafting due date: "Draft and send proposal for [client]. Set engagement_type, proposal_url, value and expiry before moving the card."
  4. Wait until the drafting due date at 09:00. If the card is still at Drafting, notify the owner: "Proposal for [client] is due today. The client has been told to expect it."
  5. Wait 1 business day. If still at Drafting, notify the practice lead as well, and send the client a holding message from the owner: "[first name], I am taking an extra day on your proposal to get the phasing right rather than send you something generic. With you by [new date]." Rewrite the due date.
  6. Wait 2 business days. If still at Drafting, escalate to the managing partner and flag the opportunity as at risk of latency loss.

Exit: opportunity moves to Proposal Sent.

3. Proposal Send and View Tracking

Trigger: opportunity moved to Proposal Sent.

Conditions: proposal_url, value and engagement_type must all be populated. If any is empty the workflow halts, nothing is sent, and the owner is tasked to complete the record - this prevents the half-built proposal going out.

Actions in order:

  1. Write proposal_sent_date. Set proposal_expiry_date to 21 days out, or 35 days if procurement-involved is set. Set proposal_version to 1 if empty. Apply proposal-sent and proposal-unopened.
  2. If value is above the firm's high-value threshold, apply high-value-proposal.
  3. Send the proposal email from the owner: "Hi [first name], here is the proposal: [proposal_url]. It sets out [scope_summary] with three ways to run it, so you can pick the shape that fits your timing and budget rather than taking it or leaving it. Two things worth knowing. There is an accept button inside it - that just tells me which option you want, it does not commit you to anything until you have seen the agreement. And if you would rather I walked you through it than read it cold, 30 minutes here: [walkthrough link]. It is valid until [proposal_expiry_date]."
  4. Wait 1 hour. Notify the owner that the proposal is out, with the expiry date, so they know the clock the client is on.
  5. On the first view webhook: write proposal_first_viewed_date, set proposal_view_count to 1, remove proposal-unopened, apply proposal-viewed, move the card to Proposal Viewed, and notify the owner in real time: "[Client] is reading the proposal now. First open, [time elapsed] after sending."
  6. On each subsequent view: increment proposal_view_count. At count 3, notify the owner: "[Client] has opened the proposal three times. Worth a call today."
  7. Hand to workflow 4 if proposal-unopened is still present after 48 hours, or to workflow 5 once proposal-viewed is applied.

Exit: acceptance, loss, expiry, or proposal-paused.

4. Unopened Proposal Recovery

Trigger: 48 hours after proposal_sent_date with proposal-unopened still applied.

Conditions: not tagged proposal-questions, proposal-paused or proposal-lost. This path assumes a delivery or attention problem, not a decision problem, and the copy reflects that.

Actions in order:

  1. Send a short plain-text email from the owner, no formatting and no images, because the likely cause is a filter: "[first name] - did the proposal reach you? Link again here: [proposal_url]. If it is landing in a spam folder, tell me and I will send it another way."
  2. Wait 1 day.
  3. If still unopened, send SMS within quiet hours: "Hi [first name], [owner] from [firm]. Sent your proposal Tuesday and it looks like it has not arrived - can you check, or reply here and I will resend. Reply STOP to opt out."
  4. Wait 2 days.
  5. If still unopened, notify the owner: "[Client] has not opened the proposal in 5 days despite two prompts. Likely wrong address or wrong person - call them." Create a same-day task.
  6. Wait 3 days. If still unopened, send to any secondary contact on the record: "Hi [name] - I sent [primary contact] a proposal last week and I think it may not have reached them. Could you point me at the right inbox?"
  7. Wait 5 days. If still unopened, move the card to Lost - No Decision with the loss reason prefilled as "Never opened proposal - contact or deliverability failure", and flag the contact record for an email audit.

Exit: the first view webhook, which cancels this workflow and starts workflow 5.

5. Viewed and Not Decided - Nudge Ladder

Trigger: proposal-viewed applied.

Conditions: branch on proposal_view_count at each step - 1 to 2 is the low-engagement branch, 3 or more is the engaged branch. Every step is gated on the absence of proposal-questions, proposal-paused, signature-sent and proposal-lost. If procurement-involved is set, every wait below is multiplied by 1.5.

Actions in order:

  1. Wait 2 days from first view.
  2. Engaged branch, 3 or more views: send "Hi [first name], I can see the proposal has had a proper read, which usually means there are one or two things that are not quite settled. Rather than guess, 20 minutes here and I will answer them straight: [decision call link]. If it is simply a question of internal timing, tell me the date you need and I will work to it."
  3. Low-engagement branch, 1 to 2 views: send "Hi [first name], quick check - having read it, does the shape look right? If Option B is roughly it, say so and I will put the agreement together. If none of the three fit, that is useful too and I would rather rework it than have it sit there."
  4. Wait 3 days.
  5. Send the specificity nudge: "Hi [first name], one question that usually unblocks these. Is the open item scope, timing, or getting it approved internally? Whichever it is, I can probably help with it today."
  6. Wait 4 days.
  7. Send SMS within quiet hours: "Hi [first name] - [owner]. Still happy to answer anything on the proposal. Easiest is a 20-min call: [short link]. Reply STOP to opt out."
  8. Wait 3 days.
  9. Send the honest-close email from the owner: "[first name], I will stop filling your inbox. Three options: you want to go ahead and need the agreement, you want to go ahead later and I should come back in [month], or this is not happening and you would rather tell me than keep it open. All three are fine - just tell me which."
  10. Wait 4 days. If no reply, notify the owner with a task: "Call [client] - proposal viewed, four written attempts, no decision."
  11. Wait until proposal_expiry_date minus 5 days, then hand to workflow 10.

Exit: acceptance form submitted, any suppression tag applied, or expiry handling takes over.

6. Questions and Revision Loop

Trigger: an inbound reply BO classifies as a question or objection, a Revision Request form submission, or the owner applying proposal-questions manually.

Conditions: branch on whether the question is commercial, contractual or operational.

Actions in order:

  1. Apply proposal-questions. Stop every step in workflows 4, 5 and 10 immediately. No further automated client message goes out while this tag is on.
  2. Move the card to Questions or Revision.
  3. Operational branch - timeline, team, process, deliverables, what happens at kickoff: BO answers from scope_summary and the firm's stored process copy, offers a Decision Call, and logs the exchange. If the client is satisfied and says so, BO removes proposal-questions and workflow 5 resumes at step 1.
  4. Commercial branch - any figure, currency symbol, or the words price, fee, cost, discount, budget, cheaper, reduce: BO does not answer. Route to the owner with the client's message quoted in full, notify within 5 minutes, create a task due same day, and reply to the client once: "That one is for [owner] - I have flagged it and they will come back to you today."
  5. Contractual branch - terms, liability, indemnity, IP, payment terms, notice, data processing: route to the owner and the countersigning partner jointly. Do not let BO reply beyond acknowledging receipt. Create tasks on both.
  6. On Revision Request form submission: increment revision_count, write the requested changes to the opportunity notes, notify the owner, and create a task due in 1 business day: "Reissue proposal v[next] for [client] - requested: [summary]."
  7. If revision_count reaches 3, notify the practice lead: "[Client] is on revision three. Either the scoping was wrong or the client is unclear - worth a conversation before a fourth version."
  8. On reissue: the owner increments proposal_version, updates proposal_url, resets proposal_view_count to 0, extends proposal_expiry_date by 14 days, and removes proposal-questions. Workflow 3 re-runs its send step on the new version and the ladder starts again from the top.

Exit: proposal-questions removed, or the opportunity closes.

7. Acceptance to Signature Envelope

Trigger: Proposal Acceptance form submission, or the owner moving the card to Verbal Yes manually.

Conditions: option_selected and legal_entity_name must be present. The Signer and Billing Details form must be complete before the envelope is raised - this gate is the single highest-value step in the build.

Actions in order:

  1. Move the card to Verbal Yes. Remove proposal-viewed. Stop workflows 5 and 10.
  2. Notify the owner immediately: "[Client] has accepted [option_selected], requested start [date], contracting as [legal_entity_name]."
  3. Redirect the client straight from the acceptance form to the Signer and Billing Details form, and also email the link: "Good news. Two minutes of admin and I can get the agreement to you: [form link]. I need the exact signing name and title, and the billing contact, so it goes to the right person first time rather than bouncing around."
  4. If the details form is not submitted within 24 hours: send a reminder. At 48 hours, notify the owner to phone for the signer details. The envelope is not raised on guessed details.
  5. On details form submission: write signer_name, signer_email, signer_title, billing_contact_email, po_number. Set countersigner to the practice partner, or the managing partner if high-value-proposal is set.
  6. Assemble the agreement: firm template plus legal_entity_name, scope_summary, option_selected, requested start date, payment terms and po_number.
  7. If high-value-proposal or procurement-involved is set: insert a mandatory internal review step. Create a task on the countersigning partner due in 1 business day: "Review agreement before it goes out to [client]." The envelope waits for completion.
  8. Raise the envelope through the connected signature tool with the client signer as recipient one and countersigner as recipient two in sequence. Write envelope_id and signature_sent_date. Apply signature-sent. Move the card to Out for Signature.
  9. Send the client the heads-up: "[first name], the agreement is on its way to [signer_name] now - it will come from our signature provider, so it may land in a different folder than my emails. Anything looks wrong in it, reply here rather than signing it."
  10. Hand to workflow 8.

Exit: envelope raised, or acceptance withdrawn.

8. Signature Chase and Countersign Enforcement

Trigger: signature-sent applied.

Conditions: all client-facing steps are gated on the envelope still being open and on the absence of proposal-questions. Waits are multiplied by 1.5 when procurement-involved is set.

Actions in order:

  1. Wait 2 days. If unsigned, BO sends email to the signer: "Hi [signer first name], [owner] asked me to check the agreement for [client] reached you - it should be in your inbox from our signature provider. Here it is again: [signature link]. Anything in it you want explained before signing, reply and I will get [owner] on it."
  2. Wait 1 day. If unsigned, BO sends SMS to the primary contact, not the signer, within quiet hours: "Hi [first name] - the agreement is sitting with [signer_name] for signature. Anything you need from us to move it along? - [firm]"
  3. Wait 2 days. If unsigned, BO offers the Signature Walkthrough: "Hi [first name], five days on the agreement usually means a question somebody has not wanted to ask. 15 minutes and we will get it answered: [walkthrough link]. If it is with procurement, tell me who and I will deal with them directly."
  4. Wait 3 days. If unsigned, notify the owner and create a task: "Envelope open 8 days for [client]. Call the signer directly."
  5. Wait 7 days. If unsigned, notify the practice lead, and the managing partner if high-value-proposal is set. Do not void the envelope automatically - a verbal yes with a stuck signature is a relationship problem, not a data problem.
  6. On client signature received: write client_signed_date, apply client-signed, move the card to Client Signed - Awaiting Countersign. Notify countersigner immediately and create a task due in 4 working hours: "Countersign [client] agreement. Client has already signed." Send the client: "[first name], signed at your end - thank you. [Countersigner] signs today and you will have the fully executed copy straight after."
  7. Wait 4 working hours. If not countersigned, notify the partner again, by SMS as well as email.
  8. Wait 24 hours from client signature. If not countersigned, apply countersign-overdue, notify the partner, the practice lead and the managing partner, and add the deal to the daily overdue digest. Nothing in this pipeline is allowed to sit here quietly.
  9. On countersignature: write countersigned_date, remove countersign-overdue, apply fully-executed, move to Fully Executed, hand to workflow 9.

Exit: fully executed, or envelope voided with a recorded reason.

9. Fully Executed Handoff

Trigger: opportunity moved to Fully Executed.

Conditions: none.

Actions in order:

  1. Email the executed agreement to the signer, the primary contact and billing_contact_email: "Signed by both sides - executed copy attached for your records. Next: [owner] will be in touch to get the kickoff in the calendar, and our first invoice will come to [billing contact] referencing [po_number]."
  2. Raise the deposit or first invoice in the connected accounting system with po_number and legal_entity_name. Set deposit_invoice_status to Raised. If no accounting connection exists, create a finance task instead.
  3. Send the client the kickoff booking link, and apply the onboarding tag the firm's delivery build listens for.
  4. Notify the delivery lead with the full package: scope_summary, option_selected, requested start date, engagement_type, and the executed agreement link.
  5. If engagement_type is Retainer, create the retainer record and hand to the renewal clock so the term is tracked from day one rather than discovered later.
  6. Post to the internal deals channel: "Executed - [client], [engagement_type], [owner]. Proposal to execution: [days]. Versions: [proposal_version]."
  7. Wait 10 days. If deposit_invoice_status is still Raised rather than Paid, notify finance and the owner.
  8. Wait 30 days from execution. Send the owner a quality prompt: "Thirty days into [client]. Worth asking them for a review while the start is still fresh." Hand to the firm's reputation workflow if one exists.

Exit: single pass.

10. Expiry, Loss Capture and Win-Loss Reporting

Trigger: daily scan at 07:00 over opportunities in Proposal Sent, Proposal Viewed or Questions or Revision. Also triggered by the owner moving a card to any Lost stage.

Conditions: branch on days to proposal_expiry_date.

Actions in order:

  1. At expiry minus 5 days: apply proposal-expiring. Send the client: "Hi [first name], the proposal I sent on [proposal_sent_date] runs out on [proposal_expiry_date]. That is not a sales deadline, it is just how long I can hold the team's availability for a [requested start] start. If you need longer, say so and I will extend it - I would rather do that than have it lapse." Notify the owner.
  2. At expiry minus 1 day: send one short reminder if there has been no reply, and notify the owner with a task to call.
  3. On the expiry date: create a task on the owner, due same day, requiring the Loss Reason form or an extension. Do not close the card automatically - an auto-closed deal is a deal nobody learns from.
  4. Wait 3 days. If the form is still not submitted, notify the practice lead and block the owner's pipeline report until it is. The loss record is the only asset a lost deal produces.
  5. On Loss Reason submission: write loss_reason_detail and competitor_named, apply proposal-lost, move the card to the Lost stage the reason maps to, and remove the contact from all active sequences.
  6. Wait 90 days. Send one re-approach email from the owner, once: "Hi [first name], it has been three months since we talked about [scope area]. No pitch - I am curious whether it went ahead and how it landed. If it is still open, I am still interested."
  7. Monthly reporting run, first working day at 07:00: email the partner group a win-loss summary: proposals sent, viewed, accepted and executed; median days from scoping call to send; median days from send to first view; median days from acceptance to execution; median days client signature to countersignature; win rate by engagement_type; win rate by option_selected; loss counts by stage; and competitors named.

Exit: single pass per card, plus the recurring monthly report.

05

What changes

The stretch between a good conversation and an executed agreement stops being a black box. Every proposal has a send date, a view history, a version number, an expiry and an outcome, all recorded without anybody updating a spreadsheet. The firm can finally answer the questions it has been estimating: how long partners actually take to get a proposal out, how often proposals are never opened at all, and how many deals that were verbally won sat unexecuted for a week because nobody owned the paperwork.

Three behaviors change immediately. Drafting latency drops, because the SLA tells the client a date and then holds the partner to it in front of their practice lead. Follow-up gets smarter rather than louder - an unopened proposal gets a deliverability-shaped recovery, an intensively read one gets an offer of a decision call, and a client with a live question gets a human instead of the next scheduled nudge. And the countersignature stops being the hidden delay, because the moment a client signs, the firm is on a four-hour clock with escalation attached.

What to measure, all of it available from the pipeline itself:

  • Days from scoping call to proposal sent - the latency metric. Watch the median, not the average; one proposal written three weeks late will hide ten written in two days.
  • Proposal open rate and time to first view - if open rate sits below the high nineties, something is wrong with addresses or deliverability, not with the proposal.
  • Win rate by engagement_type and by option_selected - the most commercially useful pair of numbers in the build. Which shapes of engagement the firm actually wins, and which option clients pick when given three.
  • Days from acceptance to fully executed - the number this build is designed to compress. Split it into acceptance-to-envelope, envelope-to-client-signature, and client-signature-to-countersignature, because the three have completely different fixes.
  • Countersign lag - median hours from client signature to countersignature, and how many breached 24 hours. This is a partner discipline metric and it belongs in front of partners.
  • Revision count distribution - a rising average means the scoping questionnaire is not doing its job.
  • Loss reasons by category and competitors named - after two quarters this stops being anecdote and starts being strategy.

The quieter benefit is that proposals become comparable. Because every one is built from the same template, sent the same way and tracked with the same fields, a firm can change one variable - the number of options, the order of sections, the expiry length - and actually see what it did to conversion.

06

Before you start

Decide these before you build anything

  • What the proposal artefact is. This build needs a hosted, trackable proposal with a unique URL per deal and an accept action inside it. A PDF attachment cannot be instrumented, and without view data more than half the branching logic in workflow 5 has nothing to branch on. If the firm insists on attachments, build it anyway but accept that workflows 4 and 5 collapse into one generic ladder.
  • Who countersigns, by practice area and by value. Name them, with a named deputy for leave. An unnamed countersigner is how a signed client agreement sits for a week.
  • Your high-value threshold. One number that decides whether escalations go to the practice lead or the managing partner, and whether the agreement gets a mandatory internal review before it goes out.
  • Your standard terms, and what is negotiable. BO is instructed never to touch contractual language, but the firm still needs an internal note on which clauses a partner can agree to on a call and which need review, or the contractual branch in workflow 6 just creates bottlenecks.
  • Expiry length. 21 days is a reasonable default, 35 where procurement is involved. Make it a real operational constraint tied to team availability, not a manufactured deadline - clients can tell the difference and resent the latter.

Integrations

  • E-signature with full webhook support - DocuSign, Adobe Acrobat Sign or equivalent. You need envelope-sent, recipient-viewed, recipient-signed and envelope-completed events writing back, plus sequential routing so the countersigner only receives it after the client signs. Confirm the webhooks before building workflow 8; polling is not good enough for a four-hour countersign clock.
  • Proposal hosting with view webhooks - whatever tool hosts the proposal must call back on every view, not just the first. The view count drives the branching.
  • Accounting - QuickBooks, Xero or equivalent, for the deposit invoice with the PO number and the exact legal entity attached. Get the entity name right in the CRM or you will get it wrong on every invoice.
  • Calendar - Google Calendar or Outlook, two-way sync, for every partner on the round-robin.
  • Internal notifications - Slack or Microsoft Teams webhook into a deals channel, plus direct notification for the countersign clock. The overdue alert has to be unpleasant enough to act on.

Numbers, SMS and deliverability

  • Provision one SMS number and complete A2P 10DLC brand and campaign registration in the United States, or the local equivalent elsewhere. Start this weeks ahead of launch, not days. Register as customer care or account notifications - these are transactional messages about a live transaction.
  • Opt-out language on first SMS contact, STOP honoured automatically and globally across all workflows.
  • Quiet hours 8am to 7pm recipient local time, weekdays only, enforced in the workflow rather than left to send-time luck.
  • SPF, DKIM and DMARC on the firm domain before the first proposal goes out. Send from the partner's real address. A proposal that lands in a promotions tab is the leading cause of a never-opened proposal, and workflow 4 exists mostly to catch the consequences of getting this wrong.
  • Plain-text fallback for the unopened-recovery email - no images, no tracking pixels, no link shorteners. The whole point of that message is to get through a filter.

Data hygiene

  • Contracting entity names are not trading names. Add legal_entity_name as a required field on acceptance and resist the urge to prefill it from the company field, which is usually wrong.
  • Signer email is not the primary contact's email in roughly a third of engagements. The build treats this as a separate field for a reason; do not shortcut it.
  • Agree that moving a card to a Lost stage without the Loss Reason form is not permitted, and enforce it in the workflow rather than by asking nicely.

Compliance

  • Electronic signature validity and record-keeping rules vary by jurisdiction - the United States ESIGN Act and UETA, the EU eIDAS Regulation, the UK Electronic Communications Act and others. The signature tool's audit trail is usually what matters, and it should be retained with the executed agreement rather than only inside the tool.
  • Proposal view tracking records behavioral data about identifiable individuals. In the United Kingdom and European Union that is personal data under the GDPR or UK GDPR: cover it in the firm's privacy notice, set a retention period for view logs, and be prepared to explain what you collect if a client asks.
  • Proposal and agreement content is commercially sensitive. Restrict pipeline and field visibility by role, and keep hosted proposal URLs unguessable and expiring rather than permanently public.
  • The transactional and marketing distinction matters for the 90-day re-approach email in workflow 10. That one is marketing; it needs marketing consent and an unsubscribe. Everything up to the loss record is transactional.
  • None of this is legal advice. Have the firm's own counsel confirm the signature workflow, the standard terms used in the assembled agreement, the countersignature authority of each named partner, retention periods for view data, and consent handling on the re-approach step before go-live. Where a build's scope and pricing need working out, point the client at a scoping call at bookings.appbo.io.
Field notes

Build it with us.

Every build on this page is something we configure, test and hand over with the SOPs your team needs to run it.

Book a call