Skip to main content

SF-0127 · Scenario · Hard

Is it possible to trigger the approval process without the user clicking on the "Submit for approval" button?

✓ Verified by Vikas Singhal · Last reviewed 5/17/2026 · Updated for Spring '26

Yes — automatic submission is one of the most common production patterns for approvals. The three main mechanisms in 2026 are Flow’s Submit for Approval action, Apex’s Approval.process() method, and (in legacy orgs) Process Builder’s Submit action.

The three approaches

1. Flow — Record-Triggered Flow with Submit for Approval action

The modern default. Build a Record-Triggered Flow on the object that:

  1. Triggers on save
  2. Filters with entry criteria (e.g. Amount > 10000 AND Status = "Ready")
  3. Adds a Submit for Approval action element
[Record-Triggered Flow: Purchase Request]
  Entry condition: Amount > 10000 AND Status = "Submitted"
  -> Action: Submit for Approval
      Record ID = {!$Record.Id}
      Approval Process = Purchase_Request_Approval
      Submitter ID = {!$Record.OwnerId}

2. Apex trigger

trigger PurchaseRequestTrigger on Purchase_Request__c (after insert, after update) {
    List<Approval.ProcessSubmitRequest> requests = new List<Approval.ProcessSubmitRequest>();
    for (Purchase_Request__c pr : Trigger.new) {
        if (pr.Status__c == 'Submitted' && pr.Amount__c > 10000) {
            Approval.ProcessSubmitRequest req = new Approval.ProcessSubmitRequest();
            req.setObjectId(pr.Id);
            req.setProcessDefinitionNameOrId('Purchase_Request_Approval');
            req.setSubmitterId(pr.OwnerId);
            req.setComments('Auto-submitted by trigger');
            requests.add(req);
        }
    }
    if (!requests.isEmpty()) Approval.process(requests);
}

3. Process Builder (legacy)

Process Builder had a “Submit for Approval” action. New work should use Flow instead.

Why automatic submission is common

  • High-volume processes where rep submission would be a bottleneck
  • Integration-driven records where Salesforce isn’t even the data origin — records arrive via API and immediately need approval routing
  • Multi-step workflows where one approval triggers another after some processing

Watch-outs

  • Recursion — a Record-Triggered Flow that submits-for-approval and then the approval’s action updates the record could re-fire the flow. Use entry criteria carefully (e.g. only submit when Status is transitioning into “Submitted”).
  • Bulk submission in Apex — wrap submissions in a single Approval.process(list) call for governor-limit efficiency.
  • Errors — a failed submission (entry criteria not met, no approver, etc.) returns result.isSuccess() == false; check this and handle.
  • Skipping entry criteriareq.setSkipEntryCriteria(true) lets you submit records that don’t match the process’s entry criteria. Use cautiously; it bypasses safety rails.

Edge case: submit on insert vs after-save

Approval submissions in Apex must occur after the record exists in the database (it needs an Id). So this only works in after insert or after update triggers, not before insert.

What interviewers want

  • The three mechanisms: Flow action, Apex, Process Builder (legacy)
  • The recommendation: Flow first, Apex when complex logic is needed
  • Awareness of the recursion risk and how to manage it with entry criteria
  • How can a user submit records for approval?

Verified against: Apex Developer Guide — Approval.process(). Last reviewed 2026-05-17 for Spring ‘26 release.