How to Build an Approval Process in Salesforce

By Stacy O’Leary

The Approval Process is probably one of my all-time favorite features of Salesforce – the possibilities of what you can do with it are almost endless. Any time a person needs to grant approval for something at your business, that’s a case for a Salesforce approval process. I’ve seen them used on opportunities, quotes, campaigns, leads, and countless custom objects like new product requests, Salesforce change requests, referral requests, and more.

Approval processes can be incredibly complex processes, but the builder tool, and the way it’s displayed, make it very easy to understand, even for a beginner administrator.

In this guide, I’ll walk through a very simple example, because approval processes can be extremely varied. I will point out the places where you may need to add some sophistication, based on your business needs.

One last thing – to follow along, I am assuming you know how to create custom fields, create validation rules, modify page layout, workflow field updates, time-based actions, workflow email alerts, and create email templates.

What Is an Approval Process?

As the name suggests, an approval process in Salesforce is a way for sign-off to be granted by one (or multiple) approvers for a certain Salesforce record. Either a Standard Object (such as an Opportunity) or a Custom Object scenario (which will also be our example for this post) can have one or more associated approval processes, each with their own entry criteria – their order can also be controlled.

This automation tool comes with a few specific components and options you will need to be aware of, and use accordingly, such as Approval Steps (which we will explore below), as well as record locking and the possibility to allow approval requests to be recalled by the submitter – to name just a few.

Starting an approval process can be as easy as clicking the “Submit for Approval” button, or even automatically triggered using Salesforce Flow. Let’s get started with an approval process!

Introducing the Use Case

The Free Trial Approval Process at Stacy’s Web Services, Inc.

Stacy’s Web Services has a custom object called “Free Trial”, which contains information about a Free Trial given to a prospect. There’s the Start Date, End Date, Sales Rep, a Lookup to the Opportunity, and a Status picklist, with values Pending (default), In Progress, Completed, and Canceled. The Sales VP would like all new Free Trial requests to be routed to himself for approval, and then the Sales SVP if the Opportunity Amount is more than $50,000. These Free Trials do incur a cost to the business, so we do not want to give them out on a low value deal unless there is a compelling business reason.

Discovery Questions

With the information above, I know that I will need an approval process in Salesforce – but don’t start building just yet! The most important part of the approval process isn’t in Salesforce at all, it’s offline, with the person who is making this request. Schedule an information gathering session, and determine the details you’ll need to get started.

  • Who should be allowed to submit Free Trial requests? Just Sales Reps? Anybody?
  • Are there any scenarios where you might want another person in the approval process? Like EMEA Opportunities, should we route their Free Trial requests to their manager?
  • When can these Free Trial requests be created? Should we allow them on an opportunity is already closed won? Should we allow them on an opportunity that is only in Stage 1 the Close Date is one year from now?
  • Free Trial requests on deals less than $50,000 should route to the SVP of Sales. Do we want to require the requester to provide more information immediately up front in this scenario?
  • What should happen when a Free Trial is Submitted? Approved? Rejected? Recalled?
  • Is there anything else you need or want for this?

In my example, here’s how my Sales VP has answered these questions:

Q. Who should be allowed to submit Free Trial requests? Just Sales Reps? Anybody?

A. Just the sales team should be allowed to create and submit these.

Q. Are there any scenarios where you might want another person in the approval process? Like EMEA Opportunities, should we route their Free Trial requests to their manager?

A. Yes, actually! Any renewal opportunity should route their approval through their manager.

Q. When can these Free Trial requests be created? Should we allow them on an opportunity is already closed won? Should we allow them on an opportunity that is only in Stage 1 the Close Date is one year from now?

A. No definitely not. We only want to allow Free Trial requests on Opportunities in Stages 2-5, and when the close date is within this quarter.

Q. What happens if something doesn’t meet this criteria?

A. They should not be allowed to create a Free Trial request.

Q. Free Trial requests on deals less than $50,000 should route to the SVP of Sales. Do we want to require the requester to provide more information immediately up front in this scenario?

A. Yes, if the deal is less than $50,000 let’s ask the Sales Rep to fill out a Compelling Reason for giving a Free Trial on a small deal.

Q. What should happen when a Free Trial is Submitted? Approved? Rejected? Recalled?

  • Send email to the requester, “Your request has been submitted”
  • Change Approval Status to “Submitted”
  • Fill out the “Date Submitted”

Q. What should happen when a Free Trial is Approved?

  • Send an email notifying the requester
  • Change the status to “Approved”
  • Fill out the “Date Approved”
  • Change the Free Trial Status to “In Progress”
  • Fill out the Free Trial Start Date with Today’s date
  • Fill out the Free Trial Start Date with 45 days from now

Q. When the request is Rejected?

  • Send an email notifying the requester
  • Change the status to “Rejected”

Q. What should happen when a Free Trial is Recalled?

A. Change the status to “Recalled”

Q. Is there anything else you need or want for this?

A. I’m concerned that Sales Reps might try to change the “Free Trial Status” to “In Progress” before the Free Trial is approved. Please prevent that from happening.

Great! Now that we know how we want the Salesforce approval process to work, time to start building in the sandbox! The approval process in Salesforce is going to reference the Free Trial object.

Step 1: Modifying the Custom Object

There’s several modifications I need to make to that object before I can start building the approval process itself.

Here’s the Free Trial object before I start adding to it:

I need to:

  • Create a Validation Rule blocking the creation of Free Trials that do not meet the criteria.
  • Create some new custom fields.
  • Verify that users have the correct CRED permissions.
  • Update the page layout.
  • And also, create a Validation Rule preventing the Free Trial Status from being changed to “In Progress” unless the Approval Status is “Approved”.

The new custom fields you need to create:

Field NameField TypeValuesSecurity
Approval StatusPicklist Pending (default), Submitted, Approved, Rejected, Recalled Read only & on the page layout
Date submittedDateRead only & on the page layout
Date Approved Date Read only & on the page layout
Final Approver Text Area Read only & on the page layout
Opportunity Amount Formula Populated from OpportunityVisible to all users
Opportunity Stage Formula Populated from OpportunityVisible to all users
Opportunity Type Formula Populated from OpportunityVisible to all users
Compelling ReasonText Area Editable

Here’s the Free Trial object after adding the new custom fields. I like to group my fields into relevant sections, but that’s up to you!

We also need to create some email templates:

  • You have submitted a Free Trial
  • Your Free Trial has been Approved
  • Your Free Trial has been Rejected
  • A Free Trial Needs your approval

Now that all of the fields have been created, validation rules are done, page layout rearranged, and our email templates are created, we can start building the approval process!

Step 2: Create the Approval Process, Choosing the “Standard Setup Wizard”

  1. Name your approval process
  2. Specify entry criteria – What is the minimum criteria a record must have to enter the approval process?
    You can enforce opportunity stage requirements here, you can enforce a variety of requirements here but remember, the approval process does not have an error message. So, if a user submits a record that does not meet criteria, they will not know exactly which criteria they’re missing. That’s why we built those validation rules earlier, instead, because we can use them to display a specific error message to the user.
  3. Approver & Editability – who should be the default approver (if any) and who should be able to edit this record, while its in the process?
  4. Approval Assignment Notification Template – use the A Free Trial Needs your approval email template you created earlier
  5. Approval Page Layout – when the manager goes to approve this record, which fields should they see on the page?
  6. Initial Submitters – who should be allowed to submit the record for approval?

When you get to the final page, just click “I’ll do this later”.

Now take a break, stretch your legs, and get some fresh air!

Step 3: Set Actions

Once you feel refreshed, come back to the approval process you just created.

If at any point, you need to make modifications, just click “Edit” and select the area that needs to be updated.

Now we can move on to our actions and approval steps. Remember earlier we asked the Sales VP, “What should happen when…” This is where we get to use that information.

We’re going to start with the Actions and come back to the approval steps later. Here are some definitions:

  • Initial Submission Actions: “What should happen when a Free Trial is submitted?”
  • Final Approval Actions: “What should happen when a Free Trial is approved?”
  • Final Rejection Actions: “What should happen when a Free Trial is rejected?”
  • Recall Actions: “What should happen when a Free Trial is recalled?”

Under each action, we need to add in the Field Updates and Email notifications that were requested by the Sales VP. Click “Add New” and then click “Email Alert” or “Field Update” accordingly. Just go down the list and make sure that each action is executed at the proper time.

Some tips:

  • When using email alerts, consider having them come “From” an Organization-Wide email address, like that way anyone who tries to reply to one of these emails gets sent to the proper team.
  • If you have an additional need for time-based actions (in this example, I might like to automatically change the Free Trial Status to Completed after 45 days) make sure to check the box on your Field Update.

Step 4: Map Approval Steps

You’ll need to take another break from Salesforce. If you’re new to building approval processes, and you have a lot of steps, it might help to actually map the next section out on a whiteboard or piece of paper.

Figure out how many people need to approve, what order they need to approve in, and what the criteria is for each person. In this example, we have only three people.

Ordering your approval steps correctly is a fine art; I like to think of the order as a funnel. The most broad volume of approvals should be at the top, and the lowest volume should be the last approver. The most broad, in this case, is the VP of Sales, who will be approving all Free Trials. Next, would be the Renewal Manager, who will be approving around 25% of Free Trials, and then finally the SVP of Sales, who will be approving <5% of Free Trials. With that in mind, our funnel looks something like this:

When we add the steps to Salesforce, it looks like this:

  • Name & Description: It’s very important to give each step a clear name and description. Do not name your steps for the people within them – people change all the time, and you don’t want to have to rename a bunch of steps when management changes!
  • Criteria: Just like the entry criteria, just like workflow rule criteria, and just like Validation Rules (formula). Make sure you select the appropriate radio button (all records or specified records), and then create your criteria for that step.

On every step (except the last one) you will see an additional option: “else” This is explaining what happens if a record does not meet the criteria to enter this step.

  • Go to the next step
  • Approve record
  • Reject record

For Step 1, VP of Sales, we use “All records should enter this step.” For step 2, we use criteria, and “else go to next step” because only the Renewal Opportunities should go through this step. For the final step, you will not be able to choose an “else” action. If a record does not meet any of the criteria specified in this approval process, it will be automatically rejected.

Step 5: Activate!

That’s it! Now it’s time to activate this approval process and test this out in the sandbox. I like to list out scenarios that should be tested, try them out, and then have my users do testing as well. You want to do at least one test for every possible scenario, cover any validation rules you created, and also consider your CRED for the users. Once all of your tests are successful, gather everything in a change set, and push it all to production.

If you have an extremely complex flow, or with different teams needing different paths, it might be worth considering having multiple approval processes for each team. This is common in international teams, or on the quote object, where different teams might have different pre-approved discount thresholds. When working with multiple approval processes, keep in mind they will be evaluated in the order you place them, and then accessible through the entry criteria of that process.


The Salesforce approval process is a great way of having a permanent, documented history of approvals right on the record in question in Salesforce – you’ll never ask, “Who approved this?” again. They can be intimidating to create, but as long as you start in sandbox, have a thorough plan, and go step by step, you will find they are actually much easier to implement and maintain than they appear at first glance. With a little practice, you’ll wonder how you ever lived without them!

The Author

Stacy O'Leary

Stacy is a 5x Certified Salesforce Consultant & Full Time Mom.


    August 27, 2019 9:55 pm
    Hi Stacey- thanks for the post, very clear. I'm just confused by this last step, "For Step 3, we use “else approve” because there aren’t any more steps to complete." When I look at the last step, this "else approve" isn't there. I've seen other posts about this, and it seems like, if you want to approve "anything that does not meet these criteria" you need to create yet another approval process, to capture all of those. This post outlines the issue, and work-around:
    Sri Angara
    September 03, 2019 5:26 pm
    This is very detailed. Appreciate the effort. Quick question on the approval step. If there are multiple approvers in one step requiring unanimous approvals, is there a way to capture the individual approval date/time stamp after they approved?
    Stacy O'Leary
    September 05, 2019 9:03 pm
    Hi Sri - Yes, when unanimous approvals are required, each person's name and approval (or rejection) date and time will be displayed.
    Stacy O'Leary
    September 05, 2019 9:04 pm
    Hi Fred, great reminder, thanks! I've updated the post to clarify.
    Denise Wilhite
    September 09, 2019 10:59 pm
    Thank you so much for your detailed explanation of "Approval Processes". I do have a question for you. Is it possible when an approval process is recalled and then resubmitted, can we build a process that would allow the resubmission to go back to the last designated approver instead of going back to Approver 1? I have been working on this but not having a lot of success. Any help would be greatly appreciated.
    Stacy O'Leary
    September 10, 2019 10:32 pm
    Hi Denise! I'm just thinking on the fly here, but this is what I would try in Sandbox: Let’s say this is your approval path: Team Lead -> Manager -> Director -> VP. I would create a checkbox for approval for each of these: Team Lead Approved, Manager Approved, and Director Approved, VP Approved. Make sure you set FLS correctly for each of these field. Add an Action under each step (“Show Actions” –> “Approval Action” –> “Add New” – >“Field Update”) and add a field update on each step, to check each box. Then, update the entry criteria to each step to exclude records that have already been approved by that party: Team Lead Approved = False, Manager Approved = False So what would happen, is this: 1. Sales Rep clicks Submit 2. Team Lead approves the record, Field Update changes “Team Lead Approved” to “True” 3. Sales Rep recalls (or even Manager rejects the record, if you set that up) 4. Sales Rep clicks Submit again 5. Entry criteria for step 1 says, [misc. entry criteria] AND Team Lead Approved = False. Since this record was already approved by Team Lead, and that value now = “True”, it doesn’t meet the criteria for this step and goes on to the next one step 6. Process continues at whatever step number where the criteria is met. That may or may not be the best solution, but I would give that a try and see how it works. Good luck!
    March 27, 2020 10:54 am
    Hello stacy, can you please explain how you captured the final approval name?
    Elizabeth Roemermann
    April 24, 2020 4:30 am
    Hi Stacey, i'd like to know this too. @mansi did you work out how to do it?
    May 22, 2020 12:28 pm
    Hi Stacey, When the approval request goes to Step 2 nowards, the approval users for step 2 will get a notification stating that the approval user of step 1 has request for approval. Can this be changed to the initial submitter of the record?
    June 16, 2020 8:50 pm
    Me too! Very much need this and can't find how to do it anywhere!
    June 21, 2020 6:31 pm
    Stacey, I am struggling. My process goes through the manager level correct to Director but on approval by the director (goes to controller), the status update skips the status update and goes directly to the controllers final approval update. Any wisdom??
    December 02, 2020 3:58 am
    Same here! Please share!
    Lucy Mazalon
    December 31, 2020 3:15 pm
    Hi Mansi, Elizabeth, GP & Amy, Stacy let me know that she was having some troubles with commenting. Here is her response: “I just created a text field on the record, and then used a field update on the 'final approval action’ to capture the current user name: $User.FirstName +" "+ $User.LastName Hope that works out for you all!
    Matthew Metros
    April 23, 2021 2:55 am
    Can two people be the approvers? I ask because the Vp matches all cases
    July 15, 2021 9:30 pm
    Great explanation, love the detail. However, I built an approval process for use by Partner Community Users on a custom object. The User has Read Access on the object and fields, the Criteria is met, the Approval Process is activated. The User clicks the "Submit for Approval" button in the Community, and enters a comment in the box... but when they click "Submit" they get an error that says "No applicable Approval Process found". Can anyone tell me why this ACTIVE approval process is not found via the Community? I have been over the Criteria multiple times and all requirements are met.
    August 08, 2021 1:41 am
    Hi, Stacey. I have a multi-step approval process that works until the last step. Once it is approved by the chapter director and then the executive director, it is supposed to return to the original submitter for a date to be added. Then, it goes to accounting. Instead of the original submitter (who is named in the step), it goes to another user who is not named at all in the process. I have not been able to resolve this. Any ideas?
    Rich T
    February 20, 2022 4:03 am
    Stacy, Great Approval Process guide! To take it a step further, how can an Approval Process be designed using the Submitter's Management hierarchy, such that the request keeps routing to the Requestor's Manager's Manager and so on until it gets approved by a Manager that has the authority to approve the amount on the request record? I'm trying to develop a very generalized approval routing for check requests that can start with a submitter in any department at any level, and does not have any user names or amounts hardcoded into the routing. (This will be very much like an Accounting approval routing for things such as purchase orders or invoice payments.) Each Manager has an approval authority max $ (stored in a custom field on their User record.) At each step, the criteria needs to check if the approver's $ approval authority is below the check request amount, in which case it should route to their Manager; else perform the final approval actions. I wish each step could have a criteria with logic like: if request amount > last approver's max approval authority, then enter step and assign to Manager, else approve. But I don't see how that can be configured in an Approval Process. Thanks in advance
    February 22, 2022 7:28 pm
    How many approvers can be there in a single approval process? What's the maximum limit ? Thanks in advance.
    Christine Marshall
    February 24, 2022 11:15 am
    Check out this article for all approval limits!
    Barry Denson
    March 02, 2022 1:38 pm
    How did you do the field update for Final Approver
    April 04, 2022 3:27 am
    Hi Rich, I don't think you can do that with approval processes alone, but you can fire an approval process using flow. You could theoretically create one generic approval process, on final approval update the approval status to approved which fires the flow, check if there is a next level in the role hierarchy, and submit for approval again. This wouldn't be one approval process with multiple steps, but instead a single approval process getting fired multiple times with different submitters/approvers.
    Rich T
    April 12, 2022 4:38 pm
    I finally solved this with a simple formula criteria for entering multiple approval steps. Enter this step if the following formula evaluates to true, else approve record. "$User.Job_Approval_Level__c < Payment_Amount__c". This translates to: if the last approver's Job Approval Level is less than the Payment Amount, then send Approval Request to the last approver's manager; otherwise approve. Job_Approval_Level__c is a currency field on the User record representing the maximum amount they are authorized to approve, and Payment_Amount__c is a currency field on the record being approved. Automatically assign using the user field selected earlier. (Manager). There needs to be the number of steps for the number of levels of management that the approval could possibly climb in the manager hierarchy.
    May 25, 2022 12:42 pm
    Did u got the answer?
    Megan Callaghan
    May 27, 2022 10:37 pm
    I just created a text field on the record, and then used a field update on the ‘final approval action’ to capture the current user name: $User.FirstName +” “+ $User.LastName
    May 27, 2022 10:39 pm
    Hi! Anyone have any tips for approval history reporting? Specifically a workaround to the lack of comments? thanks! Comments are not available in the reporting
    May 27, 2022 10:39 pm
    Create a text field on the record and then used a field update on the ‘final approval action’ to capture the current user name: $User.FirstName +” “+ $User.LastName
    Jennifer Everett
    September 01, 2022 12:14 pm
    Great article Stacey, thank you! Can anyone help, i'm trying to add in a custom field into the Entry Criteria. For example we want a quote approval process in place for any of our "Type A Customers". This isn't an option in the drop down list when adding in criteria met etc. Does anyone know how I can select this as an option? Thank you
    Sam Dunkerton
    October 06, 2022 11:30 am
    Hey this is a great article. One thing I'm struggling to get über clear on is delegation of approvals. We have a complicated approval process in my org and often members in the chain are on leave. I've set up the users with delegated approval users, but there doesnt seem to be a way to automate timings so you kinda have to manually turn it on and off when people go and come back. A SF article I found suggests there are start and end dates that can be entered, but I cant for the life of me find those. Any advice around automatic delegation when users are on leave etc where the period of leave time is known in advance? (I appreciate it cant handle random sickness or unexpected absence without a really complex solution looking perhaps at calendars and event types etc, even then that relies on accurately logging absence events in SF too)
    Vicky Papalampridi
    December 06, 2022 3:49 pm
    Hi Stacy, this is great help! Just a critical question, when creating the Email Alert to notify the approval submitter (eg "You have submitted a Free Trial") how do you define that the recipient of the Email Alert is the approval submitter? There are options to notify a specific user, the record owner, etc, but not the approval submitter. Thank you!!
    December 11, 2022 5:32 pm
    Is is possible to give users additional fields while approving the record? i,e., In addition to the comments free text box, possible to show any checkbox or new optional text field? for managers to enter
    January 25, 2023 6:49 pm
    Hello, I have question. For example, is it possible to, if in first step approver is Manager, have in second step Manager of approver from first step? I'd like to have possibility to assign manager of owner in first step, then in second manager of first approver and so on. Is it possible? I don't know, let's say chierachy approvers
    February 17, 2023 10:07 pm
    Checking to see if it is possible to automatically approve someone in the process when it is first submitted. We have certain Account Types that we want to automatically approve. Can this step be included in the approval process (if so how?) or is this better done with a flow?
    Mark Poyser
    May 19, 2023 1:41 pm
    Hi, Great article. I may have missed it in all the other comments. Can the approval be set to go to three people in parallel and as long as one approves it, the other two do not need to? In addition, whoever does approve it, would then become the owner of the record / object. Thank you

Leave a Reply