Learning Guide — Build & Deploy Focus

Salesforce Flow
Approval Processes

A hands-on guide synthesized from 88 unique Salesforce Help articles and community resources. Master building, deploying, and operating Flow-based approval orchestrations — the modern replacement for classic approval processes.

Spring '25 → Winter '26 88 source articles ~30 min read

What Are Flow Approval Processes?

Flow Approval Processes are Salesforce's modern, declarative framework for building approval workflows entirely inside Flow Builder. Introduced in Spring '25, they replace classic approval processes with an orchestration-based architecture that supports multi-step, multi-user, and even cross-system approval scenarios — all without code and at no additional cost.

Unlike classic approvals, which relied on a separate rule-based engine, Flow approvals are built on top of Flow Orchestrator. Although orchestrations typically consume automation credits, approval orchestrations are explicitly excluded — they're free regardless of volume.

Key Insight: Flow Approval Processes don't consume orchestration runs or automation credits. Every org gets this at no extra cost if you have access to legacy approvals (Enterprise, Performance, Unlimited, Developer editions).

For Admins

Automate approvals from record-change triggers or on-demand buttons. Build complex routing with Decision elements, Evaluation Flows, and multi-stage orchestrations — all declaratively.

For Users

A streamlined approval interface via the Orchestration Work Guide component on record pages. Approve/reject via email keywords or directly in the UI. A centralized Approvals App for visibility.

Architecture & Building Blocks

Every Flow approval orchestration is composed of a small set of building blocks that combine to handle simple or complex scenarios. Understanding these components is essential before you start building.

Stages

Logical phases of your approval process (e.g., "Manager Review," "VP Approval," "Finance Sign-off"). Stages run sequentially — only one is active at a time per orchestration run.

Steps

Individual units of work within a Stage. Multiple Steps in one Stage run in parallel. Two types: Approval Steps (interactive) and Background Steps (automated).

Approval Steps (Interactive)

Require human interaction via Screen Flows. Assign work to a specific User, Queue, or Group. Creates a Work Item visible in the approver's Work Guide component.

Background Steps (Automated)

Execute Autolaunched Flows for automated actions — update records, send notifications, create tasks. No user interaction required.

Pro Tip: Use multiple Steps inside one Stage for parallel approvals (e.g., Legal and Finance review simultaneously). Use multiple Stages for sequential approvals (Manager → Director → VP).

Supporting Components

Decision Elements route records after a step completes based on the approval outcome. Every approval process — even simple ones — needs at least one Decision element to handle Approve vs. Reject paths.

Evaluation Flows act as an advanced gatekeeper when you have complex entry/exit criteria that can't be accomplished within the orchestration alone. They are a special flavor of Autolaunched Flows with a single predefined output boolean variable: isOrchestrationConditionMet. Any additional output variables you add will be silently dropped.

Work Items are the records that get created when an Approval Step is assigned to a user. These appear in the Orchestration Work Guide component on the record page and are tracked via the Approval Work Item object.

Watch out: The approvalDecision output variable from an Approval Step returns Approve or Rejectnot "Approved" or "Rejected." Spelling matters in your Decision element conditions.

Classic vs. Flow Approval Processes

Understanding the differences helps you decide when to migrate and what to watch for. Classic approvals are maintained but no longer receive meaningful updates.

CapabilityClassic ApprovalsFlow Approvals
Built inSeparate approval engineFlow Builder (Orchestrator)
TriggerSubmit for Approval buttonRecord-triggered or Autolaunched
LogicEntry criteria per stepDecision elements, Evaluation Flows
Approver UIApproval History related listWork Guide component + Approval Trace
Email approve/rejectYesYes (with setup)
Manual next approverYesNot yet supported
Delegated approverYesNot yet supported
RecallYesYes (Summer '25+)
ReassignmentLimitedYes (Winter '26+)
Debug modeNoYes (Winter '26+)
Error handlingLimitedFault Paths per Stage
CostFreeFree (no automation credits)
Migration note: Review the official "Considerations When Migrating from Legacy Approval Processes" article before migrating. Key gaps include no manual next-approver selection and no delegated approver behavior. If your process requires these, classic may still be appropriate for now.

Prerequisites & Pre-Work

Before building your first Flow approval process, there are several setup steps and supporting flows you need to prepare.

  1. Plan your approval workflow on paper first. Map out: Who submits? What triggers submission? How many approval levels? Who approves at each level? What happens on approval/rejection? What fields need updating?
  2. Create a custom status field on your object (e.g., Approval_Status__c picklist with values: Pending, Approved, Rejected). Flow approvals don't use the classic Approval Status field — you manage this yourself.
  3. Build a Screen Flow for the approver experience. You can use Salesforce's built-in template: Approvals Workflow: Evaluate Approval Requests. This provides the approve/reject radio buttons and comments field. The key output variable is approvalDecision.
  4. Build an Autolaunched Flow for status updates. This flow receives the record ID and the approval outcome as input variables, then updates the record's status field accordingly. This becomes your Background Step.
  5. Set up Org-Wide Email Address if you want approval notification emails to come from a branded address rather than the Automated Process user.
  6. Enable Email Approval Response in Setup → Process Automation Settings → check "Enable email approval response" if you want approvers to respond via email keywords.
Tip: Build and test your Screen Flow and Autolaunched Flow independently before wiring them into the orchestration. This isolates issues and makes debugging much easier.

Build: Record-Triggered Approval Orchestration

This is the most common pattern — the approval process fires automatically when a record is created or updated and meets your entry criteria. No user button click required.

Step-by-Step Walkthrough

  1. Create a new Flow. Go to Setup → Flows → New Flow. Select Record-Triggered Approval Orchestration. Choose your object (e.g., Opportunity).
  2. Configure the trigger. Set when the flow runs — on record create, update, or both. Define entry conditions (e.g., StageName = 'Proposal/Price Quote'). The orchestration will only fire when these conditions are met.
  3. Add a Stage. Click the + icon on the canvas to add a Stage element. Name it descriptively (e.g., "Manager Approval"). A Stage groups related steps into one logical phase.
  4. Add an Approval Step inside the Stage. This is the interactive step where the approver acts. Configure: the Screen Flow to use (your evaluate-approval-requests flow), the assignee type (User, Queue, or Group), and the specific assignee (e.g., {!$Record.Owner.Manager.Username}).
  5. Add a Decision element after the Stage. Reference the Approval Step's output: {!Stage1.Step1.approvalDecision}. Create two outcomes: one for Approve and one for Reject. Remember: it's Approve/Reject, not "Approved"/"Rejected."
  6. Add Background Steps for post-decision actions. On the Approve path, add a Background Step that runs your autolaunched flow to update the status to "Approved." On the Reject path, update to "Rejected" and optionally send a notification.
  7. Add additional Stages for multi-level approvals. For example, if the amount exceeds $100K, add a Stage 2 for VP approval. Use a Decision element between stages to conditionally route.
  8. Save, then activate the orchestration once you've tested.
// Approval Step output variable reference pattern: {!StageName.StepName.approvalDecision} // Possible values: Approve // ← NOT "Approved" Reject // ← NOT "Rejected" // Assignee for manager approval (User resource): {!$Record.Owner.Manager.Username} // Assignee for queue: "Queue_API_Name"
Common Gotcha: When assigning to a User resource, the variable must contain the username (e.g., jsmith@company.com), not the User ID. For Queue or Group assignees, use the API name.

Build: Autolaunched Approval (Button-Triggered)

Use this pattern when you want users to manually initiate the approval process — via a custom button on the record page, from another flow, or from Apex. It gives you more control over when approvals start.

  1. Create a new Flow. Select Autolaunched Approval Orchestration (No Trigger). This flow type has no record trigger — it must be invoked externally.
  2. Build your Stages, Steps, and Decisions exactly as you would in a record-triggered orchestration. The architecture is identical — the only difference is how it starts.
  3. Save and Activate the orchestration.
  4. Launch via URL button. Since quick action buttons don't work for autolaunched orchestrations (they have UI components like approval step screen flows), you use a URL-based button. Create the button with the URL pattern specific to your org and flow API name.
  5. Or use the Request Approval component (newer approach). In Lightning App Builder, search for "Request Approval" and drag it onto your record page. This native component replaces the URL button approach and supports dynamic inputs like approver selection and comments.
Request Approval Component (Spring '26+): This is the recommended approach going forward. It's a native Lightning component that bridges the gap between screen flow UI and autolaunched orchestration processing. It supports user input for approver selection and comments directly from the record page, eliminating the need for custom URL buttons.

When to Use Each Type

Record-Triggered

Best when: approval should happen automatically on create/update. No user action needed. Entry is predictable and criteria-based. Reduces manual steps and human error.

Autolaunched

Best when: user should decide when to submit. Supports manual starts, bulk runs, or multi-record scenarios. Can be invoked from other flows, Apex, or buttons.

Advanced Patterns

Place multiple Approval Steps inside a single Stage. All steps in the same stage can execute in parallel, meaning Legal, Finance, and HR can all review simultaneously. Configure stage completion logic to determine whether all steps must finish or if conditional rules mark the stage done. If doing parallel approvals, lock the record only on the first step to avoid locking conflicts.

When you have more than ~10 criteria or complex logic that can't be expressed in the orchestration's built-in conditions, use an Evaluation Flow. It's a special Autolaunched Flow with one predefined output variable: isOrchestrationConditionMet (boolean). Even if you add more output variables, they'll be silently dropped. Use Evaluation Flows to determine when a Stage should start, when it should be marked complete, or when a Step should execute.

The recall path lets you define what happens when an in-progress approval is recalled (withdrawn). It's configured from the Start node of the orchestration. The recall path can be split by Stages, but only Background Steps are allowed — no interactive steps. Use it to reset status fields, send recall notifications, and unlock records.

Also introduced in Summer '25, Fault Paths can be added to each Stage. They behave just like fault paths in standard flows — when an error occurs in a stage (e.g., a validation rule fires, a required field is missing), the fault path executes. Use fault paths to log errors, notify admins, or gracefully handle failures. The underlying screen and autolaunched flows should also have their own error handling.

You can configure per-step whether to lock the record or allow approver edits. Locking prevents other users from modifying the record while it's pending approval. For parallel approval patterns, lock only on the first step to avoid conflicts. Unlike classic approvals, record locking is optional and configurable at the step level.

Map approver sources to fit your org: use a manager field for simple hierarchies, queues or groups for coverage-based routing, and named users when a role is fixed. For multi-approver work within a single step, you can choose first-response (speed) or unanimous (risk mitigation). Use Queues when any member of a team can approve, and Groups when you want broader distribution.

Deploy to Users

Building the orchestration is only half the work. You need to make the approval experience accessible and visible to both approvers and submitters on the record page.

Essential Page Components

Orchestration Work Guide

The primary approval interface. Add this component to the Lightning Record Page via App Builder. When an approval step is assigned to the current user, the screen flow appears inline. Has an option to auto-hide when empty. This is required — without it, approvers can only respond via email.

Approval Trace

Shows the complete approval lifecycle on a record — status, comments, assignee, reviewer, and timestamps. Add to the record page for transparency and audit trail. Replaces the classic Approval History related list.

Request Approval Component

For Autolaunched orchestrations — a native Lightning component that lets users submit records for approval with dynamic inputs (approver selection, comments). Drag onto the record page from App Builder.

Submit for Approval Button

For Autolaunched orchestrations using the URL method — add a custom button to the Lightning Record Page's Dynamic Highlight Panel. Use conditional visibility to show only when the record is in a submittable state.

Deployment Steps

  1. Edit the Lightning Record Page in App Builder. Add the Orchestration Work Guide component (search "Work Guide"). Enable "Hide when empty" to keep the page clean when no approvals are pending.
  2. Add the Approval Trace component to the page, typically in a tab or below the Work Guide. This gives all users visibility into the approval history.
  3. For Autolaunched orchestrations: Add either the Request Approval component or a Submit for Approval button to the Dynamic Highlight Panel. Apply conditional visibility so it only shows when the record is eligible for submission.
  4. Configure email notifications. Set up an Org-Wide Email Address if you want branded emails. Enable "Email Approval Response" in Process Automation Settings. Optionally customize the notification email template in the Approval Step configuration.
  5. Set up the Approvals App. Users can access the centralized Approvals lightning app from the App Launcher to view all Approval Submissions, Submission Details, and Work Items across objects.
  6. Save, activate the record page, and assign it to the appropriate profiles/apps.
UX Enhancement: Use a Rich Text Lightning Component on the record page with conditional visibility to inform users when their record is pending approval and why they can't edit it (if you've enabled record locking).

Debug & Troubleshoot

Winter '26 introduced built-in debugging for approval orchestrations directly in Flow Builder. There are two main mechanisms for preventing and diagnosing issues.

1. Fault Paths

Add a Fault Path to each Stage of your orchestration. When a validation rule, required field, or runtime error occurs, the fault path executes instead of failing silently. Your underlying screen and autolaunched flows should also have their own fault/error handling — think of stage-level fault paths as a safety net for the orchestration layer.

2. Debug Mode (Winter '26+)

You can now debug approval orchestrations directly in Flow Builder. Two modes are available:

Default Mode

Executes the flow and commits data changes. Use when you want to see real behavior end-to-end. Good for final validation before go-live.

Rollback Mode

Executes the flow but rolls back all data changes. Steps that run asynchronously will error unless you enable Manually Set Output Variables to simulate approval decisions without real user interaction.

Manually Set Output Variables: When debugging, you can toggle this option per step to simulate approval outcomes. The debug configuration tab appears in each step's settings, allowing you to set approvalDecision = Approve or Reject without requiring a real user to act. This is essential for rollback mode testing.

Common Issues & Fixes

Verify: (1) "Enable email approval response" is checked in Process Automation Settings, (2) Org-Wide Email Address is configured, (3) "Automated Process User Email Address" is set, (4) check spam folders, (5) verify the approver's email is valid and deliverable. For Gmail users, emails may land in spam initially.

Your Decision element is likely misconfigured. Verify you're checking approvalDecision equals Reject (not "Rejected"). Make sure the Reject outcome leads to an End element or a Background Step that terminates the orchestration. Check the Decision element outcome order — the default path may be routing incorrectly.

Ensure the Orchestration Work Guide component is added to the Lightning Record Page and the page is activated and assigned. Verify the current user is the assigned approver for the pending step. If using "Hide when empty," the component is hidden until a work item is assigned to the viewing user.

This is expected! Flow approval processes don't use the classic Approval History related list. Instead, add the Approval Trace component to the record page, or direct users to the Approvals Lightning App to view Approval Submissions and Work Items.

Go-Live Checklist

Use this interactive checklist before activating your approval process in production. Click each item to mark it done.

Pre-Build

Build

Deploy

Test & Validate