Advanced Scheduling
Updated: May 21, 2026
This doc provides examples for the
schedule_type of CUSTOM in more detail.As referenced from the main documentation:
If the
schedule_type is CUSTOM, you must also specify the list of custom schedules, or times when the rule will run. In the schedule list, each individual specification can combine the following fields, with the only requirement that at least one of start_minute or days must exist in each entry.| Field | Description |
|---|---|
start_minute | Time in minutes after 12:00AM. Must be a multiple of 30 minutes.
If this is set and there is no end_minute, this will determine
the exact time to run the rule. Else, it would determine with
end_minute the range of time to run the rule. If this is not set,
the rule runs SEMI_HOURLY for each day in days. |
end_minute | Time in minutes after 12:00AM. Must be a multiple of 30 minutes
and after start_minute. If set, this will determine with
start_minute the range of time to run the rule. If the end_minute is
the same as the start_minute, it would also determine the exact time to
run the rule. |
days | List of days to run the rule. Each day must be a value from 0-6.
0 is Sunday, 1 is Monday, ..., 6 is Saturday. If this is not set,
the rule will be run on all 7 days based on the start_minute and,
if exists, the end_minute. |
Here’s an example of using Advanced Scheduling to schedule the rule to run every day at 10 AM. By omitting the
days, we automatically infer that this schedule specification will apply to every day.curl \
-F 'name=Test Advanced Scheduling Rule' \
-F 'schedule_spec={
"schedule_type": "CUSTOM",
"schedule": [
{
"start_minute": 600,
}
]
}' \
-F 'evaluation_spec={
...
}' \
-F 'execution_spec={
...
}' \
-F "access_token=<ACCESS_TOKEN>" \
https://graph.facebook.com/<VERSION>/<AD_ACCOUNT_ID>/adrules_library
Example
Here’s an example of a rule that runs every 30 minutes only on weekends. By omitting
start_minute, we infer the rule to run as SEMI_HOURLY for the specified days.curl \
-F 'name=Test Advanced Scheduling Rule' \
-F 'schedule_spec={
"schedule_type": "CUSTOM",
"schedule": [
{
"days": [0, 6]
}
]
}' \
-F 'evaluation_spec={
...
}' \
-F 'execution_spec={
...
}' \
-F "access_token=<ACCESS_TOKEN>" \
https://graph.facebook.com/<VERSION>/<AD_ACCOUNT_ID>/adrules_library
Here’s an example of a rule that only runs on Wednesdays at 2 AM. By omitting
end_minute, we infer that the rule only runs at one specific time instead of a range of times.curl \
-F 'name=Test Advanced Scheduling Rule' \
-F 'schedule_spec={
"schedule_type": "CUSTOM",
"schedule": [
{
"start_minute": 120,
"days": [3]
}
]
}' \
-F 'evaluation_spec={
...
}' \
-F 'execution_spec={
...
}' \
-F "access_token=<ACCESS_TOKEN>" \
https://graph.facebook.com/<VERSION>/<AD_ACCOUNT_ID>/adrules_library
Each individual schedule is calculated independently as an OR with the other schedules. Here’s an example of a rule that runs all day on the weekdays, but only from 12-1PM on the weekends. By having an
end_minute here, we now look at the range of time from the start_minute to end_minute.curl \
-F 'name=Test Advanced Scheduling Rule' \
-F 'schedule_spec={
"schedule_type": "CUSTOM",
"schedule": [
{
"days": [1, 2, 3, 4, 5]
},
{
"start_minute": 720,
"end_minute": 780,
"days": [0, 6]
}
]
}' \
-F 'evaluation_spec={
...
}' \
-F 'execution_spec={
...
}' \
-F "access_token=<ACCESS_TOKEN>" \
https://graph.facebook.com/<VERSION>/<AD_ACCOUNT_ID>/adrules_library
Note that not specifying
days in the second schedule specification will also work equivalently, since the first specification includes 12-1PM on weekdays.