> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.kodelabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Mass write

> Write multiple points and update multiple schedules simultaneously across buildings or an entire portfolio.

<Info>
  Mass write is available at the portfolio level and at the building level. Portfolio workflows use the **Mass Write** module. Building-level workflows use **Mass Write Points** in the Points module or **Mass Write Schedules** in the Schedules module.
</Info>

Mass write allows you to modify multiple points or schedules in a single operation across one or more buildings. Instead of editing each point or schedule individually, you select targets in bulk, configure the changes, and execute them as a tracked job.

At the portfolio level, the **Mass Write** module uses a left-side menu to switch between **Points** and **Schedules**.

<Frame caption="The Mass Write Points page showing previous jobs with their status, building count, and reason">
  <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/mass-write-points-list.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=5a75e06f36903218412d1d9a53eae505" alt="Mass Write Points main page with Schedules and Points tabs and a job list table" width="1024" height="602" data-path="images/kode-os/mass-write/mass-write-points-list.png" />
</Frame>

## Enable mass write access

Mass write permissions must be activated on the user's KODE OS role before the module appears.

<Steps>
  <Step title="Open role settings">
    Navigate to `Launchpad` > `Apps` > `Cloud BMS` > `Roles` and select the role you want to update.
  </Step>

  <Step title="Enable permissions">
    Edit the role and enable the following permissions:

    | Permission                    | Purpose                                             |
    | ----------------------------- | --------------------------------------------------- |
    | `Get points latest configs`   | Enables the Mass Write module in the portfolio view |
    | `Initiate points mass write`  | Allows the user to execute a mass points write      |
    | `Schedule Mass Write (Read)`  | Enables viewing mass write schedules                |
    | `Schedule Mass Write (Write)` | Allows the user to execute a mass schedule write    |
  </Step>

  <Step title="Save the role">
    Click `Save`. Users with this role see the `Mass Write` module in the portfolio view.
  </Step>
</Steps>

<Warning>
  Only Launchpad administrators can update role permissions. If you do not have admin access, submit a support ticket to request the change.
</Warning>

## Mass write points

Use mass write points to send values to multiple writable points across buildings simultaneously.

<Info>
  ### Command actions and priority levels

  Cloud BMS uses a BACnet-inspired priority model for writable points. The same command dialog appears for BACnet and non-BACnet integrations, such as REST API thermostats. How each action maps on the device depends on the connector.

  BACnet points that accept commands have **16 priority levels** (1 is highest, 16 is lowest). When every level is empty (`null`), the point uses a **fallback / default** value (`Relinquish_Default` in BACnet). That fallback is **not** a 17th BACnet priority. Some interfaces label it as level 17 for display only.

  `Override` and `Set` turn different knobs under the hood, even when the visible value looks the same.

  | Action     | What it writes\*     | Description                                                                                 |
  | ---------- | -------------------- | ------------------------------------------------------------------------------------------- |
  | `Override` | Priority 8\*         | Temporary exception in the priority array. Takes precedence over lower-priority automation. |
  | `Set`      | Fallback / default\* | Changes the fallback or default value.                                                      |
  | `Auto`     | —                    | Clears an `Override`                                                                        |
  | `Release`  | —                    | Clears a `Set`                                                                              |

  \*Typical for most BACnet and Niagara deployments. Connectors and site standards can differ.

  `Override`, `Auto`, and `Set` borrow Niagara-style action names. `Release` is a Cloud BMS action that clears a `Set`.

  In Niagara-style control, `Set` keeps a non-null fallback so sequences and logic keep a reliable baseline. Use the priority array (including `Override`) for programmed automation and temporary exceptions.

  To make `Set` write to priority 16 instead of the fallback or default, enable **`Set in Slot16`** (Niagara) on the point. Configure that option from [device details](/products/kode-os/devices/devices#view-and-edit-points), [device templates](/products/kode-os/devices/device-templates), or [points batch update](/products/kode-os/points/points-batch-update).
</Info>

Common scenarios include:

* Adjusting temperature setpoints seasonally across the portfolio
* Releasing overrides so devices follow their schedules overnight
* Responding to peak demand by reducing setpoints by a set increment
* Disabling specific devices or systems during scheduled maintenance

### Access mass write points

<Tabs>
  <Tab title="Portfolio level">
    1. From the portfolio view, open **`Mass Write`**.
    2. Click **`Points`** in the left-side menu.
    3. Click **`Write Points`** to start a new job or open an existing job from the list.
  </Tab>

  <Tab title="Building level">
    1. Select a building from the [sites list](/products/kode-os/sites-and-map).
    2. Open **`Points`** in the left navigation.
    3. Click **`Mass Write Points`** in the left sub-menu.

    See [Mass write points](/products/kode-os/points/points#mass-write-points) in the Points article for the building-level workflow and screenshots.
  </Tab>
</Tabs>

### Selection and search

Only writable points appear in the mass write list. Points are not selected by default — select targets explicitly with row checkboxes.

Use **`Select all`** to include every point across all pages. After **`Select all`**, deselect individual exceptions as needed.

Use **Filters** to narrow the list by point type, canonical type, area, ontology field, data source type, and other attributes. To find non-templated points, set **Ontology Field** to **Not Assigned**.

Search supports three match modes — **Starts with**, **Contains**, and **Exact** — across these fields:

| Field              | Description                    |
| ------------------ | ------------------------------ |
| **Point Name**     | Display or raw point name      |
| **Path**           | Point path in the data source  |
| **Ontology Field** | Normalized ontology field name |
| **Device Name**    | Device that owns the point     |

Toggle between **List** and **Grouped** view in the upper right.

#### Grouped selection

Grouped view simplifies selection for large point sets, especially non-templated points.

In grouped mode:

* Points are grouped by name and kind.
* Each group shows the group name, point count, and device count.
* Expand a group to review the underlying point list with the same columns as the standard table.
* Select entire groups. You cannot include or exclude individual points inside a group.

Filters still apply to the full list before grouping. Grouping does not replace filters.

<Warning>
  When writing very large point sets, confirm that target data sources can handle the write volume. This matters when many buildings share a single data source.
</Warning>

### Write points

<Steps>
  <Step title="Open mass write points">
    From the portfolio view, navigate to **`Mass Write`**, click **`Points`** in the left-side menu, then click **`Write Points`**.
  </Step>

  <Step title="Filter buildings">
    Use the **Filters** panel on the left to select one or more buildings. You can filter by country, state, city, or building name. Click **`Apply`** to load the available points.

    <Note>
      There is no limit to the number of sites you can select in a single job.
    </Note>
  </Step>

  <Step title="Filter and search points">
    Use **Filters** to narrow the point list. Set **Ontology Field** to **Not Assigned** when you need non-templated points. Use search with **Starts with**, **Contains**, or **Exact** match modes.
  </Step>

  <Step title="Select points">
    Choose targets in **List** or **Grouped** view. Use row checkboxes or group checkboxes, or **`Select all`** across pages. Deselect any exceptions.

    <Frame caption="The Select Points page with building filters on the left and the point list on the right">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/select-points.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=49d86d66d1a91252a4b6867346dcd223" alt="Select Points page showing filter panel, grouped points table with point and device counts, and List and Grouped view toggle" width="1024" height="640" data-path="images/kode-os/mass-write/select-points.png" />
    </Frame>

    Click **`Continue to Set Values`** when the selection is final.

    <Warning>
      You cannot remove points from the list in later steps. Verify your selection before continuing.
    </Warning>
  </Step>

  <Step title="Configure the job">
    Enter a **Name**, **Reason Type**, and **Reason Description**. These fields identify the job in the tracking history.

    Points are grouped automatically by ontology field, unit, and accepted values or facets. You set values per group, not per individual point. Click the blue count next to a group name to see which points belong to it.
  </Step>

  <Step title="Set values for each group">
    Expand a group and configure:

    | Field        | Description                                                                                         |
    | ------------ | --------------------------------------------------------------------------------------------------- |
    | **Priority** | Write priority: **Override**, **Auto**, **Set**, or **Release**                                     |
    | **Value**    | Value to write to every point in the group. Negative values are supported for numeric points.       |
    | **Duration** | How long the value persists before reverting. Check **Permanent** to keep the value until released. |

    Click **`Save`** for each group. Color highlights indicate missing information.

    <Frame caption="The Set Values page showing job details and point groups with priority, value, and duration settings">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/set-values.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=7560cc203b33fb57f2cd8309bf5ff0d8" alt="Set Values page with job name, reason type, and point groups configured with Override priority and values" width="1024" height="628" data-path="images/kode-os/mass-write/set-values.png" />
    </Frame>
  </Step>

  <Step title="Execute the job">
    After saving all groups, click `Execute`. A confirmation dialog warns that changes are not reversible. Review your point selection, then click `Proceed` to start the write operation.

    <Frame caption="The confirmation dialog requires you to verify your selection before executing">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/caution-dialog.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=66de851d95eda7cdaae7fced619b7016" alt="Caution dialog warning that changes are not reversible with Go Back and Proceed buttons" width="468" height="345" data-path="images/kode-os/mass-write/caution-dialog.png" />
    </Frame>

    Cloud BMS begins writing values to every selected point. You are redirected to the job details page.
  </Step>
</Steps>

### Track job progress

The job details page shows:

* Creator and creation time
* Total number of points processed
* Success and failure counts per group

<Frame caption="The job details page displays status, point groups, and an activity log of the write operation">
  <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/job-details.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=3e6d93412fc97a720faf63a6fe276bf8" alt="Mass Write Point job details page showing completed status, point groups with success counts, and activity log" width="1024" height="602" data-path="images/kode-os/mass-write/job-details.png" />
</Frame>

Click the blue counts to view individual points within each group and their write results. Completed jobs remain listed on the main **Mass Write** page for future reference.

Use the **`Export`** button to download job results as CSV. Enter a **File Name**, choose which **Columns** to include, then click **`Export`**.

The CSV export includes **Building ID**, **Building Name**, **Device ID**, **Device Name**, **Name**, **Field**, **Priority**, **Value**, **Duration**, **Status**, and **Failed Reason**.

<Frame caption="Export job results with a custom file name and column selection">
  <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/export-dialog.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=b9507bbd28e538a614cbbaf2532cfc31" alt="Export dialog with File Name and Columns fields" width="468" height="322" data-path="images/kode-os/mass-write/export-dialog.png" />
</Frame>

From job details, use the three-dot menu to:

| Action                           | Behavior                                                                             |
| -------------------------------- | ------------------------------------------------------------------------------------ |
| **Edit Details**                 | Update the job name or description                                                   |
| **Re-run Job**                   | Start a new run. Change the point selection and write configuration before executing |
| **Retry Job with failed points** | Re-execute immediately for failed points only                                        |

<Frame caption="The job actions menu provides options to edit, re-run, or retry failed points">
  <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/job-actions-menu.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=f5f120026210eea3f374bdb38256e184" alt="Job details three-dot menu showing Edit Details, Re-run Job, and Retry Job with failed points options" width="1024" height="240" data-path="images/kode-os/mass-write/job-actions-menu.png" />
</Frame>

## Mass write schedules

Use mass write schedules to update multiple schedules at once. Common scenarios include:

* Changing start or end times across schedules for seasonal daylight shifts
* Updating operational hours based on new tenant contracts
* Adding holiday special events to multiple schedules simultaneously
* Implementing building-wide or portfolio-wide schedule changes after emergencies

### Access mass write schedules

<Tabs>
  <Tab title="Portfolio level">
    1. From the portfolio view, open **`Mass Write`**.
    2. Click **`Schedules`** in the left-side menu.
    3. Click **`Write Schedules`** to start a new job or open an existing job from the list.
  </Tab>

  <Tab title="Building level">
    1. Select a building from the [sites list](/products/kode-os/sites-and-map).
    2. Open **`Schedules`** in the left navigation.
    3. Click the three-dot menu in the top right.
    4. Click **`Mass Write Schedules`**.

    See [Schedules](/products/kode-os/schedules) for building-level schedule management.
  </Tab>
</Tabs>

### Selection and search

Every weekly schedule (excluding calendar schedules) appears in the list based on your filters. Schedules are not selected by default — select targets explicitly with row checkboxes.

Use **`Select all`** to include every schedule across all pages. After **`Select all`**, deselect individual exceptions as needed.

Use **Filters** to narrow by **Kind**, **Current Status**, or **Data Source**. Use the search bar to find schedules by name.

Toggle between **List** and **Grouped** view in the upper right.

#### Grouped selection

Grouped view simplifies selection for large schedule sets.

In grouped mode:

* Schedules are grouped by name and kind.
* Each group shows the group name and schedule count.
* Expand a group to review the underlying schedule list with the same columns as the standard table.
* Select entire groups. You cannot include or exclude individual schedules inside a group.

Filters still apply to the full list before grouping. Grouping does not replace filters.

<Warning>
  When writing very large schedule sets, confirm that target data sources can handle the write volume. This matters when many buildings share a single data source.
</Warning>

### Write schedules

<Steps>
  <Step title="Open mass write schedules">
    From the portfolio view, navigate to **`Mass Write`**, click **`Schedules`** in the left-side menu, then click **`Write Schedules`**.
  </Step>

  <Step title="Filter buildings">
    Use the **Filters** panel to select one or more buildings by country, state, city, or building name. Click **`Apply`** to load the available schedules.
  </Step>

  <Step title="Filter and search schedules">
    Use **Filters** to narrow the schedule list. Use the search bar to find schedules by name.
  </Step>

  <Step title="Select schedules">
    Choose targets in **List** or **Grouped** view. Use row checkboxes or group checkboxes, or **`Select all`** across pages. Deselect any exceptions.

    <Frame caption="The Select Schedules page with building filters on the left and the schedule list on the right">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/select-schedules.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=e538d82619550ee870cb6f0a10b4118a" alt="Select Schedules page showing filter panel with building, address, and identifier filters, and a schedule list with name, building, data source, status, and kind columns" width="1024" height="604" data-path="images/kode-os/mass-write/select-schedules.png" />
    </Frame>

    The header updates to show the total count of selected schedules.

    <Frame caption="Selected schedules are highlighted and the header shows the selection count">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/select-schedules-selected.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=37dc0d2c4d124823d3d08e2799e444fa" alt="Select Schedules page with one schedule selected, showing the selection count in the header" width="1024" height="608" data-path="images/kode-os/mass-write/select-schedules-selected.png" />
    </Frame>

    Click **`Continue to Set Values`** when the selection is final.

    <Warning>
      You cannot remove schedules from the list in later steps. Verify your selection before continuing.
    </Warning>
  </Step>

  <Step title="Configure the job">
    Enter a **job name**, then choose the schedule type and update type.

    <Expandable defaultOpen={true} title="Schedule type options">
      | Option             | Behavior                                                                    |
      | ------------------ | --------------------------------------------------------------------------- |
      | **Weekly**         | Updates only the weekly time slots on the selected schedules                |
      | **Special Events** | Adds only special events to the selected schedules                          |
      | **Both**           | Updates weekly time slots and adds special events (you must configure both) |

      If you choose Weekly, existing special events remain untouched. If you choose Special Events, existing weekly time slots remain untouched.
    </Expandable>

    <Expandable defaultOpen={true} title="Update type options">
      | Option      | Behavior                                                                                                                  |
      | ----------- | ------------------------------------------------------------------------------------------------------------------------- |
      | **Append**  | Adds the new time slots or special events on top of existing ones without removing current entries                        |
      | **Replace** | Replaces existing weekly time slots, special events, or both on all selected schedules with the values you configure here |
    </Expandable>

    <Frame caption="Append adds time slots without modifying existing schedules">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/update-type-append.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=503d7abad3d44f196aa466a1d06aa27d" alt="Append update type tooltip explaining it adds timeslots without modifying blank days or existing special events" width="468" height="215" data-path="images/kode-os/mass-write/update-type-append.png" />
    </Frame>

    <Frame caption="Replace overwrites selected schedules entirely — use with caution">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/update-type-replace.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=c81e4860f8afcd94b78d57b6163712f1" alt="Replace update type tooltip warning that every selected schedule will be replaced and blank days will be deleted" width="488" height="254" data-path="images/kode-os/mass-write/update-type-replace.png" />
    </Frame>

    <Warning>
      Use Replace with caution. Every selected schedule is replaced exactly with the schedule created here. Days left blank and existing special events are deleted.
    </Warning>

    If you are adding special events, choose a **priority** (Top or Bottom). This determines whether new events take precedence over or defer to existing events on the same date.
  </Step>

  <Step title="Create the temporary schedule">
    A weekly schedule calendar editor appears based on your selection. Click a day to open a context menu with options to **`Create Event`**, **`All Day Event`**, or **`Clear Week`**. Define the start and end times for each period.

    Timeslot creation and value assignment are separate steps, but both happen on the same page. Values appear after you click into a timeslot. Side panels open automatically to guide the next step, especially for special events.

    <Frame caption="The weekly schedule editor with a context menu to create time slots">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/schedule-calendar-editor.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=dbec84230f284fdd49115c92506d5a89" alt="Set Values page showing weekly schedule calendar with Create Event, All Day Event, and Clear Week context menu" width="1024" height="644" data-path="images/kode-os/mass-write/schedule-calendar-editor.png" />
    </Frame>

    * If the update type is **Append**, these time slots are added alongside existing ones
    * If the update type is **Replace**, all existing time slots are replaced with the ones you define here
    * Days left blank are deleted from the selected schedules

    For special events, create each event and define its time slot using the same workflow as individual schedule special events.
  </Step>

  <Step title="Set values for time slots">
    Click a time slot in the weekly schedule or a special event to assign values. The left panel shows all schedule groups with their facet values. Schedules are grouped by type (Boolean, Enum, Numeric, String) and facets.

    <Frame caption="Click a time slot on the calendar to reveal the value assignment panel on the left">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/schedule-set-values.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=4f3df2dc407200d08995a67ec66b0233" alt="Set Values page with a time slot created on Monday and the left panel showing schedule groups with value options" width="1024" height="612" data-path="images/kode-os/mass-write/schedule-set-values.png" />
    </Frame>

    Pick one value for each group per time slot. Use `Apply to all` to assign the same values across every time slot in the weekly schedule. Repeat for special events if applicable. Click `Save` at the bottom of the left panel.

    <Frame caption="Select a value for each schedule group and click Save">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/schedule-value-panel.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=9dc986a621d733e7dabb1a1d4910eb4c" alt="Value selection panel showing false, true, and Null options with Apply to all checkbox and Save button" width="349" height="876" data-path="images/kode-os/mass-write/schedule-value-panel.png" />
    </Frame>
  </Step>

  <Step title="Execute the job">
    Click `Save` at the top right (the button remains disabled until all time slots have assigned values). Cloud BMS updates every selected schedule and redirects you to the job details page.

    <Warning>
      Verify that only the intended schedules are selected. Changes are not revertible after execution.
    </Warning>
  </Step>
</Steps>

### Track schedule job progress

The job details page shows the status, timestamp, schedule type, update type, and success and failure counts per group. The bottom section displays a preview of the weekly schedule with the applied time slots and values. An activity log tracks the execution history.

<Frame caption="The schedule job details page shows group results and a preview of the applied weekly schedule">
  <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/schedule-job-details.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=de09320c29451ddf47f04feeb043569c" alt="Schedule job details page showing completed status, schedule groups, weekly schedule preview with applied time slots, and activity log" width="1024" height="628" data-path="images/kode-os/mass-write/schedule-job-details.png" />
</Frame>

Click the blue counts to view individual schedules and their results. Completed jobs remain listed on the main **Mass Write** page.

Use the **`Export`** button to download job results as CSV. Enter a **File Name**, choose which **Columns** to include, then click **`Export`**.

The CSV export includes **Building ID**, **Building Name**, **Datasource ID**, **Datasource Name**, **Name**, **Type**, **Kind**, **Connector Type**, daily updates for **Monday** through **Sunday** when a weekly schedule is updated, **Special Events**, **Status**, and **Failed Reason**.

From job details, use the three-dot menu to:

| Action                              | Behavior                                                                          |
| ----------------------------------- | --------------------------------------------------------------------------------- |
| **Edit Details**                    | Update the job name or description                                                |
| **Re-run Job**                      | Start a new run. Change the schedule selection and configuration before executing |
| **Retry Job with failed schedules** | Re-execute immediately for failed schedules only                                  |

## Mass write schedules with sheet

For scenarios where each schedule requires different times or effective dates, you can import updates from a spreadsheet instead of configuring a single template schedule.

<Steps>
  <Step title="Open the import dialog">
    From the `Write Schedules` flow, click the `Import Schedules with Sheet` button at the bottom of the left filter panel. A dialog opens with three steps: download the template, fill it out, and upload it.

    <Frame caption="The Import Schedules with Sheet dialog guides you through downloading a template, filling it out, and uploading it">
      <img src="https://mintcdn.com/kodelabs/wYHWxi9OuQhq1u6c/images/kode-os/mass-write/import-schedules-sheet.png?fit=max&auto=format&n=wYHWxi9OuQhq1u6c&q=85&s=ba9ccbf46b6a1aba1c0bd0581ab63cf2" alt="Import Schedules with Sheet dialog showing Download Template link, fill-in instructions, and a drag-to-upload area" width="1024" height="774" data-path="images/kode-os/mass-write/import-schedules-sheet.png" />
    </Frame>
  </Step>

  <Step title="Download the template">
    Click `Download Template` in the dialog. The Excel template contains column headers for all required fields.
  </Step>

  <Step title="Fill out the template">
    Complete the following columns for each row:

    <Expandable defaultOpen={true} title="Required sheet columns">
      | Column                              | Format                                       | Description                                                            |
      | ----------------------------------- | -------------------------------------------- | ---------------------------------------------------------------------- |
      | `Identifier`                        | Numeric (for example, `1210168`)             | The store or site ID as defined in Launchpad                           |
      | `EffectiveStart`                    | `MM/DD/YYYY`                                 | The date when the schedule update takes effect (must be in the future) |
      | `SaturdayStart` through `FridayEnd` | 24-hour time (for example, `07:00`, `22:00`) | Start and end times for each day of the week                           |
    </Expandable>

    All days must have values. Each row can have a different effective date and different daily times.
  </Step>

  <Step title="Upload the sheet and execute">
    Drag the completed file into the upload area or click `Attach or Drag to Upload` in the same dialog. Invalid or missing values are flagged during upload. Click `Import` to proceed.

    After import, Cloud BMS selects the stores matching the identifiers and displays the available schedules. Select the schedules you want to update and click `Execute`.
  </Step>
</Steps>

<Note>
  The sheet import updates weekly schedule time slots only. Existing special events remain untouched.
</Note>

## Next steps

<CardGroup cols={2}>
  <Card title="Mass write points" icon="circle-dot" href="/products/kode-os/points/points#mass-write-points" arrow={true} cta="Write">
    Run mass write points at the building level from the Points module.
  </Card>

  <Card title="Schedules" icon="clock" href="/products/kode-os/schedules" arrow={true} cta="Configure">
    Set up individual building-level schedules before applying bulk changes.
  </Card>

  <Card title="Settings" icon="cog" href="/products/kode-os/settings" arrow={true} cta="Manage">
    Configure buildings, roles, and permissions at the portfolio level.
  </Card>
</CardGroup>
