Two-stage approvals handle requests that need both a manager's sign-off and a business owner's approval before fulfillment. This guide walks you through building sequential approvals in Flow Designer that pass catalog variables to both approval stages.
Why single-stage approval breaks down
Most catalog items start with simple manager approval, but business-critical requests often need a second approval from the team that owns the resource or budget. Without proper two-stage flow, teams resort to manual handoffs — the manager approves, then someone emails the business owner, who responds with approval buried in their inbox. The requester has no visibility, and requests stall when approvers don't know what variables were originally submitted or what the manager already reviewed.
How sequential approval flows work
Two-stage approval uses Flow Designer with Request Item trigger and two sequential Approval actions. The first approval typically routes to the requester's manager using the built-in approval engine, then conditionally proceeds to a second approval action targeting a specific group. The key difference from parallel approval: the second stage only executes if the first approves, and both approval records link to the same request item so variable data flows through. You'll configure each approval action independently — different approvers, different approval criteria, but shared context from the original request.
Production improvements and extensions
Once basic sequential approval works, common enhancements include adding approval delegation when managers are out, timeout escalation for stalled second-stage approvals, and custom approval layouts that highlight the most important catalog variables. More sophisticated implementations add conditional routing — different second-stage groups based on request amount or type — and approval history that shows both stages in the request item's activity stream.
Before you start
- •catalog_admin role or admin role
- •Flow Designer basic experience
- •Catalog item already created and active
Sourdough: ServiceNow Monitoring and Analytics
A Chrome extension for ServiceNow Admins and Developers with essential tools, analytics, graphs and monitoring features.
Free to install. Pro $5/month after a 14-day no-card trial.
Pro requires the ServiceNow admin role. Upgrade inside the extension.
Step by step
Create the approval flow
Navigate to Process Automation > Flow Designer and click New > Flow. Name it descriptively like "Two Stage Approval - [Item Name]". Set the Application scope to match your catalog item's application. In the trigger section, select "Request Item" from the Service Catalog application scope and choose "Created" as the trigger condition.
Name flows with the catalog item name — you'll have dozens of approval flows eventually and generic names make troubleshooting painful.
Add the first approval action
Click the plus icon after the trigger and select Action > Service Catalog > Ask for Approval. Set the Approval For field to the Request Item record (drag from Data Pills). Set Journal field to "Pending manager approval" or similar. For Approvers, choose "Manager of Requested For" from the dropdown. Set Due date to 5 business days from now using the relative date picker.
Always set a due date on approval actions — approvals without deadlines sit indefinitely and users lose trust in the process.
Configure first approval details
In the same approval action, set Approval action to "Approve or Reject". Check "Wait for approval" so the flow pauses until decided. In the Advanced section, set Generate event to "Never" unless you need custom approval notifications. Leave other fields default and click Done to close the action configuration.
"Wait for approval" is critical for sequential flows — without it, both approval stages fire simultaneously and you get parallel approval instead.
Add conditional logic for second stage
Add another action after the first approval, but choose Logic > If. Set the condition to check if the first approval outcome equals "approved". Use the data pill from the first Ask for Approval action's "State" output. This ensures the second approval only runs when the first stage approves.
Test the condition logic by examining the Ask for Approval action's output data pills — "State" contains values like "approved", "rejected", or "cancelled".
Configure the second approval action
Inside the If branch (when first approval is approved), add another Ask for Approval action. Set Approval For to the same Request Item record. For Approvers, select "Group" and choose your target approval group. Set Journal field to something like "Pending [group name] approval". Configure the due date and ensure "Wait for approval" is checked.
Reference the original request item variables in the Journal field using request item data pills — approvers see the context without opening the full request.
Handle final approval outcomes
After the second approval action, add another If condition to check the second approval state. In the approved branch, add an Update Record action targeting the Request Item to set State to "Approved" and add a work note. In the Else branch (rejected), set State to "Rejected". Save and activate the flow.
Explicitly set the request item state in your flow — don't rely on the approval actions to do it automatically, as the behavior varies by instance configuration.
Connect flow to catalog item
Navigate to Service Catalog > Catalog Definitions > Maintain Items and open your catalog item. In the Process Engine tab, set Workflow to "None" and Flow to your newly created flow. Save the catalog item. Test by submitting a request and verifying both approval stages execute in sequence.
Clear any existing workflow before setting the flow — having both configured causes unpredictable approval behavior.
Best practices
Always set explicit due dates on both approval stages — approvals without deadlines become orphaned and break the user experience.
Use descriptive Journal field text that includes key request details — approvers shouldn't need to dig into the request to understand what they're approving.
Set the request item state explicitly in your flow rather than relying on approval action defaults — instance configurations vary and explicit state management prevents approvals from getting stuck.
Test rejection scenarios thoroughly — most approval flows handle the happy path but break when the first or second stage rejects.
Never use parallel approval actions when you need sequential approval — the "Wait for approval" checkbox is what makes stages sequential, not the order of actions in the flow.
Test Your Knowledge
Quick 3-question quiz — see how your ServiceNow skills stack up.
A list view on a table with millions of records is slow. Best fix?
Select an answer to continue