MSP Invoicing
Last updated: 2026-10-01.
This process is for recurring MSP invoices only. One-off onboarding, project, hardware, or deal invoices should be generated from the Deal process unless they are a small adjustment that belongs on the MSP invoice.
Operating Rule
Open Client Services for the parent records and Service Lines for their configured charges. For MSP billing, the Service defines which client is in scope and when the plan is billable. Service Lines define what appears on the invoice. Products supply default labels, prices, and Xero account codes. Manage the supported people in the Company's MSP Seats related list; each seat belongs to that Account.
The only special product categories are:
- Monthly seat Products:
MSP-SEAT-SB,MSP-SEAT-L1,MSP-SEAT-L2,MSP-SEAT-L3. - 12-month annual seat Products:
MSP-SEAT-ANNUAL-SB,MSP-SEAT-ANNUAL-L1,MSP-SEAT-ANNUAL-L2,MSP-SEAT-ANNUAL-L3. - Annual seat prorate Product:
MSP-PRORATE-SEAT.
All other Products are invoice-line-controlled. This includes base charges,
extra devices, licenses, subscriptions, discounts, adjustments, and generic
products such as Special Condition (MSP-SPE).
The Plan's current-agreement dates describe the contract; they do not control
invoice generation. Do not copy an agreement renewal date into Billing_End
unless the whole Plan should stop billing then.
Activate a Recurring MSP Invoice
-
Confirm the Xero contact.
- The CRM Company must have
Xero_Contact_ID. - If this is missing, the MSP invoice will not generate.
- The CRM Company must have
-
Check the Service.
- Set
Billing_Start. This is required. - Leave
Billing_Endblank for ongoing service. - Set
Billing_Endonly when the whole plan should stop billing. - MSP Plan Type is metadata only and does not affect billing.
- Check MSP Seats Enabled only when this Service provides MSP seats. Contact automation also requires Service Status Active.
- Set
-
Open the Company's MSP Seats when the invoice includes per-user support.
- Each billable person needs an MSP Seat with the correct Account and Contact.
- Reuse the Account's existing seat when a Service or agreement changes.
- Check existing rows before adding a person; escalate duplicates or a Contact whose Company differs from the seat Account.
- Do not move or merge seats as part of an invoice run.
- Each billable seat needs
Billing_Start. - Set seat
Billing_Endonly when that person should stop billing. - Seat
Billing_Statusdoes not drive invoice quantity.
-
Add the Service Lines.
- Add one line per invoice item.
- Link it to the correct Service and set Billing Authority to
Legacy MSPafter confirming this charge belongs in recurring MSP generation. - New lines start on
Hold.Billing Eventscharges are excluded from the MSP buttons. Their new generation path is not yet available; keep new charges on Hold until that path is implemented and reviewed. - Link each line to the correct Product.
- Set
Start_Date; invoice generation excludes lines without it. - Leave
End_Dateblank for ongoing monthly lines. - Set
End_Datewhen the line should stop or when creating a one-cycle line.
-
Use overrides only when needed.
- Leave
Unit_Price_Overrideblank when the Product price is correct. - Fill
Unit_Price_Overridefor a negotiated or calculated price. - Leave
Xero_Account_Code_Overrideblank unless finance asks for a different account code than the Product default. - Fill
Description_Overridewhen the invoice needs customer-facing wording different from the Product label.
- Leave
For every pattern below, confirm the Service link and reviewed Legacy MSP
Billing Authority before generation.
Choose the Seat Billing Pattern
Monthly Seats
Use this for normal month-by-month MSP seat billing.
- Create one Service Line linked to the matching monthly seat Product:
MSP-SEAT-SB,MSP-SEAT-L1,MSP-SEAT-L2, orMSP-SEAT-L3. - Set
Start_Dateto the first month the monthly seat charge should appear. - Leave
End_Dateblank while the monthly seat charge is ongoing. - Leave
Quantityblank or use it only as a reference.
The generated quantity comes from MSP Seats on the Service's Account whose Billing_Start /
Billing_End range overlaps the invoice month. If users are added or removed,
update the MSP Seats rather than the seat invoice-line quantity.
12-Month Annual Seats
Use this only for annual seat billing where the full yearly seat fee renews every 12 months.
- Create one Service Line linked to the matching annual seat Product:
MSP-SEAT-ANNUAL-SB,MSP-SEAT-ANNUAL-L1,MSP-SEAT-ANNUAL-L2, orMSP-SEAT-ANNUAL-L3. - Set
Start_Dateto the first day of the first renewal invoice month. - Leave
End_Dateblank while the annual charge should keep renewing. - Fill
End_Dateonly when the annual renewal should stop before a future renewal month. - Leave
Quantityblank or use it only as a reference. - Use
Description_Overridefor the base label if needed.
The line appears only in the renewal month and each 12-month anniversary after
that. For example, Start_Date 2026-07-01 appears on July 2026, July 2027,
July 2028, and so on. It does not appear in the months between. The generated
quantity still comes from active MSP Seats in the renewal invoice month, and
the generator appends the covered annual period to the line description.
Do not use a mid-month annual Start_Date such as 2026-07-15. The annual
seat Start_Date is the renewal-month anchor and must be the first day of the
invoice month.
Annual Seat Prorates
Use this when a new seat starts part way through an annual seat period and needs a one-off prorated charge.
- Create the MSP Seat and set its billable
Billing_Start. - Create one Service Line linked to
MSP-PRORATE-SEAT. - Set
Quantityto1. - Set
Unit_Price_Overrideto the calculated prorate amount. - Set
Start_Dateto the invoice month for the prorate. - Set
End_Dateto the last day of that same invoice month. - Set
Description_Overrideto identify the person and covered period. - Search existing Service Lines for the same person and period before creating the prorate line.
MSP-PRORATE-SEAT does not calculate quantity from all active seats. It keeps
the invoice-line Quantity, normally 1.
Add Non-Seat Charges
For every non-seat charge, create or update a Service Line. The Product sets the default label, price, and account code; the invoice line controls the dates, quantity, and client-specific wording.
Use this pattern for:
- Base infrastructure.
- Extra devices.
- Licenses and subscriptions.
- Discounts and NFP discounts.
- Adjustments.
- Special Condition (
MSP-SPE). - Any other recurring or bounded item that belongs on the MSP invoice.
For these lines:
- Link the invoice line to the Product.
- Set
Start_Dateto the first invoice month where the charge belongs. - Leave
End_Dateblank for an ongoing charge. - Set
End_Datewhen the charge should stop. - Set
Quantityon the invoice line. - Use
Unit_Price_Override,Xero_Account_Code_Override, andDescription_Overrideonly when the Product default is not right.
Special Condition (MSP-SPE) is the generic escape hatch for commercial
exceptions that do not deserve a new Product yet. Use it for items such as a
six-month upfront arrangement, an unusual bundle, or a client-specific
commercial condition. Make the description explicit enough that finance can
approve the Xero draft without asking what the line means.
Add a One-Cycle Charge
Use this when an item should appear on exactly one MSP invoice cycle.
- Choose the best Product.
- Use
MSP-PRORATE-SEATfor annual seat prorates. - Use Special Condition (
MSP-SPE) when no specific Product fits. - Use Deal-led invoicing instead when the charge belongs to a separate onboarding, project, hardware, or deal invoice.
- Use
- Create the Service Line.
- Set
Start_Dateinside the target invoice month. - Set
End_Dateto the last day of the same target invoice month. - Set
Quantity, price override if needed, and a clear description. - Generate or refresh the MSP invoice while the linked Xero invoice is still
DRAFT.
Because non-annual lines use date overlap, a line whose Start_Date and
End_Date are in the same month belongs only to that invoice cycle.
Do not use this trick for normal 12-month annual seat renewals. Annual seat
Products use yearly recurrence from Start_Date instead.
Generate and Review
- Generate the invoice from the Service or monthly list action.
- The automation creates or refreshes the CRM invoice and Xero draft.
- Existing generated invoices can be refreshed only while the linked Xero
invoice is still
DRAFT. - Review warnings before approving or sending in Xero.
Fix these before generation:
- Missing Company
Xero_Contact_ID. - Blank or unknown Billing Authority on a configured line.
- A draft containing a charge whose Billing Authority changed away from
Legacy MSP. Escalate to finance before refreshing; do not switch ownership merely to bypass the review hold. - Missing plan
Billing_Start. - Missing Product on an applicable Service Line.
- No applicable invoice lines for the invoice month.
Review these before approving the Xero draft:
- MSP Seats missing
Billing_Start. - Service Lines missing
Start_Date. - Non-seat invoice lines missing
Quantity. - Missing Product price or Product Xero account code.
- Annual seat lines whose
Start_Dateis not the first day of the renewal invoice month.
Draft Refresh Checks
Draft refresh first checks that Xero agrees with the existing CRM invoice.
Unapplied Xero edits, incomplete invoice data or ambiguous charge matches return
needs_review without changing either invoice. Reconcile those differences into
the CRM invoice and the MSP charge configuration before retrying. The check
compares line details as well as totals, so a description or accounting-code
edit cannot be hidden by an unchanged invoice total.
If the difference cannot be resolved from the accepted agreement, configured charges and existing invoice, ask the invoicing process owner to review it before retrying or approving the draft. A physically deleted configured charge may also require manual review.
Deliberate Limits
- The MSP invoice process does not approve or send Xero invoices.
- The process supports monthly recurring lines and 12-month annual seat lines.
- Six-month, quarterly, or unusual billing arrangements should use invoice
lines, usually Special Condition (
MSP-SPE), rather than a new billing cadence. - Devices are still invoice-line quantities. There is no dynamic device count.
- Generated invoices do not change after Xero is no longer
DRAFT; use a new adjustment or credit process if a correction is needed.