Contracts are the agreements you have with each customer — Managed Services, License Reseller, Project Retainer, and so on. In ZestMSP, you define the categories (Contract Types) once, then create a Contract for each customer with the specific rates, services, and licenses they're paying for. This article walks through both layers.
Two-layer model
ZestMSP separates Contracts into two levels:
- Contract Types (Configurations) — the categories of agreement you offer, like Managed or Licenses. Reusable across customers.
- Customer Contracts (on each Customer profile) — the actual signed agreement for one customer, including their Worktype rates, billable Services, and Licenses.
You build the types first, then apply them per customer.
Step 1 — Define your Contract Types
Go to Configurations → Contract Types.
The page shows your existing Contract Types as cards. To add a new one:
- Click + Add new contract type.
- Name it after the agreement shape (e.g., Managed, Licenses, Block Hours Retainer, Project Services).
- Save.
Keep this list small — most MSPs do well with 3–6 types. Over-segmenting here makes per-customer setup painful later.
Step 2 — Add a Contract to a Customer
- Open the Customer Company (Customers → Companies → click the customer).
- Click the Contracts tab.
- Click + Add new contract.
You'll land on the Contract details page, where you'll configure the rest.
Configure the Contract
The Contract details page has four configuration areas plus a header.
Header
- Name — internal label for this contract (e.g., Managed, OPP 2026 Renewal).
- Contract type dropdown — links to one of the Contract Types you defined.
- Primary contract badge — mark the main contract for the customer when they have more than one.
- Active toggle — disable a contract without deleting it (e.g., after expiration).
Contract period
- Start date — when the contract takes effect.
- End date — when it expires. Leave blank for open-ended agreements.
- Monthly indicator — the billing frequency.
Worktype configuration
This is where time becomes billable.
- Worktype dropdown — pick the time category you want to set a rate for (e.g., Remote Support, On-Site Support, Project Labor).
- Billing rate ($ per h) — the hourly rate for that Worktype under this contract.
Add a row for each Worktype this customer is billed for hourly. Worktypes you don't configure here are treated as covered by the customer's recurring Services on this contract — time still gets logged for reporting, but it doesn't generate a separate hourly charge.
Warning shown in-app: "In case you don't select any worktype, all worktypes will be non billable." For a true hourly-billing customer (e.g., Block Hours or Project Services contracts), take that warning literally — empty Worktype configuration means no time will invoice separately. For a flat-fee Managed Services contract, this is by design: their recurring Service fees cover all time worked.
Services tab
Recurring billable items beyond hours — managed services, dedicated support packages, monitoring, backup.
Click + Add new service and choose from your Services catalog (Configurations → Services and Products). Each line has:
| Field | What it does |
|---|---|
| Service name | Pulled from the catalog. |
| Description | Optional override per contract. |
| Category | Inherited from the catalog. |
| Effective Date | When this service starts billing. |
| Quantity | Number of units (e.g., 78 users). |
| Unit cost / Unit price | Your cost vs. customer price. |
| Discount | Per-line discount. |
| Cost / Price / Final price | Calculated totals. |
The Services tab footer shows running totals.
Licenses tab
Same structure as Services, but for software licenses you resell (Microsoft 365, antivirus, etc.). Pulled from the Licenses catalog under Services and Products.
Multiple contracts per customer
A customer can have more than one Contract — common patterns:
- Managed Services contract (recurring monthly) + Licenses contract (per-user software resale).
- Year-1 onboarding contract + Steady-state Managed contract.
Mark one as the Primary contract so reports and invoicing default to it. The others stay active alongside.
Active vs. archived Contracts
Use the Active toggle on each contract:
- Active — eligible for billing and time-rate matching.
- Inactive — kept for history but not used for new billing.
Don't delete expired contracts — flip them to Inactive so you keep the audit trail.
Tips
- Match your Worktype rates to your real cost structure. Mid-tier techs typically bill at $90–$150/h, senior at $150–$225, project labor higher. Set rates that hold up under scrutiny in a renewal conversation.
- Set Effective Date on Services when they start billing, not when you create the contract. This avoids back-charging customers for time they weren't yet under contract.
- Review Worktype configuration before launch. A new contract with empty Worktype config will run for weeks logging zero billable time — a painful discovery at invoice time.
Related articles
- Set up Services and Products
- Log time with Timesheet and Time Entries
- Generate and send Invoices
- Add and manage Customer Companies