Skip to content

Client agreements

An agreement is the contract between your practice and one client. It says what the client pays every billing period, and it decides how each piece of work your team logs for that client is billed: included in the contract, drawn from prepaid hours, billed by the hour, or written off. This page shows how to write an agreement, activate it, and look after its prepaid hours.

  • You are on the MSP plan. See Outpost for MSPs.
  • Writing, activating, and ending an agreement needs psa:write. Buying prepaid minutes needs psa:invoice. Reading agreements needs psa:read.
  • Define your charge types first, because agreement rules match on them. See Billing catalog.

An agreement has three parts:

PartWhat it does
DetailsThe dates, the Billing day the agreement bills on, the Default hourly rate for billable work, and the Default charge type for time logged on tickets.
LinesWhat the agreement bills every period, before any time on top.
RulesHow each time entry logged for this client is classified.

A client has at most one active agreement. Its status is one of:

StatusMeaning
DraftBeing written. A draft bills nothing at all.
ActiveThe client’s live agreement. It bills on its billing day and classifies work logged while it is active.
EndedNo longer in force. Work logged after it ends is not classified by it.

Until a client has an active agreement, the time logged for it stays Unclassified and nothing recurring is billed. Unclassified time is classified by the agreement’s rules when the next invoice is drafted.

KindBills
FixedA flat amount every period.
Per deviceThe unit amount times the client’s billable endpoints that match the line’s device filter, counted when the invoice is drafted. With no filter, every live computer.
Per userThe unit amount times the client’s named users, counted when the invoice is drafted.
Per seatThe unit amount per named user, with devices included per seat and an overage price for devices beyond them.
Prepaid blockIts unit amount every period, and adds its Included minutes to the block’s balance. Prepaid rules draw the block down.

Per device, per user, and per seat lines carry no quantity on the agreement. The count is taken at invoice time and recorded on the invoice. To price servers and workstations differently, add add-ons, or bill per seat, see Bill by device type and seat. To bill devices and people that come and go during the period, see Bill seat and device changes. A line that has been saved can be edited but not removed. Set its amount to zero to stop it billing.

An agreement that starts part way through a period bills its lines for the days from its start date to the end of that period. The invoice line says so, for example “prorated 8 of 31 days”. An agreement that started before the period bills the whole period.

Rules are tried top to bottom; the first match decides. Each rule matches on any combination of:

  • Charge type, or Any.
  • Ticket type, or Any type. Shown when the client has ticket types.
  • Out of hours: Any, Yes for work outside business hours only, or No for work inside them only.

Each rule reaches one Outcome:

OutcomeWhat happens to the work
CoveredIncluded in the recurring charge. It bills nothing extra, and it still counts in profitability reports.
PrepaidDrawn from the rule’s Prepaid block. Work beyond the remaining balance bills by the hour for the overflow only.
BillableBilled on the next invoice at the rule’s Rate, or the agreement’s Default hourly rate when the rate is empty.
ExcludedNot billed and not counted. Use it for work you write off.

Work that no rule matches is billed by the hour at the agreement’s Default hourly rate. To treat unmatched work differently, for example as covered, put a catch-all rule with Charge type set to Any at the bottom.

Time is classified when it is logged, and classified again when its duration, start, or charge type changes. A time entry not marked billable is never billed, whatever the rule says.

Default charge type is what the Time tab on this client’s tickets preselects in Charge type while the agreement is active. Choose the kind of work most of the client’s tickets are, such as Labor for a client billed by the hour, so technicians change it only for the exception. Rules match on charge type, so the default decides which rule most ticket time is classified by.

  • Not set means Labor, which is also what a client with no active agreement gets.
  • It applies to new time only. Changing it never changes time already logged.
  • It does not apply to time logged on project tasks.
  • Agreement templates have the same field. An agreement written with Start from a template, or created when a client accepts a quote built on a template, copies it. See Billing catalog.

See Time tracking and dispatch.

  1. Open the client’s workspace, then select Client billing > Agreements.
  2. Select New agreement.
  3. In Details, enter a Name.
  4. To start from one of your agreement templates, choose it in Start from a template. It copies the template’s lines, rules, billing day, default rate, and default charge type into the form, and you can change any of them before saving.
  5. Enter Starts on. Leave Ends on empty for an open-ended agreement.
  6. In Billing day, enter the day of the month the agreement bills on, from 1 to 28.
  7. In Default hourly rate, enter what billable work costs when the rule that matched names no rate of its own.
  8. Optionally, in Default charge type, choose the charge type most of this client’s ticket work is. See Default charge type.
  9. Under Lines, select Add a line for each recurring charge. Choose the Kind, then enter the Description the invoice shows and the Unit amount. For a prepaid block, also enter Included minutes.
  10. Under Rules, select Add a rule for each way work is classified, and use Up and Down to order them.
  11. Select Save.

A Prepaid rule has to name a block, and a block has no identity until the agreement is saved. If you are adding a prepaid block, save once, then set the rule’s Prepaid block and save again.

An agreement with no lines bills nothing every period. That is right for a time-only contract.

  1. Open the agreement.
  2. Select Activate.
  3. Confirm with Activate.

If the client already has an active agreement, activation is refused with This client already has an active agreement. End that one first. An agreement created from a renewal quote replaces the one it renews when you activate it, so you do not end the old one first.

Select End agreement and confirm with End. Work logged after today is no longer classified by it.

Each prepaid block on a saved agreement has a Prepaid block card. It shows the minutes left, the minutes sold, and every movement of the balance, with When, What, and Minutes. The balance is the sum of those rows, so it always agrees with them.

Minutes are drawn from the block when the period’s invoice is drafted. To add minutes to the block:

  1. In Minutes to add, enter the minutes.
  2. In Note, describe the purchase.
  3. Select Buy minutes.

Buying minutes adds them to the balance and raises no charge. Bill the client for them separately, for example with an adjustment on a draft invoice.

The client’s billing contact is emailed when a block falls below the warning level in the invoicing settings. See Invoice clients.

When an agreement is coming to an end, select Quote a renewal on the agreement. Outpost builds a draft quote from the agreement’s monthly lines at their current prices and opens it in the quote editor, so you can review the prices before the client sees them. This needs crm:write. A client can have one open renewal per agreement. An agreement with a per seat line cannot be renewed this way, because a quote cannot carry per seat lines.

Outpost can also raise renewal quotes on its own a set number of days before an agreement ends. See Sales pipeline and quotes.

At the practice level, Client billing > Agreements lists agreements across your clients. Client chooses whose agreements you see, and the views Active, Drafts, and Everything choose which. The search box matches the agreement name only.

  • The agreement shows Active on the client’s Agreements page.
  • On Client billing > Unbilled time, with the Everything view, new time logged on one of the client’s tickets shows Covered, Prepaid, Billable, or Excluded rather than Unclassified.

Content is licensed CC BY 4.0. Code samples are MIT. Outpost and the Outpost mark are trademarks of Outpost Business Solutions, PBC and are not covered by either license.