What this automation does
The close stops being a spreadsheet of tasks and a week of copy-paste, and becomes a sequence that runs on its own calendar.
- Open the close. On the last business day of the month, the workflow creates the close checklist for the period, assigns owners and due dates by business day, and posts it to a Slack channel.
- Check tasks off from data. Where a system can prove a task is done, it does. Payroll journal posted, depreciation entry present, AR and AP subledgers tied to the GL, and bank reconciliation status where the API or your reconciliation worksheet exposes it. Owners only mark judgment tasks by hand.
- Chase what is late. Owners get one reminder when a task is due and an escalation to the controller when it slips, rather than a stream of pings.
- Pull the numbers once the period is locked. After the controller sets the closing date, the workflow pulls the trial balance, P&L and balance sheet for the period, prior period and budget.
- Run the flux analysis. Code computes variances by account and flags those above both a percent and a dollar threshold. For each flagged account, the GL detail is grouped and an LLM drafts an explanation citing the transactions behind the change.
- Assemble the package. Statements, KPIs, flux commentary and open items land in a Google Sheets or Excel package, or refresh a Power BI report, and the controller gets a review link.
When it is worth building
Build this when your close takes longer than it should for reasons that are not accounting judgment. Typical signs are a close that runs past the tenth business day, a controller who spends two days formatting the same package every month, and owners asking for numbers that are still changing.
Do not start here if reconciliations and entry are still largely manual. The close cannot finish faster than its slowest input. Start with bank reconciliation and come back. Also skip the custom build if a dedicated close platform already fits your team and budget. This program wins for teams of one to five people running QuickBooks Online, Xero, NetSuite or Sage Intacct who want the close wired into the tools they use every day.
Architecture
| Layer | What we use | Why |
|---|---|---|
| Close calendar | A Postgres task table with a simple Slack or Teams interface, or Asana or ClickUp if your team already uses one | One list of who owes what, with dates tied to business days |
| Auto-checks | Queries against the accounting system for entries and subledger balances, plus reconciliation status from your reconciliation worksheet where the accounting API does not expose it | Removes “is it done yet” messages for anything a system can confirm |
| Data pulls | QuickBooks Online and Xero report endpoints through n8n, NetSuite through its REST web services, Sage Intacct through its web services API (which requires the Web Services subscription and an authorized sender ID) | Trial balance, statements and GL detail straight from the ledger |
| Warehouse | Postgres tables keyed by entity, period and account | Lets you compare periods, track restatements and feed any reporting tool |
| Flux commentary | Claude Sonnet 5.5 with grouped GL detail and owner notes | Drafts explanations grounded in real transactions |
| Package | Google Sheets, Excel or Power BI | Matches how your owners and lenders already read financials |
How to build it
- Write down the current close. List every task, its owner, its input, the day it usually finishes and what proves it is done. Most teams find a third of their tasks can be checked automatically.
- Define “final”. Decide what event marks the period as final, usually the closing date in the accounting system. Every pull keys off that event so the package never shows numbers that later move.
- Build the account mapping. Map the chart of accounts to reporting lines and to the budget. Store it as a table with an effective date, because the chart will change.
- Set materiality. Agree on flux thresholds with the controller, such as a percent change and a dollar floor that must both be met. Tune after two closes.
- Build the commentary step. For each flagged account, group GL lines by vendor, customer or memo, rank by contribution to the change, and pass the top groups to the model. Require it to cite group IDs and to say “unexplained” when the groups do not account for most of the change.
- Build the package. Generate statements and the flux page into a fixed template. Keep numbers computed by code and words drafted by the model in clearly separate cells.
- Run two closes in parallel. Produce the package alongside the manual version and reconcile every number before the old process retires.
What breaks in production
- Late entries after the pull. A reclass is posted after the package is built. Re-pull on any change dated in a closed period and highlight what moved since the last version.
- Report shape changes. Accounting report APIs return nested rows whose structure shifts when you add classes, locations or new accounts. Parse by account ID, never by row position.
- Chart of accounts changes. A new account appears with no mapping, and its balance silently drops out of a reporting line. Fail the run loudly on any unmapped account with a balance.
- Plausible but wrong commentary. The model blames the largest vendor in the account when the real driver is a reversed accrual. Grounding in grouped transactions and the “unexplained” escape hatch keep this rare. Controller review keeps it out of the final package.
- Budget version confusion. The budget was revised mid-year and the package compares against the old one. Store budget versions explicitly and show which one is in use.
- Checklist rot. Tasks for processes you no longer run keep generating reminders. Review the template every quarter.
Timeline and cost
A single-entity close on QuickBooks Online or Xero, with checklist, flux analysis and package, typically takes four to six weeks. Multi-entity NetSuite or Sage Intacct closes run closer to eight. Lumeor scopes this as an automation program at $15,000 to $35,000, depending on entity count, how many close tasks can be auto-checked, and the reporting destination. A reporting package on its own, without the checklist, is usually priced as a single workflow. See what an n8n automation program costs for how we scope multi-workflow builds. The narrative layer for owners and boards is covered separately in AI financial report summaries.
How to measure success
- Business days from month end to final package, tracked every close
- Close tasks verified automatically versus marked by hand
- Post-close adjustments that change the package after it is sent
- Flux explanations accepted by the controller without rewriting
- Controller hours spent assembling the package
- Number of reminder escalations per close, which should fall as habits settle