Invoices, Clients & Deals
Three tabs built around your active work: ๐ฐ Invoices for billing, ๐ Client Tracker for engagement hours, and ๐ Biz Dev for your sales pipeline.
Invoices
How Invoicing Works
Water LLM generates professional PDF invoices from a Google Doc template, saves them to your Drive, and creates a Gmail draft with the PDF attached — ready for you to review and send. Nothing is sent automatically.
-
1Enter invoice details in the ๐ฐ Invoices sheet (or use the Invoice Composer)
-
2Water LLM copies your Google Doc template from
Water LLM/Templates/ -
3Replaces every
{{placeholder}}tag with your actual invoice data -
4Converts the filled document to a PDF and saves it to
Water LLM/Invoices/in your Drive -
5Creates a Gmail draft to the client with the PDF attached
-
6Writes a clickable link back to the Invoice Record column in your sheet
Creating an Invoice
-
1Go to
-
2Select a contact from the dropdown — autocomplete searches by name, email, or company
-
3Fill in line items — product names autocomplete from your โ๏ธSettings product list
-
4Click Create Invoice — PDF generated, Gmail draft created, link written back to sheet
-
1Fill in invoice details directly in the ๐ฐ Invoices sheet
-
2Go to
-
3Enter the Invoice Number when prompted
Drop a card into your winning stage on the Kanban board and you are offered two next steps: Create Invoice, which opens the invoice composer pre-filled from the deal, or Create Client, which opens the client composer pre-filled and set to Onboarding. The commercial fields — start date, work type, hours contracted — are left blank on purpose: hours feed invoice totals, and a guessed number would land in front of someone about to bill.
If you regenerate an invoice after correcting an error, Water LLM creates a new versioned PDF rather than overwriting:
- First generation:
Invoice 1001.pdf - Second:
Invoice 1001 v2.pdf - Third:
Invoice 1001 v3.pdf
Up to 99 versions per invoice number are supported.
The Invoice Template — Placeholders
Your invoice template is a Google Doc at Water LLM/Templates/Template Invoice.
Any text wrapped in double curly braces {{like this}} is replaced with the
real value from your invoice data when a PDF is generated.
To customize: open the Google Doc in Drive, edit the layout and formatting,
and keep the double curly braces around each placeholder. Capitals and spacing
don't matter — {{first name}} fills the same as
{{First Name}} — but the words must match a column or one of the
placeholders below.
| Placeholder | What It Becomes |
|---|---|
{{Invoice Number}} | The invoice number |
{{First Name}} / {{Last Name}} | Client’s name |
{{Nickname}} | Informal name, if you keep one in the CRM |
{{Company}} / {{Email}} / {{Phone 1}} | Client’s company and contact details |
{{Title}} | The contact’s job title, from the CRM |
{{Date Sent}} / {{Date Paid}} | The dates from those columns |
{{Item 1 Name}} | Line item 1 name (same pattern for Items 2–4) |
{{Item 1 Cost Per Unit}} | Price per unit |
{{Item 1 Number of Units}} | Quantity |
{{Item 1 Discount %}} | Discount percentage — the % is part of the token |
{{Total for Item 1}} | Line item total |
{{Notes}} | The Notes column for that invoice row |
| Placeholder | What It Becomes |
|---|---|
{{Line Item Totals}} | Subtotal of the four line items |
{{Costs Reimbursed By Client}} | Reimbursable expenses. |
{{Non-Reimbursable Costs}} | Costs you absorb. Not shown to the client unless you put it in the template. |
{{Tax Label}} / {{Tax Rate}} / {{Taxes}} | Your tax label (VAT, GST, Sales Tax…), the rate, and the calculated amount. Blank when tax is off for that invoice. |
{{Total Invoiced}} | Grand total — line items + reimbursables + tax. What the client owes. |
{{Total Payable}} / {{Amount Due}} | Aliases for {{Total Invoiced}}, for templates that phrase it differently |
{{Net Profit}} | Line item totals minus non-reimbursable costs. Excludes tax — you collect it, you don’t earn it. |
{{Vendor Costs}} | Vendor costs recorded against the invoice |
{{Currency}} | Your currency symbol |
These come from the CRM row, not the Invoices row, so they work even though the Invoices sheet has no address columns.
| Placeholder | What It Becomes |
|---|---|
{{Address}} | The whole address as a formatted block. Empty lines drop out, so a contact with no Region doesn’t leave a gap. |
{{Street}}, {{Extended Address}}, {{City}}, {{Region}}, {{Postal Code}}, {{Country}} | The individual fields, if you would rather lay them out yourself |
{{Address Formatted}} | The single-line version Google Contacts stores. A fallback when the individual fields are empty. |
| Placeholder | What It Produces |
|---|---|
{{Today}} | Today’s date, at the moment the PDF is generated |
{{Today+30}} | 30 days from today. Only +30, +60 and +90 exist. |
{{Invoice Date}} | The invoice date — the Date Sent column. Note the space in Invoice Date. |
{{Invoice Date+30}} | A fixed offset from the invoice date. +15, +30, +45, +60, +90 and +120. |
{{Due Date}} | The due date worked out from your payment terms — usually what you want instead of a fixed offset |
{{Payment Terms}} | Your terms in words, e.g. “Net 30” |
Capitals, spaces, underscores and hyphens don't matter:
{{costs reimbursed by client}} and {{InvoiceDate+30}}
fill the same as {{Costs Reimbursed By Client}} and
{{Invoice Date+30}}. A misspelt word does matter —
{{Totl Payable}} is not {{Total Payable}}.
When Water LLM finds a placeholder it does not recognise in the invoice
template, it removes it rather than printing it. That is deliberate — nobody wants
{{Total Invoiced}} printed on a client’s invoice — but
it means a typo shows up as a blank where a number should be, not as
something obviously broken. An invoice with no due date, or no reimbursables
line, is easy to send without noticing.
Water LLM does collect the unrecognised tokens and surfaces them when you generate an invoice from the composer. If it tells you a placeholder was not recognised, check it against the tables above before you send. Generating a test invoice against a dummy contact after any template edit takes a minute and catches this.
If an item's Name is blank, that entire line item is stripped from the PDF. Your invoice only shows items with values — no need to add dummy text for unused line item slots.
If your template is missing or corrupted:
Invoice Reminders
Water LLM can automatically draft payment reminder emails at milestones relative to the invoice due date.
| Default Milestone | What Gets Drafted |
|---|---|
| 7 days before due | Friendly "coming up" notice |
| Due date | "Payment due today" reminder |
| 14 days overdue | First follow-up |
| 30 days overdue | Escalation reminder |
Every Monday you also receive an Aged Receivables digest listing all unpaid overdue invoices.
Configure reminders at — set payment terms, customize milestone days, toggle PDF attachment, and turn the feature on. The reminder job itself runs daily by default; its hour is in .
Common Invoice Issues
| Problem | Fix |
|---|---|
| "Invoice Template not found" | The template must be named Template Invoice in Water LLM/Templates/. Go to to restore it. |
| A value is blank in the PDF where you expected text | The placeholder's words don't match a column or a standard placeholder, so it was removed. Capitals and spacing don't matter; spelling does. The invoice composer lists any placeholder it didn't recognise — compare it with the tables above. |
| Line item missing from PDF | Each line item needs at minimum an Item Name. Blank names are stripped automatically. |
| Can't find the Gmail draft | Check Gmail Drafts. If it's missing, the Email column in the invoice row may be blank or contain an invalid address. |
| Unresolved placeholder warning | A {{placeholder}} in your template doesn't match any column header. Check for typos in the template. |
Invoicing in Another Currency
Bill a client in a currency that isn’t your own and Water LLM keeps two sets of books, deliberately:
- ๐ฐ Invoices stays entirely in your home currency, so every total, every dashboard figure and every report adds up without you converting anything in your head.
- ๐ฐ FX Ledger — created the first time you invoice abroad — holds the real amounts in the real currency, along with the exchange rate on the day the invoice went out.
The PDF your client receives is rendered in their currency, from the FX Ledger. What you see in your own reporting is the home-currency equivalent.
Revenue is recorded at the rate on the invoice date and stays there. When the money actually arrives at a different rate, the difference is written to the FX Ledger as a gain or a loss — it does not quietly change a revenue figure you have already reported or, worse, already filed. That reconciliation runs as a background job you can switch on in (it ships off, because it is only relevant once you invoice abroad), or run on demand from .
Published daily reference rates, fetched when an invoice is created and again when it is paid. They are reference rates, not your bank’s rates — your actual receipt may differ by the spread your bank charges. Treat the ledger as a good record, not a bank statement.
Client Tracker
What the Client Tracker Does
The ๐ Client Tracker tab is for coaches and consultants who sell packages of hours or run ongoing engagements. It connects to your Google Calendar and automatically calculates how much time you've spent with each client.
For each engagement it calculates:
- Total meeting hours (from Google Calendar, filtered to your date range)
- Hours remaining against contracted hours
- 30-day velocity — how many hours per month you're averaging
- Risk flags: ghosting, renewal due, overuse
- Lifetime value based on rate and hours
Setting Up a Client
Each row is one engagement. Use the Client Tracker Composer () for a guided form, or enter directly into the sheet. Picking someone from the search fills in their name, email and company from the CRM. If their CRM row has no company, the composer suggests one — the company other contacts at the same email domain use, or failing that the domain’s name — and says where it came from so you can check it. Gmail-style personal addresses are left blank.
| Column | What to Enter | Required? |
|---|---|---|
| Client Name | Display name for this engagement | Yes |
| Their email — must match the address on Google Calendar invites exactly | Yes | |
| Start Date | When the engagement began — only meetings on or after this date are counted | Yes |
| End Date | When it ends. Leave blank for ongoing engagements. | No |
| Hours Contracted | Total hours in the package. Leave blank for retainers with no cap. | No |
| Rate Or Project Value | Session rate or total project value — used for Lifetime Value calculation | No |
| Client Status | Onboarding, Active, Paused or Finished. Set to Finished or Paused when done — clears risk flags. Finished also stamps Finished On, which Client Wrap-up uses. | Yes |
Water LLM finds meetings by scanning your Google Calendar for events where the client's email appears in the guest list. If they RSVP from a different email address than what you entered here — for example, their personal Gmail instead of their work address — those meetings won't be counted.
If meeting time shows 0 hours: check whether their calendar invites come from a different address, and update the Email column to match — or, in Client Tracker settings, count all of their emails from the CRM.
Client Goals
Write down what a client is working toward and how you’ll both know it worked. Add or edit goals in the Goals & success measures box when you create a client () or edit one.
- They live at the top of the client’s notes doc, dated, and are rewritten in place when you change them. Your dated notes below are never touched.
- They show where you need them — on the client card in the sidebar, and on that client’s meeting card in your Daily Briefing.
- An optional reminder — turn on Set Goals in and new clients without goals show up in your task list. It’s off by default.
Auto-Calculated Columns
These are computed by Water LLM. Do not edit them manually.
| Column | How It Works |
|---|---|
| Total Meeting Time | Sum of the meetings that count as sessions (see Client Tracker settings), from Start Date to End Date (or today). Excludes declined events and "Free" events. |
| Hours Left | Hours Contracted minus Total Meeting Time. Shows "N/A" if no contracted hours. |
| Time Spent / 30 Days | Rolling 30-day meeting hours. Shows your current pace with this client. |
| Lifetime Value | Rate ร total hours, or the project value if set. |
| Prep Work | For company rows only — your solo time blocked for that company. See Client Tracker settings. |
| Flags |
Everything that needs attention on the client, in one cell — for example: Ghosting — you haven’t heard from them (email, message or meeting) since you last reached out, past the Quiet client threshold (default 90 days), and nothing is booked No Future Meeting — no session is booked No Recent Activity — no sessions logged in the last 30 days Follow-Up Due — they wrote and it’s still unanswered Renewal Required / Hours At Risk — contracted hours nearly or fully used Every flag and its threshold is in the Glossary. The same flags drive the Dashboard counts and the Daily Briefing’s task cards. |
Risk flags (Ghosting, Renewal Required, Hours At Risk) are cleared automatically when a client is set to Finished or Paused. Time Spent is still calculated within the date range, but the alerts stop firing. When you mark them Active again, all metrics recalculate.
How Meeting Time Is Counted
Water LLM scans your Google Calendar for events where the client's email address is in the guest list.
| An event IS counted ifโฆ | An event is NOT counted ifโฆ |
|---|---|
| The client is an attendee and did not decline | The client declined the invitation |
| The client organised it | The event is marked "Free" (transparent) in Google Calendar |
| The event falls within the Start Date to End Date window | The event is outside the date range |
| It passes your session rules, if you’ve set any | Your session rules leave it out — by title or length |
All-day events are skipped by default (counted as 0 hours). How many hours an all-day event is worth is a calendar-wide setting: (e.g., 8 to count each as a full day). Client hours follow it unless you give them their own number in Client Tracker settings — useful when a full-day workshop with a client should count differently.
A 45-minute meeting = 0.75 hours. A 90-minute session = 1.5 hours. All totals are rounded to two decimal places.
Client Tracker Settings
Everything about how clients are counted and flagged is in one dialog: . Save & Full Scan saves and recalculates every client straight away; Save & Scan Client does the same for one.
| Setting | What it does |
|---|---|
| What counts as a session | Leave out meetings by title (“Invoice review”, “Discovery”), or count only titles with certain words (“Session”), and set the shortest meeting that counts. Separate words with commas; capitals don’t matter; a title with words from both boxes is left out. Leave both empty to count every meeting. These rules set Total Meeting Time, Number of Meetings, Meeting Dates and Time Spent / 30 Days — and so Hours Left and the hours flags. |
| All-day events with a client | Same as calendar follows your calendar-wide setting in Region & Currency. Or give client hours their own number — don’t count them, or 1, 2, 4 or 8 hours. |
| Company clients & prep time | Working with a company rather than one person? Put the company’s domain in the Email column on ๐
Clients, starting with @ — e.g. @acme.com. Every meeting with anyone from that domain counts as a session, once per meeting however many of them join. Time you block for them with no one from the company invited, titled with the company name or domain (“Acme deck prep”), adds up in the Prep Work column — your admin and preparation time next to delivery hours. The session rules don’t touch Prep Work. Use a company’s own domain, not gmail.com. |
| Which emails count as the client | Only the email on the Clients tab (the default), or all of their emails in the CRM (Email 1–4 on their CRM row). The second counts sessions booked from a client’s other addresses — a personal email for one session and a work email for the rest. |
| When to flag a client | The client thresholds behind the Flags column. They are the same numbers as — change them in either place. |
Client Tracker Troubleshooting
| Problem | What to Check |
|---|---|
| Meeting time shows 0 hours |
|
| "Ghosting" flag but you spoke recently | The flag reads the CRM’s last-contact dates, which Comms & Meeting Sync updates overnight, and is recalculated on the next Client Tracker run. Run after the sync to update it now. |
| Hours flags on a flexible engagement | Leave Hours Contracted blank for retainers or flexible work. This shows "N/A" for Hours Left and the hours flags don’t fire. |
Biz Dev & Sales Pipeline
How the Pipeline Works
The ๐ Biz Dev tab tracks prospects and deals before they become active clients. Each row is one deal. The pipeline stages are fully customizable — define the stages that match your sales process.
| Column | What It Is |
|---|---|
| Deal ID | Auto-generated (D-001, D-002โฆ) |
| Contact ID | Links to a CRM contact |
| First Name / Last Name / Company / Email | Synced from the linked CRM contact |
| Stage | Current pipeline stage (from your defined stages) |
| Est. Value | Estimated deal value — used in revenue forecasting on the Dashboard |
| Expected Close | When you expect the deal to close |
| Deal Notes | Your notes about this deal |
| Next Step / Next Step Due | The one thing this deal needs next. See Next Step below. |
| Lead Source | How this person first found you — read from their CRM row. See Lead Source. |
| Lost Reason | Why a Closed Lost deal was lost. The deal composer asks “Why was it lost?” when you move a deal to your losing stage, and clears it if the deal moves anywhere else. Dragging a card on the board or editing the sheet doesn’t ask. Choices: Price, Timing, Went with someone else, No response, Not a fit, Budget, Other. |
| Stage Date columns | Timestamps recording when the deal entered each stage |
The Kanban Board
Open the visual view of your pipeline via .
- Drag and drop — move deal cards between stage columns
- Stage timestamps — when you move a deal to a new stage, the date is automatically recorded. Move a deal backward and future stage dates are cleared.
- Deal aging — cards show how long since the last stage update
- Quick actions — edit deal details, delete, or auto-invoice from a closed deal
- Closing a deal — drop a card into your winning stage and you are offered two next steps: Create Client, which opens the client composer pre-filled and set to Onboarding, or Create Invoice, which opens the invoice composer pre-filled from the deal. Losing a deal offers neither, because neither applies.
- When the deal contact isn’t the client — creating a client from a won deal asks whether the deal contact is the client, their sponsor (someone at the company paying for it) or the person who referred them, and fills in the ๐ Clients row accordingly.
Next Step on Every Deal
Each deal on ๐ Biz Dev can have one next step with a due date — send a proposal, follow up by email, wait for a reply, book a call, send an invoice, decide or close out. Set or change it from the deal composer, the Next Step button in the sidebar, or with one tap in your Daily Briefing, which works on your phone.
Water LLM notices when it’s done, from data it already collects: you emailed them, they replied, a meeting got booked, the deal reached Proposal, an invoice went out, or the deal closed. It then clears the step, notes “โ …” in their notes doc, and suggests the next one in your briefing.
Suggestions are suggestions. A next step only appears on a deal when you choose it — in the composer, a suggested step is one Use it click away.
Customizing Pipeline Stages
Your stage names live in โ๏ธSettings, column K, rows 4 to 14 — eleven slots. The default set uses six of them:
| Slot | Cell | Default |
|---|---|---|
| 1 | K4 | Lead |
| 2 | K5 | Discovery |
| 3 | K6 | Proposal |
| 4 | K7 | Negotiation |
| 5–9 | K8–K12 | empty — yours to fill |
| 10 | K13 | Closed Won close-out |
| 11 | K14 | Closed Lost close-out |
The last two slots are the close-out pair — K13 is the positive one, K14 the negative. Call them whatever you like (“Signed” and “Passed”, say); what matters is that they stay in those two cells. Everything else counts as open pipeline, and the board offers to create a client or an invoice the moment you drop a deal into K13.
Each slot keeps its own dates, so renaming a stage changes only the label and nothing else moves. Adding a new stage is safe too — put it in the first empty slot, K8. What to avoid is inserting a stage above slots that already have deals in them: the dates belong to the slot rather than the name, so everything below shifts meaning. If you need to restructure a pipeline you already have history in, email support first.
A deal is joined to a CRM row by its Contact ID, so the contact and communication columns on the Biz Dev tab read straight through from the CRM. Update someone’s details once, in the CRM, and the pipeline follows. The overnight is what keeps the dates current on both.
Still stuck? Email support@waterllm.com and we’ll get back to you within one business day — or use the contact form.