Contracts
Manage service agreements, track billing models, and organize company relationships
Contract summaries and lists load separately. On Billing Items, scheduled payments, rates, and billable contacts show their own loading placeholders. You can use a section as soon as it is ready. If a section cannot load, refresh the page to retry it.
Understanding Contract Statuses
Contracts move through different statuses during their lifecycle:
- Draft - You're still preparing the contract
- Pending Approval - Waiting for internal approval before it goes active
- Active - The contract is in effect and SLA policies apply
- On Hold - The work is paused, for example while a client pauses a project. Only an active contract can be put on hold. Billing items stop producing charges and new contacts are not billed automatically. Payment schedule lines stay as they are, so move or change any that should wait. Set the contract back to Active to resume. When a connected AI agent reactivates a contract, the contract needs priced billing items, a live payment schedule, or a recorded unbilled reason
- Expired - An expired agreement, when set to this status; the automatic end-date job uses Completed
- Terminated - The contract was ended early
- Completed - The agreement finished, including active contracts past their end date
- Archived - Stored for historical reference and excluded from active workflows
Understanding Billing Models
When creating a contract, you'll choose a billing model:
- Per User - Monthly billing based on how many billing units are on the contract
- Hourly - Billed by the hour for work performed
- Block Hours - Company has prepaid for a block of hours
- Retainer - Fixed monthly retainer fee
Understanding Contract Types
Contract types help you organize your contracts into categories like "Managed Services Agreement", "Block Hours", or "Time & Materials". You can:
- Set default SLA policies for each contract type
- Configure billing unit type templates (for per-user billing)
- Keep your contracts organized and consistent
Progressive billing and coverage setup
After creating a contract, Core opens Billing and coverage. You can return through Set up billing and coverage on the contract page. The guidance responds to this contract's saved items and coverage and the reusable setup available in your workspace.
Start with a contract item for this customer. Enter a name, monthly price, and quantity. This quick setup supports a monthly fixed price; Open billing for other pricing options provides per-contact, hourly, one-time, and other billing options. An empty collection of reusable items never prevents contract-specific setup, and Continue to contract is always available.
A reusable item saves a service name and suggested price for future contracts. Core suggests an existing item only when the entered name matches and its monthly fixed-price billing is compatible. Accept it explicitly, dismiss the suggestion, or choose Use a contract item instead. Your entered contract price stays in place. After saving an item, Show reuse options lets an authorized billing editor save it for future contracts without opening Settings.
Next, describe service coverage as Included, Excluded, Conditional, or Approval required. Conditional coverage requires its conditions. A financial administrator can save reviewed coverage or approve existing draft coverage inline. Other contract editors save drafts for review. Existing extracted evidence and saved coverage stay in place when you add services.
A standard service plan is a reusable snapshot of service coverage. Choose a plan to copy its services, details, and conditions into an editable form, then save explicitly. Copying or changing coverage on one contract never changes the original plan or another contract. Core suggests a matching plan only when the entire coverage set, details, and conditions match. You can dismiss that suggestion and keep your own coverage.
Authorized editors with access to all companies can save reviewed coverage as a standard service plan under Show reuse options. Workspace reuse is optional. Editors with access to selected companies can still add contract-specific items and coverage for their allowed companies.
Finding Contracts
Use contract search to find agreements by contract details, company, or line of business.
Creating a Contract
Step 1: Start a New Contract
- Go to Contracts in the main menu
- Click "New Contract"
- Or create one from a company's detail page
Step 2: Fill in Contract Details
Enter the basic information:
- Title: Name of the contract
- Company: Select which company this contract is for
- Contract Type: Choose a type (optional, but helps with organization)
- Status: Set to "Draft" initially
- Start Date: When the contract begins
- End Date: When the contract ends
- Contract Value: Total value of the contract
- Billing Model: Choose how this contract will be billed
- Per User - For user-based monthly billing
- Hourly - For hourly billing
- Block Hours - For prepaid hours
- Retainer - For monthly retainer
Step 3: Configure SLA Policy
- If your contract type has a default SLA policy, it will be suggested
- You can override it with a contract-specific SLA if needed
- The SLA policy determines response and resolution times for tickets linked to this contract
Step 4: Add Contract Documents (Optional)
- When creating or editing a contract, or on the contract detail page, upload contract documents
- You can drag and drop files or select them
- Categorize documents as:
- Contract - The original contract document
- Amendment - Any contract amendments
- Signature - Signed documents
- Supporting - Supporting documents
- General - Other related documents
Step 5: Link Projects (Optional)
If you want to track work against this contract:
- Link the contract to relevant projects, including Deal — Best Case and Deal — Commit projects when you need to pencil forecast payments before the deal is won
- This helps you see all work associated with the contract
Operating unit
The contract page and the edit form show the contract's operating unit when you can view operating units or have Revenue access in Financials. It reads Set on contract when a finance user set one in Financials → Contracts. Otherwise it comes from the linked projects and names them, for example From project Website rebuild. Projects billed through another project are not counted.
If linked projects have different units, or none of them has one, the contract shows Not assigned with the reason. Change a project's unit on the project, or ask a finance user to set the contract's unit. The contract form has no operating unit field. On the contract page, users who can edit Financials contracts see a Change in Financials link. The form shows the unit from the last save, so it updates after you save new project links.
Setting Up Billing Items
Billing items can be added to any contract type, allowing you to track recurring charges like per-user licenses, org-wide flat-rate services, and org-wide hourly retainers.
The Billing Items tab also shows fixed payment schedules, including previously imported schedules. Review draft schedules there, compare the scheduled total against the contract value, and approve them when the totals balance. Approved schedules remain editable in Core.
On an active or approved schedule, Mark billed records lines that you already invoiced in Xero. See Mark payment lines billed.
You can also start a manual payment schedule from Contract Billing Items or Operations → Forecasting. When you start from Forecasting, Core seeds due months from rate × quantity and opens Contract Billing so you can review amounts and approve the draft; only active or approved schedules from active, non-archived contracts appear in Forecasting. Give the schedule a clear name when you create it, then use its row menu on the contract to rename it later. Custom names remain in place when amounts or imported details are refreshed.
When you add a billing item, Add saves the item only. Add and Forecast saves it, then lets you put it on an existing payment schedule or name a new one. Core fills due months from the item's rate, quantity, and billing start through the contract end. Add payment schedule does the same for the items you select, instead of starting those months at $0. You can overwrite any amount on the Scheduled Payments grid afterward. Hourly / T&M items stay Add-only.
On Scheduled Payments, months through the contract end that have no line yet are typeable; saving stores the amount. Leaving a cell blank does not extend the schedule. Multiple payment schedules on the same page share one month window and scroll together. Amount cells accept a leading = formula (for example =1500*12) and save the computed number.
A Manual schedule follows the contract end date, including rows that have no billing item, such as monthly rows from the Financials contract sheet or rows copied from an earlier contract. Saving a later end date extends the recurring billing items on Draft, Pending review and Approved schedules. For other rows, use a cell's Duplicate → Contract End to copy its amount into every month through the new end, or Duplicate cell to copy until a month you choose. The month and year pickers reach the contract end. Extend to contract end adds the missing months at $0 for every recurring row at once; rows that cover only one month (for example a kickoff payment) are extended only from their own cell. Billed and removed months are left as they are.
If the contract has no end date, Duplicate → Contract End is not offered. Use Duplicate cell to copy until a chosen month; typeable months reach two years past the later of the schedule's last month and today.
If the project has no unused billing items, the Forecasting contract picker keeps the company's draft, pending, and active contracts visible in Unforecasted, Fully forecasted, and No billing items groups. Link any of those contracts to continue creating the schedule, including Fully forecasted and No billing items, or choose Manage billing items beside any contract to update it without creating a duplicate.
Every manual schedule belongs to one linked project for Forecasting and Performance reporting. A contract linked to one project uses it automatically. When a contract has several linked projects, authorized billing users can choose the schedule's project beside the schedule controls; Core counts the full schedule only on that project.
The payment schedule grid opens with the workspace's current month centered when that range contains scheduled amounts. If paid installments sit outside a later range of $0 months, Core opens on the months that still show amounts instead. Today uses the same behavior. Month boundaries follow the workspace timezone, and Core remembers how many months you choose to show for the next schedule you open.
Manual schedules can use Itemized amounts, where each billing item has its own monthly amount, or Unified amounts, where you set one total for each month while keeping the billing items associated with the schedule. Add at least one billing item before switching an Itemized schedule to Unified. Switching back to Itemized clears the unified monthly totals so you can enter billing-item amounts individually.
An Itemized schedule with one time-and-materials hourly billing item can use Dynamic forecast. Choose the Operations assignments that should contribute; Core calculates each schedule month from those assignments' planned hours multiplied by the billing-item rate. Dynamic months refresh when Operations hours change and cannot be edited manually. To return to manual editing, open Edit contributors, clear every contributor, and confirm Disable Dynamic forecast.
When two people edit the same amount, Core rejects the stale save and asks the later editor to refresh rather than overwriting the newer value.
If Core cannot automatically rebuild a Unified schedule, you can continue editing its monthly amounts directly. Billed amounts remain protected: only an authorized administrator can correct them, while other billing editors can continue working with unbilled amounts. Schedules with billed activity still cannot be removed or switched between Unified and Itemized modes; the disabled button says why. You can still mark billed, link, change, or unmark invoices on their lines.
Step 1: Review Template Rates
If you used a contract type with billing unit type templates:
- The rates are automatically copied to your contract
- You'll see them on the "Billing Items" tab
Step 2: Add or Customize Billing Items
- Go to the contract's "Billing Items" tab
- Add new billing items:
- Click "Add billing item". If the contract has no billing items yet, you can also choose "Add flat-rate item" or "Add hourly item".
- Select a billing unit type
- Review the Billing item name. It defaults to the billing unit type name, and you can change it for this contract before adding the item.
- Choose the Scope:
- Per Contact: For items billed against assigned contacts, such as Standard coverage at $130/user/month
- Org-wide: For charges or hourly pools that apply to the whole customer
- Choose the Unit:
- Flat Rate: For scheduled fixed charges
- Hourly: For time-entry-based billing. Pick one of three methods below.
- Enter the rate details appropriate to the scope and unit
- For flat-rate and per-contact items, set the quantity (default is 1) - this multiplies the rate (e.g., 5 licenses × $10 = $50/month)
- For per-contact items, use quantity for seats you have sold but have not assigned to contacts yet; assigned contacts consume that quantity first
- For flat-rate items, set Bill every (how often the add-on should be billed)
- For recurring flat-rate items, review Billing starts. It defaults to the contract start date and anchors the future cadence; Core continues the schedule automatically, so do not advance it after each bill. For one-time items, the field is labeled Billed date.
- Click "Add"
Hourly methods
When you pick Hourly, choose one of three methods:
- Time & Materials (T&M): Bill billable hours at the hourly rate. No included hours, no overage concept — just
hours × rate. - Retainer: Set a number of included hours per period plus an overage rate. Included hours are covered by the retainer (no per-hour charge); anything beyond is billed at the overage rate. Pool resets each period.
- Block of Hours: Customer purchases a block (e.g., 40 hours at $4,400) up front. Hours draw down from the block over time (oldest block first). When a block is depleted, you can either auto-charge the overage rate or be alerted to sell another block.
The same contract can mix all options — for example, 20 users on Per Contact + Flat Rate at $130/month, a $175 Org-wide + Flat Rate network admin fee, and an Org-wide + Hourly retainer for all customer time.
Edit existing rates
To customize an existing billing item:
- Click the pencil icon to edit the contract-specific name, description, rate, and cadence. The shared billing unit type in Settings is not renamed.
- Contract-specific names carry through to contact assignments and payment schedules.
- Click the trash icon to remove a billing item
- Changes to the template do not affect existing contracts
Step 3: Assign Contacts (Per-contact Items Only)
For billing items with Per Contact scope:
- Still on the "Billing Items" tab
- Click "Assign Contact"
- Select a contact
- Choose their billing unit type
- Set the effective date (when this assignment starts)
- Click "Assign"
After a contact is assigned, use the pencil icon to adjust the assignment's start or end date. Use the stop button on an active assignment to end support as of today, or set a specific end date from the edit dialog. Clearing the end date keeps the assignment active again.
Note: Org-wide items don't require contact assignments. Org-wide flat-rate items are billed on the cadence you choose, while org-wide hourly items meter all billable time for the customer through the Billables Report.
The system will alert you if a contact who isn't assigned to a per-contact billing unit type (including hourly types) creates a ticket, so you can make sure everyone is properly categorized.
A contact can be assigned to multiple non-hourly per-contact items at once — for example, Standard Support plus a Premium Support add-on plus a SAT License. They can only be on one active hourly type at a time, since each method routes time entries differently.
Triaging unassigned contacts at month-end
Open the Billables Report at the end of the period. Time is routed in this order: project override, contact's active per-contact hourly assignment, customer org-wide hourly rate, then the Unassigned bucket. If billable time is still unassigned, you'll see a yellow banner at the top and a pinned Unassigned section. For each contact, pick a contract + billing unit type from the inline picker — the assignment writes immediately and the rollup updates without leaving the page. Below it, the Hourly Billing Summary shows hours, covered/overage split, and dollar totals per type, with a Block Balances widget for any active hour blocks.
Mark payment lines billed
Use Mark billed when you already invoiced a payment schedule line in Xero, for example when you invoiced the customer before you updated Core.
- On the contract's Billing Items tab, find an active or approved payment schedule and select Mark billed.
- Select the lines that the invoice covers. The list shows lines that are ready to bill, billed lines with no Xero invoice recorded, and billed lines whose invoice number Core cannot find in synced Xero invoices.
- Optional: enter the Xero invoice number (for example,
INV-1001). You can also mark lines billed without an invoice. - Select Mark n lines billed.
Core marks all of the selected lines billed, or none of them. If a line amount changed after you opened the dialog, Core rejects the request; reopen the dialog and try again. A billed line can receive a missing invoice ID or number, but Mark billed rejects a different invoice; use Change linked invoice instead. Approving the schedule again keeps billed lines billed.
Unified schedules. Mark billed works on Unified schedules too. It lists each month's total, or, on a Unified schedule still waiting for its monthly amounts to be rebuilt, the installment the grid shows for that month.
Fix a billed line. On the Scheduled Payments grid, open the cell menu (⋯) on a billed cell:
- Change linked invoice… replaces the Xero invoice on that line. Enter the correct invoice number; Core links the synced Xero invoice the same way Mark billed does. The line stays billed. A billed line with no invoice shows Link Xero invoice… instead.
- Unmark billed… returns the line to ready to bill and removes its invoice link. Core does not track payment on schedule lines and never changes Xero, so this works whether or not the invoice is paid in Xero.
If the line changed after you opened the menu, Core asks you to refresh and try again. Core records the previous and new invoice in the audit log.
Invoice numbers. When you enter only an invoice number and exactly one synced Xero sales invoice has that number (for the contract's Xero contact, when one is linked; voided and deleted invoices are ignored), Core also stores that invoice's Xero ID, so the line links to Xero. If no synced invoice has the number, or more than one does, Core saves the number only and tells you. Such lines reappear in Mark billed with the reason, for example "Invoice INV-1001 not found in synced Xero invoices". After a later Xero sync makes the number match, the line shows Select to link the synced Xero invoice; selecting it fills in the number so you can link it. The Xero invoice ID field is under Advanced for the rare case where you need to paste the ID directly.
Billed lines on the grid. Billed cells show a Billed badge and the invoice number. When Core knows the Xero invoice ID, the number opens the invoice in Xero.
Suggested invoices. If the contract is linked to a Xero contact and you have revenue access, Core compares lines due through next month with authorised or paid Xero sales invoices for that contact. Core suggests an invoice only when it matches exactly one line by service month, pre-tax amount, and currency, covers a single service month, and is not already linked to another line by ID or number. When suggestions exist, the schedule header says how many Xero invoices match unbilled lines; select Review to open Mark billed. Select Use next to a suggested invoice to add its lines to your selection and fill in the invoice. If you already entered a different invoice, Core asks before it replaces that invoice and selects only the suggested invoice's lines. Core does not mark anything billed until you confirm.
Core never applies an invoice automatically. When the amount differs, more than one invoice could match, or the invoice is already linked, Core lists each line that needs review with its month, amount, the candidate Xero invoices, and the reason, for example "Nov 2026 $4,250.00 vs Xero INV-1101 $4,475.00 (amount mismatch)". Choose those lines and enter the invoice yourself.
People who can update billing, and financial administrators, can use Mark billed, Change linked invoice, and Unmark billed. Invoice suggestions and the schedule hint also require revenue access. Invoice-number lookup requires revenue access and access to all workspace companies; without it, Core saves the number only and does not report it as missing.
Auto-billing New Contacts
Instead of remembering to assign every new person by hand, you can have Core set up billing automatically whenever a contact is added to a company.
Turning it on
- Go to the contract's "Billing Items" tab
- At the top, use the "Auto-bill new contacts" switch
- It's on by default, so you only need to visit this if you want to turn it off for a specific contract
Changing the switch requires permission to manage billing. If you don't have that permission, the switch is shown but disabled, with a note explaining why.
What happens when a new contact is added
When someone adds a contact to a company that has an active contract with the switch on, Core looks at the per-contact billing items on that company's active contracts:
- Exactly one item could apply — the contact is added to it automatically, with an effective date of when they were created. The new assignment appears on the contract's Billing Items tab right away.
- More than one item could apply — Core doesn't guess. It opens a billing review item so the billing team can pick the right one, and notifies your billing reviewers. You'll find it in the Inbox under the reconciliation/billing review list.
- No item applies, or the contact is already billed — nothing happens.
This works no matter how the contact was added — created by your team, pulled in from an inbound email, or synced from another system. (Contacts that come in outside the app are picked up within the hour.)
Notes
- Existing contacts are not affected. Turning the switch on only changes how new contacts are handled going forward; it never bulk-assigns the people already on the company.
- Service accounts and contacts without a company are skipped.
- If an automatic assignment can't be completed for some reason, Core opens a billing review item instead and notes that it tried automatically — so the billing team knows to finish it by hand.
Managing Contract Types
Creating a Contract Type
- Go to Settings → Contracts → Contract Types
- Click "Add Contract Type"
- Enter:
- Name: e.g., "Managed Services Agreement"
- Description: What this contract type is for
- Click "Create"
Setting Up Default SLA
- Find your contract type in the list
- Configure a default SLA policy
- This SLA will be suggested when creating new contracts of this type
- You can still override it per contract if needed
Configuring Billing Unit Types Template
For contract types that will use reusable billing item templates:
- Click "Configure Billing Unit Types" on the contract type
- Select which billing unit types should be available
- Set the default scope, unit, and rates for each type
- For flat-rate items, set the default quantity (default is 1) - this multiplies the rate
- When you create a contract with this type, these rates (including quantity) are automatically copied
Managing Your Contract Lifecycle
Moving from Draft to Active
-
Draft → Pending Approval
- Change status to "Pending Approval"
- Wait for internal approval
-
Pending Approval → Active
- Approve the contract
- Change status to "Active"
- SLA policies now take effect for tickets
Completing or Expiring Contracts
-
Automatic Expiration
- Core automatically marks active contracts Completed after their end date has passed in the workspace timezone
- A contract stays Active past its end date while a linked project is still in planning, active or on hold, or while any payment line on its schedule is unbilled. It completes on the next run after the project closes and the remaining lines are billed
- Contracts without an end date are never completed automatically
- Contracts on hold are never completed automatically
- You can also manually mark them as "Completed"
-
Termination
- If a contract ends early, mark it as "Terminated"
- Document why it was terminated
-
Archiving
- Archive completed contracts for historical reference
- They'll still be accessible but won't clutter your active contracts list
Working with Contract Files
Uploading Files
- Go to the contract detail page
- Upload files by dragging and dropping or selecting them
- Files are automatically organized and stored securely
Organizing Documents
Categorize your documents to keep them organized:
- Contract - The main contract document
- Amendment - Any amendments to the contract
- Signature - Signed versions of documents
- Supporting - Supporting documents like quotes or proposals
- General - Other related documents
Accessing Files
- All contract files are accessible from the contract detail page
- Download files as needed
- Files are organized by document type for easy finding
How Contracts Work with Other Features
Tickets
- Link contracts to tickets to apply SLA policies
- The contract's SLA determines response and resolution times
- Billing unit assignments help track who's using services
Projects
- Link contracts to projects to track work
- See all time and work associated with a contract
- Useful for reporting and billing
Companies
- All contracts belong to a company
- View all contracts for a company on their detail page
- Track contract history per company
Billing Units
- For per-user contracts, track which contacts are billing units
- Assign contacts to different billing unit types
- See Billing Unit Types Guide for details
Troubleshooting
I Can't See My Contract
Problem: A contract isn't showing up in your contracts list.
Solution:
- Check your filters - you might have status or date filters applied
- Make sure you have permission to view contracts
- Try refreshing the page
SLA Policy Isn't Working
Problem: The SLA policy on a contract doesn't seem to be affecting tickets.
Solution:
- Make sure the contract status is "Active"
- Verify the SLA policy is actually assigned to the contract
- Check that tickets are linked to the contract
- SLA only applies to tickets that are linked to the contract
Billing Unit Rates Didn't Copy
Problem: You created a contract with a contract type, but the billing unit rates didn't appear.
Solution:
- Check that the contract type has billing unit types configured
- Make sure the contract was created from that contract type
- If both are correct, go to the "Billing Items" tab - the rates should be there
I Can't Upload Files
Problem: File uploads are failing.
Solution:
- Check that the file isn't too large
- Make sure you have permission to edit the contract
- Try a different file format
- Contact support if the problem persists
Contract Status Won't Change
Problem: You can't change a contract's status.
Solution:
- Make sure you have permission to update contracts
- Some status changes might have restrictions (check with your admin)
- Try refreshing the page and trying again
See also
- Billable Types Guide - Learn how to set up per-user billing