10 E-Signature Workflow Templates for Common Business Processes
Back to BlogTutorials

10 E-Signature Workflow Templates for Common Business Processes

Ready-to-use workflow templates for HR onboarding, sales contracts, vendor agreements, and more. Automate repetitive signing tasks in minutes.

Lisa Morgan

Business Process Consultant

Dec 18, 202515 min read

10 E-Signature Workflow Templates for Common Business Processes

Stop recreating the same signature workflows from scratch. These proven templates handle 80% of business signing scenarios and can be customized in minutes.

Template 1: Employee Onboarding

Use Case: New hire paperwork (offer letter, I-9, W-4, handbook, benefits enrollment)

Workflow:

text
1Step 1: HR uploads offer letter
2  β”œβ”€> Sent to: Candidate
3  β”œβ”€> Due: 48 hours
4  └─> Actions: Sign + Date
5
6Step 2: On acceptance
7  β”œβ”€> Auto-send: W-4, I-9, Direct Deposit
8  β”œβ”€> Sent to: New hire
9  β”œβ”€> Due: 3 business days
10  └─> Actions: Fill + Sign
11
12Step 3: On completion
13  β”œβ”€> Auto-send: Employee handbook acknowledgment
14  β”œβ”€> CC: Manager
15  └─> Trigger: Payroll system update
16
17Step 4: First day
18  β”œβ”€> Auto-send: Equipment agreement, NDA, Code of conduct
19  β”œβ”€> Sent to: New hire + Manager
20  └─> Require: Both signatures

Implementation:

javascript
1const onboardingWorkflow = {
2  name: 'Employee Onboarding',
3  trigger: 'manual',  // HR initiates
4  steps: [
5    {
6      id: 'offer',
7      template: 'offer_letter',
8      recipients: [{ role: 'candidate', order: 1 }],
9      fields: ['signature', 'date', 'start_date'],
10      deadline: { hours: 48 },
11      reminders: [{ hours: 24 }, { hours: 4 }],
12      onComplete: 'next_step'
13    },
14    {
15      id: 'tax_forms',
16      condition: 'offer.status === "signed"',
17      documents: ['w4_form', 'i9_form', 'direct_deposit'],
18      recipients: [{ role: 'new_hire', order: 1 }],
19      fields: ['fillable_form', 'signature'],
20      deadline: { days: 3 },
21      onComplete: 'next_step'
22    },
23    {
24      id: 'policies',
25      condition: 'tax_forms.status === "completed"',
26      documents: ['employee_handbook', 'code_of_conduct', 'nda'],
27      recipients: [
28        { role: 'new_hire', order: 1 },
29        { role: 'manager', order: 2 }
30      ],
31      onComplete: 'update_hrms'
32    }
33  ],
34  integrations: {
35    onComplete: {
36      action: 'webhook',
37      url: 'https://yourcompany.com/api/onboarding-complete',
38      payload: {
39        employeeId: '{{new_hire.id}}',
40        documents: '{{all_signed_docs}}',
41        startDate: '{{offer.start_date}}'
42      }
43    }
44  }
45};

Time Saved: 6 hours per new hire (90% reduction)

Template 2: Sales Contract Approval

Use Case: Quote approval requiring multiple internal signatures before customer signing

Workflow:

text
1Step 1: Sales rep creates quote
2  β”œβ”€> Auto-route to: Sales manager
3  β”œβ”€> If > $50k: Route to VP Sales
4  └─> If > $200k: Route to CEO
5
6Step 2: Internal approval
7  β”œβ”€> Sequential signing: Manager β†’ VP β†’ CEO
8  β”œβ”€> Each approver can: Approve | Reject | Request Changes
9  └─> Rejection: Return to sales rep with comments
10
11Step 3: Customer signing
12  β”œβ”€> Condition: All internal approvals complete
13  β”œβ”€> Send to: Customer contact
14  β”œβ”€> CC: Account executive, Sales manager
15  └─> Include: Final approved quote
16
17Step 4: Countersignature
18  β”œβ”€> After customer signs
19  β”œβ”€> Send to: Authorized company signatory
20  └─> Trigger: Contract effective, update CRM

Implementation:

javascript
1const salesWorkflow = {
2  name: 'Sales Contract Approval',
3  steps: [
4    {
5      id: 'approval_routing',
6      condition: {
7        if: 'deal_value > 200000',
8        route: ['sales_manager', 'vp_sales', 'ceo'],
9        elseIf: 'deal_value > 50000',
10        route: ['sales_manager', 'vp_sales'],
11        else: ['sales_manager']
12      },
13      signing: 'sequential',
14      allowReject: true,
15      allowAmend: true
16    },
17    {
18      id: 'customer_signature',
19      condition: 'approval_routing.status === "approved"',
20      recipients: [{ email: '{{customer.email}}' }],
21      cc: ['{{sales_rep.email}}', '{{sales_manager.email}}'],
22      reminders: [
23        { days: 3 },
24        { days: 7, escalate: 'sales_manager' }
25      ]
26    },
27    {
28      id: 'countersignature',
29      condition: 'customer_signature.status === "signed"',
30      recipients: [{ role: 'authorized_signatory' }],
31      onComplete: [
32        { action: 'update_crm', status: 'closed_won' },
33        { action: 'notify_team', template: 'deal_won' },
34        { action: 'trigger_onboarding' }
35      ]
36    }
37  ]
38};

Time Saved: 4.5 days average (from 7 days to 2.5 days)

Template 3: NDA (Mutual or One-Way)

Use Case: Quick NDA for prospect meetings, vendor discussions, partnership talks

Workflow:

text
1Step 1: Select NDA type
2  β”œβ”€> Mutual NDA (both parties protect info)
3  └─> One-way NDA (we disclose, they protect)
4
5Step 2: Auto-populate
6  β”œβ”€> Our company info (from profile)
7  β”œβ”€> Counterparty info (from form)
8  └─> Effective date, term length
9
10Step 3: Parallel signing
11  β”œβ”€> Send to both parties simultaneously
12  β”œβ”€> Order doesn't matter
13  └─> Complete when both sign
14
15Step 4: Auto-distribute
16  β”œβ”€> Email fully executed NDA to both parties
17  β”œβ”€> Store in: Legal repository
18  └─> Calendar: Add expiration reminder

Implementation:

javascript
1const ndaWorkflow = {
2  name: 'Quick NDA',
3  steps: [
4    {
5      id: 'nda_setup',
6      template: '{{ nda_type }}',  // mutual_nda or oneway_nda
7      autoPopulate: {
8        our_company: '{{company.legal_name}}',
9        our_address: '{{company.hq_address}}',
10        our_signatory: '{{company.authorized_signer}}',
11        effective_date: '{{ today }}',
12        term: '{{ nda_term }}',  // Default: 2 years
13      }
14    },
15    {
16      id: 'signing',
17      recipients: [
18        { role: 'our_signatory', order: 'any' },
19        { role: 'counterparty', order: 'any' }
20      ],
21      signing: 'parallel',  // Order doesn't matter
22      deadline: { days: 7 }
23    },
24    {
25      id: 'distribution',
26      condition: 'signing.status === "completed"',
27      actions: [
28        { 
29          action: 'email',
30          to: ['{{our_signatory}}', '{{counterparty}}'],
31          template: 'nda_executed',
32          attach: '{{signed_document}}'
33        },
34        {
35          action: 'calendar_event',
36          date: '{{effective_date + term}}',
37          title: 'NDA Expiration: {{counterparty.company}}',
38          attendees: ['{{our_signatory}}']
39        },
40        {
41          action: 'store',
42          location: 'legal/ndas/{{year}}/{{counterparty.company}}.pdf'
43        }
44      ]
45    }
46  ]
47};

Time Saved: 2 hours per NDA (from 3+ hours to <30 minutes)

Template 4: Vendor/Supplier Agreement

Use Case: Standard vendor contracts with legal review for non-standard terms

Workflow:

text
1Step 1: Procurement uploads vendor contract
2  β”œβ”€> Auto-detect: Non-standard clauses (AI)
3  └─> If standard: Skip to Step 3
4      If non-standard: Route to legal
5
6Step 2: Legal review (conditional)
7  β”œβ”€> Assign to: Contracts attorney
8  β”œβ”€> Attorney can: Approve | Request changes | Reject
9  └─> If approved: Continue to Step 3
10
11Step 3: Procurement approval
12  β”œβ”€> Sign: Procurement manager
13  β”œβ”€> If > $100k: Also require CFO signature
14  └─> Sequential signing
15
16Step 4: Vendor signature
17  β”œβ”€> Send to: Vendor contact
18  β”œβ”€> Reminders: Days 3, 7, 14
19  └─> Escalation: Day 14 to procurement VP
20
21Step 5: Countersignature & setup
22  β”œβ”€> Final signature: Authorized company signatory
23  β”œβ”€> Trigger: Add vendor to ERP
24  └─> Schedule: Payment terms, renewal reminders

Implementation:

javascript
1const vendorWorkflow = {
2  name: 'Vendor Agreement',
3  steps: [
4    {
5      id: 'ai_review',
6      action: 'analyze_contract',
7      checks: [
8        'liability_clause',
9        'indemnification',
10        'termination_terms',
11        'payment_terms',
12        'ip_rights'
13      ],
14      flagIf: 'non_standard_detected',
15      routeTo: 'legal_review'
16    },
17    {
18      id: 'legal_review',
19      condition: 'ai_review.flagged === true',
20      recipients: [{ role: 'contracts_attorney' }],
21      actions: ['approve', 'request_changes', 'reject'],
22      deadline: { days: 2 }
23    },
24    {
25      id: 'procurement_approval',
26      condition: 'legal_review.status !== "rejected"',
27      recipients: [
28        { role: 'procurement_manager', order: 1 },
29        { 
30          role: 'cfo', 
31          order: 2,
32          condition: 'contract_value > 100000'
33        }
34      ]
35    },
36    {
37      id: 'vendor_signature',
38      condition: 'procurement_approval.status === "approved"',
39      recipients: [{ email: '{{vendor.contact_email}}' }],
40      reminders: [
41        { days: 3 },
42        { days: 7 },
43        { days: 14, escalate: 'procurement_vp' }
44      ]
45    },
46    {
47      id: 'finalization',
48      onComplete: [
49        { action: 'update_erp', vendor: '{{vendor.details}}' },
50        { action: 'set_payment_schedule', terms: '{{payment_terms}}' },
51        { action: 'calendar_reminder', event: 'contract_renewal', date: '{{end_date - 90_days}}' }
52      ]
53    }
54  ]
55};

Compliance Boost: 100% legal review for non-standard terms

Template 5: Lease Agreement (Residential)

Use Case: Property managers sending lease to new tenants

Workflow:

text
1Step 1: Auto-populate lease
2  β”œβ”€> Property: Address, unit number, amenities
3  β”œβ”€> Tenant: Name, contact info (from application)
4  β”œβ”€> Terms: Rent amount, deposit, lease term, start date
5  └─> Attachments: Property rules, move-in checklist
6
7Step 2: Co-tenant signatures (if applicable)
8  β”œβ”€> Send to all tenants simultaneously
9  β”œβ”€> Each signs their own signature field
10  └─> All must sign before proceeding
11
12Step 3: Guarantor signature (if required)
13  β”œβ”€> Condition: Tenant credit score < 650 or income < 3x rent
14  β”œβ”€> Send to: Guarantor
15  └─> Require: Separate guarantor agreement
16
17Step 4: Landlord signature
18  β”œβ”€> After all tenant/guarantor signatures
19  β”œβ”€> Sign: Property manager or owner
20  └─> Auto-trigger: Move-in scheduling email
21
22Step 5: Distribution & setup
23  β”œβ”€> Email copy to: All tenants, landlord, property manager
24  β”œβ”€> Add to: Tenant portal
25  β”œβ”€> Schedule: Rent payment auto-pay
26  └─> Calendar: Lease expiration reminder (90 days before)

Time Saved: 3-5 days (from in-person signing to same-day execution)

Template 6: Board Resolution

Use Case: Corporate board approving significant decisions

Workflow:

text
1Step 1: Secretary prepares resolution
2  β”œβ”€> Template: Board resolution
3  β”œβ”€> Content: Action being approved
4  └─> Effective: Upon majority approval
5
6Step 2: Parallel board member signing
7  β”œβ”€> Send to: All board members
8  β”œβ”€> Signing: Simultaneous (order doesn't matter)
9  β”œβ”€> Quorum: Must reach before effective
10  └─> Example: 3 of 5 signatures required
11
12Step 3: Real-time quorum tracking
13  β”œβ”€> Display: "3 of 5 required signatures received"
14  β”œβ”€> Auto-notify: Secretary when quorum reached
15  └─> Resolution: Effective immediately upon quorum
16
17Step 4: Record keeping
18  β”œβ”€> Add to: Corporate minute book
19  β”œβ”€> File with: State (if required)
20  └─> Distribute: All board members, officers

Implementation:

javascript
1const boardResolutionWorkflow = {
2  name: 'Board Resolution',
3  steps: [
4    {
5      id: 'board_voting',
6      recipients: '{{all_board_members}}',
7      signing: 'parallel',
8      quorum: {
9        required: 3,  // 3 of 5
10        notifyOn: 'quorum_reached'
11      },
12      deadline: { days: 7 }
13    },
14    {
15      id: 'effectiveness',
16      condition: 'board_voting.quorum_met === true',
17      actions: [
18        { action: 'update_status', status: 'approved' },
19        { action: 'effective_date', date: '{{quorum_reached_timestamp}}' },
20        { action: 'notify_officers', template: 'resolution_passed' }
21      ]
22    },
23    {
24      id: 'record_keeping',
25      actions: [
26        { action: 'add_to_minute_book', year: '{{current_year}}' },
27        { action: 'file_state', if: '{{requires_filing}}' },
28        { action: 'distribute', recipients: '{{board + officers}}' }
29      ]
30    }
31  ]
32};

Compliance: Instant minute book updates, state filing automation

Template 7: Freelancer/Contractor Agreement

Use Case: Hiring independent contractors for projects

Workflow:

text
1Step 1: Create agreement
2  β”œβ”€> Scope: Project description, deliverables
3  β”œβ”€> Terms: Rate, payment schedule, timeline
4  └─> Clauses: IP assignment, confidentiality, independent contractor status
5
6Step 2: Contractor signature
7  β”œβ”€> Send to: Contractor
8  β”œβ”€> Include: W-9 form
9  └─> Deadline: 3 days before project start
10
11Step 3: Company signature
12  β”œβ”€> After contractor signs
13  β”œβ”€> Sign: Hiring manager or authorized signatory
14  └─> Trigger: Add to accounting system
15
16Step 4: Onboarding
17  β”œβ”€> Email: Project access links, tools, team intros
18  β”œβ”€> Create: Time tracking account
19  └─> Schedule: Kickoff meeting

Time Saved: From 5 days to 24 hours average

Template 8: Change Order/Amendment

Use Case: Modifying existing signed agreement

Workflow:

text
1Step 1: Reference original agreement
2  β”œβ”€> Link to: Original contract
3  β”œβ”€> Amendment: Specific sections being changed
4  └─> Effective: Upon execution
5
6Step 2: Mirror original signers
7  β”œβ”€> Send to: Same parties from original agreement
8  β”œβ”€> Order: Same signing sequence
9  └─> Validation: Match original authorized signers
10
11Step 3: Attach to original
12  β”œβ”€> Link: Amendment to original contract record
13  β”œβ”€> Version: Original + Amendment = Current version
14  └─> Display: "Agreement (As Amended)"

Traceability: Complete amendment history, easy audit trail

Template 9: Equipment/Asset Checkout

Use Case: Employees checking out company equipment

Workflow:

text
1Step 1: IT submits checkout form
2  β”œβ”€> Employee: Name, department
3  β”œβ”€> Equipment: Laptop model, serial number, accessories
4  └─> Responsibility: Damage/loss policy
5
6Step 2: Employee acknowledges
7  β”œβ”€> Signs: Equipment received in good condition
8  β”œβ”€> Agrees: Responsible for loss/damage
9  └─> Photos: Equipment condition at checkout
10
11Step 3: Manager approval
12  β”œβ”€> Condition: Equipment value > $1,000
13  β”œβ”€> Signs: Manager authorizes assignment
14  └─> Budget: Charged to department
15
16Step 4: Return process
17  β”œβ”€> When: Employee submits return form
18  β”œβ”€> IT verifies: Condition matches checkout photos
19  └─> Close: Original checkout agreement marked "Returned"

Accountability: 100% equipment tracking, reduced losses

Template 10: Client Service Agreement

Use Case: Recurring service contracts (marketing agency, law firm, consultancy)

Workflow:

text
1Step 1: Scope definition
2  β”œβ”€> Services: Detailed scope of work
3  β”œβ”€> Deliverables: What client receives
4  β”œβ”€> Timeline: Project schedule
5  └─> Fees: Monthly retainer or project-based
6
7Step 2: Client approval
8  β”œβ”€> Send to: Client decision-maker
9  β”œβ”€> Include: Master services agreement + SOW
10  └─> Option: Client can request changes (triggers revision loop)
11
12Step 3: Company countersignature
13  β”œβ”€> After client signs
14  β”œβ”€> Signs: Service delivery lead or executive
15  └─> Effective: On start date specified
16
17Step 4: Service activation
18  β”œβ”€> Trigger: Client onboarding sequence
19  β”œβ”€> Create: Project in PM tool
20  β”œβ”€> Schedule: Recurring invoice
21  └─> Calendar: Quarterly review meetings, renewal reminder

Automation: Seamless transition from sales to delivery

Customizing Templates

Template Variables

Common variables you can reuse:

javascript
1const commonVariables = {
2  // Company info
3  '{{company.name}}': 'Your Company Inc.',
4  '{{company.address}}': '123 Main St...',
5  '{{company.authorized_signer}}': 'CEO Name',
6  
7  // Document info
8  '{{document.title}}': 'Employment Agreement',
9  '{{document.date}}': '2026-01-09',
10  
11  // Counterparty info
12  '{{counterparty.name}}': 'Client Name',
13  '{{counterparty.email}}': 'client@example.com',
14  
15  // Dynamic dates
16  '{{today}}': new Date(),
17  '{{30_days_from_now}}': addDays(new Date(), 30)
18};

Conditional Logic

javascript
1{
2  condition: {
3    if: 'contract_value > 100000',
4    then: 'require_legal_review',
5    else: 'standard_approval'
6  }
7}

Integration Triggers

javascript
1{
2  onComplete: {
3    salesforce: {
4      action: 'update_opportunity',
5      stage: 'Closed Won'
6    },
7    slack: {
8      action: 'notify_channel',
9      channel: '#sales-wins',
10      message: 'Deal closed: {{deal_name}} - ${{deal_value}}'
11    },
12    googleCalendar: {
13      action: 'create_event',
14      title: 'Kickoff: {{client_name}}',
15      date: '{{start_date}}'
16    }
17  }
18}

Best Practices

1. Start Simple

Don't over-engineer workflows initially:

  • βœ… Start with 2-3 steps
  • βœ… Add complexity as you learn
  • ❌ Avoid creating 10-step workflows on day 1
  • 2. Test Before Rolling Out

    javascript
    1// Use test mode
    2const workflow = await client.workflows.test({
    3  template: salesContractWorkflow,
    4  testRecipients: ['test@yourcompany.com'],
    5  dryRun: true
    6});

    3. Monitor and Optimize

    Track key metrics:

  • Completion rate (target: >90%)
  • Average completion time
  • Abandonment points (where people drop off)
  • Escalation frequency
  • 4. Provide Escape Valves

    Always allow manual override for edge cases:

    javascript
    1{
    2  workflow: 'standard_sales_approval',
    3  allowManualOverride: true,
    4  overrideRequires: ['vp_sales_approval']
    5}

    Conclusion

    These 10 templates cover the majority of business e-signature needs. Start with the ones that solve your biggest pain points, then gradually expand your automation.

    Quick ROI Calculation:

  • Average time saved per document: 3 hours
  • Documents per month: 50
  • Hours saved: 150/month
  • Value at $50/hour: $7,500/month
  • Annual savings: $90,000
  • Ready to automate your signature workflows?


    *Browse our full template library or create custom workflows: Get Started*

    Ready to Try Space Sign?

    Experience the power of enterprise-grade, AI-powered e-signatures.

    Space Sign Assistant

    Hello there πŸ‘‹ I’m the Space Sign Assistant. How can I help you today?