Skip to content

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

  1. Confirm the Xero contact.

    • The CRM Company must have Xero_Contact_ID.
    • If this is missing, the MSP invoice will not generate.
  2. Check the Managed Services Plan.

    • Set Billing_Start. This is required.
    • Leave Billing_End blank for ongoing service.
    • Set Billing_End only when the whole plan should stop billing.
    • Plan_Type is metadata only and does not affect billing.
  3. 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_End only when that person should stop billing.
    • Seat Billing_Status does not drive invoice quantity.
  4. 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_Date blank for ongoing monthly lines.
    • Set End_Date when the line should stop or when creating a one-cycle line.
  5. Use overrides only when needed.

    • Leave Unit_Price_Override blank when the Product price is correct.
    • Fill Unit_Price_Override for a negotiated or calculated price.
    • Leave Xero_Account_Code_Override blank unless finance asks for a different account code than the Product default.
    • Fill Description_Override when the invoice needs customer-facing wording different from the Product label.

Choose the Seat Billing Pattern

Monthly Seats

Use this for normal month-by-month MSP seat billing.

  1. Create one MSP Invoice Line linked to the matching monthly seat Product: MSP-SEAT-SB, MSP-SEAT-L1, MSP-SEAT-L2, or MSP-SEAT-L3.
  2. Set Start_Date to the first month the monthly seat charge should appear.
  3. Leave End_Date blank while the monthly seat charge is ongoing.
  4. Leave Quantity blank 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.

  1. Create one MSP Invoice Line linked to the matching annual seat Product: MSP-SEAT-ANNUAL-SB, MSP-SEAT-ANNUAL-L1, MSP-SEAT-ANNUAL-L2, or MSP-SEAT-ANNUAL-L3.
  2. Set Start_Date to the first day of the first renewal invoice month.
  3. Leave End_Date blank while the annual charge should keep renewing.
  4. Fill End_Date only when the annual renewal should stop before a future renewal month.
  5. Leave Quantity blank or use it only as a reference.
  6. Use Description_Override for 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.

  1. Create the MSP Seat and set its billable Billing_Start.
  2. Create one MSP Invoice Line linked to MSP-PRORATE-SEAT.
  3. Set Quantity to 1.
  4. Set Unit_Price_Override to the calculated prorate amount.
  5. Set Start_Date to the invoice month for the prorate.
  6. Set End_Date to the last day of that same invoice month.
  7. Set Description_Override to identify the person and covered period.
  8. 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:

  1. Link the invoice line to the Product.
  2. Set Start_Date to the first invoice month where the charge belongs.
  3. Leave End_Date blank for an ongoing charge.
  4. Set End_Date when the charge should stop.
  5. Set Quantity on the invoice line.
  6. Use Unit_Price_Override, Xero_Account_Code_Override, and Description_Override only 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.

  1. Choose the best Product.
    • Use MSP-PRORATE-SEAT for 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.
  2. Create the MSP Invoice Line.
  3. Set Start_Date inside the target invoice month.
  4. Set End_Date to the last day of the same target invoice month.
  5. Set Quantity, price override if needed, and a clear description.
  6. 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

  1. Generate the invoice from the Managed Services Plan or monthly list action.
  2. The automation creates or refreshes the CRM invoice and Xero draft.
  3. Existing generated invoices can be refreshed only while the linked Xero invoice is still DRAFT.
  4. 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_Date is 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.