Service Pilot (Bookkeeping)
V2 and above. Part of the invite-only hosted editions, not the free self-hosted V1. See the editions.
The model
You operate AI Partner; your clients are tenants who never see the UI. They email bank-statement CSVs (or message you on WhatsApp/Telegram), the month-end-close workflow categorizes + reconciles + builds the P&L workbook, and the deliverable lands back in their inbox. You review HITL approvals and invoice from per-tenant usage.
v1 is file-based: CSV statements in, Excel out. (QuickBooks/Tally integration and PDF statement parsing are future phases.)
Onboard a client (~10 minutes)
- 1Create the client's tenant
Create an account for the client (e.g.
acme-stores) from your instance's administration settings. They never log in — the account exists for isolation: their statements, books, memory and costs live in their own workspace, separate from every other client's. - 2Connect your operator Gmail
Settings → Integrations → Gmail. This mailbox is what receives client statements and sends the finished deliverables back.
- 3Create the statement trigger
An inbound email trigger on the client's own account (see Triggers & Webhooks):
{"name": "Acme — statements","filter": "from:owner@acmestores.com has:attachment","fetchAttachments": true,"mode": "goal","taskTemplate": "A bookkeeping client emailed bank statements. Saved files:\n{{attachments}}\nRun the month-end close for these statements: categorize every transaction, reconcile balances to the cent, build the P&L workbook with formulas, and email it to owner@acmestores.com with the workbook attached. Subject: '{{subject}} — books closed'."}fetchAttachments: truesaves the CSVs into that client's own workspace and substitutes their paths into{{attachments}}. - 4Map their messaging handle (optional)
Map their WhatsApp number or Telegram ID to their account in your administration settings. Now "what was my biggest expense last month?" from their phone is answered from their books. Unmapped numbers are unaffected.
- 5Set the approval posture
Outbound email to clients is governed by your authority policy — by default
send_*actions are draft-and-ask, so you approve every outgoing deliverable at first (via the in-app prompt or Telegram HITL). Once the pipeline has earned trust, add an AUTHORITY.md rule to auto-approve sends to known client counterparties. - 6Dry-run
Email two sample statement CSVs from the client's address (format below). Watch the goal run; approve the send; confirm the workbook arrives with live SUM/SUMIF formulas and a zero reconciliation difference.
The workflow
The shipped Month-End Close template (Workflows gallery, month-end-close) runs four contract-gated steps:
categorize ──▶ reconcile ──▶ report ──▶ deliver
(bookkeeper) (bookkeeper) (excel- (bookkeeper:
categorized.csv reconciliation.csv builder) gmail_send + attachment)
+ balances.json diff itemized formulas,
csv schema gate to the cent 4 sheets
Each step's output is validated before the next starts (column schemas, freshness, minimum size); a failed reconciliation retries once with feedback. The bookkeeper profile enforces the discipline: no guessed categories (ambiguous → UNCATEGORIZED, listed explicitly), totals must tie to the statement, formulas not pasted numbers.
You can also skip the workflow and just talk to it — the bookkeeper profile auto-selects on keywords like reconcile, bank statement, p&l, or explicitly via @bookkeeper.
Statement CSV format
Any reasonable bank export works; the canonical shape:
date,description,amount,balance
2026-06-01,UPI/ACME SUPPLIES/payment,-12500.00,184300.50
2026-06-02,NEFT CR SALARY REIMB,45000.00,229300.50
Negative amounts = outflows. If the export lacks a balance column, include the statement's opening/closing balances in the email body.
Pricing the service
Each client's exact cost is metered to their own account, so you can see per-client spend directly. Cost-plus pricing is straightforward: a typical month-end run costs cents in model usage and replaces hours of manual work — price the outcome (₹/month per client), not the tokens.
Limits to know
- CSV statements only in v1 — PDF statements need conversion first (note it in your client instructions).
- The first sends require your approval (by design) — budget a minute per client per month until you loosen the authority rule.
- One operator Gmail serves all clients in v1; per-tenant mailboxes work too (store Gmail credentials as that tenant's secrets).