FieldproxyAI-native field service software

Maintenance contracts

How do I set up maintenance contracts that create the next visit automatically?

Make the contract its own record with a site, the assets it covers, a frequency, a start and end date, the number of visits included and a rule for when each visit is created, then let the system create one job per due date a set number of days ahead. Decide whether each visit is fixed to the calendar (the 1st of every quarter) or floats from when the last visit was actually completed, because that choice changes every date after the first late visit. Count each completed visit against the contract, flag visits that are due with no job, and warn before the end date so the renewal creates next year's visits instead of a gap.

  • The contract holds the rule (site, assets, frequency, visits included, dates). Jobs are created from it, never copied by hand.
  • Fixed dates keep the calendar; floating dates count from the last completion. Pick one per contract.
  • Create visits a set window ahead (Dynamics 365 defaults to 7 days), not a whole year of jobs on day one.
  • Count visits done against visits included, so you know cost and margin per contract visit.
  • Renewal should extend the same rule with the same technician and window, not start from a blank form.
Fieldproxy

This page covers planned maintenance visits under a contract. Reactive breakdown calls under the same contract, and SLA timers for them, are a separate setup.

Facts checked as of November 2026. Sources at the end of the page.

Step by step

How a contract creates its own visits, step by step

Every system that does this well, from Dynamics 365 agreements to Salesforce maintenance plans, splits the job into the same parts: the contract, the rule, the generator and the count. These are the fields each part needs.

1. Create the contract record, not a repeating job

The contract carries the customer, the service site, the billing account, the start and end dates, the price and the price list for extra work. Dynamics 365 sets these on the agreement before anything else, and its docs note that one agreement is meant for one service location, so a customer with five sites gets five agreements.

2. Attach the assets it covers

List the units under the contract (each chiller, lift, robot or printer, by serial number). Then choose one job per visit for the whole site, or one job per asset. Salesforce Field Service has a Work Order Generation Method for this; with three assets on a monthly plan and one work order per asset, it creates three work orders each month.

3. Set the frequency and the anchor

Frequency is the cycle: every 1 month, every 3 months, every 6 months, or a count such as 4 visits a year. The anchor decides where the next date comes from. Fixed means the calendar (the 1st of the month). Floating means the last completion: in Salesforce's own example, a June 1 visit completed on June 8 makes the next floating visit July 8, where a fixed schedule keeps it on July 1.

4. Set the generate-ahead window and the booking window

Choose how many days before the due date the job is created. Dynamics 365 calls this Generate Work Orders Days in Advance and falls back to 7 days if nothing is set. Add a flexibility window too: Dynamics uses Pre and Post Booking Flexibility, so a visit due on the 8th with 7 days either side can be booked from the 1st to the 15th.

5. Decide who books it

Either the contract books the job to a preferred technician at a preferred start time, or it lands unscheduled for a dispatcher. Dynamics 365 offers both through Auto Generate Booking, and warns that auto-booking follows the recurrence without checking whether the technician is active or working that day.

6. Count visits and close the loop

When a visit is completed, mark it against the contract (visit 2 of 4), record the hours and parts, and let the completion trigger the next floating visit. Visits that pass their window with no job should raise a flag, and so should a contract whose included visits are used up.

7. Renew from the same rule

Warn 30 to 60 days before the end date (e.g.), then renew by extending the same contract rule with a new end date and price. Jobber lets you filter jobs by Ending within 30 days and extend the end date under Edit All Visits, which is the minimum to look for.

Failure modes

Why it goes wrong

These are the problems buyers described on our sales calls, by trade and size.

PM tickets raised by hand

A cleaning-robot manufacturer with 26+ service engineers and more than 500 robots in the field had yearly maintenance contracts, but its helpdesk plan had no scheduling, so someone had to raise each preventive maintenance ticket and assign it. Every visit depended on a person remembering.

Recurring jobs that disappear

A Canadian crane and hoist inspection company with about 20 technicians said deleting a user in its field service tool also deleted that user's recurring jobs. When visits live on a technician instead of a contract, staff changes break the schedule.

History by customer, not by asset

The same company tracked work at client level, not asset level, so it could not see which crane was due, which one failed last time, or which repairs were still open. A contract that covers 12 units needs 12 histories.

PM visits ignore the breakdown calls next door

An Indian office-equipment service company running annual maintenance contracts and breakdown calls, with technicians in teams of 6 to 10, saw technicians attend two breakdowns in one area while a PM visit at the site next door went to a different day. The contract visit had a date but no link to the day's route.

No idea what a contract visit costs

The same company asked for cost and revenue per visit on each AMC. Without hours, travel and parts logged against the contract, you only find out at renewal that a contract lost money.

Renewals start from scratch

An Australian emergency-management training company with 50+ consultants servicing 3,000 to 4,000 sites a year wanted contracts to roll over and create next year's job with the same consultant and time. Re-keying thousands of renewals each year was the work it wanted gone.

Contract, SLA and PPM in different places

A UK EV charger maintenance company wanted planned preventive maintenance generated on a schedule and tied to the contract and its SLA, while its tickets lived in a separate helpdesk. When the contract and the visit are in different systems, nobody can see which sites are behind.

Options

Ways to do it

Real approaches, as their own documentation describes them in November 2026. Test each with one real contract that has several assets and one late visit.

ApproachHow the next visit is createdWatch for
Spreadsheet plus calendar remindersA planner keeps a due-date column per site and books visits from it each monthNo count of visits used, no link to the job, and it stops when that person is away
Jobber recurring jobsA recurring job repeats weekly, biweekly, monthly or on a custom schedule, and invoices per visit or at a fixed price per periodIt is a repeating job, not a contract with assets; Jobber advises ending recurring jobs within a few years rather than leaving them open
ServiceTitan service agreements and membershipsAgreement visits repeat by day, week, month or year; membership events populate up to 12 months ahead and are booked into jobs from Follow Up > Recurring Service EventsEvents are not jobs until someone books them, and events missing a job type or arrival window show as Not Bookable
Simpro recurring jobs and Maintenance PlannerRecurring job templates create jobs automatically from the start date; Maintenance Planner, a Premium add-on, creates asset maintenance jobs when a planner picks a date rangePlanner jobs are created manually, and it needs an Enterprise build or higher
Dynamics 365 agreements or Salesforce maintenance plansDynamics creates booking dates on activation and work orders a set number of days ahead; Salesforce generates work orders in batches by timeframe and horizon, fixed or floatingEnterprise setup; Dynamics agreement processes run as the owner and break if that user leaves
FieldproxyMaintenance contracts with their own cycle, assets and included visits; the next visit is created on your rule and the Dispatch agent assigns itSet up to your contract terms, so bring a real contract and its asset list to the first session

Vendor facts come from each vendor's help center or docs, linked in Sources. Features and plan tiers change; confirm in a demo with one of your own contracts.

Worked example

A worked example: 40 refrigeration sites on quarterly PM

Say you service commercial refrigeration for a retail customer with 40 stores. Each store has 6 units (2 cold rooms, 4 display cases). The contract covers 4 planned visits a year per store, each visit due within 7 days either side of its date, for a fixed annual fee per store. Breakdowns are billed on top.

One job per asset would create 6 jobs per store per quarter, 960 jobs a year. One job per store with the 6 assets listed on it creates 160 jobs a year, and the technician still records a reading and a photo per unit. For a single technician visiting the whole store, one job per site is the right setting; per-asset jobs suit units serviced by different people.

Fixed or floating: the customer's contract says quarterly, so fixed dates on the 15th of January, April, July and October keep every store on the same rhythm. Store 12 is visited late, on April 29. With fixed dates its next visit is still July 15. With floating dates it would move to July 29, and every visit after that drifts. Fixed is right here; floating suits wear-based work, such as a filter change every 90 days after the last one.

Generate ahead: create each visit 21 days before its due date (e.g.), so 40 jobs land in the dispatcher's queue three weeks before each quarter and can be grouped by area with breakdown calls in the same suburbs.

Cost per visit: say the fee is 2,400 a year per store, so each of the 4 visits is worth 600. A visit takes 3.5 hours on site plus 40 minutes of travel, at a loaded labor cost of 60 an hour, plus 45 in filters and consumables. That is about 250 plus 45, or 295, leaving roughly 305 per visit. If one store keeps taking 6 hours because two units are failing, its visit cost goes past 400 and the renewal price for that store should change.

Counting: by the end of September, each store should show 3 of 4 visits done. Any store showing 2 of 4 is a missed visit, and it should be on the Watcher's list long before the customer's audit finds it.

Buying checklist

What to check before you buy

Good signs

  • The contract is its own record with site, assets, dates, price and visits included.
  • You choose fixed or floating dates per contract, and can see the next 12 months of due dates before activating.
  • Visits are created a set number of days ahead, not all at once on day one.
  • Each completed visit shows as 2 of 4 (or similar) on the contract.
  • Hours, travel and parts on contract visits roll up to a cost per visit and margin per contract.
  • Visits due with no job, and contracts nearing their end date, are flagged automatically.
  • Renewal extends the same rule, technician and window with a new price.
  • Changing a technician or deleting a user never deletes contract visits.

Red flags

  • Recurring visits are just a repeating calendar entry with no contract or asset behind them.
  • A year of jobs is created up front, so a frequency change means editing every future job by hand.
  • Contract visits create their own invoices as well as the contract invoice, so customers get billed twice.
  • No way to record a visit against a specific asset, so history stays at customer level.
  • Planned visits and reactive tickets live in different tools with no link between them.

The double-billing flag is real in enterprise tools too. Dynamics 365 notes that even when an agreement generates invoices, its work orders also create invoices when closed, and suggests price lists or entitlements to bring those to zero.

Fieldproxy

Setting it up in Fieldproxy

Fieldproxy is set up around your contract terms, so setup starts from one of your real contracts and its asset list. Settings marked e.g. are examples.

Contracts as records

Each maintenance contract holds the customer, site, assets (each with a QR code and its own service history), cycle, anchor (fixed or floating), visits included, start and end dates and price. The fields and statuses are named the way your team already talks (e.g. AMC, PPM, care plan).

Next visit created on your rule

Visits are created a set number of days ahead of the due date, or when the previous visit is completed for floating contracts, with the contract's checklist, assets and booking window already on the job.

Assigned with the day's other work

The Dispatch agent (/agents/dispatch-agent) assigns the visit by distance, skills and certifications, and inventory, so a PM visit can go to the technician already near a breakdown call in the same area.

Counted and costed

Completing a visit marks it against the contract (e.g. 3 of 4), and the hours, travel and parts from the technician app roll up to cost per visit and margin per contract in your dashboards.

Missed visits and renewals

The Watcher agent (/agents/watcher-agent) flags visits due with no job, visits past their window and contracts with no visits left. Autopilot (/agents/autopilot) drafts the renewal follow-up before the end date, and a person approves it before it sends.

Billing and price

Contract billing runs on its own schedule and syncs to QuickBooks or Xero, and contract visits are set to carry no charge of their own (e.g. only extra parts are billed), so customers are not invoiced twice. Fieldproxy is one price per company with unlimited users; see /pricing for the plans.

Regional notes

Regional differences in what the contract must cover

United Kingdom: SFG20 tasks

UK building maintenance contracts are often specified against SFG20, the BESA-created standard library of maintenance schedules. Tasks marked red are statutory, needed for legal compliance, and amber tasks are best practice, so a contract visit should carry the task list and its classification, not only a date.

United States: ASHRAE/ACCA Standard 180

For commercial HVAC, Standard 180 sets a minimum level of inspection and maintenance. Its baseline task frequencies are a useful starting point for the cycle on each asset type in a contract.

India: AMC visits plus breakdown calls

Annual maintenance contracts commonly bundle a set number of preventive visits with breakdown calls on the same equipment, so the count of planned visits and the count of breakdown calls should be tracked separately on one contract.

How switching works

How switching to Fieldproxy works

We move your data over and set the system up to the way you already work. Fieldproxy replaces the old tool; it does not run alongside it.

  1. Send one real contract

    Share a current contract with its site, asset list, visit frequency, included visits and price, plus the checklist your technicians fill in on each visit.
  2. We set up your contract rule

    Fixed or floating dates, how many days ahead visits are created, the booking window, one job per site or per asset, and how renewals work.
  3. We load your contract book

    Your existing contracts and assets are imported with their last visit dates, so the next due visits appear on day one without re-keying.
  4. Technicians run the first visits

    Technicians get the Android or iOS app, complete the first contract visits, and you check the count and cost per visit against what you expected.

FAQ

Questions people ask

Can a preventive maintenance contract create the next visit only after the previous one is completed?
Yes, that is a floating schedule. The next due date is counted from the completion date, so a late visit pushes every later visit back. Salesforce Field Service and most contract tools support it; check that yours lets you choose fixed or floating per contract.
Should I create all of a year's visits at once?
Usually not. Creating visits a set window ahead, such as 7 to 30 days, keeps the job list short and means a frequency or price change only affects visits not yet created. Dynamics 365 defaults to 7 days ahead.
If one site has 6 pieces of equipment, is that one job or six?
It depends on who does the work. If one technician services everything in one trip, use one job with the 6 assets listed. If different people or different days handle different units, one job per asset gives cleaner history and timing.
Can the contract auto-renew and create next year's visits with the same technician and time?
It should. Renewal should extend the same rule with a new end date and price, keeping the preferred technician and booking window, after a person approves the new terms.
How do I see cost or revenue per visit on a maintenance contract?
Log labor hours, travel and parts against each contract visit and divide the contract fee by the visits included. Any visit whose cost passes its share of the fee shows where the contract price needs to change at renewal.
Can PM visits be tied to the contract's SLA?
Yes, if the contract record carries the SLA terms and the visit inherits them. Then a missed PM window shows up the same way an SLA breach does, instead of only being found at audit.
What happens to contract visits if a technician leaves?
Nothing should. Visits belong to the contract, not the technician, so reassigning the preferred technician moves future visits without deleting any. Test this in any demo by removing a user.

Sources

Competitor details on this page come from the vendors' own pages and documentation, checked as of November 2026. Plans and prices change, so check the vendor's current page before you decide.

See it built on your workflow

Tell us how your jobs run today. We build a demo on your stages, forms and pricing before the call.