Schedule
A Schedule in Salesforce refers to the time-based execution model that triggers a piece of automation, a forecast roll-up, a report, or a revenue allocation on a recurring calendar (daily, weekly, monthly, quarterly) or at a one-off future timestamp.
Definition
A Schedule in Salesforce refers to the time-based execution model that triggers a piece of automation, a forecast roll-up, a report, or a revenue allocation on a recurring calendar (daily, weekly, monthly, quarterly) or at a one-off future timestamp. The term covers several distinct features that all share the calendar-driven shape: Scheduled Apex (System.schedule), Scheduled Flows, Reporting Snapshot schedules, Dashboard schedule refresh, Revenue Schedules on opportunity products, and the older Workflow Time-Based Actions.
Schedule is therefore a category, not a single feature. When a Salesforce admin or developer talks about "the schedule," the surrounding context tells you which Schedule they mean. A developer setting up overnight data cleanup talks about Scheduled Apex. A sales-ops person tracking installment billing talks about Revenue Schedules. A reporting analyst configuring a snapshot talks about the Schedule on the Reporting Snapshot. All three use the same calendar primitives but configure different platform behaviors.
The six places "Schedule" appears in Salesforce and what each one means
Scheduled Apex
Scheduled Apex is a class that implements the Schedulable interface and runs at a configured cron expression. System.schedule('Nightly Cleanup', '0 0 2 * * ?', new MyClass()) wires up a 2 AM nightly run. The class can launch a Batch job, perform DML, call external APIs (with relaxed callout limits in async context), or queue Queueable jobs. Scheduled Apex is the workhorse for nightly data hygiene, end-of-month rollup recalculations, and periodic integrations. The platform supports up to 100 scheduled jobs per org concurrently.
Scheduled Flow
Flow Builder added Scheduled Flows for declarative time-based automation. A scheduled flow runs at a configured frequency (Once, Daily, Weekly) starting on a specified date, processes a defined record set, and executes the flow logic on each record. Scheduled flows replace many of the legacy workflow time-based actions and Apex Schedulable patterns with a no-code-friendly equivalent. Most new declarative time-based work should be in Scheduled Flow; Scheduled Apex is reserved for what flow cannot express.
Reporting Snapshot Schedule
A Reporting Snapshot runs on a configured schedule (Daily, Weekly, Monthly) and writes the result of its Source Report to a target custom object as point-in-time historical data. The schedule is the heartbeat of the snapshot: too frequent and the target object fills with redundant rows, too infrequent and trend analysis loses granularity. Monthly is the common default; daily for high-velocity metrics that need fine-grained trends.
Dashboard Refresh Schedule
Lightning Dashboards support scheduled refreshes (Daily, Weekly, or Specific Days) where the platform re-runs every source report at the scheduled time and updates the dashboard data. Users opening the dashboard see the latest refresh without manually clicking the Refresh button. This is essential for executive dashboards where leadership expects current numbers without having to wait through a multi-minute manual refresh. The user setting the schedule must have permission to refresh that dashboard.
Revenue Schedules
Revenue Schedule is a Sales Cloud feature on opportunity line items that splits the revenue across time periods (monthly, quarterly). A $12,000 annual subscription deal can have a Revenue Schedule of $1,000 per month for 12 months, instead of $12,000 booked at close. Sales ops uses this to model subscription revenue accurately in forecasts and dashboards. Revenue Schedules are configured per Product (Enable Quantity Schedule, Enable Revenue Schedule) and per Opportunity Line Item.
Cron expression mechanics
Scheduled Apex uses cron expressions for fine-grained timing. The format is seconds, minutes, hours, day of month, month, day of week, year. Common patterns: 0 0 2 * * ? (2 AM every day), 0 0 9 ? * MON-FRI (9 AM weekdays), 0 30 23 L * ? (11:30 PM on the last day of every month). Salesforce cron does not support seconds granularity below 60-second intervals; Scheduled Flow simplifies this to a UI picker with no cron syntax required.
Limits and concurrency
Salesforce caps concurrent scheduled jobs at 100 per org. Each scheduled job consumes one Apex Async governor slot when it runs. Long-running schedulable code that exceeds the synchronous CPU limit should immediately enqueue a Batch or Queueable inside its execute method so the heavy lifting runs in the more permissive async context. Customers managing dozens of scheduled jobs typically build a single master scheduler that dispatches to other jobs, reducing the org-wide schedule count.
Set up a Scheduled Apex job for nightly maintenance
Build an Apex class implementing Schedulable, schedule it with a cron expression, and verify it runs on the expected cadence.
- Write the Schedulable class
Create an Apex class implementing the Schedulable interface. The execute method takes a SchedulableContext and runs your logic (typically calls Database.executeBatch on a Batch Apex class).
- Write a unit test
Test the schedulable class by calling System.schedule inside Test.startTest and Test.stopTest. The test confirms the schedule registers without an exception.
- Deploy the class
Deploy through Salesforce DX, change set, or Developer Console. Confirm Apex Test coverage stays above the 75 percent platform minimum.
- Schedule the job
Open Setup, Apex Classes, click Schedule Apex. Choose the class, set the frequency (Weekly, Monthly, specific cron), and the start time. Save.
- Monitor the first run
Open Setup, Scheduled Jobs. The scheduled job appears with the next run timestamp. After the first run, open Apex Jobs to confirm completion.
- Set up failure alerts
For production jobs, add try/catch logging to the execute method that writes failures to a custom Apex Log object or sends an email to ops. Silent failures are the most common scheduled job incident.
Code-based scheduled execution using the Schedulable interface and a cron expression.
Declarative scheduled automation built in Flow Builder; preferred for no-code patterns.
Scheduled job that writes a source report to a target object for historical trend analysis.
Opportunity line item feature that splits revenue across time periods for subscription modeling.
Time-pattern syntax for fine-grained scheduling in Scheduled Apex.
- Salesforce caps scheduled Apex jobs at 100 per org. A team that schedules many small jobs hits the cap; consolidate through a master scheduler that dispatches.
- Cron expressions in Salesforce use seven fields (seconds-minutes-hours-day-month-dayofweek-year). Linux cron uses five; do not paste a Linux cron directly.
- Scheduled jobs in a paused org still queue but do not execute until the org resumes. After a sandbox refresh, scheduled jobs may need to be re-registered.
- Revenue Schedule cannot coexist with Quantity Schedule on the same product. Enable one or the other based on how you model subscription revenue.
Trust & references
Cross-checked against the following references.
- Apex SchedulerSalesforce Developer Docs
- Scheduled FlowSalesforce Help
- Revenue SchedulesSalesforce Help
Straight from the source - Salesforce's reference material on Schedule.
- Apex Scheduler DocumentationSalesforce Developer Docs
- Scheduled Flow DocumentationSalesforce Help
- Reporting SnapshotsSalesforce Help
Hands-on resources to go deeper on Schedule.
About the Author
Dipojjal Chakrabarti is a B2C Solution Architect with 29 Salesforce certifications and over 13 years in the Salesforce ecosystem. He runs salesforcedictionary.com to help admins, developers, architects, and cert/interview candidates sharpen their fundamentals. More about Dipojjal.
Test your knowledge
Q1. What is scheduling in Salesforce?
Q2. What intervals are supported?
Q3. What should you document?
Discussion
Loading discussion…