Contracts & Recurring Billing

Service agreements and the repeating charges that follow from them, for MSPs and the organizations they service.

The problem

The agreement lives in a PDF on a shared drive. The renewal date lives in somebody’s calendar, if it lives anywhere. The monthly charge lives in a spreadsheet that one person maintains, and every month they work down it by hand — which is why the month somebody is on holiday, three clients are not billed at all and one is billed twice. Nobody notices the auto-renewal clause until eleven days after the notice window has closed.

What Solidlio does about it

Contracts are records, not documents: term, value, billing cycle, payment terms, notice period, auto-renew. A nightly job reads them, so a term that ends is expired, a term set to renew is rolled forward, and the people who need to know are told ahead of the contract’s own notice period rather than a fixed 30 days. Recurring charges are separate schedules with their own cadence and time zone, swept nightly. Every period a schedule bills is claimed by a unique period key written in the same database transaction as the charge — so a retried job, a double-clicked button, or two servers racing each other cannot bill the same period twice.


Capabilities

CapabilityWhat it does
Contract registerRecords term, value, billing cycle, payment terms, notice period and auto-renew across five agreement types
Enforced lifecycleDRAFT → PENDING → ACTIVE → EXPIRED or CANCELLED, with terminal states that refuse every edit, not just status changes
Automatic expiryMarks a term expired the night it ends, so nothing silently stays active forever
Auto-renewalRolls the term forward by one billing cycle, records the renewal, and notifies the organization that it happened
Notice-period warningsWarns the organization’s admins ahead of expiry using that contract’s own notice period, once per term
Recurring billing schedulesTen cadences from weekly to triennial, each with its own billing day and IANA time zone
Once-per-period guaranteeA unique period key, written with the charge in one transaction, makes double-billing a rolled-back transaction rather than an incident
Nightly billing sweepRaises the period’s service order for every active schedule that has come due, unattended
MRR and ARRNormalises all nine recurring cycles to a monthly figure, with daily history for month-over-month comparison
Renewal rateMeasured from renewals that actually occurred and terms that actually expired — reported as “no data”, never as a fabricated 100%

Built for MSPs and their clients

A managed client is a separate account, not a folder inside the MSP’s. That distinction is what lets both sides hold the parts they should.

OrganizationMSP
ContractsCreate, edit, activate and cancel their own agreementsThe same, across every client account they service
Contract visibilityTheir own organization onlyTheir own account plus every client they service
Billing schedulesRead-only: what they are charged, how often, when it falls dueCreate, edit, pause, resume, cancel and trigger
Renewal noticesReceived by the organization’s own admins and managersVisible on the contract
MSP configurationNot visibleStays private to the MSP; it does not widen to serviced clients

An MSP reading a client’s contract is a deliberate cross-account read, granted by the servicing relationship. Tenant-owned configuration is deliberately excluded from that widening — an MSP’s own settings do not leak to a client, and a client’s do not leak to the MSP.


How it works

  1. Record the agreement — type, term, value per billing period, cycle, payment terms, notice period, auto-renew. It starts as a draft.
  2. Activate it — a contract whose term has already ended cannot be activated; the product says so before you try.
  3. Attach a recurring schedule — cadence, billing day, amount, and the IANA time zone the billing day is evaluated in. Leave the zone unset and it inherits the client’s business hours.
  4. The sweep runs nightly — every active schedule that has come due raises its service order and advances to the next period. Re-running the sweep bills nothing twice.
  5. The lifecycle job runs nightly — ended terms expire, renewing terms roll forward and notify, and terms approaching their notice window generate one warning each.
  6. Watch the revenue line — MRR, ARR, active contract value, contracts expiring within thirty days, and a renewal rate with its sample size attached.

Compliance and audit

Every billing period a schedule has ever run is a permanent row recording the period key, the amount in cents, whether the run was triggered manually or by the scheduler, which user triggered it, when it ran, and the service order it produced. Because the period key is unique per schedule, that table is also the proof that no period was billed twice.

Contracts carry their own history: how many times the term has renewed, when it last renewed, and when the expiry warning was sent. Money is held and computed in integer cents throughout, and the platform fee is applied in basis points rather than by floating-point multiplication.

Billing dates are evaluated in the schedule’s own time zone. A charge dated the 1st is the 1st where the client is, not wherever the server happens to run.


Editions

maxContracts is the number of live contracts an account may hold. Cancelled and expired contracts do not count against it, and a downgrade never disables contracts you already have — only new ones above the cap are refused.

MSP tiers

CapabilityFreeStarterGrowthScaleEnterprise
Contracts10
Recurring billing
Automatic expiry & renewal
MRR / ARR reporting

Customer tiers

CapabilityFreeEssentialsProfessionalBusinessEnterprise
Contracts5
Recurring billing
Automatic expiry & renewal
MRR / ARR reporting

● unlimited or included · number = cap · — not included


What this does not include

Stated so nobody buys it expecting otherwise:

  • A recurring billing run raises a service order and invoices it, in the order’s own currency and on its own payment terms. A Canadian client whose province cannot be resolved is held rather than invoiced at $0 tax.
  • There is no contract e-signature. Contracts are records, not signable documents.
  • No proration. A mid-term change to a contract value or schedule amount applies from the next period, and cancellation issues no automatic refund.
  • Auto-renewal rolls the term and notifies. It does not raise a charge.

Contracts that expire on time, and charges that are raised exactly once.

See this working on a real account.

Book a walkthrough and we will run this capability against your own clients, devices and tickets.

Book a demo All features

A 30-minute walkthrough against your own workflow. No slides.