Schedules
A schedule is a stored action that runs at a specific time or on a recurring basis. Common uses: pause Apple Search Ads at midnight when your audience is asleep, resume at 7am, rotate creatives on Monday morning.
List schedules
$ adduck schedule list ID LABEL ACTION PLATFORM AT ENABLED ────────────────────────────────────────────────────── sc-1 nightly-pause pause apple 00:00 yes sc-2 morning-resume resume apple 07:00 yes sc-3 weekend-budget budget reddit Fri yes sc-4 monday-rotate rotate meta Mon no
Add a schedule
| Flag | Description |
|---|---|
| --label <name> | Human-readable name for the schedule. |
| --platform <name> | Which platform to act on. |
| --action <type> | One of: pause, resume, budget, rotate. |
| --campaigns <ids> | Comma-separated campaign IDs. Omit to target all campaigns on the platform. |
| --at <time> | Time to run. See format section below. |
| --budget-amount <n> | Required for --action budget. Amount in dollars. |
| --disabled | Add the schedule in disabled state. Enable later with schedule enable <id>. |
Examples
Time formats
The --at flag accepts several formats:
| Format | Example | Meaning |
|---|---|---|
| HH:MM | 00:00 | Daily at midnight (local time) |
| Day HH:MM | Mon 09:00 | Every Monday at 9am |
| Days HH:MM | Mon,Wed,Fri 08:00 | Multiple days, same time |
| Weekday HH:MM | Weekday 07:00 | Monday through Friday |
| Weekend HH:MM | Weekend 10:00 | Saturday and Sunday |
| YYYY-MM-DD HH:MM | 2026-12-25 00:00 | One-time run on a specific date |
All times are in your local system timezone unless you set ADDUCK_TIMEZONE in your environment.
Running schedules
Schedules don't run themselves. You need something to call adduck schedule run on an interval:
adduck schedule run checks all enabled schedules and executes any whose time has come. It's idempotent -- running it twice in the same minute won't trigger an action twice.
Actions
pause
Pauses the targeted campaigns. Obeys guardrails and protected campaign list. If a campaign is already paused, it's skipped.
resume
Resumes paused campaigns. If a campaign is already active, it's skipped.
budget
Sets the daily budget on targeted campaigns to --budget-amount. Subject to maxBudgetChangePct and maxDailyBudgetMicros guardrails. Fails and logs if the guardrail would be violated.
rotate
Cycles through campaigns in a round-robin pattern. On each run, the previously active campaign is paused and the next one in the list is resumed. Used for rotating creative sets or A/B variants on a schedule.
Rotation state (which campaign is currently active) is stored in the schedule entry in adduck.json. You can manually advance it with adduck schedule rotate <id>.
Remove a schedule
Removes the schedule from adduck.json. The schedule ID is shown in adduck schedule list.
Enable / disable
adduck schedule disable <id>
Disabled schedules show in adduck schedule list but are skipped when adduck schedule run executes.
Schedule logs
Every schedule execution is logged with a timestamp and result. View recent runs: