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:
- 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.
- If the questionnaire answer to "who else is involved in this decision" mentions procurement, legal, a board or a committee, apply procurement-involved.
- 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]."
- 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.
- Wait until 24 hours before the slot. Send email reminder with the agenda.
- Wait until 2 hours before. Send SMS within quiet hours: "See you at [time] - [owner], [firm]."
- 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.
- 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:
- Move the opportunity to Drafting. Apply proposal-drafting. Set the drafting due date at 2 business days from now.
- 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]."
- 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."
- 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."
- 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.
- 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:
- 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.
- If value is above the firm's high-value threshold, apply high-value-proposal.
- 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]."
- Wait 1 hour. Notify the owner that the proposal is out, with the expiry date, so they know the clock the client is on.
- 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."
- 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."
- 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:
- 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."
- Wait 1 day.
- 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."
- Wait 2 days.
- 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.
- 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?"
- 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:
- Wait 2 days from first view.
- 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."
- 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."
- Wait 3 days.
- 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."
- Wait 4 days.
- 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."
- Wait 3 days.
- 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."
- Wait 4 days. If no reply, notify the owner with a task: "Call [client] - proposal viewed, four written attempts, no decision."
- 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:
- 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.
- Move the card to Questions or Revision.
- 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.
- 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."
- 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.
- 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]."
- 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."
- 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:
- Move the card to Verbal Yes. Remove proposal-viewed. Stop workflows 5 and 10.
- Notify the owner immediately: "[Client] has accepted [option_selected], requested start [date], contracting as [legal_entity_name]."
- 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."
- 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.
- 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.
- Assemble the agreement: firm template plus legal_entity_name, scope_summary, option_selected, requested start date, payment terms and po_number.
- 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.
- 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.
- 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."
- 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:
- 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."
- 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]"
- 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."
- Wait 3 days. If unsigned, notify the owner and create a task: "Envelope open 8 days for [client]. Call the signer directly."
- 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.
- 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."
- Wait 4 working hours. If not countersigned, notify the partner again, by SMS as well as email.
- 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.
- 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:
- 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]."
- 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.
- Send the client the kickoff booking link, and apply the onboarding tag the firm's delivery build listens for.
- Notify the delivery lead with the full package: scope_summary, option_selected, requested start date, engagement_type, and the executed agreement link.
- 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.
- Post to the internal deals channel: "Executed - [client], [engagement_type], [owner]. Proposal to execution: [days]. Versions: [proposal_version]."
- Wait 10 days. If deposit_invoice_status is still Raised rather than Paid, notify finance and the owner.
- 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:
- 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.
- At expiry minus 1 day: send one short reminder if there has been no reply, and notify the owner with a task to call.
- 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.
- 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.
- 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.
- 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."
- 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.