Table of Contents
- 1 The Business Situation
- 2 The Existing Process
- 2.1 Information and Control Problems
- 2.2 Operational Effects
- 3 What the New System Needed to Do
- 4 Implementation Approaches Considered
- 4.1 Improving the Manual Process
- 4.2 Using Salesforce Alone
- 4.3 Creating a Separate No-Code Database
- 4.4 Connecting the Existing Stack
- 4.5 Purchasing Dedicated Software
- 5 The Selected Solution
- 6 System Architecture and Data Flow
- 7 Data Structure
- 8 Workflow Statuses and Ownership
- 9 Step-by-Step Implementation
- 9.1 Step 1: Prepare the Accounts and Permissions
- 9.2 Step 2: Build the Intake
- 9.3 Step 3: Create the System of Record
- 9.4 Step 4: Connect the Tools
- 9.5 Step 5: Build the Core Automation
- 9.6 Step 6: Add Approvals, Reminders, and Escalations
- 9.7 Step 7: Add Documents and File Management
- 9.8 Step 8: Add Reporting and Operational Views
- 9.9 Step 9: Add Security and Governance Controls
- 9.10 Step 10: Deploy and Test
- 10 Code and Configuration
- 10.1 Salesforce Submission Validation
- 10.2 Ready-for-Letter Validation
- 10.3 Conflict Party Normalization Formula
- 10.4 Representative Salesforce Change Query
- 10.5 Representative Activity Query
- 10.6 Google Sheets Formulas
- 10.7 Make Data Store Configuration
- 10.8 Slack Notification Payload
- 10.9 DocuSign Envelope Request
- 10.10 Deployment and Troubleshooting
- 11 Failure Handling and Operational Reliability
- 12 A Complete Example
- 13 Implementation Cost
- 14 Estimated Time and Cost Savings
- 15 Adding AI to the Automation
- 15.1 The Recommended AI Enhancement
- 15.2 Benefits of the AI Enhancement
- 15.3 What Remains Rule-Based or Human-Controlled
- 15.4 Estimating the Additional Value of AI
- 16 Testing Checklist
- 17 Ongoing Maintenance
- 18 When to Move to Dedicated Software
- 19 Implementation Checklist
The Business Situation
Hawthorne Vale Advisory is a fictional 68-person professional services firm delivering tax, transaction advisory, and operational consulting services. Its client acceptance process involves six business development employees, three risk and compliance reviewers, five finance employees, and 12 engagement partners.
The firm processes approximately 80 prospective engagements each month. Some are new clients, while others involve new projects for existing clients. Every engagement must pass through client identity checks, conflict review, scope approval, pricing review, engagement-letter preparation, electronic signature, billing setup, and onboarding.
Salesforce already holds Accounts, Contacts, Opportunities, owners, and sales activities. Google Workspace supports documents and shared files. Google Sheets is used for operational tracking, Slack is used for internal communication, and an approved electronic signature platform is used for engagement letters. These tools were not previously connected.
The original process began when a business development employee received client details by email. Information was copied into Salesforce, a spreadsheet, email messages, and an engagement-letter template. Compliance and finance maintained their own notes, making it difficult to determine whether an engagement was ready to proceed.
The representative implementation uses Salesforce as the authoritative system of record. Make coordinates data movement, Google Sheets provides a restricted operational tracker, Slack delivers limited notifications, Google Drive and Google Docs handle document generation, and DocuSign handles electronic signatures. Finance retains human control over setup in the firm’s separate billing system.
Note: This case study is provided as a representative example of the types of AI integration and digital transformation solutions Intelligex designs and delivers. Actual engagements are tailored to each client’s goals, constraints, existing systems, timeline, and available resources, so the approach, tools, and outcomes may vary.
The business needed to change because email was functioning as an informal workflow engine. Missing related-party names could delay conflict review, pricing exceptions could bypass finance, and staff sometimes generated engagement letters before all approvals had been recorded. The process also depended heavily on two experienced coordinators who knew where to look for incomplete work.
The Existing Process
The original process followed this sequence:
- A prospective client or referral source emailed a partner or business development employee.
- The recipient forwarded the message to a shared intake mailbox and created or updated an Opportunity in Salesforce.
- An intake coordinator copied names, scope information, pricing, and billing details into a Google Sheet.
- The coordinator emailed compliance a list of the prospective client, affiliates, counterparties, and other related parties.
- A compliance reviewer searched Salesforce and historical records, then returned a conflict decision by email.
- The engagement partner reviewed the proposed scope and fee in the email thread.
- Finance reviewed non-standard discounts, payment terms, and payer details in a separate message.
- An administrator copied approved information into a Google Docs engagement-letter template.
- The letter was converted to PDF and uploaded to the electronic signature platform.
- After signature, finance created a customer or project in the billing system and emailed an external billing identifier to the intake coordinator.
- The coordinator updated the spreadsheet and Opportunity, then notified the delivery team in Slack.
Information and Control Problems
- Missing related parties: Conflict review could start before affiliates or counterparties had been identified.
- Duplicate entry: Client and engagement details were copied into Salesforce, Google Sheets, email, and document templates.
- Uncontrolled spreadsheet edits: Users could overwrite statuses without recording who made the decision.
- Unclear ownership: A row might show Conflict Review without identifying the assigned reviewer.
- Scattered documents: Draft and signed letters could be stored in different folders.
- Weak audit history: Approval evidence was distributed across email threads and spreadsheet cells.
Operational Effects
- Repeated follow-up: Coordinators spent time asking reviewers whether work had been completed.
- Delayed starts: Delivery teams could not reliably determine when an engagement was approved.
- Pricing risk: Discounts and extended payment terms could progress without documented finance review.
- Reconciliation work: Salesforce stages, spreadsheet statuses, and signed-document folders frequently differed.
- Key-person dependency: Experienced coordinators manually identified records that had stopped moving.
- Limited reporting: Management could count Opportunities but not accurately measure intake processing time or exception rates.
The practical problem was not simply slow data entry. The firm lacked one controlled record showing the current status, responsible person, required next action, approval evidence, document links, and automation health for each prospective engagement.
What the New System Needed to Do
| Area | Requirement | Control |
|---|---|---|
| Intake | Collect required client, scope, pricing, billing, and related-party information through an authenticated workflow. | Do not permit submission while required information is missing. |
| Identity | Create one durable intake identifier connected to the Salesforce Opportunity. | Prevent two intake records for the same Opportunity. |
| Conflict review | Record every party searched, the search result, reviewer, decision, date, and comments. | Only a designated compliance reviewer can clear or reject a conflict review. |
| Scope and pricing | Route scope to the engagement partner and pricing exceptions to finance. | Use deterministic thresholds rather than AI judgment. |
| Workflow | Show current status, owner, next action, due date, and exception state. | Salesforce remains authoritative; Google Sheets is a read-only operational projection. |
| Activities | Use Opportunity Tasks and Events to update last activity and next-action information. | Create an exception task when an active intake has no valid next action. |
| Notifications | Notify owners about assignments, overdue actions, approvals, rejections, and failures. | Slack messages contain an intake ID and link, not detailed conflict information. |
| Documents | Generate an engagement letter from approved Salesforce values. | A partner must approve the generated draft before it is sent for signature. |
| Signature | Send the approved letter for electronic signature and capture the returned envelope ID. | Completed documents are downloaded to a restricted shared drive folder. |
| Billing | Create and track a finance setup task after signature. | Finance enters the billing-system identifier before onboarding can proceed. |
| Exceptions | Record integration errors, validation failures, and overdue work. | Failed records enter a manual-review queue and can be retried safely. |
| Audit | Retain status history, approval records, document identifiers, and automation errors. | Decisions cannot be made solely through Slack or Google Sheets. |
| Reporting | Measure volume, status, age, processing time, ownership, and exception rates. | Reports are generated from Salesforce, with Google Sheets supporting daily operations. |
| Privacy | Minimize the personal and commercially sensitive data copied to other platforms. | Conflict parties, detailed notes, files, and billing data remain outside Slack and the tracker. |
The design also needed a manual override. Authorized compliance, finance, and operations managers could place an intake on hold, reassign work, return it for more information, or retry a failed automation. Each override required a reason and was recorded in Salesforce.
Implementation Approaches Considered
| Approach | Connected tools | Effort | Customization | Main limitation |
|---|---|---|---|---|
| Improve email and spreadsheet procedures | Gmail, Google Sheets, Google Drive | Low | Low | Email remains the workflow and approval history remains fragmented. |
| Salesforce-only workflow | Salesforce, Salesforce Flow, Salesforce Files | Medium | High | Would require teams to abandon existing operational and document tools immediately. |
| No-code intake database | No-code database, email, e-signature platform | Medium | High | Creates a second client and Opportunity database beside Salesforce. |
| Connected existing stack | Salesforce, Make, Google Sheets, Slack, Google Drive, DocuSign | Medium | High | Requires integration monitoring and careful permission boundaries. |
| Dedicated client acceptance platform | Specialized intake, conflict, engagement, and practice-management software | High | Varies | Higher migration effort and potentially more capability than the current volume requires. |
Improving the Manual Process
Standardized email templates and a protected spreadsheet could reduce some omissions. They would not provide transactional integrity, reliable duplicate prevention, controlled approvals, or automatic reconciliation with Salesforce. This option was unsuitable because it preserved the main source of risk.
Using Salesforce Alone
A Salesforce-only design could provide strong control through custom objects, validation rules, Flow, reports, and Salesforce Files. It was technically viable. The firm nevertheless wanted to retain its established Google document workflow and Slack notifications. A Salesforce-only implementation would also have required a larger initial change in user behavior.
Creating a Separate No-Code Database
A standalone database could provide attractive forms and views, but it would duplicate Accounts, Contacts, Opportunities, users, and activities. The integration would then have to resolve conflicting edits between two systems. That was unnecessary when Salesforce already held the client and sales records.
Connecting the Existing Stack
The selected approach retained Salesforce as the authority while using Make to coordinate the other tools. It provided enough flexibility for validation, document generation, Slack notifications, signature status, and error handling without creating another master database.
Purchasing Dedicated Software
Dedicated client acceptance and conflict-management software may be appropriate for firms with more complex ethical walls, formal matter management, extensive conflict databases, or substantially higher volume. Hawthorne Vale Advisory first needed a controlled process using systems it already operated.
The Selected Solution
| Tool | Responsibility | Authoritative data |
|---|---|---|
| Salesforce | Authenticated intake, Opportunities, client records, conflict parties, approvals, workflow status, tasks, errors, and audit history | Yes |
| Make | Scheduled change detection, transformation, routing, synchronization, document generation, signature coordination, retries, and error routing | No |
| Google Sheets | Restricted working tracker for daily workload, deadlines, and automation status | No |
| Slack | Assignment, reminder, milestone, and exception notifications containing minimal data | No |
| Google Docs and Google Drive | Controlled engagement-letter templates, generated drafts, PDFs, and executed documents | Authoritative document copy |
| DocuSign | Electronic signature, envelope status, signing evidence, and completed-document retrieval | Authoritative signature evidence |
| Salesforce reports | Management reporting, processing metrics, review workload, and audit queries | Yes |
| Approved AI service | Optional extraction of candidate related parties from unstructured scope notes | No |
The intake tool is an internal Salesforce Screen Flow launched from an Opportunity. It is not a public form. Business development records the required details during a client conversation or from an approved secure communication channel. Sensitive attachments are uploaded directly to Salesforce Files or a restricted Google Drive location, rather than being attached to internal email threads.
Make is the automation layer because it can connect Salesforce, Google Sheets, Slack, Google Workspace, and the signature service. It also provides schedules, routers, filters, data stores, error handlers, and OAuth-based connections.
Google Sheets was retained because operations employees were already comfortable using filtered spreadsheet views. The tracker is protected and does not contain conflict-party lists, review notes, identity documents, tax identifiers, or full engagement documents.
Human decisions remain central. Compliance clears or rejects conflicts. The engagement partner approves scope and the generated letter. Finance approves non-standard commercial terms and completes billing setup. Make moves information and identifies exceptions, but it does not approve a prospective client.
The separate billing platform was intentionally left outside the initial integration. Its customer and project creation controls varied by service line, and finance wanted to retain human review. The automation creates a controlled billing task and requires finance to record the resulting external billing identifier.
System Architecture and Data Flow
- Intake: An authenticated Salesforce Screen Flow connected to an Opportunity
- System of record: Salesforce custom objects, standard Opportunities, Accounts, Contacts, Tasks, and Events
- Automation layer: Make scenarios using OAuth connections and persistent processing keys
- Document storage: Restricted Google Shared Drive folders, with document identifiers stored in Salesforce
- Notifications: Private Slack channels and direct messages containing minimal information
- Reporting: Salesforce reports and a protected Google Sheets working tracker
- AI layer: Optional structured extraction of candidate conflict parties, always subject to human confirmation
- Opportunity creation: Business development creates an Account, Contact, and Opportunity in Salesforce. The Opportunity ID becomes the durable relationship key. If creation fails, the user remains in Salesforce and sees the platform validation error.
- Intake creation: The user launches the intake Screen Flow from the Opportunity. The flow creates one
Client_Intake__crecord and one or more childConflict_Party__crecords. A unique Opportunity key prevents a second intake for the same Opportunity. - Submission validation: Salesforce checks required client, service, scope, pricing, payer, privacy, and conflict-party fields. Invalid records remain in Draft or Returned for Information.
- Change detection: Every five minutes, Make queries Salesforce records with a
SystemModstampafter the last successful watermark and before the current run cutoff. - Tracker synchronization: Make validates the Salesforce record, searches Google Sheets by Salesforce record ID, and adds or updates one row. The row number and synchronization timestamp are recorded in Make. A failed update creates an automation error rather than changing the business status.
- Assignment: When an intake enters Submitted, Make confirms that a compliance reviewer and engagement partner are assigned. It creates Salesforce Tasks and sends limited Slack notifications. Returned Task IDs are retained in Salesforce or the Make processing log.
- Activity processing: Make reads changed Salesforce Tasks and Events related to active intake Opportunities. It updates last activity, next action, and owner fields in Salesforce and the tracker.
- Exception detection: If an active intake has no open next-action Task, an overdue review, inconsistent statuses, or an automation failure, Make searches for an existing open exception Task. If none exists, it creates one and notifies the responsible owner.
- Human review: Compliance records the conflict decision. The partner records the scope decision. Finance reviews engagements meeting the configured pricing or billing thresholds.
- Document generation: Once all required approvals are present, Make copies the approved Google Docs template, replaces controlled placeholders, stores the document in the correct Shared Drive folder, exports a PDF, and creates an engagement-package record in Salesforce.
- Draft approval: The engagement partner reviews the generated document and marks it approved in Salesforce. Rejected drafts return to document preparation with comments.
- Electronic signature: Make sends the approved PDF to DocuSign, stores the returned envelope ID, and changes the letter status to Signature Pending. A scheduled scenario checks envelope status.
- Completed document: When the envelope is completed, Make downloads the signed PDF, stores it in the Executed folder, and updates Salesforce with the document link and completion time.
- Billing and onboarding: Make creates a finance Task. Finance creates the client or project in the billing system and records its external ID. Make then creates onboarding Tasks and sends a Slack notification to the delivery owner.
- Closure: When onboarding checks are complete, Salesforce changes the intake to Active and the Opportunity to the firm’s approved won stage. Rejected or withdrawn records are closed with a reason.
Data Structure
Salesforce holds the relational data. Google Sheets receives only an operational projection. Document files remain in Google Drive and DocuSign, with identifiers and restricted links stored in Salesforce.
- Opportunity
- The commercial record. One Opportunity has one Client Intake in this design.
- Client Intake
- The workflow record controlling submission, review, approval, documents, billing setup, and onboarding.
- Conflict Party
- A child record for each prospective client, affiliate, counterparty, beneficial owner, or other name that must be searched.
- Review Decision
- A child record containing the review type, reviewer, decision, timestamp, reason, and evidence reference.
- Engagement Package
- A child record holding the Google document ID, PDF link, DocuSign envelope ID, status, and executed-document link.
- Task and Event
- Salesforce activities related to the Opportunity. Exception, approval, billing, and onboarding Tasks use controlled types.
- Automation Error
- A durable manual-review record containing the failed event key, scenario, attempt count, sanitized error, and recovery status.
| Field | Type | Required | Source | Purpose and validation |
|---|---|---|---|---|
| Name | Auto Number | Yes | Salesforce | Format CI-{000000}; used as the operational identifier. |
| Opportunity__c | Master-Detail or Lookup | Yes | Screen Flow | Connects the intake to its Opportunity. |
| Opportunity_Key__c | Text, Unique, External ID | Yes | Screen Flow | Stores the Opportunity ID and prevents duplicate intake records. |
| Account__c | Lookup | Yes | Opportunity | Prospective or existing client Account. |
| Primary_Contact__c | Lookup | Yes | Screen Flow | Primary client contact and proposed signer. |
| Client_Legal_Name__c | Text, 255 | Yes | User | Legal contracting name; whitespace is trimmed. |
| Client_Type__c | Picklist | Yes | User | Corporation, Partnership, Individual, Government, Nonprofit, or Other. |
| Jurisdiction__c | Text or controlled picklist | Yes | User | Country and state, province, or registration jurisdiction. |
| Service_Line__c | Picklist | Yes | User | Tax, Transaction Advisory, Operations Consulting, or Other Approved Service. |
| Scope_Description__c | Long Text Area | Yes | User | Plain-language scope. Minimum length is 100 characters. |
| Estimated_Fee__c | Currency | Yes | User | Must be greater than zero. |
| Pricing_Model__c | Picklist | Yes | User | Fixed Fee, Time and Materials, Retainer, or Other. |
| Discount_Percent__c | Percent | No | User | Must be between 0 and 100; values over the firm threshold require finance review. |
| Billing_Terms__c | Picklist | Yes | User | Due on Receipt, 15 Days, 30 Days, 45 Days, or Exception Requested. |
| Billing_Email__c | Yes | User | Uses Salesforce email-format validation. | |
| Engagement_Partner__c | Lookup to User | Yes | User | Owns scope approval and final letter review. |
| Compliance_Reviewer__c | Lookup to User | At submission | Assignment rule | Owns conflict review. |
| Status__c | Picklist | Yes | Workflow | Uses only the controlled statuses defined below. |
| Priority__c | Picklist | Yes | User or rule | Standard, Urgent, or Regulatory Deadline. |
| Submitted_At__c | Date and Time | After submission | Salesforce Flow | Set once when Draft becomes Submitted. |
| Next_Action_Due__c | Date | While active | Make | Earliest due date from open intake-related Tasks. |
| Last_Activity_At__c | Date and Time | No | Make | Latest relevant Task or Event activity time. |
| Conflict_Party_Count__c | Roll-Up Summary | Yes | Salesforce | Submission requires at least one confirmed conflict party. |
| Conflict_Status__c | Picklist | Yes | Compliance | Not Started, In Review, Potential Match, Cleared, Rejected, or More Information Required. |
| Scope_Approval_Status__c | Picklist | Yes | Partner | Not Started, Pending, Approved, Rejected, or Returned. |
| Finance_Approval_Status__c | Picklist | Yes | Rule and Finance | Not Required, Pending, Approved, Rejected, or Returned. |
| Letter_Status__c | Picklist | Yes | Make and Partner | Not Started, Draft Generated, Draft Rejected, Approved to Send, Sent, Completed, or Failed. |
| Onboarding_Status__c | Picklist | Yes | Operations | Not Started, Billing Setup, In Progress, Complete, or Blocked. |
| Billing_System_ID__c | Text, 100 | Before activation | Finance | External customer, project, or matter identifier. |
| Document_Link__c | URL | No | Make | Restricted link to the engagement folder or package record. |
| Automation_Status__c | Picklist | Yes | Make | Pending, Synced, Failed, Retry Scheduled, or Manual Hold. |
| Last_Automation_Run__c | Date and Time | No | Make | Updated only when a business-field fingerprint is processed. |
| Retry_Count__c | Number | Yes | Make | Starts at zero and is incremented after a failed retry. |
| Error_Message__c | Long Text Area | No | Make | Stores a sanitized error summary without document bodies or credentials. |
| Notes__c | Long Text Area | No | Authorized users | Operational notes only; detailed conflict analysis belongs in Review Decision records. |
| Object | Important fields | Relationship and control |
|---|---|---|
| Conflict_Party__c | Party Name, Normalized Name, Role, Jurisdiction, Alias, Source, Confirmation Status, Search Status, Potential Match Count | Many parties belong to one intake. Only Confirmed parties enter the formal search queue. |
| Review_Decision__c | Review Type, Status, Assigned To, Decision By, Decision At, Reason, Evidence Link | Many review events may belong to one intake. Prior decisions remain in history. |
| Engagement_Package__c | Package ID, Template Version, Google Document ID, PDF File ID, Envelope ID, Status, Sent At, Completed At, Executed Link | One active package belongs to an intake; replaced drafts remain archived. |
| Automation_Error__c | Event Key, Scenario, Source Record, Attempt Count, Error Category, Error Message, Status, Next Retry At, Resolved By | The Event Key is unique so repeated failures update one error record. |
| Task | WhatId, Subject, Activity Date, Owner, Status, Exception Type, Exception Key, Intake ID | Tasks are related to the Opportunity so sales activities and intake actions share one activity timeline. |
| Column | Source | Editable | Purpose |
|---|---|---|---|
| Intake ID | Salesforce | No | Operational identifier. |
| Salesforce Record ID | Salesforce | No | Unique row-matching key. |
| Created At | Salesforce | No | Age calculation. |
| Client Display Name | Salesforce | No | Restricted operational reference; legal names and aliases are excluded. |
| Owner | Salesforce | No | Current business owner. |
| Status | Salesforce | No | Current workflow stage. |
| Conflict, Scope, and Finance Status | Salesforce | No | High-level decisions without review details. |
| Next Action Due | Salesforce | No | Daily workload management. |
| Last Activity | Salesforce | No | Identifies inactive records. |
| Letter and Onboarding Status | Salesforce | No | Shows post-approval progress. |
| Automation Status | Salesforce | No | Shows synchronization health. |
| Last Sync | Make | No | Reconciliation timestamp. |
| Salesforce Link | Make | No | Returns the user to the authoritative record. |
Workflow Statuses and Ownership
| Status | Owner | Entry condition | Exit condition | Reminder and escalation |
|---|---|---|---|---|
| Draft | Business development | Intake created | Required fields and at least one conflict party are present | Reminder after two business days without submission |
| Submitted | Intake coordinator | User submits a valid Draft | Compliance reviewer and partner are assigned | Exception after four working hours without assignment |
| Conflict Review | Compliance reviewer | Conflict review Task created | Cleared, Rejected, or More Information Required | Reminder before due date; manager escalation when overdue |
| Returned for Information | Business development | A reviewer identifies missing or unclear information | Requested information is provided and resubmitted | Reminder after two business days |
| Approval Review | Partner and, when required, Finance | Conflict status is Cleared | All required approvals are Approved or Not Required | Owner reminder after one business day; manager escalation when overdue |
| Draft Letter Review | Engagement partner | Document package generated | Partner approves or rejects the generated draft | Reminder after one business day |
| Signature Pending | Business development | Envelope ID returned by DocuSign | Envelope completed, declined, voided, or expired | Client reminder follows approved signature policy; internal escalation after five days |
| Billing Setup | Finance | Signed letter stored | Billing-system identifier recorded | Reminder after one business day; escalation after two |
| Onboarding | Engagement manager | Billing setup complete | Required onboarding Tasks completed | Reminder based on planned start date |
| Active | Engagement partner | All acceptance and onboarding controls complete | Engagement later closes through the normal delivery process | No intake reminders |
| Rejected | Compliance, Partner, or Finance | Authorized reviewer records a rejection and reason | Closed unless an authorized manager permits a new review | Final notice to business development |
| Closed or Withdrawn | Business development | Prospect withdraws or Opportunity closes | No further action | Open intake Tasks are closed or cancelled |
A record moves backward when a reviewer selects Returned, More Information Required, or Draft Rejected. Rejection requires a reason and closes downstream Tasks. Manual Review is triggered by inconsistent statuses, missing ownership, failed document creation, invalid signature status, repeated integration failure, or an attempted override.
Step-by-Step Implementation
Step 1: Prepare the Accounts and Permissions
- Confirm required features: Verify that the Salesforce subscription supports custom objects, Screen Flow, field history, API access, reports, and the required user permissions. Confirm that the Make subscription supports the planned operation volume, data stores, schedules, and error handling. Verify Google Shared Drive and electronic-signature capabilities under the firm’s actual contracts.
- Create a Salesforce integration user: Use a dedicated named integration identity rather than an employee’s account. Grant API access and object permissions only for Account, Contact, Opportunity, Client Intake, Conflict Party, Review Decision, Engagement Package, Automation Error, Task, Event, and required User fields.
- Create Salesforce permission sets: Separate Business Development, Compliance Reviewer, Engagement Partner, Finance Reviewer, Operations Administrator, and Integration User permissions.
- Create Google groups: Use groups such as intake operations, compliance, engagement partners, and finance to control Shared Drive folders and the tracker. Avoid assigning files directly to individual users where group-based access is available.
- Create Make connections: Connect Salesforce, Google Sheets, Google Drive, Google Docs, Slack, and DocuSign using OAuth. Store credentials in Make connections, not in scenario variables or spreadsheet cells.
- Prepare Slack access: Add the Make Slack application only to the private operational channels that need notifications. Map Salesforce users to Slack user IDs through a restricted Salesforce User field or a protected configuration table.
- Create testing resources: Use a Salesforce sandbox when available. Otherwise, create a clearly identified test record type, a separate test spreadsheet, a separate Shared Drive folder, a private test Slack channel, and the signature provider’s test environment.
- Define service accounts and backups: Assign a primary automation owner and backup owner. Ensure the Google and Slack connections do not depend on a departing employee.
| Role | Can create or edit | Cannot approve |
|---|---|---|
| Business development | Opportunity, intake Drafts, client details, related parties, requested corrections | Conflict clearance and finance exceptions |
| Compliance | Conflict parties, search results, conflict decisions, return requests | Scope, pricing, or final letter |
| Engagement partner | Scope decision, draft-letter decision, engagement ownership | Conflict clearance |
| Finance | Commercial approval, billing setup, external billing ID | Conflict clearance or scope approval |
| Integration user | Tracker fields, Tasks, document identifiers, automation status, error records | Human approval decisions |
| Operations administrator | Assignment, retry, hold, and correction fields | Substantive compliance decisions unless separately authorized |
Step 2: Build the Intake
Create a Salesforce Screen Flow named Client Intake and make it available as an Opportunity action. The flow receives the Opportunity record ID as an input variable and retrieves the Opportunity, Account, owner, currency, and primary Contact.
The flow uses four screens:
- Client identity: Legal name, client type, jurisdiction, address, primary contact, signer, and payer.
- Scope and commercial terms: Service line, detailed scope, expected start date, fee, pricing model, discount, billing terms, and engagement partner.
- Conflict information: Prospective client name and instructions to add affiliates, counterparties, beneficial owners, and other relevant parties after the initial record is created.
- Confirmation: A summary, privacy notice, data-accuracy acknowledgment, and Save as Draft or Submit choice.
| Input | Control | Validation |
|---|---|---|
| Legal client name | Required text | 2 to 255 characters after trimming |
| Client type | Required dropdown | Controlled values only |
| Jurisdiction | Required dropdown or controlled text | Must match the firm’s jurisdiction reference list |
| Primary contact | Required Contact lookup | Contact must belong to the selected Account or be explicitly confirmed as new |
| Scope | Required long text | Minimum 100 characters; no engagement-letter generation from blank or placeholder text |
| Estimated fee | Required currency | Greater than zero |
| Discount | Percent | 0 through 100 |
| Billing terms | Required dropdown | Exception Requested requires an explanation |
| Billing email | Required email | Native email-format validation |
| Engagement partner | Required User lookup | User must be active and belong to an approved role |
| Attachments | Salesforce File Upload | Allow approved document types and apply the firm’s file-size policy |
| Privacy acknowledgment | Required checkbox | Must be selected before submission |
The flow first searches Client_Intake__c for the Opportunity ID. If a record exists, it opens the existing record rather than creating another. If none exists, the flow creates the intake with Opportunity_Key__c equal to the Opportunity ID. The unique constraint provides a second layer of duplicate protection if two users submit concurrently.
The first Conflict Party record is created from the legal client name. Users add additional parties through a controlled related-list action. The Submit action checks the roll-up count and blocks submission when no confirmed party exists.
Incomplete submissions remain Draft. The confirmation message displays the generated intake ID, current owner, and next required action. It does not claim that the prospective engagement has been accepted.
Because the flow is authenticated and internal, automated spam prevention is not required. If the firm later exposes a client questionnaire, it should use authenticated portal access, rate limiting, explicit sharing rules, and a separate review step before external data reaches the formal conflict queue.
Step 3: Create the System of Record
- Create the custom Salesforce objects and fields described in the data structure section.
- Configure the Client Intake Name field as an auto number using
CI-{000000}. - Mark
Opportunity_Key__cas Unique and External ID. - Create master-detail relationships for Conflict Party and Review Decision if the firm’s deletion and ownership policies permit them. Otherwise, use required lookups and prevent orphan records with Flow.
- Create a roll-up summary that counts Confirmed Conflict Party records.
- Enable field history for status, owner, review status, pricing terms, engagement partner, automation status, billing-system ID, and document status.
- Create record types or controlled views for New Business, Existing Client New Scope, and Renewal if the workflows differ.
- Create list views for My Drafts, Unassigned Reviews, Conflict Queue, Finance Queue, Letter Review, Signature Pending, Billing Setup, Automation Failures, and Manual Holds.
- Create the Google Sheet named
Client Intake Working Trackerwith a protectedTrackertab, a protectedConfigurationtab, and a protectedReconciliationtab. - Place column headers in row 1 and prevent sorting the physical range. Users should use filter views so Make can continue matching stable rows.
- Create the Shared Drive folder structure before activating document generation.
Use the Salesforce record ID as the Google Sheets upsert key. Do not use the client name because names can change and are not unique. Protect formula columns and all synchronized columns from manual editing.
The system should retain only one active Engagement Package. If a partner rejects a draft, the old package remains Archived and a new version is created. This preserves the history of what was reviewed.
Step 4: Connect the Tools
| Source | Destination | Trigger | Key mapping | Returned identifier |
|---|---|---|---|---|
| Salesforce Client Intake | Google Sheets | Scheduled query for changed records | Salesforce record ID to tracker record ID | Sheet row number |
| Salesforce Task and Event | Salesforce Client Intake and Google Sheets | Changed activity query | Activity WhatId to Opportunity to Client Intake | Updated intake ID and row number |
| Salesforce Client Intake | Slack | Assignment, milestone, overdue, or error condition | Salesforce User to Slack User ID | Slack message timestamp when available |
| Salesforce approved fields | Google Docs and Drive | All approvals complete | Intake ID to folder and package record | Folder ID, document ID, and PDF file ID |
| Google Drive PDF | DocuSign | Partner approves draft | Package ID to envelope metadata | Envelope ID and initial status |
| DocuSign | Google Drive and Salesforce | Scheduled envelope-status query | Envelope ID | Executed file ID and completion timestamp |
Authenticate Salesforce through the Make OAuth connection using the dedicated integration user. The integration user needs read access to relevant Accounts, Contacts, Opportunities, Users, Tasks, and Events, plus create and update access to the intake custom objects and exception Tasks.
Authenticate Google using an integration identity with access only to the intake tracker, template folder, and engagement Shared Drive. Authenticate Slack through an approved workspace application. Authenticate DocuSign using OAuth, with access limited to the account responsible for engagement envelopes.
Create a Make Data Store for each scenario watermark. Each record contains the scenario name, last successful cutoff in UTC, last run status, and last reconciliation time. Advance the watermark only after all records through the cutoff have either succeeded or been durably written to the automation-error queue.
Create another Make Data Store for processed event keys. The event key uses the source object, source record ID, and Salesforce SystemModstamp. This prevents a duplicate schedule run from repeating the same external actions.
Step 5: Build the Core Automation
Automation A: Intake and Opportunity Synchronization
- Trigger: Scheduled Make scenario every five minutes.
- Conditions: Client Intake or related Opportunity changed after the previous watermark and on or before the run cutoff.
- Actions: Query Salesforce, validate values, calculate a business-field fingerprint, add or update the tracker row, evaluate exception rules, and record the event key.
- Fields updated: Tracker columns, Automation Status, Last Automation Run, Retry Count, and sanitized Error Message when necessary.
- Notification: Only for a new assignment, material milestone, overdue condition, or failure.
- Exception: Invalid status, missing owner, missing due date, tracker failure, or inconsistent approval combination creates an Automation Error and exception Task.
Configure the actions in this order:
- Set
run_cutoff_utcto the scenario start time. - Read the previous watermark from the Make Data Store.
- Query changed Client Intake records ordered by
SystemModstampascending. - Iterate through each record with scenario concurrency restricted so two runs cannot update the same tracker row simultaneously.
- Validate the Salesforce ID, intake ID, owner, status, and allowed picklist values.
- Build an event key from object name, record ID, and
SystemModstamp. - Skip external actions if the event key already exists.
- Search the Tracker tab for an exact Salesforce record ID.
- Add a row if no result exists. Update the single matching row if one exists. If more than one row exists, stop that record and create a duplicate-tracker error.
- Evaluate assignment, approval, next-action, and status-consistency rules.
- Create any required exception Task only after searching for the deterministic exception key.
- Write the processed event key.
- Update the Salesforce automation fields only when their values changed.
- After all records are complete or durably queued, advance the scenario watermark to the cutoff.
Automation B: Opportunity Activity Synchronization
- Trigger: Scheduled Task and Event queries every ten minutes.
- Conditions: Activity changed since the activity watermark and is related to an Opportunity with an active Client Intake.
- Actions: Resolve the Opportunity to its intake, update last activity, find the earliest open Task, update next-action details, and evaluate whether a replacement action is required.
- Fields updated: Last Activity At, Next Action Due, current action owner, tracker row, and activity event key.
- Notification: Sent when a material Task is assigned, becomes overdue, or closes without another open action.
- Exception: If an active intake has no future action, create a Set Next Action Task assigned to the Opportunity owner.
All intake-related Tasks and Events are related to the Opportunity through WhatId. For each changed activity, Make searches Client_Intake__c by Opportunity__c. If no active intake exists, the activity is ignored.
When a Task closes, Make queries open Tasks for the Opportunity and sorts them by Activity Date. The earliest valid date becomes Next_Action_Due__c. If no open Task exists and the intake is not Active, Rejected, Closed, or Withdrawn, Make creates an exception.
Automation C: Exception Task Creation
- Trigger: An exception condition detected by any scenario or the nightly control scenario.
- Conditions: The intake is active, the exception remains true, and no open Task has the same exception key.
- Actions: Search existing Tasks, create one Task, relate it to the Opportunity, create or update an Automation Error when technical, and update Automation Status.
- Fields updated: Task Exception Type, Exception Key, Intake ID, due date, owner, and Salesforce error fields.
- Notification: Direct Slack notice to the owner and a summary to the private intake-operations channel.
- Exception: If Slack fails, the Salesforce Task remains authoritative and the Slack failure is recorded separately.
Use deterministic exception keys such as:
CI-000184|NO_NEXT_ACTION|2026-07-15
CI-000184|CONFLICT_OVERDUE|2026-07-15
CI-000184|DOCUMENT_GENERATION|EP-000142
CI-000184|TRACKER_DUPLICATE|TRACKER
Before creating a Task, Make searches for an open Task with the same key. Scenario concurrency is limited to one active execution for exception creation. This combination prevents duplicate Tasks after retries or repeated schedule runs.
Automation D: Approval Completion and Draft Generation
- Trigger: Client Intake changes and all required approvals become complete.
- Conditions: Conflict is Cleared, scope is Approved, finance is Approved or Not Required, no Manual Hold exists, and no active Engagement Package exists.
- Actions: Create the Drive folder, copy the approved template, replace placeholders, export PDF, create Engagement Package, and create draft-review Task.
- Fields updated: Drive folder link, package ID, document ID, PDF ID, Letter Status, and Task ID.
- Notification: Engagement partner receives a Slack notice with the intake ID and Salesforce link.
- Exception: Missing template values or failed document operations set Letter Status to Failed and create an operations Task.
Automation E: Signature, Billing, and Onboarding
- Trigger: Letter Status changes to Approved to Send, followed by scheduled envelope checks.
- Conditions: Approved PDF exists, signer name and email are valid, and no envelope ID is present.
- Actions: Create envelope, store envelope ID, poll status, download completed document, create finance Task, and later create onboarding Tasks.
- Fields updated: Envelope ID, Letter Status, Sent At, Completed At, Executed Link, Billing Status, Billing System ID, and Onboarding Status.
- Notification: Internal notifications at send, completion, decline, billing completion, and onboarding readiness.
- Exception: Invalid signer, declined envelope, failed download, or missing billing ID creates a controlled exception.
Make stores the returned envelope ID before sending any downstream notification. If a later update fails, the retry searches by the stored envelope ID rather than creating a second envelope.
Step 6: Add Approvals, Reminders, and Escalations
The representative approval rules are internal assumptions and must be replaced with the firm’s actual policy:
- Every prospective engagement requires a human conflict decision.
- Every scope requires approval by the designated engagement partner.
- Finance review is required when the estimated fee exceeds $25,000, the discount exceeds 10 percent, payment terms exceed 30 days, the payer differs from the client, or an exception is requested.
- The engagement letter requires partner review after generation, even if the scope was previously approved.
- No Slack response counts as formal approval.
Configure Salesforce actions or Screen Flows for Approve, Reject, and Return for Information. Each action creates a Review Decision record containing the review type, prior status, new status, acting user, timestamp, reason, and evidence link where applicable.
Conflict review may run in parallel with preliminary scope preparation, but letter generation remains blocked until conflict clearance. Finance review may run in parallel with partner review after conflict clearance.
The reminder scenario runs each weekday morning:
- Query active review Tasks due within one day or already overdue.
- Exclude completed, rejected, withdrawn, and manually held records.
- Send one reminder per Task per day using a reminder event key.
- If one day overdue, check the assigned user’s approved delegate.
- If a delegate exists and is active, reassign or add the delegate according to firm policy.
- If no delegate exists, escalate to the appropriate team manager.
- Record the reminder or escalation on the Task and in an automation log.
A rejection requires a reason. Make closes downstream Tasks that have not started, updates the tracker, and notifies business development. A return request changes the intake to Returned for Information and assigns a Task to the business development owner.
Step 7: Add Documents and File Management
Create this Shared Drive structure:
Client Acceptance
Templates
Current
Archived
Engagements
2026
CI-000184
Drafts
Sent
Executed
Supporting Documents
Automation Exceptions
Folder and file names use the intake ID rather than a full client name. This reduces unnecessary exposure in search results and synchronization logs.
The approved engagement template contains controlled placeholders:
{{INTAKE_ID}}
{{CLIENT_LEGAL_NAME}}
{{CLIENT_ADDRESS}}
{{SCOPE_SUMMARY}}
{{PRICING_MODEL}}
{{ESTIMATED_FEE}}
{{BILLING_TERMS}}
{{EXPECTED_START_DATE}}
{{PARTNER_NAME}}
{{CLIENT_SIGNER_NAME}}
{{CLIENT_SIGNER_TITLE}}
/client_sign/
/client_date/
Make copies the template into the Drafts folder, replaces every placeholder, and verifies that no text matching {{ remains. If a placeholder remains, document generation stops and creates an exception rather than sending an incomplete letter.
Use these naming conventions:
CI-000184_Engagement_Letter_v01.docxor the native Google document equivalentCI-000184_Engagement_Letter_v01.pdfCI-000184_Engagement_Letter_EXECUTED.pdf
The integration user needs edit access to Drafts and Sent folders. Compliance users do not automatically receive access to engagement documents unless policy requires it. The Executed folder is restricted to designated partners, finance, and records administrators.
Generated drafts are never overwritten. A replacement creates the next version. The active Engagement Package points to the current version, while older package records remain Archived.
When the completed envelope is available, Make downloads the combined signed PDF, uploads it to Executed, and checks that the returned file has non-zero size. A missing or empty file prevents the billing Task from being created.
Retention, legal hold, and deletion periods must follow the firm’s documented records policy. The automation should not silently delete engagement documents.
Step 8: Add Reporting and Operational Views
Create Salesforce reports for:
- New intakes created this week
- Drafts older than two business days
- Unassigned conflict reviews
- Conflict reviews due or overdue
- Scope and finance approvals awaiting action
- Returned and rejected intakes
- Signature-pending envelopes
- Billing setup awaiting completion
- Onboarding items by owner
- Automation failures and retry counts
- Average time from submission to conflict decision
- Average time from clearance to signed letter
- Volume by service line, partner, status, and exception type
- Manual-review queue
In Google Sheets, create filter views for My Open Work, Due Today, Overdue, Missing Next Action, Signature Pending, Billing Setup, Recently Completed, and Automation Failed. Users must not directly change synchronized statuses in the tracker.
The operational dashboard is refreshed whenever Make updates a row. Salesforce reports use live Salesforce data. The operations manager owns report definitions and investigates any difference between Salesforce and the tracker.
Set alert thresholds conservatively. For example, a single failed document or signature operation requires review, while tracker delays can be escalated after two consecutive failed synchronization attempts.
Step 9: Add Security and Governance Controls
- Least privilege: Give each role access only to the objects, fields, folders, and Slack channels required for its work.
- Field-level security: Hide conflict notes, identity information, discount rationale, and billing details from users without a business need.
- Tracker minimization: Do not copy related-party names, search results, detailed notes, attachments, tax data, bank data, or full addresses to Google Sheets.
- Slack minimization: Use the intake ID, status, due date, owner, and Salesforce link. Do not send conflict details or engagement documents.
- Shared links: Disable public and unrestricted link sharing for the tracker and document folders.
- Credential storage: Keep OAuth connections and API secrets in platform credential stores. Never place them in Salesforce fields, Sheets, Slack, or scenario notes.
- Activity logging: Retain Salesforce field history, Review Decision records, Make execution identifiers, document IDs, and signature evidence.
- Access removal: Add Salesforce, Google Workspace, Slack, Make, and DocuSign to the former-employee deprovisioning checklist.
- Backups: Include Salesforce metadata and data, tracker configuration, templates, and executed documents in the firm’s backup process.
- Privacy: Collect only information required for client acceptance. Apply the firm’s retention and legal-hold rules.
- AI restrictions: Do not send government identifiers, bank data, tax records, privileged advice, full engagement documents, or protected conflict notes to an AI service unless separately approved.
- Human control: Conflict clearance, client acceptance, pricing exceptions, scope approval, and final letter approval remain human decisions.
Step 10: Deploy and Test
- Build Salesforce metadata in a sandbox or isolated test configuration.
- Use separate Make scenarios, data stores, spreadsheet, folders, Slack channel, and signature test account.
- Create at least 25 sample records covering normal, exception, rejection, and failure paths.
- Use test users from business development, compliance, finance, and partner roles.
- Run technical tests before user acceptance testing.
- Reconcile every test record across Salesforce, Google Sheets, Slack, Drive, and DocuSign.
- Pilot with one service line and two engagement partners for two weeks or an equivalent representative volume.
- During the pilot, keep the prior tracker available as read-only reference. Do not permit both systems to accept status edits.
- Activate scenarios in sequence: tracker synchronization, activity processing, reminders, document generation, signature polling, then onboarding.
- Document a rollback procedure that disables Make scenarios without deleting Salesforce records or signed files.
- Assign a launch support owner and a backup owner.
- Provide role-specific instructions showing where to enter decisions, where not to enter them, and how to report a failed automation.
- After acceptance, enable production schedules and reset all production watermarks to the approved start time.
- Monitor every run during the first week and perform a daily Salesforce-to-Sheets reconciliation.
Code and Configuration
No custom application code is required for the core implementation. Salesforce Flow, validation rules, Make connectors, OAuth connections, Google document actions, Slack messaging, and DocuSign operations provide the necessary capabilities. Interface labels may vary by product version, so the configuration below identifies the underlying triggers, conditions, mappings, and actions.
Salesforce Submission Validation
Place this validation rule on Client_Intake__c. It blocks a transition to Submitted when core data is missing.
AND(
ISCHANGED(Status__c),
ISPICKVAL(Status__c, "Submitted"),
OR(
ISBLANK(Client_Legal_Name__c),
ISBLANK(TEXT(Client_Type__c)),
ISBLANK(Jurisdiction__c),
ISBLANK(Primary_Contact__c),
ISBLANK(TEXT(Service_Line__c)),
LEN(TRIM(Scope_Description__c)) < 100,
Estimated_Fee__c <= 0,
ISBLANK(TEXT(Pricing_Model__c)),
ISBLANK(TEXT(Billing_Terms__c)),
ISBLANK(Billing_Email__c),
ISBLANK(Engagement_Partner__c),
Conflict_Party_Count__c < 1,
NOT(Privacy_Acknowledged__c)
)
)
Test by attempting to submit a Draft with each required field removed individually. Salesforce should display a message instructing the user to complete the intake rather than permitting the status change.
Ready-for-Letter Validation
This validation rule prevents a user or integration from bypassing approval gates:
AND(
ISCHANGED(Status__c),
ISPICKVAL(Status__c, "Draft Letter Review"),
OR(
NOT(ISPICKVAL(Conflict_Status__c, "Cleared")),
NOT(ISPICKVAL(Scope_Approval_Status__c, "Approved")),
NOT(
OR(
ISPICKVAL(Finance_Approval_Status__c, "Approved"),
ISPICKVAL(Finance_Approval_Status__c, "Not Required")
)
),
Manual_Hold__c
)
)
Conflict Party Normalization Formula
Create a formula text field on Conflict Party. This supports deterministic comparison but does not replace broader human conflict searching.
LOWER(
TRIM(
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(Party_Name__c, ".", ""),
",",
""
),
" ",
" "
)
)
)
Test common punctuation and capitalization variants. Do not automatically remove legal suffixes unless the firm has an approved suffix reference table, because removing terms can create false matches.
Representative Salesforce Change Query
Configure the Salesforce query action in Make with a previous watermark and fixed run cutoff. Replace the placeholders with ISO 8601 UTC timestamps generated by the scenario.
SELECT
Id,
Name,
Opportunity__c,
Opportunity__r.Name,
Opportunity__r.OwnerId,
Opportunity__r.Owner.Email,
Account__c,
Client_Legal_Name__c,
Status__c,
Priority__c,
Conflict_Status__c,
Scope_Approval_Status__c,
Finance_Approval_Status__c,
Letter_Status__c,
Onboarding_Status__c,
Next_Action_Due__c,
Last_Activity_At__c,
Automation_Status__c,
SystemModstamp
FROM Client_Intake__c
WHERE SystemModstamp > {{WATERMARK_UTC}}
AND SystemModstamp <= {{RUN_CUTOFF_UTC}}
ORDER BY SystemModstamp ASC
Use the Salesforce connector’s pagination support. If the underlying query returns a continuation URL, process every page before advancing the watermark. Keep the selected fields narrow to reduce API consumption.
Representative Activity Query
SELECT
Id,
WhatId,
Subject,
Status,
ActivityDate,
OwnerId,
Priority,
IsClosed,
LastModifiedDate,
SystemModstamp
FROM Task
WHERE SystemModstamp > {{ACTIVITY_WATERMARK_UTC}}
AND SystemModstamp <= {{RUN_CUTOFF_UTC}}
AND WhatId != null
ORDER BY SystemModstamp ASC
For each Task, search Client Intake where Opportunity__c equals WhatId. Ignore activities with no active intake. Configure a corresponding Event query using StartDateTime, EndDateTime, OwnerId, WhatId, and SystemModstamp.
Google Sheets Formulas
Assume column A contains Intake ID, F contains Status, J contains Next Action Due, and C contains Created At. Place these formulas in protected columns.
=ARRAYFORMULA(
IF(
A2:A="",
"",
IF(
(F2:F="Active")+(F2:F="Rejected")+(F2:F="Closed")+(F2:F="Withdrawn"),
FALSE,
IF(J2:J="",TRUE,J2:J<TODAY())
)
)
)
The formula identifies open records with a missing or overdue next action.
=ARRAYFORMULA(
IF(
A2:A="",
"",
(NOW()-C2:C)*24
)
)
The second formula calculates age in hours. Spreadsheet locale settings may require different argument separators. Test formulas in the production spreadsheet locale before activation.
Make Data Store Configuration
Data store: scenario_watermarks
Key:
scenario_name
Fields:
last_successful_cutoff_utc: date-time
last_run_status: text
last_run_id: text
last_reconciled_at_utc: date-time
Data store: processed_events
Key:
source_object|source_record_id|system_modstamp
Fields:
processed_at_utc: date-time
scenario_name: text
destination_id: text
outcome: text
Data store: notification_keys
Key:
intake_id|notification_type|effective_date
Fields:
sent_at_utc: date-time
slack_message_id: text
recipient_id: text
Purge old processed-event and notification keys according to the firm’s operational retention policy, but retain durable Salesforce approval and error evidence.
Slack Notification Payload
Use plain text rather than Slack markup so messages remain predictable. Map the button URL to the Salesforce intake record.
{
"blocks": [
{
"type": "section",
"text": {
"type": "plain_text",
"text": "Client intake exception: {{INTAKE_ID}}\n{{EXCEPTION_SUMMARY}}\nOwner: {{OWNER_NAME}}\nDue: {{DUE_DATE}}"
}
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Open in Salesforce"
},
"url": "{{SALESFORCE_RECORD_URL}}"
}
]
}
]
}
If Slack returns an invalid-user or channel-access error, create an Automation Error and notify the operations channel if possible. Do not roll back a successfully created Salesforce Task merely because Slack failed.
DocuSign Envelope Request
When using the native Make DocuSign connection, map the same fields into the connector’s envelope action. If the implementation uses an authenticated HTTP action instead, the request pattern is:
POST {{DOCUSIGN_BASE_URI}}/restapi/v2.1/accounts/{{ACCOUNT_ID}}/envelopes
Authorization: Bearer {{OAUTH_ACCESS_TOKEN}}
Content-Type: application/json
{
"emailSubject": "Engagement letter for signature",
"documents": [
{
"documentBase64": "BASE64_ENCODED_PDF",
"name": "CI-000184_Engagement_Letter.pdf",
"fileExtension": "pdf",
"documentId": "1"
}
],
"recipients": {
"signers": [
{
"email": "{{CLIENT_SIGNER_EMAIL}}",
"name": "{{CLIENT_SIGNER_NAME}}",
"recipientId": "1",
"routingOrder": "1",
"tabs": {
"signHereTabs": [
{
"anchorString": "/client_sign/",
"anchorUnits": "pixels",
"anchorXOffset": "0",
"anchorYOffset": "0"
}
],
"dateSignedTabs": [
{
"anchorString": "/client_date/",
"anchorUnits": "pixels",
"anchorXOffset": "0",
"anchorYOffset": "0"
}
]
}
}
]
},
"status": "sent"
}
A successful response contains an envelope ID and status:
{
"envelopeId": "RETURNED_ENVELOPE_ID",
"status": "sent",
"statusDateTime": "2026-07-15T15:30:00Z",
"uri": "/envelopes/RETURNED_ENVELOPE_ID"
}
Store the envelope ID immediately. Never record the OAuth token or document Base64 content in Salesforce, Sheets, or Slack. Test anchor placement with the exact generated PDF because document formatting can change tab positioning.
Deployment and Troubleshooting
- Authorize each connection with the dedicated test identity first.
- Run each Make scenario manually against one test record.
- Inspect Make execution history and Salesforce Automation Error records.
- If a query returns no records, verify UTC formatting, object permissions, and the watermark.
- If Google Sheets creates duplicates, verify exact record-ID matching and scenario concurrency.
- If a document contains placeholders, confirm template spelling and destination-file permissions.
- If an envelope fails, verify signer email, account ID, document encoding, anchor strings, and OAuth authorization.
- After testing, reconnect production accounts, replace test IDs, reset watermarks, and activate schedules.
Failure Handling and Operational Reliability
| Failure | Automated response | Manual recovery | Owner |
|---|---|---|---|
| Missing required intake field | Salesforce blocks submission | Complete the missing field and resubmit | Business development |
| Duplicate intake | Unique Opportunity key rejects the second record | Open the existing intake and reconcile any new information | Operations |
| Duplicate Make event | Processed-event key skips external actions | No action unless the destination is incomplete | Automation owner |
| Duplicate tracker row | Synchronization stops for that record and creates an error | Keep the authoritative row, archive the duplicate, and retry | Operations |
| Invalid status combination | Create exception Task and place automation on hold | Correct the Salesforce statuses with an override reason | Process owner |
| Salesforce authentication expiry | Scenario fails before watermark advancement | Reauthorize the OAuth connection and rerun from the prior watermark | Automation administrator |
| Google Sheets unavailable | Record error and preserve the Salesforce change for retry | Retry synchronization after service recovery | Automation administrator |
| Slack notification failure | Keep Salesforce Task and log notification failure | Correct user mapping or channel access | Slack administrator |
| Unavailable approver | Route to approved delegate or manager after the defined interval | Assign an authorized replacement | Department manager |
| Failed document creation | Set Letter Status to Failed and create exception Task | Correct template, permission, or field issue and regenerate a new version | Operations |
| Failed PDF upload | Do not create the signature envelope | Retry upload and verify the returned file size | Operations |
| Invalid signer email | Block envelope creation and return the intake for correction | Correct and confirm the signer Contact | Business development |
| Signature API rate limit | Record retry time and defer processing | Review volume if repeated | Automation administrator |
| Envelope declined | Change Letter Status to Declined and notify the partner | Partner determines whether to revise, resend, or close | Engagement partner |
| Completed envelope download fails | Keep status at Completion Pending Download | Retry using the stored envelope ID | Operations |
| Billing ID missing | Keep intake in Billing Setup and send reminder | Finance completes setup and enters the external ID | Finance |
| Repeated failure | After the configured retry limit, set Manual Hold and create a durable Automation Error | Resolve the cause, mark the error Ready to Retry, and run the recovery scenario | Automation owner |
Transient connector or network errors are retried using increasing delays where the connector supports retry behavior. A representative policy is an immediate retry followed by attempts after approximately five and fifteen minutes. Long delays should use a persistent retry queue rather than keeping one scenario execution open.
The Salesforce Automation Error object acts as the manual-review and dead-letter queue. It records enough information to identify the source event without storing credentials, document bodies, or unnecessary client data.
Recovery is idempotent. Before repeating an operation, Make checks the destination identifier. It searches for an existing tracker row, exception Task, Drive folder, Engagement Package, or envelope ID. A retry continues from the incomplete step instead of recreating completed work.
A nightly reconciliation scenario compares active Salesforce intakes with tracker rows, active packages, signature statuses, and billing Tasks. Differences create reconciliation errors for review.
A Complete Example
A business development manager creates a Salesforce Opportunity for a proposed internal-controls review for the fictional prospective client Redwood Peak Distribution. The Opportunity owner launches the Client Intake Screen Flow.
The input includes:
- Legal client name: Redwood Peak Distribution Ltd.
- Service line: Operations Consulting
- Scope: Review purchasing, inventory, and financial close controls across three operating units
- Estimated fee: $32,000
- Pricing model: Fixed Fee
- Discount: 5 percent
- Billing terms: 30 Days
- Engagement partner: Elena Brooks
- Conflict parties: Redwood Peak Distribution Ltd., Redwood Peak Holdings Ltd., and Orchard Line Logistics Ltd.
Salesforce creates intake CI-000184. The Opportunity ID is written to Opportunity_Key__c, and the unique constraint confirms that no other intake exists for the Opportunity.
The user submits the intake. Salesforce verifies that the scope exceeds 100 characters, the fee is positive, the signer and billing email are valid, the privacy acknowledgment is selected, and three confirmed Conflict Party records exist.
At the next five-minute interval, Make queries the changed intake. It adds one row to Google Sheets, records the row number, creates a compliance Task, and sends the assigned reviewer a Slack notification containing the intake ID, due date, and Salesforce link.
The $32,000 fee exceeds the representative $25,000 finance threshold. Make sets Finance Approval Status to Pending and creates a finance-review Task. The 5 percent discount and 30-day terms do not independently create additional exceptions.
During the conflict search, compliance finds a similar historical name. The reviewer changes Conflict Status to Potential Match and records the search evidence in Salesforce. No detailed match information is copied to Google Sheets or Slack.
The reviewer determines that the historical party is an unrelated company in another jurisdiction. The reviewer records Cleared, the decision time, and a reason. This is a human decision.
The engagement partner approves the scope. Finance approves the fee and terms. Make sees that conflict, scope, and finance gates are complete.
Make creates the folder 2026/CI-000184, copies the current engagement-letter template, replaces all approved placeholders, confirms that no unresolved placeholders remain, exports a PDF, and creates Engagement Package EP-000142.
The partner receives a draft-review Task. After checking the scope, fee, terms, legal name, and signer, the partner marks the package Approved to Send.
Make submits the PDF to DocuSign. The returned envelope ID is stored before the intake changes to Signature Pending. The tracker is updated, and business development receives a limited notification.
Later that day, a sales activity Task is completed. Make updates Last Activity At. It finds no future open Task while the signature remains pending, so it creates an exception Task named Set Next Action for CI-000184. Business development adds a follow-up Task due in two days. The next activity synchronization updates the tracker and closes the exception condition.
After signature, Make retrieves the executed PDF, verifies that the file is not empty, stores it in the Executed folder, and updates the package with the completion timestamp and restricted link.
A finance Task is created. Finance completes billing setup and records external identifier BILL-48291. Make then creates onboarding Tasks for the engagement manager.
When all onboarding Tasks are complete, Salesforce changes the intake to Active. The final record contains the generated intake ID, approval history, envelope ID, executed-document link, billing-system ID, status history, activity timeline, and automation records.
Implementation Cost
All amounts below are representative planning assumptions, not vendor price quotations or verified client costs. Actual subscription charges depend on current contracts, user counts, features, regions, storage, operation volume, and implementation scope.
| Item | Assumption | Estimated cost |
|---|---|---|
| Internal process design and setup | 28 hours at $48 per hour | $1,344 |
| User acceptance testing | 16 hours at $48 per hour | $768 |
| Training | 8 hours at $48 per hour | $384 |
| Internal documentation review | 8 hours at $48 per hour | $384 |
| Optional professional implementation | 72 hours at $125 per hour | $9,000 |
| Total with professional implementation | Internal and external labour | $11,880 |
| Item | Planning assumption | Estimated monthly cost |
|---|---|---|
| Existing Salesforce, Google Workspace, and Slack subscriptions | Already licensed; existing contract spend excluded from incremental estimate | $0 incremental |
| Make automation allowance | Budget placeholder based on expected operations | $45 |
| Electronic-signature allowance | Incremental planning allowance under the representative contract | $55 |
| Storage and automation operating reserve | Planning allowance | $20 |
| Core AI usage | No AI required for the core workflow | $0 |
| Total incremental tools | Verify against current vendor quotes | $120 |
| Internal maintenance labour | 4 hours at $48 per hour | $192 |
An internal-only implementation would avoid the optional professional-services allowance but still require process design, configuration, testing, training, documentation, monitoring, and maintenance.
Estimated Time and Cost Savings
The representative calculation uses these assumptions:
- 80 intake records per month
- 62 minutes of current administrative handling per record
- 22 minutes of handling after core automation
- 15 percent exception rate, equal to 12 records per month
- 18 additional minutes for each exception
- 4 hours of monthly maintenance
- $48 loaded hourly labour cost
- $120 monthly incremental software cost
- $11,880 one-time implementation cost including optional professional implementation
Current monthly labour hours: Monthly volume × current minutes per record ÷ 60
80 × 62 ÷ 60 = 82.67 hours
New monthly labour hours: Monthly volume × new minutes per record ÷ 60, plus exception handling and maintenance
80 × 22 ÷ 60 = 29.33 base hours
12 exceptions × 18 minutes ÷ 60 = 3.60 exception hours
29.33 + 3.60 + 4.00 maintenance hours = 36.93 hours
Monthly hours recovered: Current monthly labour hours minus new monthly labour hours
82.67 − 36.93 = 45.74 hours
Estimated monthly labour value: Monthly hours recovered × loaded hourly labour cost
45.74 × $48 = $2,195.52
Net estimated monthly value: Monthly labour value minus recurring tool costs
$2,195.52 − $120 = $2,075.52
Estimated payback period: One-time implementation cost ÷ net estimated monthly value
$11,880 ÷ $2,075.52 = approximately 5.7 months
Recovered time does not automatically reduce payroll. It may provide additional capacity, quicker turnaround, reduced overtime, less administrative work, higher sustainable intake volume, or lower dependence on individual coordinators.
Non-financial benefits include clearer ownership, fewer incomplete submissions, consistent approval evidence, fewer email follow-ups, better reporting, controlled document versions, improved auditability, and a more predictable prospective-client experience.
Readers should replace the workflow volume, handling time, exception rate, labour cost, implementation effort, recurring software cost, and maintenance time with their own figures. Firms should also include the full cost of existing platforms if those subscriptions are purchased solely for this process.
Adding AI to the Automation
AI is optional and should be added only after the deterministic workflow operates reliably. Required fields, exact identifiers, approval thresholds, permissions, duplicate keys, status rules, and billing gates do not need AI.
Useful AI applications include extracting candidate related parties from unstructured scope notes, summarizing long referral descriptions, identifying potentially missing information, categorizing service requests, and comparing a draft scope with a source description.
The core automation already provides intake validation, routing, conflict-review assignments, approval controls, reminders, document generation, signature coordination, activity tracking, exception Tasks, billing setup, onboarding, and reporting. Those benefits do not depend on AI.
AI can assist with unstructured text, but it must not clear a conflict, reject a client, approve fees, determine legal obligations, or authorize an engagement.
The Recommended AI Enhancement
The recommended enhancement extracts candidate conflict-check parties from the approved scope description and related-party notes. It proposes names for human confirmation before they enter the formal conflict queue.
- Trigger: Intake is Submitted and the AI extraction status is Not Started.
- AI input: Client legal name, scope description, and related-party notes from Salesforce.
- System instruction: Extract only explicitly named organizations and people relevant to a conflict check. Do not infer missing names or make a conflict decision.
- Expected output: Structured JSON containing party name, role, jurisdiction, evidence, and confidence.
- Validation: Parse valid JSON, enforce the schema, limit output to 30 parties, and reject blank or overlong names.
- Record update: Create Conflict Party records with Source set to AI Suggested and Confirmation Status set to Proposed.
- Human review: Business development or compliance confirms, edits, merges, or rejects every suggestion.
- Low confidence: Suggestions below the configured threshold remain visible but are marked Low Confidence.
- Prohibited data: Government identifiers, bank details, tax records, privileged advice, protected conflict notes, and full engagement documents.
- Logging: Record provider, model identifier, prompt version, timestamp, token or usage data, result status, and reviewer action without logging prohibited source text.
- Failure behavior: Set AI Extraction Status to Failed and continue with manual party entry.
Use this system instruction:
You extract candidate names for a professional-services conflict check.
Identify only people and organizations explicitly named in the supplied text. Include prospective clients, parents, subsidiaries, affiliates, beneficial owners, counterparties, lenders, advisers, vendors, and other parties when the text explicitly connects them to the proposed engagement.
Do not infer names that are not present.
Do not determine whether a conflict exists.
Do not recommend accepting or rejecting the engagement.
Do not provide legal conclusions.
Return output that conforms exactly to the supplied JSON schema.
Use this reusable user prompt:
Intake ID: {{INTAKE_ID}}
Client legal name:
{{CLIENT_LEGAL_NAME}}
Scope description:
{{SCOPE_DESCRIPTION}}
Related-party notes:
{{RELATED_PARTY_NOTES}}
Extract candidate conflict-check parties. For each party, provide:
1. The exact name found in the text
2. The party role
3. The jurisdiction only when explicitly stated
4. A short evidence excerpt
5. Confidence from 0 to 1 that the name and role were extracted correctly
Do not add names that are not explicitly present.
Configure the AI connector or authenticated HTTP action to require this schema:
{
"name": "candidate_conflict_parties",
"strict": true,
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"parties": {
"type": "array",
"maxItems": 30,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 200
},
"role": {
"type": "string",
"enum": [
"prospective_client",
"parent",
"subsidiary",
"affiliate",
"beneficial_owner",
"counterparty",
"lender",
"adviser",
"vendor",
"individual",
"other"
]
},
"jurisdiction": {
"type": "string",
"maxLength": 100
},
"evidence": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"name",
"role",
"jurisdiction",
"evidence",
"confidence"
]
}
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300
}
}
},
"required": [
"parties",
"warnings"
]
}
}
After parsing, Make creates only Proposed Conflict Party records. The formal conflict search filters for Confirmation Status equal to Confirmed. If the AI service fails, returns malformed output, or exceeds the approved time limit, Make records the failure and assigns manual extraction without blocking the overall intake.
Benefits of the AI Enhancement
- Less time reading long scope and referral notes
- Faster initial identification of explicitly named parties
- More consistent role labels for parents, affiliates, and counterparties
- Quicker detection of notes that appear to contain no related parties
- Improved reporting on how often AI suggestions are accepted, corrected, or rejected
- Reduced manual extraction effort for text-heavy submissions
These are specifically AI-assisted benefits. Status control, task creation, reminders, approvals, tracker updates, document generation, signature handling, and billing coordination are benefits of the rule-based automation.
What Remains Rule-Based or Human-Controlled
- Conflict clearance: Compliance must evaluate identity, relationships, prior work, confidentiality, and policy. Extracted names cannot determine clearance.
- Client rejection: AI cannot reject a prospective client or close the Opportunity.
- Scope approval: The engagement partner remains accountable for what the firm agrees to deliver.
- Pricing approval: Deterministic thresholds route exceptions, and finance records the decision.
- Engagement-letter approval: A partner reviews the generated document before signature.
- Billing creation: Finance controls the external billing record and identifier.
- Policy exceptions: Authorized managers document and approve exceptions.
- Final risk acceptance: The responsible human approvers retain decision authority.
Estimating the Additional Value of AI
Assume 60 percent of the 80 monthly intakes, or 48 records, contain unstructured notes that require party extraction.
| Measure | Without AI | With AI |
|---|---|---|
| Relevant monthly records | 48 | 48 |
| Initial extraction and review time | 8 minutes each | 3 minutes each |
| Expected correction rate | Not applicable | 12 percent |
| Additional correction time | Not applicable | 3 minutes per corrected record |
| Expected service failure rate | Not applicable | 3 percent |
| Manual fallback time | Not applicable | 8 minutes per failed record |
| Representative AI usage cost | $0 | $12 per month |
| AI monitoring | $0 | 0.5 hour per month |
Without AI: 48 × 8 minutes ÷ 60 = 6.40 hours.
With AI base review: 48 × 3 minutes ÷ 60 = 2.40 hours.
Correction effort: 48 × 12 percent × 3 minutes ÷ 60 = 0.29 hour.
Failure fallback: 48 × 3 percent × 8 minutes ÷ 60 = 0.19 hour.
Total with AI: 2.40 + 0.29 + 0.19 = 2.88 hours.
Additional capacity: 6.40 − 2.88 = 3.52 hours per month.
Labour value: 3.52 × $48 = $168.96.
Net representative value after $12 usage cost and 0.5 hour of monitoring valued at $24 is $132.96 per month.
This estimate assumes every AI suggestion is reviewed. It does not assume that AI eliminates extraction errors, false positives, service failures, or human involvement.
Testing Checklist
Use fictional sample data in the test environment before processing real client or conflict information.
| Test | Expected result |
|---|---|
| Normal submission | One intake, correct tracker row, Tasks, and limited notifications are created. |
| Missing required field | Salesforce blocks submission and identifies the missing information. |
| Invalid fee, discount, or email | Validation prevents submission. |
| Duplicate intake submission | Existing intake opens or the unique key rejects the duplicate. |
| Duplicate automation event | Processed-event key prevents duplicate external actions. |
| Duplicate tracker row | Synchronization stops and creates an error. |
| Failed authentication | Scenario fails without advancing its watermark. |
| Expired credential | Owner receives an error and can reauthorize before replay. |
| Failed Salesforce API request | Record enters the retry or manual-review queue. |
| Unavailable approver | Approved delegate or manager receives the escalation. |
| Approval rejection | Downstream work stops and the reason is recorded. |
| Return for information | Business development receives ownership and a correction Task. |
| Reassignment | New owner appears in Salesforce, tracker, and future notifications. |
| Overdue item | Reminder and escalation are created once per configured interval. |
| No next action | One deterministic exception Task is created. |
| Failed file upload | Signature does not start and an exception is recorded. |
| Failed document creation | Letter Status becomes Failed and no envelope is created. |
| Unresolved placeholder | Document remains in Drafts and generation fails validation. |
| Failed Slack notification | Salesforce Task remains valid and notification failure is logged. |
| Unauthorized user | User cannot view or change restricted fields or files. |
| Envelope declined | Status changes to Declined and partner review is required. |
| Completed-envelope download failure | Billing Task is withheld until the signed document is stored. |
| Malformed AI output | Schema validation fails and manual extraction is assigned. |
| Inaccurate AI output | Reviewer rejects or corrects the Proposed party before confirmation. |
| AI service failure | Core workflow continues with manual party entry. |
| Successful completion | Executed document, billing ID, onboarding completion, and audit history are present. |
| Reporting | Salesforce and tracker counts reconcile for the test period. |
| Audit record | Reviewer, timestamps, decisions, package IDs, and automation events are retained. |
| Retry behavior | Retry resumes from the failed step without creating duplicates. |
Ongoing Maintenance
The operations systems manager is the primary system owner. A Salesforce administrator is the technical backup. Compliance owns conflict policy, finance owns commercial thresholds, and engagement leadership owns scope and letter templates.
| Frequency | Activity | Owner |
|---|---|---|
| Daily | Review failed Make runs, Automation Errors, manual holds, and signature-download failures | Automation owner |
| Daily during launch | Reconcile Salesforce active intakes to tracker rows | Operations |
| Weekly | Review overdue Tasks, duplicate exceptions, missing next actions, and stale Drafts | Operations manager |
| Monthly | Review API consumption, Make operations, storage, signature volume, and recurring costs | Technical owner and Finance |
| Monthly | Sample completed records for correct approvals, document links, and audit evidence | Compliance and Operations |
| Monthly when AI is active | Sample accepted, corrected, and rejected AI suggestions | Compliance |
| Quarterly | Review permissions, Slack channel membership, Shared Drive groups, and active integration users | Security administrator |
| Quarterly | Test credentials, retries, failure notifications, and recovery procedures | Automation owner |
| Quarterly | Archive obsolete event keys and confirm backup recovery | Technical owner |
| When policy changes | Update approval thresholds, status rules, templates, prompts, and documentation | Process owners |
| On employee departure | Remove Salesforce, Google, Slack, Make, and signature access | IT and HR |
| Annually | Revalidate retention, privacy, regulatory, and AI data-handling controls | Compliance and Security |
Every configuration change should be tested against the normal, rejection, retry, and document paths. Template updates require a new version identifier so the firm can determine which wording generated each engagement letter.
When to Move to Dedicated Software
The connected implementation may remain appropriate while transaction volume, review complexity, and governance requirements remain manageable. It should be reassessed when one or more of these conditions appear:
- Sustained volume causes API, spreadsheet, or automation-operation constraints.
- Conflict searches require large historical relationship graphs, fuzzy identity resolution, or formal ethical walls.
- Multiple offices require different acceptance policies, currencies, jurisdictions, or approver hierarchies.
- Formal regulatory or audit requirements exceed the available Salesforce and integration controls.
- The firm needs a client-facing portal with secure two-way document exchange.
- Complex engagement letters require clause libraries, contract lifecycle management, or negotiated redlines.
- Billing setup requires real-time integration with several accounting or practice-management systems.
- Exception rates increase enough that maintaining scenarios and mappings becomes a significant workload.
- Users require advanced mobile, offline, or external-party workflows.
- Vendor support, guaranteed recovery objectives, or formal system validation becomes mandatory.
- The Google Sheets projection approaches practical performance or governance limits.
- Security risk increases because too many systems hold sensitive client data.
Relevant categories include professional-services automation, practice management, conflict and client acceptance, governance and risk management, contract lifecycle management, and dedicated workflow platforms. Replacing the current design is not automatic. The decision should compare migration cost, integration needs, policy fit, user adoption, and operating risk.
Implementation Checklist
- Confirm client acceptance, conflict, scope, pricing, signature, billing, and onboarding requirements.
- Document approval thresholds and decisions that must remain human-controlled.
- Confirm Salesforce, Google Workspace, Make, Slack, and signature-platform capabilities.
- Create dedicated integration identities and OAuth connections.
- Define role-based permissions and field-level access.
- Create Salesforce custom objects, fields, relationships, history tracking, and unique constraints.
- Build the authenticated Salesforce intake Screen Flow.
- Configure required fields, conditional fields, attachments, and privacy acknowledgment.
- Create the Google Sheets tracker and protect synchronized columns.
- Create Shared Drive folders, templates, naming rules, and retention controls.
- Map Salesforce fields to Google Sheets, Slack, Google Docs, and DocuSign.
- Create Make watermarks, processed-event keys, notification keys, and error handling.
- Build Opportunity and Client Intake synchronization.
- Build Task and Event synchronization.
- Configure ownership, assignment, approval, reminder, and escalation rules.
- Create deterministic exception Tasks and duplicate checks.
- Build document generation and unresolved-placeholder validation.
- Build partner draft approval and electronic-signature submission.
- Build signature polling, executed-document storage, and billing Task creation.
- Build onboarding Tasks and closure conditions.
- Create Salesforce reports and Google Sheets operational views.
- Apply Slack and tracker data-minimization rules.
- Configure automation logging, retries, reconciliation, and manual recovery.
- Test normal, invalid, duplicate, rejection, timeout, permission, file, notification, and retry paths.
- Run user acceptance testing with business development, compliance, finance, and partners.
- Deploy through a controlled pilot and document rollback procedures.
- Replace representative implementation and savings assumptions with actual figures.
- Add AI only after the core workflow is stable and approved.
- Require human confirmation of every AI-generated conflict-party suggestion.
- Assign primary and backup maintenance owners.
- Define transaction-volume, governance, integration, and security criteria for considering dedicated software.
Get a FREE
Proof of Concept
& Consultation
No Cost, No Commitment!


