Agreements

Define the recurring contracts you bill clients under — fees, rates, included hours, terms, and renewals — and catch under-billing with Agreement vs. Reality.

Updated 25 min read

An agreement is the contract you bill a client under — a retainer, a fixed-fee engagement, a time-and-materials arrangement. Agreements define the recurring fees, the rates, the included hours, and the terms, so invoicing knows what to charge. They live under Finance → Agreements and on each company's Agreements tab.

The agreements list, with MRR and ARR

The agreements list#

The list shows your agreements with filters (company, type, status, billing model) and summary tiles for active count, MRR (monthly recurring revenue), and ARR (annual). Each row carries a state badge — normal, expiring, expired, extended, or completed — so renewals never sneak up on you. Save views for the segments you watch.

Creating an agreement#

An agreement captures a lot, because a real contract does:

  • Client and type, name, description, and version; an optional parent agreement (for hierarchies).
  • Dates — start, end, signed — and how acceptance was given.
  • Term — Ongoing (month to month), 12 months, or a set number of months; auto-renew, and the terms it renews into; renewal and termination notice periods. An ongoing agreement never needs an end date, whatever your rules say. A child agreement can pick Same as parent for its term, billing model and cycle, and the form names what that is ("Same as parent (Yearly)").
  • Billing — what the client is buying (its services, below), the model (Fixed fee, Retainer, or Time and materials), how often it's billed (Monthly, Quarterly, Every 6 months, Yearly, One-time, or In installments), and the amount. The amount adds up from the priced services; you type it only when none of them has a price of its own. Time and materials has no amount at all — the client pays for the hours logged. Invoices count for sets which month Agreement vs. Reality counts an invoice from QuickBooks, Xero or Stripe for (see below). The Billing card comes before Renewal and notice on the form. Money is USD throughout Finance — there is no per-agreement currency to set.
  • Included hours and period for retainers, with two separate choices: hours past the included ones are invoiced when the period ends (at the overage rate, when set) or absorbed; unused hours expire at the end of the period or roll over to the next one, up to a maximum you set. A child agreement can say Same as parent for each. See Time an agreement covers.
  • The responsible contact, SLA, and legal/billing details — including governing law, which the signed-state warnings can require.
The agreement template builder

Templates (System → Finance settings → Agreements) pre-fill all of this — billing, term, included hours, line items, even client rate cards — so creating a standard agreement is one pick. The template editor is a real form: pick the billing model and cycle, set the amount, add services (from your catalog) and service rates row by row. Build a template per shape you sell ("Website Care Subscription", "Standard Retainer SOW") and adding it to a client takes seconds. Templates work on existing agreements too — Apply template on the edit form fills any field you've left blank without touching what's already set. Settings-driven rules can auto-calculate the end date, require key fields, and warn on mismatches.

Agreements paid in installments#

When the client pays the contract in parts — a 15-month, $75,000 renewal paid as three $25,000 installments — choose the billing cycle In installments. The amount becomes the agreement's total, and you list the installments: when each is due and how much, with an optional label. The form shows "$75,000 of $75,000" as you go and won't save installments that don't add up (leave the total blank and it's their sum).

  • Billing one: on a new invoice or in the invoice editor, Bill an installment offers the ones no invoice bills yet — "Brand retainer — installment 1 of 3 ($25,000, due Oct 1)". The line is tied to that installment, so it can't be billed twice while that invoice stands. Cancel the invoice, or take the line off it, and the installment can be billed again — on a new invoice, or by re-opening the cancelled one (which happens only when someone settles a notice about it on Finance → Sync — a payment that arrived for it, say), as long as no other invoice has billed it since and the installment still has the amount and date that invoice billed. If the invoice has a copy in QuickBooks, Stripe or Xero, the installment stays held by it until that system confirms the cancellation, or you choose Release the work now on the invoice.
  • Billed at a milestone: an installment can also wait on a project phase — "50% at kickoff, 50% at final delivery". Pick the phase beside the installment (phases of this client's projects; this agreement's projects first). When someone marks that phase complete, finance managers get a notice — "Kickoff is complete on Website Rebuild. Installment 1 of 2 of Northwind SOW ($6,000.00) is ready to bill." — with a Bill it link that opens a new invoice with the installment already on it. Nothing is billed until you save that invoice. Each installment is announced once (re-opening and completing the phase again doesn't repeat it), and one already billed isn't announced. Tie an installment to a phase that's already complete and it's ready — and announced — as soon as you save. The due date stays the planned date that Agreement vs. Reality and Profitability read; the phase only decides when you're told.
  • The agreement's page lists each installment with its due date, the invoice that bills it, and whether that's paid.
  • Agreement vs. Reality expects each installment in the month it's due, for its amount, and matches the invoice that bills it — whatever month that invoice is for. No phantom second payment in month 13.
  • MRR is the total over the term: $75,000 over 15 months is $5,000 a month. Profitability expects the revenue in the month each installment falls due.

While an installment is billed, it stays as it is: it can't be removed from the agreement and its amount can't be changed (its invoice says what it is) — cancel that invoice, or take the line off it, first. Its date can be moved. An installment that a cancelled invoice still refers to can't be removed either, because re-opening that invoice would bill it again — keep the row and change its date or amount instead. (A cancelled invoice is re-opened only when someone settles a notice about it on Finance → Sync.) Once you change its amount or date, that cancelled invoice can't be re-opened any more (it would bill the old figure): issue a new invoice for the installment at its new amount. A deleted invoice doesn't hold an installment — a deleted invoice never comes back — so its row can be removed. The agreement can't leave installments while any of them is billed, nor while a child agreement that takes its billing cycle from it has a billed installment. Once the agreement is signed, the installments are part of its terms, and change only with Edit anyway.

A child agreement (an SOW under an MSA paid in installments) can leave its billing cycle to the family: with no price of its own, it's billed by the family's installments; with its own price, it has its own installments, and they're what Bill an installment offers for it. Only an agreement in installments has a payment schedule. One that had schedule rows before it changed cycle shows them as Payment notes (not billed) — they don't change what's expected or what's billed, and Remove notes clears them.

Prepaid hours (blocks and client POs)#

Some clients buy a block of hours on one purchase order — say 100 hours on PO 4411 — and several people work against it until it's used up. Choose the billing model Prepaid hours. A block's total never resets: there's no month or quarter, just hours used and hours left for as long as the block runs.

On the form, the Prepaid hours card asks:

  • How the block is billed — Bill its price up front (once, or in installments; the price bills once — a second invoice for it is refused until the first is voided) or Bill hours as they're used, up to the total (time on the block is invoiced like normal time, at each person's rate; the amount becomes an optional PO value that's shown as "billed so far" against it, never invoiced). You can't switch between the two once anything on the block is billed — start a new block instead.
  • Total hours and the Client PO number. The PO prints on the invoices that bill the block (on the invoice page and PDF, not yet in QuickBooks or Xero).
  • When the hours run out: Keep logging; don't bill the extra hours, Keep logging; bill the extra hours (at the Rate for extra hours, or each person's rate when it's blank), or Stop new time on this block. In "stop new time" mode an entry that would take the block past its total is refused, wherever it's logged — the timesheet, a timer, a ticket reply, Prox or an AI assistant — with a message saying how much is left. A timer can still start while any hours are left, and stopping one is never refused: the minutes past the total aren't billed.
  • Alert me at — the percentages that send an alert (your organization's default is 80% and 100%; change it under System → Finance settings → Agreements). Each alert is sent once, and again only after hours are added. Also tell adds people to the alerts. The block also tells finance when it's used up.
  • Only people on the roster can log time here — off by default.
  • Show in the client portal — on by default. Client contacts who have Prepaid hours on their portal access see the block's hours used and left, its PO and its end date in the client portal — never its price, rates, who did the work, or what happens when it runs out. Turn it off to keep one block out of the portal.

Blocks don't auto-renew. A new PO is a new block: a sibling agreement, or a Renewal child with its own total hours. An Extension child with no hours of its own shares the block — one bucket, one roster.

On the block's page:

  • Prepaid hours — total, used, left, over; a bar marked with the alert levels; the pace ("at the current pace the hours run out around Nov 12 — before the block ends Dec 31"); how it's billed. Add hours raises the total — for an amended PO — with a reason, even on a signed block.
  • Burn-down — hours per week, by person, against the total.
  • By person — hours, planned hours and (for people who can see rates) each person's charge rate.
  • Roster — the people on the block, each with an optional charge rate (what the client pays for their hours on this block; blank uses their normal rate) and planned hours. A rate below the person's role minimum asks to confirm. People who can set pay also see a Pay rate — what that person is paid for their hours on the block, from today. It's their hourly pay under Who's paid, so changing it there changes it here, and it doesn't need Edit anyway on a signed block (it's internal pay, not a contract term). On a new child block, Copy roster from brings the parent block's roster. A child that shares a block's hours never takes copies of its payouts — people are paid at the block's pay rates.

Completing a block bills its remaining time by the hour — completed paper covers nothing — and the form says how many hours that is before you save. Projects and tickets on a block show its hours left, and the agreements list can show Client PO and Hours left columns (Columns menu); search finds a block by its PO.

Adding a block to a company whose only other agreement was its default by being the only one keeps that one as the default, so new time keeps going where it went — pick the block on the projects and tickets that use it.

One client PO across agreements#

Any agreement can carry the client's Client PO number (under Billing; a block has it on its Prepaid hours card). A child agreement takes its parent's PO unless you give it its own. When several agreements carry the same PO — an MSA, its SOWs and a block of prepaid hours, say — each one's page shows a Client PO card (for people who see finance): every agreement on that PO with what it's worth and what's been billed against it, and the total billed of the total, with what's left (or how far over). Each value counts once: a block counts on the block that owns the hours, and an agreement whose value a child carries counts on the child. Cancelled (void) invoices don't count. The card only adds things up — it changes no report.

Agreement types, explained#

Types are how the list reads at a glance — and a few of them carry real behavior:

  • Master Services Agreement (MSA) — the umbrella contract: the legal terms a relationship runs under. Often long-lived or evergreen. MSAs can have child agreements hanging under them.
  • Statement of Work (SOW) — a child document: a scoped piece of work under an MSA, usually carrying its own dates and amount. In AspirePro an SOW points at its MSA via Parent agreement.
  • Addendum / Amendment — child documents that modify what came before. An amendment with an amount replaces the parent's financials; renewals, extensions, and amendments supersede the member they extend (the older one flips to Completed automatically).
  • Renewal / Extension — child documents that carry the relationship into its next term. A family extended by a live renewal won't nag you about expiry.
  • Subscription — a month-to-month recurring agreement, typically accepted online (terms of service + checkout) rather than signed. Cancel-anytime; its MRR feeds all the finance metrics like any other agreement.
  • NDA / SLA / Partner / Referral — standalone documents tracked for the record.

Child-type documents (SOW, Addendum, Amendment, Renewal, Extension) appear in the type picker when you're creating a child; any parent-capable agreement can grow children — including a mid-chain addendum.

Families: parents, children, and inheritance#

An agreement family is a tree: an MSA at the root, SOWs/addendums/renewals beneath it, chains as deep as your paperwork goes. Three rules make it work:

  1. A blank field on a child means "inherit." Leave the child's billing model, amount, overage rate or terms empty and it uses the nearest ancestor's value — the record shows (from Parent) on every inherited field, and a banner counts the overrides. Role rates and who's paid work differently: they're copied when the child is created (see Exclusions and rates and Who's paid), so later changes on the main agreement don't follow them.
  2. The family rolls up. MRR, ARR, and total contract value are computed across the family, so an MSA with three priced SOWs reports the whole relationship's value.
  3. Newer paper supersedes older paper. When a renewal/extension/amendment takes over, the member it replaces completes automatically — no stale "active" contracts.

Which shape fits your firm?#

Real firms paper client relationships differently. All of these work:

"Our MSA lives on our website — clients sign SOWs." Create one evergreen MSA per client (term: none, no amount, note the online terms in the description or legal details). Every signed SOW becomes a child of it, carrying the dates and the money. Continuing the relationship = adding the next SOW; the MSA never expires, and the family view shows the whole history.

"Our clients sign one document — MSA and SOW combined." That's a single MSA-type agreement with its own dates and amount. No child needed. If a later engagement adds scope, hang an SOW or addendum under it then.

"We do addendums to the original MSA — sometimes addendums to addendums." Exactly what the parent/child chain is for. Each addendum parents under the document it modifies; amendments with amounts replace the financials; superseded members complete automatically. Chains can go as deep as your paper trail does.

"Clients send us a PO for a block of hours." Create a Prepaid hours agreement per PO (see above). Point the client's projects and tickets at it; the block's page shows what's left and who used it.

"We sell subscriptions — plan, checkout, terms of service." Use a Subscription-type agreement: month-to-month term, the plan's amount as the recurring fee, acceptance method online. Pair it with an agreement template so adding it to a new client is one click. And if the subscription is billed through Stripe, connect it (System → Integrations → Stripe) and link the Stripe subscription on the agreement record: its status and recurring value then follow the subscription (Stripe tells AspirePro about each change), and a cancellation in Stripe cancels the agreement automatically. Every linked agreement is also listed under Linked agreements on the Stripe page. A Stripe subscription bills by the month, so only a monthly agreement can be linked, and a linked one stays monthly until it's unlinked. With Stripe disconnected, the subscription can't be cancelled or synced from the agreement, but Unlink still works — it only removes the link in AspirePro (the subscription carries on in Stripe).

Services#

The Services list at the top of the Billing section says what this client is buying. Picking each one from your Products & services catalog is optional but worth it: that's what tells Lifecycle the client has it, and what each invoice line is booked as in QuickBooks, Xero or Stripe. Leave the catalog item empty and type your own to add a custom service — it bills the same, but won't count in Lifecycle until it's linked to a catalog item (System → Products & services → Unmapped lines). Each service is one of two kinds:

  • Included in the amount — its price is part of the agreement's amount. The form names that amount by the billing cycle: Monthly amount (or quarterly, every 6 months, yearly), or Total for a one-time or installment agreement — so the choice reads "Included in the monthly amount" or "Included in the total". Picking a catalog item with a recurring price converts it to the cycle — $12,000 a year on a monthly agreement is $1,000.
  • One-off charge — billed once, on its own, like a setup fee; not part of the amount. Once the agreement is live (not a draft), it waits with the client's other unbilled charges: add it to an invoice from Charges in the invoice editor or the company's Finance tab, and it's billed once. The agreement shows where each one stands — Waiting to be billed, or Billed on INV-…. A billed one can't be removed or repriced on the agreement until that invoice is cancelled (or the line taken off it). These count toward the agreement's total contract value. Rows added before they could be billed this way are shown as Recorded only and are never offered for billing on their own — remove one and add it again if it still needs billing.

The services are the price — or the package is. When an agreement has priced services included in its amount, the amount is what they add up to — the field shows it, and you change it by changing a service's price (a discount is simply a lower price). When the services are a package sold for one price — say marketing, a fractional CMO and a fractional BDR for $75,000, or strategy, design reviews and reporting for $3,000 a month — tick No separate price on each: they show as Included, count in Lifecycle, and you type the package's amount yourself. You can mix the two: priced services on top of a package add their prices up instead. Before a save changes an agreement's amount — say you add a $2,000 service to an agreement that was $5,000 — the save bar says so: "Saving changes the monthly amount from $5,000.00 to $2,000.00." Nothing else moves an amount: an edit that leaves the services alone keeps it as it is.

Bundles. For a package you sell again and again — "Brand Care Gold": strategy, design reviews and monthly reporting, for $3,000 a month — build it once as a bundle in Products & services, with its sell price and parts. Pick the bundle in Add service and the agreement gets one line at the bundle's price, with its parts listed underneath as Included. The parts are copied onto the agreement when you add it, so changing the bundle in the catalog later never quietly changes what an existing client has; and you can leave a part out for one client (they don't take the reporting, say) without touching the bundle. Lifecycle counts each part as a service the client has; invoices and QuickBooks, Xero or Stripe see the bundle as one product at its price. Templates, Prox and quotes turned into agreements bring a bundle's parts the same way. For a one-off package — one client, sold once — you don't need a bundle: add the services with No separate price and type the amount, as above.

For an agreement paid in installments, the services included in the total add up to it, and the installments pay it off — they must add up to it too. For example: one service, "Fractional advisory", included in the total at $75,000; three $25,000 installments; the total is $75,000.

Services are saved with the agreement. On a signed agreement they're part of the signed terms, and change only with Edit anyway.

Exclusions and rates#

  • Billing exclusions — date windows to skip (a paused month, a credit), with a reason. Agreement vs. Reality respects these.
  • This client's rates — client-specific hourly rates per work role (Role rate), so this client's time can bill differently from your standard rates in System → Work & rates. These apply to their time. Free-form service rates are kept as reference only — not billed; to bill a service, add it under Services.
  • Role rates on a child agreement — a new renewal, SOW, addendum, amendment or extension starts with a copy of its main agreement's role rates, so the client keeps the rates they agreed (untick Copy role rates from the main agreement when creating it to start without them, or switch the default off in System → Finance settings → Agreements). Each copied rate shows Copied from the main agreement until you change it. A copy is a copy: changing a rate on the main agreement later doesn't change the child. On a child created before this, or to pick up rates added to the main agreement since, use Copy role rates from main agreement in the agreement's ⋯ menu — it adds the rates the child doesn't have and never changes ones it does.

Who's paid#

The Who's paid tab records who is paid from this agreement: a share of the fee, a fixed amount each month, an hourly rate for someone's time, or a one-off. A renewal or extension starts with a copy of its main agreement's payouts. You need View payouts to see the tab. See Pay rules and who's paid.

Kinds of work#

An agreement can say how each kind of work bills for this client, overriding the organization-wide setting in System → Work & rates. (Internal — not client work isn't offered here: internal time isn't the client's, so it's set for the kind of work itself.) Typical uses:

  • A retainer where Account management is client time, no charge — the monthly check-in doesn't use up the client's 10 hours.
  • A fixed-fee project where Emergency support is billed separately, on top of the fee.

Add a rule from the agreement's edit page (Kinds of work → Rule), or put rules on an agreement template (System → Finance settings → Agreements → Templates → Kinds of work) so every agreement made from it starts with them. Agreements under this one follow its rules unless they set their own; the show page lists both, marking the inherited ones (from …). Rules apply to time logged from then on — time already logged keeps how it was billed. A signed agreement needs Edit anyway first, like its other financial terms, and every change is in the audit log.

Statuses and automation#

Agreements move through Draft → Active → Expiring → Expired (plus Completed and Cancelled). With automation enabled in System → Finance settings → Agreements, drafts activate on their start date, active agreements flip to Expiring as they enter your notification window, and past-end agreements expire after your grace period — unless a live renewal or extension child is carrying the family forward. Auto-renewing agreements roll into their next term automatically, with reminders at the day-marks you configure.

Status is the truth, dates only drive the automation. An agreement is live — pickable, billable, and counted in MRR — for as long as its status isn't Draft, Completed, or Cancelled. Expired is still live, because in practice you keep working a client while the renewal sits on somebody's desk, and the work still has to be logged and billed. Dates decide when the automation moves a status; they never silently switch off a contract.

Lapsed agreements and revenue at risk#

An agreement that is live but past its paper — Expired, or past the family's end date — is lapsed. It keeps working, and it tells you it is:

  • Every MRR figure carries an at risk number beside it: the agreements index, the company's agreements summary and overview card, the Finance report's by-type table, and the Insights MRR metric. The headline still includes lapsed revenue, so nothing disagrees; the second number says how much of it is uncontracted.
  • The agreement picker on a ticket or project marks a lapsed option ("· expired Jun 15, 2026"), and unbilled time on the company Finance tab and in the invoice editor's pull dialog carries an agreement expired badge. What the client sees on the invoice is unchanged.
  • Expired agreements show a renew or complete notice, and finance managers get a reminder once one has sat expired past your nudge threshold.

Whether lapsed work is allowed is your call: System → Finance settings → Agreements → Rules & automation → Work on expired agreements is either Allow with a warning (the default — expiry nags, never blocks) or Block until renewed, which makes expired agreements unpickable and refuses new work against them. Either way the money is reported at risk.

The default agreement#

One agreement can be the default — new billable time links to it automatically, so time flows toward the right contract without anyone choosing it each time. To set it, choose Use for new time logged for this client on the agreement. Only a selectable agreement can hold the flag: setting a Draft, Completed, or Cancelled one as default is refused with a reason, and closing a default hands the flag to another agreement on the same company in the same breath.

The agreement record#

Open an agreement for its Details, Invoices, Documents, and Audit Trail tabs. Details shows effective terms (including anything inherited from a parent), what it's worth per month, per year, and over the whole contract (and the same for the family it belongs to), and retainer usage. Dismissible notices flag things that need attention — an expiring term, a missing field.

The Invoices tab lists every invoice that bills this agreement, once each. On an invoice that also bills other agreements (one with an agreement per line), it shows this agreement's part — for example "$330 of $440" — and the totals add up the parts, so an invoice is never counted twice across agreements. See Which agreement an invoice is on.

Work this agreement pays for shows the time the agreement's amount covers. On a fixed fee, it's every hour the fee has covered so far, valued at your bill rates, and what share of the contract value that is: your budget burn, in red past 100%. On a retainer, it's overage waiting for the period to end (and what it will invoice for) and overage absorbed this period. Time the fee covers is never invoiced by the hour; see Time an agreement covers.

Agreement vs. Reality#

The most valuable piece: Agreement vs. Reality (on the company's Finance tab) compares what a fixed-fee or retainer agreement should have billed against what you actually invoiced — giving you a coverage % and flagging missing periods. It's your under-billing detector: it surfaces the periods you forgot to bill, before they're lost.

Expectations follow the agreement's billing cycle, not the calendar: a quarterly agreement expects four invoices a year, an annual one expects one, one-time agreements expect exactly one, and an agreement in installments expects each installment on its due date. Billing exclusions are skipped, and each occurrence is matched to the invoices actually linked to that agreement first, then filled from unlinked invoices that fit — so a single company-wide invoice can no longer make every agreement look covered. An occurrence reads invoiced, under, over, draft, or missing against a ±2% tolerance, and invoices that fall outside every expected window are listed separately as unmatched rather than quietly absorbed.

Only the fee part of an invoice counts toward an occurrence. Hours and expenses billed on top of a retainer or fixed fee (a Quick invoice for extra time, say) are not the fee, so an invoice with nothing but time on it never marks a period as invoiced, and a mixed invoice counts only its agreement and other non-time lines (sales tax is split in proportion). An older imported invoice with no line detail is read as a whole.

A draft invoice hasn't been sent, so it adds nothing to Invoiced, Paid or coverage. But a period whose bill is sitting in a draft wasn't forgotten either: it reads draft (hover it for the invoice number) instead of missing, and the badge counts it separately ("2 periods missing · 1 in a draft not sent"). Send the draft and the period reads invoiced.

Missing periods are counted per agreement: two agreements that both missed September are two bills nobody raised. The Missing line under the agreements lists exactly the periods the badge counts, by agreement, so the two always add up.

Lapsed agreements keep expecting occurrences right up to today (flagged at risk); Completed and Cancelled ones stop at their end date.

Which month an invoice from your books counts for. Invoices made in AspirePro carry the month they're for. Ones brought in from QuickBooks, Xero or Stripe count, by default, for the month they're dated. A client invoiced a month ahead (dated the 20th, due the 1st, for next month) would then read as two bills in the first month and nothing in the current one, though every month was billed once. Fix that with the agreement's Invoices count for setting, in its Billing card:

  • The month they're dated: the default.
  • The month they're due: the safest choice when invoices go out ahead and are due on or around the 1st, even if the very first one went out in the month itself.
  • The month after they're dated: invoiced a month ahead.
  • The month before they're dated: invoiced after the work.

With the month they're due or the month after, Agreement vs. Reality also looks one cycle ahead, so next month's bill sent on the 20th reads as next month's, not unmatched. Only that view changes: nothing on the invoice is rewritten, the next sync can't undo it, and Profitability still counts revenue in the month an invoice is issued. A child agreement takes its parent's choice unless it sets its own. The agreement's row on the Finance tab says which choice it uses.

Bring your whole services business together

Stop stitching together five tools. Run sales, delivery, support, and billing from one organization — with an AI assistant on every page.