# Macro Scheduler for BlueStacks and Other Emulators

> Use the MAS scheduler to run a macro on a BlueStacks or other emulator port, once or daily, weekly or monthly, and fix schedules that did not run.

Source: https://automationmacro.com/docs/scheduler (Studio, updated 2026-09-04)

The **Scheduler** page in Macro Automation Studio (MAS) runs a macro on a local emulator such as BlueStacks at a set time, once or on a daily, weekly or monthly rhythm. This page explains how the runner decides when to start, how to create and manage schedules, where the logs go, and what to check when a schedule did not run.

## Before you start

- MAS is installed and you are signed in. MAS must stay open at the scheduled time.
- The macro is listed under **Macros**: your own project or a downloaded Marketplace bot.
- The emulator is running with ADB switched on, and you know its port. A schedule targets a port, not a device name. See [Devices](/docs/devices).
- The emulator is in a device group with its arguments or settings profile set. See [Device groups](/docs/device-groups) and [Settings profiles](/docs/settings-profiles).

## How the macro scheduler works with BlueStacks and other emulators

- A schedule, called a scheduled job in the app, names a macro, an emulator port, a date and time, a repeat count and a recurrence.
- The runner lives inside the app. It starts when you sign in and checks your schedules every 30 seconds.
- A schedule starts when its next run time has passed, its port is free, and fewer than 20 scheduled jobs are running. A busy port is checked again 30 seconds later, so the run starts late rather than not at all.
- Each start runs the macro **Repeat Count** times, one after another. A failed run stops the sequence.
- After a completed run, a recurring schedule gets its next run time: daily adds a day, weekly moves to the next ticked weekday, monthly moves to the same day next month (the 31st becomes the last day of a shorter month).
- A failed run marks the schedule **Failed**, and a failed schedule does not recur. Fix the cause and create a new schedule.
- Times are local time on this computer. There is no cron syntax and no time zone field.
- Everything runs on this computer. There is no server-side scheduling, so a cloud device cannot be a schedule target and nothing runs while MAS is closed.

> [!NOTE]
> For a macro that must run while your computer is off, use a cloud device and start the run from your own scheduler through the [REST API](/docs/rest-api). The [cloud devices page](/cloud-devices) explains what one includes.

## Schedule a macro on an Android emulator

1. Open **Scheduler** and click **Create New Schedule**.
2. Enter a **Name** of at least 3 characters.
3. Pick the **Macro**.
4. Set the **Emulator Port**: click **Scan** and choose a port under **Available**, or type it.
5. Choose the **Date** and **Time**.
6. Set **Repeat Count** to 1 or more.
7. Choose a **Recurrence**: **None**, **Daily**, **Weekly** or **Monthly**. For **Weekly**, tick the **Days of Week**.
8. Click **Create Schedule**.

MAS refuses a schedule that overlaps another schedule on the same port and reports "Time slot is occupied on this port". The check assumes a run lasts 30 minutes and looks 60 days ahead for recurring schedules.

| Recurrence | Runs |
|---|---|
| **None** | Once, at the date and time you set |
| **Daily** | Every day at that time |
| **Weekly** | At that time on each ticked weekday |
| **Monthly** | On the same day of each month |

## Arguments and settings profiles

A schedule has no argument form of its own. When a run starts, MAS finds the device that owns the port and uses that device's arguments: its settings profile when it follows one, otherwise the values saved on its card in **Device Groups**. Change the profile or the card and the next scheduled run picks up the change.

If no device owns the port, the run still starts, but with no arguments, no proxy and no device name in **Runs**, and webhooks scoped to a device or group do not fire. Add the emulator to a device group before you schedule it.

Marketplace bots are fetched when the run starts, so an updated listing runs at its current version.

## Views and today's panel

The page offers a **Grid view**, a **Table view** and a **Timeline view**. The timeline shows one row per port; drag a block to reschedule it, and MAS refuses a drop onto an occupied slot. **Today's Schedule** on the side lists **Running Now**, **Up Next** and **Completed** with a menu for each entry.

## Edit, pause, skip and cancel

- **Edit** opens the same form. Turn **Active** off to pause the schedule and on to resume it; the runner skips inactive schedules. Save with **Save Changes**.
- **Skip Next Run** in the today panel, or **Cancel** on a recurring schedule, moves it to the next occurrence. **Cancel** on a one-time schedule cancels it.
- **Delete** removes the schedule.
- **View History** opens **Execution History** with one row per run: run number, start, end, duration, port and status. **View Logs** shows the run's output.

## Where the logs go

Each run's output is saved to a file on this computer, one file per history entry:

| System | Folder |
|---|---|
| Windows | `%AppData%\MacroAutomationStudio\scheduler_logs` |
| Mac | `~/Library/Application Support/MacroAutomationStudio/scheduler_logs` |

MAS deletes log files older than 30 days. The history itself (status, times and the error message) stays on your account. Scheduled runs also appear on the **Runs** page like any other run.

## Troubleshooting

### Schedule did not run

Check these in order:

1. MAS was closed, signed out or the computer was asleep at the scheduled time. When you open MAS again, a pending schedule whose time passed since the start of the previous day runs right away; older missed runs are skipped.
2. The schedule is inactive. Open **Edit** and check **Active**.
3. The schedule is **Failed**. Open **View History**, read the error message, fix the cause and create a new schedule.
4. The port was busy. Another run, or another schedule on the same port, was still going. The run starts at the next check once the port is free.
5. The emulator was not running or listens on another port. The history entry shows the error; see [ADB troubleshooting](/docs/adb-troubleshooting).

### Runs overlap

An emulator runs one macro at a time. Two schedules on the same port never run at once: the second waits for the port and starts late. Schedules on different ports run in parallel, up to 20 at a time. **Repeat Count** runs are sequential, so a repeat of 3 takes three times as long. Use the **Timeline view** to see how runs line up, and leave room after a run that varies in length.

### Scheduler stops when the app closes

The runner is part of the app, so closing MAS, signing out or letting the computer sleep stops every schedule. Keep MAS open and signed in, and switch off sleep in your power settings. After a crash, MAS marks any run that was left running as failed with "System recovered from crash or unexpected shutdown" on the next start; create the schedule again.
