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:
- Triggers on save
- Filters with entry criteria (e.g.
Amount > 10000 AND Status = "Ready") - 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
Statusis 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 criteria —
req.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
Related
- How can a user submit records for approval?
Verified against: Apex Developer Guide — Approval.process(). Last reviewed 2026-05-17 for Spring ‘26 release.