MSP Invoicing Process
Last updated: 2026-07-03.
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
The Managed Services Plan defines which client is in scope and when the plan is billable. MSP Invoice Lines define what appears on the invoice. Products supply default labels, prices, and Xero account codes.
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).
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 Managed Services Plan.
- Set
Billing_Start. This is required. - Leave
Billing_Endblank for ongoing service. - Set
Billing_Endonly when the whole plan should stop billing. Plan_Typeis metadata only and does not affect billing.
- Set
-
Add MSP Seats when the invoice includes per-user support.
- Each billable person needs an MSP Seat.
- 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 MSP Invoice Lines.
- Add one line per invoice item.
- 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
Choose the Seat Billing Pattern
Monthly Seats
Use this for normal month-by-month MSP seat billing.
- Create one MSP Invoice 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 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 MSP Invoice 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 MSP Invoice 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 MSP Invoice 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 an MSP Invoice 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.
One-Cycle Invoice-Line Trick
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 MSP Invoice 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 Managed Services Plan 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. - Missing plan
Billing_Start. - Missing Product on an applicable MSP Invoice Line.
- No applicable invoice lines for the invoice month.
Review these before approving the Xero draft:
- MSP Seats missing
Billing_Start. - MSP Invoice 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.
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.