Skip to content
Development
Skill

/msp-billing

Reconciling LastPass MSP license consumption: billing cycles, the per-company billing report (`dailyAverageLicenseCount`, `licenseType`, `addons`), managed-company license limits and active/suspended status, and matching all of it against what the MSP bills each client in the

From plugin
msp-claude-plugins
55200 skills165 agents200 commands4 MCP

Claude Code

$ npx -y skills add wyre-ai/msp-claude-plugins --skill msp-billing --agent claude-code

SKILL.md

msp-billing.SKILL.md
name: "LastPass MSP Billing"
description: >
  Reconciling LastPass MSP license consumption: billing cycles, the
  per-company billing report (`dailyAverageLicenseCount`, `licenseType`,
  `addons`), managed-company license limits and active/suspended status,
  and matching all of it against what the MSP bills each client in the
  PSA. MSP keys only.
when_to_use: >-
  When checking what LastPass will bill the MSP this cycle, finding
  clients that are over their license limit or billed for add-ons they
  do not pay for, or preparing month-end reconciliation of LastPass
  seats against client invoices. Use when: lastpass billing, lastpass
  licenses, lastpass seat count, lastpass reconciliation, lastpass
  invoice, lastpass license limit, or lastpass msp billing.

LastPass MSP Billing

Overview

The LastPass billing report gives each managed company's **daily average** license count over a billing cycle, its license type and its add-ons (`mfa`, `sso`). That is the consumption figure MSP billing is reconciled against. A company with `status: active` is billed for the month; `suspended` is not. Reconciliation means checking that what LastPass will charge the MSP matches what the MSP charges each client.

All three tools need an **MSP** key; a Business key gets 403. Every tool here is tier **read** in Conduit; none is admin-gated.

Common Workflows

Month-end reconciliation

1. **Get the cycle dates.** `lastpass_reports_billing_cycles_list` with `number_of_cycles: 1` for the current cycle, or up to 12 for history. Each cycle has `startDate` and `endDate`. 2. **Pull consumption.** `lastpass_reports_billing_list` with `start_date` and `end_date` set to the cycle's dates (both required, `yyyy-MM-dd`). Page with `max_results: 50` and `page_token`. Each row gives the company's `dailyAverageLicenseCount`, `licenseType`, `addons` and `parentId`. 3. **Pull the companies.** `lastpass_managed_companies_list` with `max_results: 500` for `name`, `licenseLimit`, `status`, `type` and `addons`, keyed by `id`. 4. **Join and flag** (below). Join the billing rows to the companies on the company ID. 5. **Compare with the PSA.** If a PSA plugin is connected, compare each client's billed LastPass quantity with the rounded-up `dailyAverageLicenseCount`. Otherwise produce the table for a human to compare.

Quick over-limit check

`lastpass_managed_companies_list` alone gives `licenseLimit`. Compare it with the latest billing report count. A client running at or near its limit is a renewal or upsell conversation.

What to Flag

| Finding | Rule | |---------|------| | Billed but not invoiced | Company in the billing report with a count above 0 and no matching PSA line | | Under-invoiced | PSA quantity below the rounded-up daily average | | Over limit | Daily average at or above `licenseLimit` | | Add-on drift | `addons` includes `mfa` or `sso` but the client's agreement does not | | Paying for a dead client | `status: active` for a client the MSP has offboarded; suspend it in LastPass | | Trial still running | `licenseType: msp-trial` past the trial period |

Output

A table per cycle: company, type, status, license limit, daily average count, add-ons, PSA quantity (if available), difference, and flag. Then totals and a short list of actions (suspend, raise invoice, adjust limit). Money figures come from the PSA or the MSP's price list; the LastPass API returns counts, not prices.

Gotchas

  • **Daily average, not a headcount.** A client that added ten users on

the last day of the cycle barely moves the average. Do not compare it with a live users list.

  • **Grandchildren.** Rows carry `parentId`. A `managed-msp` company is a

sub-MSP with its own children; roll its children up under it if the MSP bills the sub-MSP rather than its clients.

  • **`license_type` filter** values are `msp`, `msp-trial`,

`msp-managed-company`, `msp-distributor` and `managed-msp`. Leave it unset for a full reconciliation.

  • **Dates are inclusive**, and both `start_date` and `end_date` are

required.

Related Skills

  • [api-patterns](../api-patterns/SKILL.md) - pagination, filters, errors
Read more
@wyre-technology
Ships withmsp-claude-plugins

One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: wyre-ai.github.io/msp-claude-plugins

55200 skills165 agents4 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
55
Star history of wyre-technology/msp-claude-plugins on GitHub, a chart by star-history.com

Other skills on msp-claude-plugins.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills2w309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react5d252k
@facebook@facebookInstall Skill

Questions about msp-billing.

Which coding agents can use msp-billing?
msp-billing installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.