Client Reporting Automation Workflow: The Monthly Pack, Drafted and Ready to Sign
The monthly pack is the same job for every client — pull the numbers, compare to budget and last year, spot the three variances worth a sentence, write the sentences, format, send — and it takes the practice a week of month-end. The workflow builds each client's pack from the ledger on the schedule you set, drafts the narrative in the practice's style, flags what needs a partner's eye, and delivers the draft for sign-off. The accountant's time goes to the three sentences that matter, not the twenty that do not.
- Built and run for you$247/month
- Custom build$3,500–6,000 one-time
- TriggerSchedule (monthly, after the ledger closes) or on demand
- Reference stackClaude + n8n
Per practice, up to 25 clients on one ledger type, one pack template. Mixed ledgers, consolidated groups, board packs with custom charts, or a client-facing dashboard are a custom build.
Written by Max Zeshut
Founder at Agentmelt · Last updated Sep 14, 2026
Client packs are assembled by hand from exports, formulas break, the narrative is written last and late, and the clients who need attention get the same two paragraphs as everyone else. Month-end takes ten days.
Every client's pack is drafted by the third working day with the variances explained and the questions a partner should ask, ready for a fifteen-minute review. Clients get their numbers before they ask, in the same format every month.
How the workflow runs
Trigger, then 8 steps.
Trigger — Schedule (monthly, after the ledger closes) or on demand. On the day you set after month-end close — or when an accountant asks for a client by name — the pack for that client is built.
- 01Pull the numbersIntake & triggersHTTP RequestTrial balance, P&L, balance sheet, cash and aged receivables from Xero, QuickBooks or Sage for the period, prior period and prior year.
- 02Check the closeClassification & triageCodeUnreconciled bank lines, unposted drafts, suspense balances: if the close is not clean, the pack waits and the accountant is told what is open.
- 03Compute the comparisonsEnrichment & researchCodeAgainst budget, prior month and prior year; margins, cash runway, debtor days; the client's own KPIs from their settings.
- 04Find the variances that matterScoring & detectionAI AgentRanks movements by size and by whether they are one-off, timing or trend, and names the three a client should hear about — with the evidence lines.
- 05Draft the narrativeDrafting & generationAI AgentIn the practice's style from past packs: what happened, why, what to watch — two to four paragraphs and the partner's questions, never invented causes.
- 06Assemble the packWrite-back & actionsGoogle DocsThe practice's template filled: tables, charts, narrative, KPIs, with the client's branding where used; PDF and editable versions.
- 07Review and sign offApprovals & human-in-the-loopSlackThe accountant gets the draft with the flagged variances and the open questions; edit, approve or send back with a note.
- 08Deliver and logNotifications & escalationGmailSent to the client from the accountant's address on approval, with a short cover note; the pack is filed in the client's folder and logged.
Each capability page explains the pattern and lists every automation that uses it.
The template is built on n8n. The same steps run on Make, Zapier or plain code; the tool is chosen to fit your accounts, and you own the result.
- 01 Pull the numbers —
HTTP Request - 02 Check the close —
Code - 03 Compute the comparisons —
Code - 04 Find the variances that matter —
AI Agent - 05 Draft the narrative —
AI Agent - 06 Assemble the pack —
Google Docs - 07 Review and sign off —
Slack - 08 Deliver and log —
Gmail
Data it touches
- Ledger (Xero, QuickBooks Online, Sage, NetSuite)
- Budgets and client KPI settings
- Prior packs (style and structure)
- Client folder (Drive, SharePoint)
- Practice pack template
Guardrails
- No pack is drafted on an unclean close; the workflow reports what is open instead.
- The narrative can only cite movements present in the numbers; causes are stated as 'appears to be' unless the ledger shows them.
- Every pack is approved by the accountant before it reaches a client.
- Numbers in the narrative are checked against the tables before the draft is shown.
- Client data stays in the ledger and the client folder; model calls use an API with no data retention.
Standard or custom
When this becomes a custom build.
The subscription covers the standard version — $247/month, setup and maintenance included. Three things move it to a custom build ($3,500–6,000 one-time), delivered into your accounts to keep. If one of them is you, say so on the audit and the plan prices both.
A practice with clients on mixed ledgers, or more than 25 clients, needing a client switchboard.
Consolidated or multi-entity groups with intercompany eliminations.
A live client dashboard instead of a monthly document, or board packs with custom charts.
Running the standard version first is the usual path: the exceptions it logs in the first month are the scope of the custom build, with your own numbers. How custom builds work.
The pack is a writing job disguised as a reporting job
Pulling the numbers is minutes; the week goes on deciding what to say. The workflow does the ranking — which movements are big, which are timing, which are trends — and drafts the sentences from the evidence, in the style of the practice's own past packs. The accountant edits three paragraphs instead of composing them, and the packs read the same whoever drafted them.
An unclean close produces a wrong pack, so it produces none
Most embarrassing packs come from drafting before reconciliation finished. The close check runs first and stops the pack if bank lines are unreconciled, drafts are unposted or suspense has a balance — and tells the accountant exactly what is open. The pack that arrives is built on numbers that will not move.
Consistency is what clients notice
Clients rarely remember a clever sentence; they remember getting their numbers on the third of every month, in the same format, with the same three questions answered. The workflow makes that cadence the default for every client, not only the ones a partner likes.
Tools in the stack
What it connects to.
| Tool | Role in this workflow |
|---|---|
| n8n | Scheduling, ledger pulls, assembly, delivery |
| Claude | Variance selection and narrative in the practice's style |
| Xero / QuickBooks / Sage | Source numbers |
| Google Docs / Word | The pack |
| Gmail / Outlook | Delivery from the accountant's address |
Building it in Zapier instead? The step-by-step recipe.
Zapier has no importable file, so this is the build guide: the same process as the n8n template and the Make blueprint, one Zap step per line. Expect 10–14 steps; the AI steps use the Anthropic (Claude) app, rules go in Code by Zapier, and every AI step is followed by a Filter that stops the Zap when Claude flags the item for a person.
Before you start
– Keep the values from "Config (edit me)" somewhere the steps can read them — a Storage by Zapier key each, or a Formatter → Utilities step at the top of the Zap: your name, your email, company, time zone, quiet hours (21–8), approver (channel or email), test mode.
– Connect the apps once: Anthropic (an API key), plus Xero / QuickBooks / Sage, Google Docs / Word, Gmail / Outlook.
– Turn the Zap on with test mode on; read the first runs in Zap History before switching it off.
Steps
- Trigger — Webhooks by Zapier — Catch Hook (trigger). On the day you set after month-end close — or when an accountant asks for a client by name — the pack for that client is built.
- Webhooks by Zapier — Custom Request. GET
https://api.xero.com/api.xro/2.0/Reports/ProfitAndLoss?fromDate=…&toDate=…(Xero API; add the API key header). Trial balance, P&L, balance sheet, cash and aged receivables from Xero, QuickBooks or Sage for the period, prior period and prior year. - Code by Zapier (JavaScript) — Check the close. Unreconciled bank lines, unposted drafts, suspense balances: if the close is not clean, the pack waits and the accountant is told what is open. Start from
return { ...inputData };and add the rule. - Code by Zapier (JavaScript) — Compute the comparisons. Against budget, prior month and prior year; margins, cash runway, debtor days; the client's own KPIs from their settings. Start from
return { ...inputData };and add the rule. - Anthropic (Claude) — Send Message. Model
claude-sonnet-5, max tokens 2000, temperature 0.2. Paste the system prompt below; the user message is the fields from the previous step.You are the "Find the variances that matter" step of the Client Reporting Automation Workflow workflow run by Agentmelt. Task: Ranks movements by size and by whether they are one-off, timing or trend, and names the three a client should hear about — with the evidence lines. Rules: - No pack is drafted on an unclean close; the workflow reports what is open instead. - The narrative can only cite movements present in the numbers; causes are stated as 'appears to be' unless the ledger shows them. - Every pack is approved by the accountant before it reaches a client. - Numbers in the narrative are checked against the tables before the draft is shown. - Client data stays in the ledger and the client folder; model calls use an API with no data retention. - Answer only from the data provided in the input. If something is missing, say so in the output instead of guessing. - If this step produces a message or a document, put the full text in `draft` (and a `subject` if it is an email); put a one-line summary in `summary`. - Set `needs_human` true whenever you are unsure, the input is unusual, or a rule above applies; a person will look at it. - Return valid JSON matching the output schema; no prose outside the JSON. Reply with a single JSON object and nothing else: the fields the task needs, plus "needs_human" (true when unsure), "confidence" (0–1) and "summary" (one line).
- Code by Zapier (JavaScript) — parse Claude's JSON. Input
text= Claude's reply; codereturn JSON.parse(inputData.text);so the fields become mappable in later steps. - Filter by Zapier. Only continue if
needs_human(from the previous step) *does not exactly match*true. Everything Claude is unsure about stops here — check Zap History for those, or add a Paths step whose second path posts the item to your approver. - Anthropic (Claude) — Send Message. Model
claude-sonnet-5, max tokens 2000, temperature 0.2. Paste the system prompt below; the user message is the fields from the previous step.You are the "Draft the narrative" step of the Client Reporting Automation Workflow workflow run by Agentmelt. Task: In the practice's style from past packs: what happened, why, what to watch — two to four paragraphs and the partner's questions, never invented causes. Rules: - No pack is drafted on an unclean close; the workflow reports what is open instead. - The narrative can only cite movements present in the numbers; causes are stated as 'appears to be' unless the ledger shows them. - Every pack is approved by the accountant before it reaches a client. - Numbers in the narrative are checked against the tables before the draft is shown. - Client data stays in the ledger and the client folder; model calls use an API with no data retention. - Answer only from the data provided in the input. If something is missing, say so in the output instead of guessing. - If this step produces a message or a document, put the full text in `draft` (and a `subject` if it is an email); put a one-line summary in `summary`. - Set `needs_human` true whenever you are unsure, the input is unusual, or a rule above applies; a person will look at it. - Return valid JSON matching the output schema; no prose outside the JSON. Reply with a single JSON object and nothing else: the fields the task needs, plus "needs_human" (true when unsure), "confidence" (0–1) and "summary" (one line).
- Code by Zapier (JavaScript) — parse Claude's JSON. Input
text= Claude's reply; codereturn JSON.parse(inputData.text);so the fields become mappable in later steps. - Filter by Zapier. Only continue if
needs_human(from the previous step) *does not exactly match*true. Everything Claude is unsure about stops here — check Zap History for those, or add a Paths step whose second path posts the item to your approver. - Google Docs — Create Document from Text — Assemble the pack. The practice's template filled: tables, charts, narrative, KPIs, with the client's branding where used; PDF and editable versions.
- Slack — Send Channel Message (approval). Send the summary to your approver with what would be written. Zapier has no wait-for-reply step: with approval mode on, stop the Zap here and re-run the write-back by hand (or from a second Zap triggered by a Slack reaction on the message). With approval mode off, the next step runs immediately.
- Filter by Zapier. Only continue if the stored
approval_modeisfalse. - Gmail — Send Email — Deliver and log. Sent to the client from the accountant's address on approval, with a short cover note; the pack is filed in the client's folder and logged.
Guardrails to keep
– No pack is drafted on an unclean close; the workflow reports what is open instead.
– The narrative can only cite movements present in the numbers; causes are stated as 'appears to be' unless the ledger shows them.
– Every pack is approved by the accountant before it reaches a client.
– Numbers in the narrative are checked against the tables before the draft is shown.
– Client data stays in the ledger and the client folder; model calls use an API with no data retention.
Full blueprint: https://agentmelt.com/workflows/client-reporting-automation/ · n8n template and Make blueprint: https://github.com/zeshutmax/agentmelt-blueprints
Want this running without building it?
Automation workflow
$247/month
We set up, host and maintain this workflow on n8n and connect it to your tools. Setup included, cancel monthly, you keep the JSON.
Custom build
$3,500–6,000 one-time
Your systems, your rules, your edge cases. A one-off build on Claude and n8n, delivered with documentation and a walkthrough.
Per practice, up to 25 clients on one ledger type, one pack template. Mixed ledgers, consolidated groups, board packs with custom charts, or a client-facing dashboard are a custom build.
Also sold one-time, installed in your own accounts, as part of the accountants package — kit $49 · install $249 · package $490.
FAQ
Frequently asked questions.
Does it send anything to clients on its own?
No. Every pack goes to the accountant for approval first, and is sent from their address on approval.
Our packs are in Excel.
The template can be a Google Sheet or an Excel workbook; the tables are filled and the narrative goes into a cover document. Custom charts beyond the template are a custom build.
What about the clients who need a call, not a pack?
The draft flags those — a sharp cash decline, a debtor days jump — as 'call first'. The pack still gets drafted; the accountant decides how it is delivered.
Sources
What this blueprint is built on.
Vendor documentation the steps rely on, and the rules the guardrails are written against.
- Xero — Developer documentation developer.xero.com/documentation/
- Intuit — QuickBooks Online API, getting started developer.intuit.com/app/developer/qbo/docs/get-started
- Google — Docs API overview developers.google.com/workspace/docs/api