Salesforce Scheduled Flow: How to Automate Processes on a Schedule (No Code Guide & Examples)
Feb 12, 2025
Salesforce Scheduled Flow: How to Automate Processes on a Schedule (No Code Guide & Examples)
Salesforce Scheduled Flows (also known as Schedule-Triggered Flows) let you automate tasks on a timetable – no Apex code required. Imagine scheduling a job to run nightly data syncs or weekly email reminders without ever writing a script. Sounds great, right? In this guide, we’ll show you exactly how to set up a Salesforce Scheduled Flow step by step, with practical examples you can use today. We’ll keep it casual and straightforward, so you can start automating those routine processes ASAP. Let’s dive in and get your flows working on your schedule!
What is a Salesforce Scheduled Flow?
A Salesforce Scheduled Flow is an autolaunched flow that runs in the background at a specific date/time and frequency you define (daily, weekly, or once). Unlike record-triggered flows (which fire when a record is created/edited) or screen flows (which require user interaction), scheduled flows are time-based – they run independently of any single record change. You set the criteria, schedule the run, and Salesforce executes the flow for all records that meet your criteria at the scheduled time.
In other words, a scheduled flow is like a cron job for admins: you configure it with clicks, not code, to perform repetitive tasks on a regular cadence. Salesforce will batch-process records that match your conditions. For example, you could use a scheduled flow to find all accounts with an expired contract and send out renewal reminder emails every week, or do a nightly data cleanup on records that need updates. All of this happens automatically once you set it up – no manual intervention needed.
Why use scheduled flows? They’re perfect for routine maintenance, weekly/daily summaries, or any process that needs to run for multiple records on a schedule rather than immediately at record save. Prior to this feature, admins often had to ask developers to write batch Apex jobs for such tasks. Now, you can accomplish many batch jobs with scheduled flows (clicks not code!). Keep in mind, though, that scheduled flows have some limits compared to code – for instance, they can query up to 50,000 records and execute up to 250,000 records per day. That’s plenty for most admin use cases, but if you ever need to process millions of records or complex logic, a developer might still reach for Apex.
Note: Don’t confuse Schedule-Triggered Flows with Scheduled Paths in record-triggered flows. A scheduled path is a delay added to a record-triggered flow (for example, “do X 7 days after a case is created”) – it’s still tied to a specific record event. A Scheduled Flow, on the other hand, runs at a fixed time regardless of any single record change. Both are useful, but here we’re focusing on true schedule-triggered flows that run on a set timetable.
How to Create a Salesforce Scheduled Flow (Step-by-Step)
Ready to set one up? Let’s walk through creating a scheduled flow without writing code. In this example, we’ll build a flow that runs on a schedule and performs actions on a batch of records. You can adapt these steps for your own use case (we’ll also cover two examples in detail next). Follow along in Salesforce Flow Builder:
-
Go to Flow Builder and start a new Flow: In Setup, navigate to Process Automation > Flows, then click New Flow. In the New Flow dialog, select “Schedule-Triggered Flow” (it might also be labeled Scheduled Flow depending on your org). This is the flow type that allows scheduling. *✨
-
Choose Start Date, Time, and Frequency: After selecting Schedule-Triggered Flow, Salesforce will prompt you to set the schedule. Pick the Start Date and Start Time for when the flow should first run. Then set the Frequency to either daily, weekly, or once. For example, you might choose tomorrow’s date at 2:00 AM, repeating Daily, to run a nightly job. By default, Salesforce only offers Once, Daily, or Weekly recurrences. (If you need a monthly or annual schedule, don’t worry – we’ll mention a workaround later.) *✨
-
Specify the Object and Filter Conditions (Optional): Next, you can tell Salesforce which records to process when the flow runs. You’ll see options to Select Object and set Filter Conditions. This step is like building a report: you choose an object (e.g., Contact, Account, Opportunity, etc.) and define criteria so that the flow will run once per record that meets those conditions. For example, if you want to process all Contacts with a missing email, you’d select Object: Contact and set a filter like “Email equals Null”. Salesforce will then create an individual flow interview for each record matching the filter at runtime. (If your automation doesn’t relate to a specific set of records, you can skip specifying an object – the flow will then just run its actions once at the scheduled time.) Pro Tip: Keep your filter specific to avoid hitting limits – Salesforce allows up to 250,000 records (flow interviews) per 24 hours for scheduled flows, so make sure you’re not trying to process more records than that. *✨
-
Build the Flow Logic: Now design what you want the flow to do for each record (or just once if you didn’t specify an object). This works like a normal Autolaunched Flow. Common elements you might use include:
- Get Records: to retrieve related data needed for your actions. For example, if your flow is on Contact, you might Get Records for that contact’s Account.
- Decisions: to branch logic depending on conditions. Maybe only perform an action if certain criteria are met.
- Assignment: to set or calculate values in variables.
- Loop: to iterate over a collection of records if needed (for instance, if you used a Get Records to gather a bunch of related records and need to handle each one – see our Looping in Salesforce Flow guide for tips on using loops efficiently).
- Actions: like Update Records, Create Records, or Send Email to do the actual work. For example, update each record’s fields, or send an email notification. You can also use Subflows (to call another flow) or invocable actions as needed.
Design your flow as you normally would for an autolaunched flow. Each scheduled run will execute this logic. For example, you might build a flow that, for each Contact (from step 3) with missing email, fetches an alternate email from a related record and sends a notification to the owner. Use the canvas to add your elements and connect them in the right order. *✨
-
Test (if possible) and Activate the Flow: Before activation, it’s a good idea to test your flow. You'll press Debug and then select a record you want to run your scheduled flow against. You can choose to Skip start condition requirements and run flow in rollback mode if you only want to test the logic, or you can leave them both checked to have the flow really change the record if it meets your flow criteria. Once you’re confident, Save the flow and click Activate. Activation will schedule it according to the start time you set. You can verify it’s scheduled by going to Setup > Scheduled Jobs – your flow should be listed there.
That’s it! You’ve now set up a scheduled flow. It will run at the next scheduled time and start performing the actions you configured. No cron jobs, no Apex classes – just pure Salesforce automation with clicks. 🎉
Before we move on to real examples, here are a couple of best practices to remember:
- Off-Peak Hours: Schedule heavy-duty flows for non-business hours (like late night or early morning) to avoid conflicts with users. This ensures your automation doesn’t slow down record updates while users are actively working.
- Avoid Hitting Limits: As mentioned, if you’re processing a lot of records, use filters to keep the batches reasonable. Salesforce will send an error email if you ever hit the 250k records/day limit. If you need to handle more, consider splitting into multiple flows with different criteria or times, or opt for an Apex solution.
- No Monthly Option: Currently, Salesforce doesn’t offer a monthly or yearly recurrence in the UI for scheduled flows. If you need something like an annual job, you can implement a clever workaround by scheduling the flow daily and using a formula condition. (Essentially, the flow runs daily but only does stuff on one day of the year when the formula is true). Check out How to Schedule a Salesforce Flow Annually for a step-by-step solution to that.
- Follow General Flow Best Practices: Just because it’s on a schedule doesn’t mean normal flow best practices don’t apply. Make sure to bulkify your updates (e.g., avoid SOQL or DML inside tight loops, use collections where possible) and test thoroughly. If you’re new to flow optimization, see our guide on Salesforce Flow Best Practices to build efficient, error-free automations.
Now, let’s look at a couple of concrete examples of scheduled flows in action, so you can visualize how to use this in real life.
Example 1: Nightly Data Sync (Scheduled Flow for Daily Updates)
Let’s say you want to perform a nightly data sync to keep your Salesforce data tidy and up-to-date. For instance, imagine you need to ensure that every Contact’s phone number is in sync with its Account’s phone number. Maybe during the day, Account phone numbers change, and you want all related Contacts to get the updated number as well. You decide to run a fix every night to copy Account phone values to Contacts that are missing a phone. Here’s how you could do that with a scheduled flow:
-
Use Case: Sync contact data nightly. Every night at 2:00 AM, find all Contact records that have a blank Phone field, and update them with the Phone number from their related Account (if available). This ensures no contact is missing a phone number if the account has one on file.
-
Flow Setup: Create a scheduled flow on the Contact object:
- Schedule: Daily at 2:00 AM (off-hours).
- Object & Criteria: Object = Contact. Filter:
Phone EQUALS null.
This filter will target contacts lacking a phone. - Flow Logic: For each Contact record the flow runs on, use a Get Records element to retrieve that contact’s Account (you can use the
$Record.AccountId
to fetch the Account). Then use a Decision: if the Account’s Phone is not blank, proceed. Next, use an Update Records element to set the Contact’s Phone to the Account Phone. Because the scheduled flow treats each record separately in this configuration, you don’t even need a loop here – Salesforce will handle each Contact as a separate interview. Make sure to mark the update to run only on that Contact record (you can use the IDs stored in the $Record global or the Get Records result). - Activate: Once tested, activate the flow. Now each night Salesforce will find all contacts without a phone and populate them.
-
Outcome: At 2:00 AM every day, Salesforce will automatically fill in missing contact phone numbers from the account. By morning, your sales reps find their contacts updated. No more manual data patching or worrying about out-of-sync records!
Why it’s great: This scheduled flow example shows how you can perform data maintenance on a schedule. We did a simple field sync, but you could extend this idea to all sorts of nightly jobs – recalculating fields, closing stale records, or syncing other related info across objects. All done with configuration, not code.
Example 2: Weekly Email Automation (Scheduled Flow for Weekly Reminders)
Now let’s tackle a weekly email automation scenario. Imagine you want to send a reminder email every week to account owners for any accounts that have an expired contract and haven’t been addressed yet. This is a common business need: regularly nudge owners about renewing contracts or following up on lapsed customers. With a schedule-triggered flow, you can have Salesforce do this every week like clockwork.
-
Use Case: Weekly contract renewal reminders. Every Monday at 9:00 AM, find all Account records where the contract end date is in the past (expired) and a renewal has not been logged yet. For each such account, send an automated email to the Account Owner (or maybe create a task or chatter post – but we’ll do email here) reminding them to reach out for renewal.
-
Flow Setup: Create a scheduled flow on the Account object:
- Schedule: Weekly on Monday at 9:00 AM. (When configuring the schedule, after choosing Weekly, make sure to select Monday at 9:00 AM as the start date/time for the first run.)
- Object & Criteria: Object = Account. Filter: for example,
Contract_End_Date__c LESS THAN TODAY AND Renewal_Status__c EQUALS 'Not Renewed'
. (Adjust field API names as needed.) This criteria ensures we target accounts with expired contracts that haven’t been renewed. - Flow Logic: For each Account record that meets the criteria, we’ll send an email:
- Option 1 (simple): Use the Send Email core action in Flow. You can create a Text Template for the email body (e.g., “Hi, the contract for Account {!Account.Name} expired on {!Account.Contract_End_Date__c}. Please reach out to discuss renewal.”) and use the owner’s email as the recipient. This requires the flow to run with an email action – ensure you have an Email Alert or template ready if using the dedicated Send Email action.
- Option 2: Use an Email Alert (if you prefer using a predefined email template and alert). In Flow, add an Action element to send an Email Alert (you must have an Email Alert that’s set up for the Account object). Map the Account as the record and it will send to whoever is defined in that alert (likely the owner or a specific field).
- You might also log an activity or update a field (like mark that a reminder was sent). This is optional but helps prevent duplicate emails. For simplicity, we’ll assume one email per week is fine even if it repeats until the account is renewed.
- Activate: After testing with a sample account (perhaps temporarily change the schedule to run once immediately for a test record), activate the flow.
-
Outcome: Every Monday morning, Salesforce will automatically send out renewal reminder emails to the owners of all accounts with expired contracts. The account team gets an inbox full of helpful nudges to take action, without anyone having to manually pull a report or send emails. This weekly automated flow ensures no lapsed contract falls through the cracks.
This weekly email example illustrates how scheduled flows can handle scheduled communications and notifications. You could adapt this pattern for things like weekly customer follow-ups, summary reports, or any regular email that should go out based on criteria. And since it’s all automated, it happens whether or not you remembered to do it – Salesforce becomes your personal assistant for these tasks!
Wrapping Up & Next Steps
By now, you’ve seen how Salesforce Scheduled Flows empower you to automate routine tasks on your own timetable. No more waiting for a record change event just to kick off your automation, and no need to beg a developer for a batch Apex job. With a few clicks, you scheduled a flow to handle your nightly cleanups and weekly reminders – and Salesforce does the heavy lifting every time, right on schedule.
Think about what this means for you: those tedious, repetitive tasks that used to eat up your time can be delegated to Salesforce, reliably and accurately. You free yourself (and your team) to focus on more important work, while the system quietly keeps everything in order behind the scenes. Pretty powerful stuff, isn’t it?
If you found this guide helpful, this is just the tip of the iceberg. Salesforce Flows can do so much more, and mastering them can level-up your Salesforce game in a big way. The best part is, you don’t have to figure it all out alone or resort to trial-and-error.
Ready to become a true Salesforce Flow ninja? Now’s the time to take the next step. I invite you to join me in an in-depth, hands-on journey that will turn you from flow novice to automation pro. Check out 2025 Salesforce Flows: The Complete Guide – our comprehensive Salesforce Flow course. It’s designed to make you an expert in building flows (including scheduled flows and every other type) through real-world projects and step-by-step lessons.
Imagine having the confidence to automate any business process that comes your way – to whip up a flow for every scenario, just like that. This course will get you there. We cover the why and how of every Flow feature, best practices, and insider tips you won’t find in documentation. It’s like having a Salesforce mentor by your side, showing you exactly what to do, what to avoid, and how to think like a Flow expert.
Don’t miss out on the automation revolution happening in the Salesforce world. Every day you spend doing things manually or sticking to outdated tools is wasted potential. Instead, picture yourself leading the charge – solving complex requirements with elegant flow solutions, impressing your boss and clients, and saving hours of work. That’s what mastering Salesforce Flow can do for you.
Call to Action: Head over to nickfrates.com/2025-salesforce-flows now and enroll in the Salesforce Flow course. Invest in your skills today, and unlock the full power of Salesforce automation. Remember, the difference between those who wish for efficiency and those who achieve it often comes down to taking action. This is your moment to take that action – join the course, and let’s build something amazing together.
Your future self (the one who isn’t up at midnight doing tedious Salesforce updates 😉) will thank you. Here’s to working smarter, automating boldly, and becoming the Salesforce Flow hero you were meant to be!
Salesforce Saturdays
Join the Salesforce Saturday newsletter. Every Saturday, you'll get 1 actionable tip on Salesforce technology or career growth related to the Salesforce Industry.
We hate SPAM. We will never sell your information, for any reason.