Skip to main content

Service Agreements

A Service Agreement is how Chronicaly models an ongoing recurring service relationship with a customer — things like weekly lawn care, monthly pool cleaning, or biweekly window washing. Instead of creating a fixed series of appointments upfront, a Service Agreement tells the system how often you want to visit a customer and what time of day you prefer, and Chronicaly's rolling scheduler automatically finds and reserves the right slots.

:::tip Why Service Agreements instead of recurring appointments? Traditional recurring appointment systems lock you into specific dates weeks in advance. For outdoor services, that doesn't work — weather, cancellations, and route changes make fixed series impractical. Service Agreements are indefinite by design and keep a configurable number of upcoming visits scheduled at all times, so you always have a pipeline without overcommitting to dates far in the future. :::


How do I create a Service Agreement for a customer?

  1. Navigate to the customer's profile page.
  2. Scroll to the Service Agreements section and click Add Agreement.
  3. Fill in the agreement details (see fields below).
  4. Click Save.

Once saved, the rolling scheduler automatically finds and reserves upcoming slots based on your configuration.


What does each field in the Service Agreement form mean?

FieldDescription
FrequencyHow often the service repeats. Options: Weekly, Biweekly, Monthly, or Custom (specify a number of days). Frequency defines the maximum gap allowed between visits — the scheduler finds the best available slot within that window.
Preferred DaysDays of the week you prefer to schedule this customer. Within each frequency window, the scheduler tries your preferred days in order starting from the day closest to the end of the window, working backwards. This keeps visits as evenly spaced as possible.
Preferred Time of DayMorning, Afternoon, Evening, or Any Time.
ServicesOne or more services associated with each visit. At least one is required.
Upcoming Visits to ScheduleHow many upcoming visits the scheduler keeps reserved at all times, regardless of frequency. Default is 4. A weekly customer with 4 visits scheduled always has roughly a month of visits lined up. A monthly customer with 4 visits has roughly four months. You never need to calculate a window in days — just decide how far ahead you want to stay scheduled.
Requires Customer ApprovalWhen enabled, the customer receives an approval email before each visit is confirmed. Requires an email address on file.
Hold DurationHow long the scheduler holds a proposed slot while waiting for customer approval. Default is 24 hours.
Hold Expiry BehaviorWhat happens if the customer doesn't respond in time: Auto-Confirm (visit confirmed automatically) or Release to Queue (slot released, visit surfaces in your ops view).
Min Lead DaysIf the scheduler proposes a slot within this many days of today, it skips customer notification and routes directly to your ops view. Default is 3 days.
Start DateWhen the agreement begins.
End DateOptional. Leave blank for an indefinite agreement. Set a date for seasonal agreements (e.g., May through October).
NotesInternal notes. Not visible to the customer.

How does the scheduler decide when to schedule visits?

The scheduler runs twice daily and evaluates every active agreement. For each agreement it asks: how many upcoming visits should exist right now versus how many actually do? If visits are missing, it generates them all in one pass.

For each missing visit, the scheduler searches within a window that starts the day after the last scheduled visit and ends one full frequency interval later. Within that window, it tries your preferred days starting from the day closest to the end of the window and working backwards — this keeps visits as evenly spaced as possible while respecting what's actually available.

Example: Weekly agreement, preferred days Monday/Wednesday/Friday, last visit was Friday. The next window runs Saturday through the following Friday. The scheduler tries Friday first (maximum spacing), then Wednesday, then Monday. The first available day in that order is booked.

If no preferred day is available within the window, that visit is flagged in your ops view.


Does the scheduler use my normal availability and drive time rules?

Yes. The scheduler uses the same availability engine as manual bookings — real drive time validation and double-booking detection. If a slot is returned, it is genuinely available for that customer's location and your route.


How many upcoming visits does the scheduler keep scheduled?

That's controlled by the Upcoming Visits to Schedule field on the agreement. The default is 4. The scheduler checks this on every run and fills any gaps — if a visit completes or is canceled, the next run generates a replacement to keep the pipeline full.

This number is independent of frequency. A weekly agreement with 4 keeps roughly a month ahead. A monthly agreement with 4 keeps roughly four months ahead. Set it based on how far in advance you want visibility and confirmed bookings.


Can I require the customer to confirm each proposed time?

Yes. Enable Requires Customer Approval on the agreement. When the scheduler proposes a slot, it sends the customer an email with two options: confirm the proposed time, or choose a different time from your live availability. The customer can also choose to skip that particular visit.

:::note Email address required Customer approval requires an email address on file. If no email exists, the agreement cannot be saved with approval enabled. :::


What if the customer doesn't respond to the approval email?

The hold expires after the configured Hold Duration (default 24 hours). What happens depends on Hold Expiry Behavior:

  • Auto-Confirm — the visit is confirmed automatically. Good for no-attendance-required services like lawn care or pool cleaning.
  • Release to Queue — the slot is released and the visit appears in your ops view under Expired — No Response.

What if no slot is available within the frequency window?

The visit is flagged immediately in your ops view. The scheduler does not silently retry — if no preferred day is open within the full frequency window, the only resolution is a cancellation freeing space or a provider-initiated manual booking. The scheduler picks the agreement back up on the next run.

If you're frequently hitting this, consider increasing Upcoming Visits to Schedule so the scheduler gets further ahead of your busy periods.


How do I pause a Service Agreement temporarily?

From the customer's profile, find the agreement and click Pause. The scheduler stops generating new visits until you resume it. Already-confirmed visits are unaffected.


How do I end a Service Agreement?

Click Cancel. A confirmation dialog warns you that any pending holds will be released. Canceled agreements remain visible in the history tab for reference.

For seasonal agreements, use the End Date field instead — cleaner than manual canceling and the history is preserved automatically.


How do I see the history of visits for an agreement?

From the customer's profile, open the agreement and click the History tab. Every visit generated from that agreement appears chronologically with its status and, where confirmed, a link to the related Schedule.


What statuses can a visit have?

StatusMeaning
Awaiting ConfirmationApproval email sent, waiting for customer response.
ConfirmedVisit is on the calendar.
FlaggedNeeds attention — see your ops view.
CanceledVisit was canceled.