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

# Maintenance Agreement Migration Details

> See how FieldPulse converted maintenance agreements created before October 17, 2026, and what changed for routines, jobs, reminders, and reports.

> **Who uses this:** Admin, Team Manager, Service Agent (access depends on permissions; Limited Agents cannot access maintenance agreements). **Availability:** All regions and plans.

FieldPulse migrated every existing maintenance agreement to a new structure on October 17, 2026. The migration converted each agreement that existed before October 17, 2026 into an agreement with one Scheduled routine. A routine is one repeating service inside an agreement, such as “Spring AC tune-up.” An agreement can have up to five routines.

## Overview

The migration ran automatically, and you did not need to do anything. Your schedule, jobs, and billing carried over.

After the migration, you can:

* Add more routines to an agreement.
* Create On-Demand agreements.
* Use new scheduling, reminder, and reporting options.

### Which agreements the migration affected

The migration affected only maintenance agreements created before October 17, 2026. Maintenance agreements you create on or after October 17, 2026, once the migration finished, use the new structure from the start. The migration does not change them.

| **Agreement** | **What happened** |
| - | - |
| Created before October 17, 2026 | Migrated to an agreement with one Scheduled routine. The rest of this article describes the changes. |
| Created on or after October 17, 2026 | Created with the new structure. Not migrated and not affected. You choose the routines, plan type, job generation window, and reminders when you create the agreement. |
| Agreement template that existed before October 17, 2026 | Migrated to an agreement template with one Scheduled routine template. |

The migration steps below, such as splitting occurrences with more than one job, deleting far-future empty occurrences, and carrying over reminders, do not apply to agreements you created after the migration.

## How it works

### What stayed the same

* Every agreement, including canceled and archived agreements, stayed in your account.
* Every job linked to an agreement stayed linked to that agreement.
* Recurring billing, invoices, and payments did not change. Invoices kept their link to the agreement.
* Assets, contracts, custom fields, and notes on agreements carried over.
* Reminders you set up kept sending (see [“Occurrence reminders”](#occurrence-reminders) below).
* Canceled agreements migrated with the status “Canceled.” FieldPulse creates no new jobs or billing occurrences for them, whatever their end date. Their existing jobs and invoices stay as they are.

### How each agreement converted

Each agreement that existed before October 17, 2026 became one agreement with one Scheduled routine. FieldPulse named the routine “\[Agreement title] - routine #1.” You can rename it.

| **Before** | **After the migration** |
| - | - |
| Agreement with one frequency | Agreement with one Scheduled routine. The frequency moved to the routine. All earlier frequency options remain available. Daily and Weekly are new. |
| Starting month and year | Agreement start date, stored as midnight in the agreement’s time zone |
| End date | Agreement end date. The routine runs until the agreement’s end date. Routines have no dates of their own. |
| Job template | Routine job template |
| Job creation method: Manual | Job generation rule: **Do not generate jobs** |
| Job creation method: Automatic | Job generation rule: **Generate job, keep unscheduled** |
| Fixed 12-month job generation | Routine job generation window of 12 months. Agreements with a job linked more than 12 months ahead got a 60-month window. |
| Attach or Create Recurring Billing | Billing selector: **Link existing Recurring Billing** or **Create new Recurring Billing** |
| Billing frequency and price per bill without recurring billing | Billing selector: **Create Manual Billing Schedule** |
| Automatic email service reminder | Occurrence reminder rule on the routine, with the Email channel |
| Occurrence statuses Scheduled and Unscheduled | No Job, Unscheduled Job, Scheduled Job, Completed Job, or Auto Schedule Failed |
| Agreement status | Default status workflow: Draft, Active, Canceled, Completed |
| Agreement templates | Agreement template with one Scheduled routine template. Frequency, job template, and settings carried over. |

The migration created no On-Demand routines, because On-Demand routines are new. All routines in one agreement share one plan type. Migrated agreements are Scheduled, so you cannot add an On-Demand routine to them. Create a new On-Demand agreement instead.

### How jobs and occurrences generate

An occurrence is one scheduled visit date on a routine. FieldPulse creates a job automatically only at the moment it creates the occurrence. If an occurrence already exists, FieldPulse leaves it alone.

Before the migration, FieldPulse created occurrences up to 5 years ahead but created jobs only 12 months ahead. Most future occurrences had no job.

Now, two settings on each routine work separately.

| **Setting** | **What it controls** |
| - | - |
| **Automatically create jobs for the next X months** | How far ahead FieldPulse creates occurrences. FieldPulse checks this window every night and adds new occurrences as months come into range. |
| **Job generation rule** | Whether each new occurrence gets a job. With **Do not generate jobs**, FieldPulse creates occurrences without jobs. With **Generate job, keep unscheduled**, each occurrence gets an unscheduled job. |

#### Far-future occurrences

During the migration, FieldPulse deleted empty occurrences that fell beyond an agreement’s generation window. An empty occurrence has no job. The nightly run recreates them as each date comes into the window, with jobs where the routine generates jobs.

Empty occurrences already inside the window received jobs from the nightly run on routines that generate jobs.

If future occurrences look missing on a migrated agreement, increase the generation window on the routine.

#### Occurrences with more than one job

An occurrence now holds one job. In the old version, an occurrence could hold two or more jobs, and only one showed on the agreement.

The migration gave each extra job its own occurrence in the same month, using these rules:

* The oldest live job kept the original occurrence.
* Each other live job moved to a copy of the occurrence placed 1, 2, 3, and so on seconds later. The copy kept the same agreement, routine, and month.
* Each occurrence took its status from its own job.
* Deleted jobs did not move.
* Billing occurrences and invoices did not change.
* The UI does not show seconds, so each job appears on its own occurrence row.

FieldPulse deleted nothing. Every job kept its link to the agreement. You may see two occurrences in the same month. That is not a duplicate.

One job can still fulfill more than one Scheduled occurrence. On-Demand visits link to one job each. Linking one job to multiple On-Demand visits is planned for a later update.

#### Same-day duplicate occurrences

An older double-save bug sometimes created several occurrences for the same agreement on the same day. The migration kept all of them and merged none. The first stayed at 12:00 AM. Each extra occurrence moved forward by 1 minute (12:01 AM, 12:02 AM, and so on), along with any billing occurrences. These cases are all in the past.

### Occurrence reminders

The migration converted each automatic email service reminder into one occurrence reminder rule on routine #1 with the Email channel.

| **Old reminder setting** | **New reminder setting** |
| - | - |
| “Email Customer” or “Email both” | Send to customer |
| Days before month | Days before occurrence, mapped one to one |
| Internal users, subject, and message | Same internal users, subject, and message |

FieldPulse did not migrate reminders that were switched off or left on untouched defaults. If a reminder stopped sending, check the routine’s reminder rules and set one up.

Migrated reminder rules send for every occurrence status, as they did before, whether the occurrence has no job, an unscheduled job, or a scheduled job. Reminder rules on agreements you created after the migration default to the statuses No Job and Unscheduled Job, because those statuses usually mean the visit still needs booking.

To change which statuses trigger a reminder on an agreement:

1. Open the maintenance agreement and select **Edit**.
2. Go to the **Occurrence Reminder** settings.
3. Select the statuses that should trigger a reminder.
4. Select **Save**.

This setting applies to one agreement at a time. To change it across all active agreements at once, contact FieldPulse Support.

### Agreement list, statuses, and reporting

#### List tabs and columns

* **All Agreements** have three new columns: Routines, Last Invoice, and Total Amount Invoiced. Frequency shows “Multiple” when an agreement has more than one routine.
* A new **Occurrences** tab lists occurrences across all agreements. Occurrences of archived agreements do not appear on it.
* Saved filter views replace the **Custom** tab. You can pin saved views as your own tabs on web only. **FieldPulse did not carry over your Custom tab filters.** If you did not note them before the release, recreate them as saved views.

#### Exporting agreements

The **Export** button no longer appears on the agreement list or the Occurrences list. To export, go to **Management**, then **Reporting**, and use one of these reports:

| **Report** | **Rows** |
| - | - |
| [**Maintenance Agreement**](/reporting/raw-data/maintenance-agreement-reports) | One row per agreement |
| [**Occurrences Raw Data**](/reporting/raw-data/maintenance-agreement-reports#build-an-occurrences-raw-data-report) | One row per occurrence, with the related job and agreement |

Both reports support filtering, grouping, saving, and export to CSV.

### Permissions

| **Old permission** | **New permission** |
| - | - |
| Team Manager: view | Create off with “View all maintenance agreements” on. |
| Team Manager: view, edit, and create | Create on with “View and edit all maintenance agreements” on. |
| Service Agent: create and see list | Agents who could create keep create. Visibility defaults to All. Options are All, Author, and Assigned. |
| Limited Agent | No access to maintenance agreements |

The author of an agreement no longer changes when someone else edits it.

### Archiving, deleting, and restoring

**Delete** on an agreement now archives it and asks what to do with its linked jobs. FieldPulse permanently deletes nothing.

Archiving an agreement stops its recurring billing from generating invoices. It does not archive the recurring billing record or its invoices. To archive them, archive them manually.

Restoring an agreement works in two ways, depending on when you archived it:

* **Archived on or after October 17, 2026:** Restoring it in the app brings back the agreement, its routine, its occurrences, and its archived jobs, still linked to their occurrences. Jobs deleted before the archive stay deleted. If you chose to retain jobs, those jobs stay unlinked.
* **Archived before October 17, 2026:** Restoring it in the app brings back the agreement but not its jobs, because archiving has always removed job links. Contact FieldPulse Support to restore the agreement with all its jobs linked again. You can also link the jobs again yourself from the **Occurrences** tab.

The migration kept the routine of an archived agreement active. If you restore the agreement, its visits show under the routine.

### Completing an agreement

FieldPulse blocks the status Completed until all of these are true:

* The end date has passed.
* All linked jobs are Completed or Canceled.
* All invoices are Fully Paid or Void.

Migrated agreements with old open jobs or unpaid invoices cannot be set to Completed until you clean those up.

## FAQs

**When did the maintenance agreement migration happen?**

The migration ran overnight on October 17, 2026, US Central time. It converted every maintenance agreement created before that date.

**Did the migration change maintenance agreements I created after October 17, 2026?**

No. Agreements created after the migration use the new structure from the start, so the migration did not change them. The conversion rules in this article apply only to agreements created before October 17, 2026.

**Did I need to do anything for the migration?**

No. FieldPulse converted your agreements automatically.

**Will my customers notice the change?**

Customers notice only the improvements you turn on, such as new reminders. Existing reminders kept sending.

**Why do I see two occurrences in the same month?**

That month had two jobs linked to one occurrence in the old version. Each job now has its own occurrence so both stay visible. FieldPulse created no duplicate and deleted no job.

**Why are there jobs on my agreement that I could not see before?**

The old version hid additional jobs on an occurrence. Each one now shows on its own occurrence row, correctly linked.

**Where did the Export button go?**

Use the Maintenance Agreement report or the Occurrences Raw Data report in Reporting, then export to CSV.

**Can I add an On-Demand routine to an existing agreement?**

No. All routines in an agreement share one plan type, and agreements created before October 17, 2026 are Scheduled. Create a new On-Demand agreement for the customer instead.

**Is my billing changing?**

No. Recurring billing and invoices work as before.

**Why can’t I link a second job to an occurrence?**

An occurrence holds one job. Add the job to the next occurrence, or add a routine.

**Why did my reminders stop sending?**

FieldPulse did not migrate reminders that were switched off or on untouched defaults. Check the routine’s reminder rules and set one up.

**Why did my jobs not appear right after I saved?**

Job generation runs in the background and can take a few minutes. A loading message shows while it runs.

**Why is an archived agreement still invoicing?**

Archiving stops invoice generation but leaves the recurring billing and its existing invoices active. Archive them manually if you no longer need them.


## Related topics

- [Assets & Maintenance](/jobs/assets/index.md)
- [User Roles and Permissions Details](/settings/users-teams/user-roles.md)
- [Custom Forms Overview](/add-ons/custom-forms/overview.md)
- [How to Create a Maintenance Agreement](/jobs/assets/maintenance-agreements.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.