Month end close
Closing a month means the numbers for that period are final and can be reported on. Most small businesses never really close: they leave periods open, keep posting into them, and then wonder why last quarter’s profit changed. A close is what stops that.
The work is a checklist, and the value is in running the same checklist every month rather than remembering what mattered last time.
What close means here
Three levels, and it is worth agreeing which one is being asked for:
| Level | What it involves | Who |
|---|---|---|
| Soft close | Reconcile, review, produce management accounts. Period stays open | Monthly, internal |
| Hard close | Soft close plus a lock date, so nothing can move | Monthly or quarterly |
| Year end | Hard close plus accruals, depreciation, adjusting journals | Once, with an accountant |
This skill covers soft and hard close. Year end is an accountant’s job and includes judgements (provisions, depreciation policy, accruals) that should not be made without one.
The checklist
Run in this order. Each step depends on the ones above it, and doing them out of order produces numbers you have to redo.
- Bank accounts reconciled. Every account, to the period end date. If they are not reconciled, stop: nothing below this is meaningful. See the
bank-reconciliationskill - Sales invoiced. All work delivered in the period is on an invoice dated in the period
- Receivables reviewed. Aged debtors pulled, anything over terms flagged. See the
chase-overdue-invoicesskill - Purchases entered. Supplier bills received for the period are in, including ones that arrive after month end but relate to it
- Payables reviewed. Aged creditors pulled, anything overdue flagged
- Suspense and uncategorised cleared. These accounts should be nil at close. A balance in suspense is an unfinished decision
- Payroll posted. The period’s pay runs are in the ledger, with tax and superannuation or pension liabilities recorded
- Tax accounts checked. Sales tax, GST or VAT control accounts agree to what has been lodged and paid
- Intercompany and owner accounts checked. Director loans, owner drawings, transfers between entities
- Review the P&L against last month and last year. Movements you cannot explain are errors until proven otherwise
- Review the balance sheet. Every balance should be something you can point at
- Lock the period. Only for a hard close, and only once 1 to 11 pass
assets/close-checklist.md is the same list in a form you can hand a customer, with a column for who does what.
Where to get each number
Vendor specifics, including the exact report tool for each step:
What to look at in the review steps
Steps 10 and 11 are where errors are actually caught, and they are the ones most often skipped because they need judgement rather than a query.
On the profit and loss, compare against both the prior month and the same month last year. Ask about anything that moved more than about 20 percent, plus:
- A revenue line that is nil when it should not be, usually means uninvoiced work
- An expense line that doubled, usually a duplicate bill or a coding error
- An expense that vanished, usually a bill not yet entered
- Gross margin moving without a reason. This is the most commercially important signal on the page
On the balance sheet, every line should be explainable:
- Bank balances agree to reconciliations
- Receivables agree to the aged debtors report
- Payables agree to the aged creditors report
- Suspense, uncategorised and clearing accounts are nil
- Tax control accounts agree to lodgements
- Anything named “ask my accountant” is by definition unfinished
Locking
A lock date is the mechanism that makes a close real. Without it, “closed” is a statement of intent.
Set it only when the checklist passes, and understand that it stops the customer editing history too, which is the point and is occasionally unwelcome. Say what it will do before doing it, and get explicit agreement. Do not set a lock date on your own initiative.
What to do when it does not pass
Report it as not closed and say which step failed. A close that is declared complete with two accounts unreconciled and $4,000 in suspense is worse than no close, because the management accounts that come out of it get believed.
The right output is: here is the checklist, here is where it stopped, here is what needs to happen and who needs to do it.
Reference files
Everything the skill tells your AI to read, exactly as it ships in the zip.
references/quickbooks.md 3.5 KB
# Month end in QuickBooks Online
## 1. Bank reconciliation
```
quickbooks_list_accounts filter to AccountType Bank
quickbooks_get_general_ledger the account's transactions
quickbooks_get_balance_sheet as at period end
```
QuickBooks does not expose a reliable reconciled flag, so the review is built from the general ledger against a statement balance. See the `bank-reconciliation` skill.
## 2 and 3. Sales and receivables
```
quickbooks_list_invoices
quickbooks_get_aged_receivables the authoritative debtor ageing
quickbooks_list_estimates quoted, not yet invoiced
quickbooks_list_credit_memos credits that reduce the real balance
```
`quickbooks_get_aged_receivables` is the number to use. Do not compute ageing from invoice dates: credit memos, payments on account and deposits all change it.
An accepted estimate with no invoice against it, for work delivered in the period, is uninvoiced revenue. Check for it.
## 4 and 5. Purchases and payables
```
quickbooks_list_bills
quickbooks_get_aged_payables
quickbooks_list_purchase_orders
quickbooks_list_vendor_credits
```
## 6. Suspense and uncategorised
QuickBooks creates `Uncategorised Income`, `Uncategorised Expense` and `Uncategorised Asset` automatically, and they fill up quietly.
```
quickbooks_get_general_ledger scoped to those accounts
```
Target is nil at close.
Also check `Ask My Accountant` if the file has one. It is a suspense account with a friendlier name and the same meaning.
## 7 and 8. Payroll and tax
Payroll is a separate QuickBooks product and may not be in scope for the connection. Check rather than assume.
```
quickbooks_list_tax_codes
quickbooks_list_tax_rates
quickbooks_list_tax_agencies
```
Sales tax liability agrees to what has been lodged, which is a number only the customer has.
## 10 and 11. Review
```
quickbooks_get_profit_and_loss the period
quickbooks_get_profit_and_loss_detail when a line needs opening up
quickbooks_get_balance_sheet
quickbooks_get_trial_balance
quickbooks_get_cash_flow
quickbooks_get_sales_by_customer concentration risk
quickbooks_get_sales_by_product mix
```
`quickbooks_get_profit_and_loss_detail` is the one that saves time in a review: when a line has moved and you do not know why, it opens the line into its transactions without a second round of queries.
`quickbooks_get_report` is the generic escape hatch for any report the named tools do not cover.
## 12. Closing the books
QuickBooks calls it Close the Books, and it takes a closing date and optionally a password. It is set in company settings, not through the API.
```
quickbooks_get_preferences tells you the current closing date
```
Check it first. Writing into a closed period fails, and the failure reads as a permission problem rather than a date problem if you are not expecting it.
## Practical notes
- **`SyncToken` must be current on every update.** Read immediately before writing
- **Sparse updates.** A full update replaces the object and clears omitted fields
- **Fault codes, not HTTP status, carry the reason.** The connector surfaces the code and the `intuit_tid`. Quote the tid in any failure report
- **Reads are metered.** Intuit charges for API reads on the current pricing, so pulling a report once and reusing it beats pulling it three times. This is a real cost, not a style preference
- **Classes and departments** are the QuickBooks departmental dimensions. If the file uses them, a review without them is incomplete
references/xero.md 3.3 KB
# Month end in Xero
The checklist step by step, with the call for each.
## 1. Bank reconciliation
```
xero_list_accounts filter to Type BANK
xero_list_bank_transactions check IsReconciled
xero_get_balance_sheet_report as at period end
```
See the `bank-reconciliation` skill for the full method.
## 2 and 3. Sales and receivables
```
xero_list_invoices ACCREC, status AUTHORISED
```
Anything still `DRAFT` and dated in the period is work delivered but not invoiced. That is the most common cause of a month looking worse than it was.
For the aged view, Xero's reports are the reliable source rather than computing ages yourself from invoice dates, because credit notes, prepayments and overpayments all change what is actually owed.
```
xero_list_credit_notes unallocated credits reduce the real debtor balance
```
## 4 and 5. Purchases and payables
```
xero_list_invoices ACCPAY
xero_list_purchase_orders orders not yet billed
```
A purchase order for goods received in the period with no bill against it is an accrual the customer should know about, even in a soft close.
## 6. Suspense and uncategorised
```
xero_list_accounts find the suspense account
xero_list_journals what hit it, and when
```
`xero_list_journals` is the ledger level view and paginates. Page through it rather than trusting the first response.
The target is a nil balance. A non nil suspense account at close means somebody decided not to decide.
## 7 and 8. Payroll and tax
Payroll lives in a separate Xero API surface with its own scopes, and may not be connected. Check before promising anything about it.
For tax control accounts, pull the account balance and compare it to what the customer says has been lodged and paid. The API cannot see lodgements, so this step needs a number from them.
## 10 and 11. Review
```
xero_get_profit_loss_report period, and the comparison period
xero_get_balance_sheet_report as at period end
xero_get_trial_balance_report everything, for a completeness check
```
Xero's profit and loss report accepts comparison periods, so pull the comparison in the same call rather than making three calls and diffing them yourself.
`xero_get_budget` gives you budget against actual where the customer maintains one, which turns a variance review from an opinion into a measurement.
## 12. Locking
Xero's lock dates are set in the organisation settings, not through the Accounting API. This is a step for the customer in the web app.
`xero_get_organisation` will tell you what the current lock dates are, which is worth checking at the start rather than discovering mid write that the period is locked.
Xero has two locks: one for everyone, and a later one for advisers only. Both matter, and a write can fail against either.
## Practical notes
- Xero paginates most list endpoints. Do not treat a first page as a complete set
- Rate limits are real and per tenant. Batch reads rather than looping one record at a time
- Report tools are much cheaper than reconstructing a report from transactions, and they are what the customer's accountant will compare against. Prefer the report
- Tracking categories are Xero's departmental dimension. If the customer uses them, a P&L without a tracking breakdown is only half the picture. `xero_list_tracking_categories` tells you whether they do
assets/close-checklist.md 3.1 KB
# Month end close checklist
Period: ____________________ Prepared by: ____________________ Date: ____________________
Every line is either done or blocked. A line that is neither means the close has not been run, it has been started.
## Reconcile
| # | Step | Done | Who | Notes |
|---|---|---|---|---|
| 1 | Every bank account reconciled to period end | ☐ | | |
| 2 | Every credit card reconciled to period end | ☐ | | |
| 3 | Payment platform balances agree (Stripe, Square, PayPal) | ☐ | | |
| 4 | Loan and finance account balances agree to statements | ☐ | | |
## Revenue
| # | Step | Done | Who | Notes |
|---|---|---|---|---|
| 5 | All work delivered in the period is invoiced | ☐ | | |
| 6 | No draft invoices dated in the period remain | ☐ | | |
| 7 | Aged receivables pulled and reviewed | ☐ | | |
| 8 | Credit notes and customer credits allocated | ☐ | | |
| 9 | Deposits and prepayments correctly held, not recognised early | ☐ | | |
## Costs
| # | Step | Done | Who | Notes |
|---|---|---|---|---|
| 10 | All supplier bills for the period entered | ☐ | | |
| 11 | Bills received after month end but relating to it are accrued or noted | ☐ | | |
| 12 | Aged payables pulled and reviewed | ☐ | | |
| 13 | Purchase orders received but not billed identified | ☐ | | |
| 14 | Staff expense claims submitted and entered | ☐ | | |
## Clean
| # | Step | Done | Who | Notes |
|---|---|---|---|---|
| 15 | Suspense account nil | ☐ | | |
| 16 | Uncategorised income, expense and asset accounts nil | ☐ | | |
| 17 | Clearing and undeposited funds accounts nil or explained | ☐ | | |
| 18 | No transactions coded to Ask My Accountant | ☐ | | |
## Payroll and tax
| # | Step | Done | Who | Notes |
|---|---|---|---|---|
| 19 | All pay runs for the period posted | ☐ | | |
| 20 | Payroll tax and superannuation or pension liabilities recorded | ☐ | | |
| 21 | Sales tax, GST or VAT control account agrees to lodgements | ☐ | | |
| 22 | Any tax paid in the period is recorded against the liability | ☐ | | |
## Owner and related party
| # | Step | Done | Who | Notes |
|---|---|---|---|---|
| 23 | Director or owner loan account reviewed | ☐ | | |
| 24 | Drawings and personal expenses identified and coded | ☐ | | |
| 25 | Intercompany balances agree both ways | ☐ | | |
## Review
| # | Step | Done | Who | Notes |
|---|---|---|---|---|
| 26 | P&L compared to prior month, movements over 20 percent explained | ☐ | | |
| 27 | P&L compared to same month last year | ☐ | | |
| 28 | Gross margin movement understood | ☐ | | |
| 29 | Every balance sheet line explainable | ☐ | | |
| 30 | Budget variance reviewed, where a budget exists | ☐ | | |
## Finalise
| # | Step | Done | Who | Notes |
|---|---|---|---|---|
| 31 | Management accounts produced and circulated | ☐ | | |
| 32 | Actions arising assigned with owners and dates | ☐ | | |
| 33 | Period locked (hard close only) | ☐ | | |
## Sign off
This period is:
☐ **Closed.** Every line above passes.
☐ **Closed with exceptions.** Passes except the lines noted, which are accepted and recorded here:
☐ **Not closed.** Blocked at step ____ because: