XBert MCP + Ignition - Package Fee Coverage Prompt

Did Our Fees Cover Our Time?
Ask Your AI.

 Ask anything

Connect XBert and Ignition to Claude or ChatGPT, paste one prompt, and see every package client's fee set against the time your team logged on them.

The result: a graded table you can check and act on, with every number tagged to its source. A fee review becomes a question, not a project.

Start Free Trial
Explore XBert MCP

Every Package Client.
‍Covered or Not.

Connect XBert and Ignition to your AI assistant, paste one prompt, and it compares what each client paid in a month you choose with the time your team logged against them. Each row answers one question: did the fee cover the work? This is the table the prompt produces. Try it: change the hourly rate, sort a column, or click a client to see the workings behind each number.

Package Fee CoverageDemo with sample data

Example output of the prompt for one month. Change the rate, sort a column, or click a client.

Standard hourly rate (ex-GST)

Outside package clients: 1,860 minutes on other clients and 2,340 minutes of internal admin (idle time counted as admin).

How this is calculated

Time value is minutes × rate ÷ 60, never rounded. Coverage (the recovery rate) is fees ÷ time value. Surplus is fees less time value.

A is 120% or more, B 100–119%, C 85–99%, D under 85%. C and D are under-recovered.

Where each number comes from

Package fees from Ignition invoices it generated, ex-GST. Minutes from XBert's time review by client. Rate from your standard hourly service in Ignition. Clients joined by XBert client ID, with names only as a fallback.

Limits of this snapshot

One month, read from both systems, not live. Clients not invoiced every month can show the fee and the time in different months. A big gap is either scope creep or the wrong package: worth a human look before you act.

What the Table Tells You.

A grade for every client

A means fees beat the time value by 20% or more. B means fees cover it. C is under-recovered by up to 15%. D is under-recovered by more than 15%.

Where the time went

Minutes logged in XBert per client, valued at your standard hourly rate from Ignition, beside what the client actually paid in package fees.

How far to trust each number

Every figure is tagged verified, inferred or assumed. Clients are joined by XBert ID, not by name, so the few judgement calls stand out.

What to check next

Clients with no time logged, related entities, matches made by website or nickname, and gaps big enough to mean the work grew or the package never fit.

Run It on Your Client Book.

1. Connect XBert and Ignition

Turn on the XBert and Ignition connectors in Claude or ChatGPT and sign in with your existing logins. Add Google Drive if you want a Google Sheet as well.

New to the Ignition MCP? Follow Ignition's own setup guide: Using the Ignition MCP with your AI assistant. For XBert, see the XBert MCP page.

2. Paste the prompt

Copy the prompt below into a new chat. Nothing to edit, though you can write your hourly rate on the rate line. It only reads, and never changes anything in XBert or Ignition.

3. Pick a month, then read

Your assistant asks which month to run and confirms the dates. Read the answer line first, then the graded table, then "Things to check". Next month, paste the same prompt.

Package Fee Coverage Prompt
Did our package fees cover the time we spent on each client in a given month?

Period: ASK ME FIRST. Before any tool call, ask me: "Which month do you want to run? (Default: last full month.)"
Wait for my answer, then confirm the exact start and end dates back to me.

Hourly rate: use our standard hourly rate from Ignition. (Or write one here, e.g. $150/hr ex-GST.)

Large-client threshold (optional): none. (Or write one, e.g. $20,000, to leave out any client with a single package invoice at or above it.)

HOW TO WORK
- Read data only through the Ignition and XBert connectors. Add up by hand and show the arithmetic.
- List clients by their Ignition name, from highest fee to lowest; break ties alphabetically.
- Tag every figure as [VERIFIED: where it came from], [INFERRED] or [ASSUMED].
- Run the first calls for steps 1–4 together (both list_invoices calls included). After that, up to 3 XBert calls at a time.
  If XBert asks you to slow down, wait 3–5 minutes, retry once, then go one call at a time.

1. FEES (Ignition)
- Package fees only: invoices Ignition generated (source = billing_items). Anything pushed from the ledger, such as Xero recharges or job invoices billed in arrears, is out of scope. Don't fetch it, and never let it move a client out of the graded rows. Every client with a package invoice is graded: a big gap is exactly what this is meant to surface.
- list_invoices: issued_on within the period AND source = billing_items; order by amount desc; include the total count. Page until has_more is false. Amounts are ex-GST cents.
- Keep invoices whatever their payment_source says: that is how they were paid, not where they came from.
- Run one more list_invoices (state not issued, include archived and voided) and report what was left out.
- If a large-client threshold is set above: leave out any client with a single package invoice at or above it, from fees and hours (all its invoices). Call it "the excluded client".
- Total fees per client. Keep $0 invoices: that client still gets a row.

2. RATE (Ignition)
- list_services filtered to name contains "hour". Use the standard hourly rate (ex-GST) found there, or the rate written above. Say which.

3. HOURS (XBert)
- Auth_GetCurrentSession: confirm it is our practice.
- tools_invoke Features_UserActualTimeReview {startDate, endDate, billableStatus:"All", workStatus:"All", groupBy:"client", includeDetail:"false"}.
- Use summary.total_minutes, summary.total_time_entries and details.by_client. Do not page Features_GetActualTimeList (it caps out before month end).
- Check: by_client minutes add up to total_minutes, and entries add up to total_time_entries. Report any gap.
- Count minutes for package clients only. Report the rest as "outside package clients", split into other clients and internal admin ("Admin - …" rows; idle time counts as admin).
- Take XBert's dates as whole days in the practice's timezone.

4. MATCH CLIENTS ACROSS THE TWO SYSTEMS
- Join on ids first:
  - tools_invoke Data_XPMClientTenantMap {}: maps each XPM client name (the same as the Ignition name) to an XBert client id.
  - tools_invoke Features_CountNotifications {startDate, endDate, datePeriodType:"completed", groupBy:"client", notificationStatusIds:"todo,in_progress,completed"}: maps each time-row label to an XBert client id. It lists the top 50 only.
  - For a package client not reached and with no exact name match, rerun the count with clientTenantId:"<id from the map>", up to 3 at a time.
  - Chain: Ignition name = XPM name → id → time-row label. Tag it [VERIFIED: XBert client id].
- Only where the id chain fails, fall back to names:
  - Exact or near-exact (differs only by case, punctuation, "Pty Ltd", "The Trustee for", or surname-first order) is [VERIFIED]. Anything else, including a nickname, is [INFERRED].
  - Where names differ, get_client in Ignition and use the website or contact email domain to find the XBert trading name.
  - If a count call is refused for plan reasons, use this name fallback, including the website/email step.
- A sole trader who became a company during the month is one client: look for both XBert files.
- A related entity logged separately (shared contacts, or named alongside in task notes) stays out of the row. Scan every by_client label for the client's distinctive name word, add those up, and report a "with them" figure.

5. MATHS AND GRADES
- Time value = minutes × rate ÷ 60, not rounded. Show hours (minutes ÷ 60, 2 decimals) for reading only; never use rounded hours in a calculation.
- Coverage (accountants also call it the recovery rate) = fees ÷ time value: whole % per client, 1 decimal for the total. No minutes = "no time logged". $0 fee = 0%.
- Surplus = fees − time value. Coverage under 100% means the fee is below what the same time would have billed at the standard rate: call it "under-recovered". Use that word everywhere, never "short" or "shortfall".
- Grades, worked from the whole % shown: A 120% or more, B 100–119%, C 85–99%, D under 85%, "–" for no time logged. C and D are both under-recovered. The practice grade uses total coverage.
- Check the client rows add up to each total (fees, minutes, time value). Note any rounding gap in hours.

6. OUTPUT
- In chat: a table with Client, fees, minutes, hours, time value, coverage, grade, surplus, name match.
- If Google Drive is connected: build the whole CSV first, then ONE create_file call (contentMimeType text/csv, title "Package-Fee-Coverage--<Mon-YYYY>"). Enter fees and minutes as numbers; use formulas for the rest, e.g. row 2: hours =ROUND(C2/60,2), time value =C2*<rate>/60, coverage =IF(C2=0,"no time logged",TEXT(B2/E2,"0%")), surplus =B2-E2. The total row uses SUM, with coverage as TEXT(…,"0.0%"). Wrap formula cells in double quotes and double any quotes inside. Add notes rows: grade legend, rate, any exclusion, the reconciliation check. Read it back once and confirm the totals.

REPLY
- One line: the answer, practice grade and total coverage, how many clients are under-recovered and by how much, and how much staff time sat outside package clients.
- The table (and the Sheet link, if made).
- Workings: fee total; entries and minutes in by_client vs the summary totals; whether any excluded client had time; the coverage and surplus arithmetic.
- Things to check: matches made by website, email or nickname; clients with no time logged; "with them" figures for related businesses; clients not invoiced every month (the fee and the time may sit in different months); any big gap, which is either scope creep (the work grew) or the wrong package (it never fit).
- One closing line: the calls made, and what (if anything) was written.

Needs XBert and Ignition accounts. The prompt reads through your own logins, so it only sees what your roles allow. Nothing is changed in either system; the only thing it may write is the optional Google Sheet.

One Question Today.
Take the Number to the Client.

Fee coverage is one example. The XBert MCP gives your AI assistant live access to ledgers, time, alerts and workflow across every client, with your permissions and nothing more.

Start free trial
Explore XBert MCP
Questions people actually ask.

What does the fee coverage prompt actually do?

What is an MCP?

Do I need both XBert and Ignition?

How do I connect Ignition to my AI assistant?

How do I connect XBert to my AI assistant?

Is my client data safe?

Will the prompt change anything in XBert or Ignition?

What do the grades mean?

What if a client's name is different in XBert and Ignition?

Which AI assistants work with it?