Skip to content

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

  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 Service.

    • Set Billing_Start. This is required.
    • Leave Billing_End blank for ongoing service.
    • Set Billing_End only 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.
  3. 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_End only when that person should stop billing.
    • Seat Billing_Status does not drive invoice quantity.
  4. Add the Service Lines.

    • Add one line per invoice item.
    • Link it to the correct Service and set Billing Authority to Legacy MSP after confirming this charge belongs in recurring MSP generation.
    • New lines start on Hold. Billing Events charges 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_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.

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.

  1. Create one Service 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 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.

  1. Create one Service 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 Service 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 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:

  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.

Add a One-Cycle Charge

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 Service 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 Service 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.
  • 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_Date is 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.