Corrected Guide — Using Flow Approval Processes

Quote Flow Approval Process

Rebuilt using Salesforce's dedicated Flow Approval Process flow types (Record-Triggered Approval Orchestration) — not a generic orchestration with manually wired flows. This uses the native approval step functionality, built-in screen flow templates, and the Approvals App.

Flow Type: Record-Triggered Approval Orchestration Spring '25 → Winter '26

What Changed & Why It Matters

The previous guide described building a generic Flow Orchestration by stitching together three separate flows. That approach works but misses the purpose-built Flow Approval Process feature that Salesforce introduced in Spring '25. Here's the key distinction:

✗ PREVIOUS GUIDE (Generic Orchestration) Build 3 separate flows manually:
① Screen Flow for approval UI
② Autolaunched Flow for status updates
③ Autolaunched Flow for notifications

Then wire them together in a generic Flow Orchestration — manually configuring every approval interaction, assignee, and notification.
vs
✓ THIS GUIDE (Flow Approval Process) Use the dedicated flow type:
Record-Triggered Approval Orchestration

Approval Steps are a native step type with built-in assignee config, record locking, email notifications, and the Evaluate Approval Requests template. Only one supporting Autolaunched Flow needed for field updates.

What the Flow Approval Process gives you natively:

Dedicated Flow Type

When creating a new flow, you select "Record-Triggered Approval Orchestration" — a specific flow type designed for approvals, not a generic orchestration.

Built-in Approval Steps

Approval Steps are a native step type within the orchestration. Assignee (User/Queue/Group), record locking, and email customization are configured directly in the step — no external flow needed.

Screen Flow Template

Salesforce provides the "Approvals Workflow: Evaluate Approval Requests" template with pre-built approvalDecision and approvalComments output variables.

Approval Wizard (Summer '25)

An optional wizard that auto-generates the orchestration skeleton — set number of approval levels and recall paths, then customize from there.

Native Data Model

Automatically tracks everything in Approval Submissions, Approval Submission Details, Approval Requests, and Approval Work Items objects — no custom tracking needed.

Approvals Lightning App

A central hub (App Launcher → Approvals) with built-in list views for managing all approval activity across the org.

Free — No Credits

Despite being built on Flow Orchestrator, approval orchestrations are explicitly free. They do not consume orchestration runs or automation credits.

Built-in Email Notifications

Approval Steps automatically send email notifications to assigned approvers. Approvers can reply with "Approve" or "Reject" keywords directly from email.

Correct Architecture

Here's what you're actually building — one Approval Orchestration with one supporting Autolaunched Flow for field updates:

ComponentTypePurposeHow Many
Quote Approval Orchestration Record-Triggered Approval Orchestration The main approval process — contains all Stages, Approval Steps, Background Steps, and Decision elements 1
Quote Approval - Evaluate Request Screen Flow (from template) The UI approvers see in the Work Guide — Approve/Reject buttons + comments. Uses the built-in Approvals Workflow: Evaluate Approval Requests template. Linked automatically by Approval Steps. 1
Quote Approval - Update Status Autolaunched Flow (No Trigger) Updates Quote fields (Approval_Status__c, Status, etc.) after each decision. Called by Background Steps in the orchestration. 1
That's it — 3 components total. The Approval Orchestration handles all the routing, decision logic, and notification. The Screen Flow template handles the approver UI. The Autolaunched Flow handles field updates. You do NOT need a separate notification flow — Approval Steps send emails natively when assigned to a Queue.

Visual Flow Map

TRIGGER: Quote created with Status = "Proposal"
│
├─ Record Type = "Teams Deal"
│   │
│   ├─ STAGE 1: Teams Biz Ops Approval
│   │   └─ Approval Step → Queue: Teams_Biz_Ops_Approval
│   │
│   ├─ Decision: Approve → continue │ Reject → BG Step (update rejected) → End
│   │
│   ├─ STAGE 2: Teams Executive Approval
│   │   └─ Approval Step → Queue: Teams_Executive_Approval
│   │
│   ├─ Decision: Approve → continue │ Reject → End
│   │
│   ├─ STAGE 3: Finance Approval
│   │   └─ Approval Step → Queue: Finance_Dept_Approval
│   │
│   ├─ Decision: Approve → BG Step (Status → "Heads of Terms") │ Reject → End
│   │
│   ├─ STAGE 4: External Partners Approval
│   │   └─ Approval Step → Queue: External_Partners_Approval
│   │
│   ├─ Decision: Approve → BG Step (Status → "Contract Negotiation") │ Reject → End
│   │
│   └─ STAGE 5: Legal Notification
│       └─ Background Step → Notify Legal_Department Queue (no approval)
│
└─ Record Type = "LIV League Deal"
    │
    ├─ STAGE 1: League Biz Ops Approval
    │   └─ Approval Step → Queue: League_Biz_Ops_Approval
    │
    ├─ Decision: Approve → continue │ Reject → End
    │
    ├─ STAGE 2: Finance Approval
    │   └─ Approval Step → Queue: Finance_Dept_Approval
    │
    ├─ Decision: Approve → BG Step (Status → "Heads of Terms") │ Reject → End
    │
    ├─ STAGE 3: External Partners Approval
    │   └─ Approval Step → Queue: External_Partners_Approval
    │
    ├─ Decision: Approve → BG Step (Status → "Contract Negotiation") │ Reject → End
    │
    └─ STAGE 4: Legal Notification
        └─ Background Step → Notify Legal_Department Queue
Phase 1 — Pre-Work

Custom Fields on Quote

Field LabelAPI NameTypePicklist Values / Notes
Approval StatusApproval_Status__cPicklistNot Submitted, Pending Approval, Approved, Rejected, Recalled
Current Approval StageCurrent_Approval_Stage__cText (100)Shows which approval stage is active
Approval Decision DateApproval_Decision_Date__cDate/TimeStamped on final approval or rejection
Note: The native Approval Orchestration also tracks everything in the Approval Submission and Approval Work Item objects automatically. These custom fields on Quote give users quick at-a-glance visibility without needing to navigate to the Approvals App, but the official audit trail lives in the native objects.

Confirm Existing Setup

Queues Setup

Create 6 Queues in Setup → Queues. Each must include Approval Work Item as a Supported Object.

Queue LabelAPI NameMembersUsed For
Teams Biz Ops ApprovalTeams_Biz_Ops_ApprovalTeams Biz Ops Manager(s)Teams Proposal — Step 1
Teams Executive ApprovalTeams_Executive_ApprovalTeams Executive(s)Teams Proposal — Step 2
League Biz Ops ApprovalLeague_Biz_Ops_ApprovalLeague Biz Ops Manager(s)League Proposal — Step 1
Finance Dept ApprovalFinance_Dept_ApprovalFinance teamProposal final step (both)
External Partners ApprovalExternal_Partners_ApprovalExternal partner reviewersHeads of Terms (both)
Legal DepartmentLegal_DepartmentLegal teamContract Neg notification
  1. Setup → Queues → New. Enter Queue Label. Set a Queue Email if you want a shared inbox to receive approval emails.
  2. Supported Objects: Add Approval Work Item. This is required — without it, the Queue won't be selectable as an Approval Step assignee.
  3. Queue Members: Add Users, Roles, or Public Groups. Using Roles for membership keeps the queue auto-updated when staff changes.
Most commonly missed step: Adding Approval Work Item as a Supported Object on each queue. If you skip this, the queue won't appear when configuring Approval Step assignees in the orchestration.

Org Settings & Notifications

Approval Steps in the orchestration send email notifications natively. Configure these settings to ensure they work correctly:

  1. Setup → Process Automation Settings → check "Enable email approval response". This lets approvers reply "Approve" or "Reject" directly from the notification email.
  2. Setup → Organization-Wide Email Addresses → Add. Create a branded sender (e.g., approvals@livgolf.com). Set "Allow All Profiles." Verify the email.
  3. Setup → Process Automation Settings → set the "Automated Process User Email Address" to the Org-Wide Email you just created.
  4. Setup → Custom Notifications → New. Create "Quote Approval Notification" (API: Quote_Approval_Notification). Enable Desktop and Mobile. This powers in-app bell notifications for additional visibility.
How notifications work with Flow Approval Processes: When you assign an Approval Step to a Queue, Salesforce automatically sends email notifications to queue members — you don't need a separate notification flow for this. The email includes a link to the Work Guide and supports reply-based approval. Bell notifications require a Custom Notification action in a Background Step if you want that additional channel.
Phase 2 — Supporting Flows

Screen Flow — Approval UI (From Template)

This is the Screen Flow that approvers interact with inside the Work Guide. Salesforce provides a ready-made template — you don't need to build this from scratch.

  1. Setup → Flows → New Flow → Screen Flow.
  2. When prompted, select "Template" and choose "Approvals Workflow: Evaluate Approval Requests".
  3. The template comes pre-configured with the required output variables: approvalDecision (Approve/Reject) and approvalComments. These variable names and values are required — the orchestration reads them.
  4. Customize (optional): Add a Get Records element to pull Quote details (Quote Number, Account Name, Total Price, Opportunity Name) and display them on the Screen element so approvers have context without navigating away.
  5. Save as: "Quote Approval - Evaluate Request"
  6. Activate the flow.
Required variable names: The template uses approvalDecision (values: Approve or Reject) and approvalComments. If you build from scratch instead of using the template, you must use these exact variable names and spellings. The orchestration's Approval Steps read these output variables automatically.

Autolaunched Flow — Status Updates

This single reusable flow handles all post-decision field updates. It's called as a Background Step after each Decision element in the orchestration.

  1. Setup → Flows → New Flow → Autolaunched Flow (No Trigger).
  2. Create input variables (Available for Input ✓):
    varQuoteId — Text
    varApprovalStatus — Text (e.g., "Pending Approval", "Approved", "Rejected")
    varQuoteStage — Text (e.g., "Heads of Terms" — blank if not advancing)
    varCurrentApprovalStage — Text (e.g., "Pending: Finance Approval")
  3. Add a Decision element: Check if varQuoteStage is not blank.
    If not blank: Update Records element sets both Approval_Status__c and Status
    If blank: Update Records element sets only Approval_Status__c and Current_Approval_Stage__c
  4. Save as: "Quote Approval - Update Status"
  5. Activate.
One flow, many uses: The orchestration calls this same Autolaunched Flow from every Background Step, just with different input values. Fewer flows = easier maintenance.
Phase 3 — Build the Approval Orchestration

Create the Approval Orchestration

This is the core — one single Approval Orchestration that contains all stages, steps, and routing logic for both deal types.

Option A: Start from the Approvals App

  1. Open the App Launcher → search for "Approvals" → open the Approvals app.
  2. Click "Create Flow Approval Process".
  3. You can choose to use the Wizard (auto-generates a skeleton you customize) or "From Scratch" (blank canvas). For this complex use case with branching record types, From Scratch gives more control.
  4. Select "Record-Triggered Approval Orchestration".

Option B: Start from Flow Setup

  1. Setup → Flows → New Flow.
  2. Select "Record-Triggered Approval Orchestration" from the flow type options. (Not "Autolaunched Orchestration" or generic "Orchestration" — the dedicated Approval type.)
  3. Choose "From Scratch".

Configure the Start Element

  1. Object: Quote
  2. Trigger: A record is created
  3. Entry Conditions (All Conditions Met):
    Status equals Proposal
    Approval_Status__c equals Not Submitted
  4. Optimize for: Actions and Related Records

First Element: Decision — Check Record Type

  1. Add a Decision element right after Start:
    Outcome 1: "Teams Deal" → {!$Record.RecordType.DeveloperName} equals Teams_Deal
    Outcome 2: "LIV League Deal" → {!$Record.RecordType.DeveloperName} equals LIV_League_Deal
    Default: End
Wizard vs. From Scratch: The Summer '25 Approval Wizard is great for simple linear approval processes (set the number of levels, it generates the skeleton). For your use case with branching by Record Type and different approval chains per branch, building from scratch gives you the flexibility to wire the Decision element and separate paths cleanly. You can always use the Wizard for a simpler process and modify from there.

Teams Deal — Proposal Stages

On the "Teams Deal" Decision outcome, build 3 sequential Stages — each containing one Approval Step. Sequential approvals = separate Stages (one active at a time).

Stage 1: Teams Biz Ops Manager

  1. Add a Stage on the "Teams Deal" path. Label: "Teams - Biz Ops Approval"
  2. Inside the Stage, add an Approval Step (not a Background Step — this is the native approval step type):
    Label: "Biz Ops Manager Review"
    Screen Flow: Select "Quote Approval - Evaluate Request" (the template-based flow from Section 07)
    Assignee Type: Queue
    Queue: Teams_Biz_Ops_Approval
    Lock Record: Yes
    Customize Notification Email: Optional — customize the email subject/body, or use the default
  3. After the Stage, add a Decision element:
    Outcome "Approved": {!Teams_Biz_Ops_Approval.Biz_Ops_Manager_Review.approvalDecision} equals Approve
    Default Outcome "Rejected": → Add a Background Step calling "Quote Approval - Update Status" with varApprovalStatus = "Rejected" → End

Stage 2: Teams Executive

  1. Add a Stage on the "Approved" path. Label: "Teams - Executive Approval"
  2. Add an Approval Step: Assignee → Queue: Teams_Executive_Approval. Screen Flow → same "Evaluate Request" flow.
  3. Decision: Approve → continue. Reject → Background Step (status update) → End.

Stage 3: Finance Department

  1. Add a Stage on "Approved" path. Label: "Teams - Finance Approval"
  2. Add an Approval Step: Assignee → Queue: Finance_Dept_Approval
  3. Decision: Approve → Background Step calling "Quote Approval - Update Status":
    varApprovalStatus = "Approved"
    varQuoteStage = "Heads of Terms"
    varCurrentApprovalStage = "Proposal Approved — Advanced to HoT"

    Reject → Background Step (rejected) → End.
The repeating pattern for each Stage: Stage (with Approval Step inside) → Decision element (Approve vs. Reject) → next Stage or End. The Approval Step's built-in email notification fires automatically when the step is assigned to the Queue — no separate notification flow needed.

LIV League Deal — Proposal Stages

On the "LIV League Deal" Decision outcome, build 2 sequential Stages (no Executive approval for League deals).

Stage 1: League Biz Ops Manager

  1. Add a Stage: "League - Biz Ops Approval"
  2. Approval Step: Queue → League_Biz_Ops_Approval. Screen Flow → "Evaluate Request". Lock Record → Yes.
  3. Decision: Approve → continue. Reject → update status → End.

Stage 2: Finance Department

  1. Add a Stage: "League - Finance Approval"
  2. Approval Step: Queue → Finance_Dept_Approval (same queue — shared across both deal types).
  3. Decision: Approve → Background Step (update Status to "Heads of Terms"). Reject → End.

Heads of Terms & Contract Negotiation

Both deal type paths share the same pattern for these final stages.

Heads of Terms — External Partners Approval

  1. Add a Stage after the Finance "Approved" Background Step (on both the Teams and League paths). Label: "External Partners Approval"
  2. Approval Step: Queue → External_Partners_Approval. Screen Flow → "Evaluate Request".
  3. Decision: Approve → Background Step (update Status to "Contract Negotiation"). Reject → update status → End.

Contract Negotiation — Legal Notification

  1. Add a Stage after External Partners approval. Label: "Notify Legal"
  2. Add a Background Step (NOT an Approval Step — Legal is being notified, not asked to approve):
    • Flow: "Quote Approval - Update Status"
    varApprovalStatus = "Approved"
    varQuoteStage = "Contract Negotiation"
    varCurrentApprovalStage = "Complete — Contract Negotiation"
  3. Add a second Background Step for the Legal notification:
    • Use a simple Autolaunched Flow with a Send Custom Notification action targeting the Legal Department Queue members
    • Or add an Email Alert action to notify the Legal queue email address
  4. End the orchestration.

Error Handling & Recall Path

Fault Paths

Add a Fault Path to every Stage. Click each Stage → "Add Fault Path." On the Fault Path, add a Background Step that updates Approval_Status__c to "Error" and sends a notification to the admin and Quote owner.

Recall Path (Summer '25+)

Click the Start element → "Add Recall Path." Add a Background Step that updates Approval_Status__c to "Recalled," resets Current_Approval_Stage__c, and unlocks the record. Only Background Steps are allowed on the Recall Path (no Approval Steps).

Rejection Handling

On every "Rejected" Decision outcome, the Background Step should update the status AND optionally send a Custom Notification to the Quote Owner explaining the rejection. The approvalComments from the Screen Flow can be passed through to the notification body.

Phase 4 — Deploy & Test

Record Page & Components

  1. Edit the Quote Lightning Record Page (Setup → Object Manager → Quote → Lightning Record Pages → Edit):
  2. Add Orchestration Work Guide component — search "Work Guide" in Components panel. Place prominently (top of right sidebar or a dedicated tab). Enable "Hide When Empty". This is where approvers see the Screen Flow and take action.
  3. Add Approval Trace component — shows the full approval lifecycle audit trail (status, comments, assignees, timestamps). Place in an "Approval History" tab.
  4. Add a Rich Text component with conditional visibility (Approval_Status__c = "Pending Approval") showing: "This Quote is pending approval. Editing is locked until the process completes."
  5. Add the custom fields (Approval_Status__c, Current_Approval_Stage__c, Approval_Decision_Date__c) to the page layout detail section.
  6. Save, Activate, and Assign the page to the appropriate apps/profiles.
Required for approvers: Without the Orchestration Work Guide component, approvers can only respond via email reply. The Work Guide is the in-Salesforce approval interface — add it to every Quote page layout that approvers might use.

Testing Playbook

Debug in Flow Builder (Winter '26+)

  1. Open the orchestration → click Debug.
  2. Select Rollback Mode + enable "Manually Set Output Variables" on each Approval Step to simulate approve/reject decisions without real users.
  3. Walk through each path: both deal types, all approval chains, rejection at each stage, recall.

End-to-End Scenarios

#TestExpected Result
1Create Teams Deal Quote at Proposal stageOrchestration fires, Teams Biz Ops Queue gets approval request
2Approve all 3 Teams Proposal stepsQuote Status → "Heads of Terms"
3Reject at Teams Executive stepApproval Status = "Rejected", orchestration ends
4Create League Deal Quote, approve all stepsFull path: Proposal → HoT → Contract Negotiation
5Verify email received by Queue membersEmail with approval link, reply "Approve" works
6Verify Work Guide renders for assigned approverScreen Flow appears inline on Quote record page
7Verify Approval Trace shows audit trailStatus, comments, assignee, reviewer, timestamps visible
8Test recall on in-progress approvalStatus → "Recalled", record unlocked
9Check Approvals App (App Launcher → Approvals)All submissions and work items visible in list views

Go-Live Checklist

Pre-Work

Supporting Flows

Approval Orchestration

Deployment

Testing