Financial Close Blueprint — Monthly Reconciliation Automation¶
Close Timeline¶
DAY 1 DAY 2-3 DAY 4-5 DAY 6-7
───── ─────── ─────── ──────
Data Pull Reconcile Reports Review +
Begin Close All Accounts + Variance Forecast
Architecture Overview¶
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│Accounting│ │Payment │ │ Banking │ │ CRM / │
│(QBO/Xero)│ │Processor │ │ Data │ │ Billing │
└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │ │
└─────────────┴──────┬──────┴─────────────┘
│
┌─────────▼─────────┐
│ Close Engine │
│ - Data pull │
│ - Reconciliation │
│ - Variance check │
│ - Report gen │
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ Outputs │
│ - P&L, Balance │
│ - Variance report │
│ - Forecast update │
│ - Close package │
└───────────────────┘
Day 1: Data Collection and Initial Close¶
Morning: Trigger the Close¶
Cron: 0 6 1 * * — 6 AM on the 1st of each month.
The close automation begins by pulling data from all financial sources for the period that just ended.
Step 1: Pull Accounting Data¶
From the accounting system (QuickBooks, Xero, etc.), extract: 1. Trial Balance — all accounts with ending balances for the period 2. Profit & Loss — revenue and expense categories with period totals and year-to-date 3. Balance Sheet — assets, liabilities, and equity as of period end 4. Transaction Detail — general ledger detail for key accounts flagged for review 5. Accounts Receivable Aging — outstanding invoices by age bucket 6. Accounts Payable Aging — unpaid bills by age bucket
Step 2: Pull Payment Processor Data¶
From Stripe or other payment processors: 1. Gross revenue for the period (charges, net of refunds) 2. Fees — processing fees, dispute fees, platform fees 3. Payouts — what actually hit the bank, by date 4. Disputes — open and resolved chargebacks with amounts 5. Refunds — period refunds with reasons
Step 3: Pull Banking Data¶
If bank feeds are available: 1. Ending balances for each bank account as of the last day of the period 2. Outstanding checks or pending transactions that haven't cleared 3. Bank fees and interest for the period
Step 4: Pull Supplementary Data¶
From other systems: - CRM: New customers added, churned customers, expansion/renewal revenue (for SaaS metrics) - Subscription management: MRR, ARR, active subscriptions, plan breakdowns - Expense management: Employee expenses awaiting reimbursement, corporate card transactions - Payroll: Period payroll totals if available
Step 5: Generate Close Checklist¶
The agent generates a personalized close checklist based on what data was successfully pulled and what needs attention:
# Monthly Close Checklist — [MONTH YEAR]
## Data Status
| Source | Status | Notes |
|---|---|---|
| QuickBooks | ✅ Complete | All accounts pulled |
| Stripe | ✅ Complete | 3 pending disputes flagged |
| Bank (Primary) | ✅ Complete | |
| Bank (Savings) | ⚠️ Partial | Missing last 2 days of transactions |
| CRM | ✅ Complete | |
## Reconciliation Tasks
- [ ] Reconcile Stripe revenue vs QBO revenue (variance threshold: 1%)
- [ ] Reconcile bank balance vs QBO bank account balance
- [ ] Verify all invoices issued match period revenue
- [ ] Review uncategorized transactions (> $500)
- [ ] Confirm inter-company transfers net to zero
- [ ] Verify prepaid expense amortization
- [ ] Accrue expenses for received-not-invoiced items
## Review Items
- [ ] Any expense > [THRESHOLD] without proper documentation?
- [ ] Revenue recognition: any multi-period contracts misclassified?
- [ ] Fixed assets: any additions or disposals this month?
Day 2-3: Reconciliation¶
Automated Reconciliation¶
Cron: 0 7 2 * * — Day 2 reconciliation run, with a follow-up on Day 3 if variances remain.
Revenue Reconciliation¶
The most critical reconciliation: does payment processor revenue match accounting system revenue?
Stripe gross revenue (period): $XXX,XXX.XX
QuickBooks revenue (period): $XXX,XXX.XX
Variance: $X,XXX.XX (X.XX%)
Variance sources:
- Timing differences (items recorded in different periods)
- Refund timing (processed vs recorded)
- Fee classification (gross vs net reporting)
- Failed/declined charges appearing in one system but not the other
Automatic actions when variance > 1%: 1. Flag the discrepancy with a detailed breakdown by day 2. Identify the specific transactions causing the variance 3. If the pattern matches a known issue (e.g., refund timing), note it 4. If the cause is unknown, escalate to the finance team with a suggested investigation plan
Bank Reconciliation¶
Match the accounting system's bank balance to the actual bank balance:
1. Pull ending balance from bank statement
2. Pull balance per accounting system for the same account
3. List outstanding checks and deposits in transit
4. Compute adjusted balance: Book Balance + Deposits in Transit - Outstanding Checks
5. Compare to bank statement balance — should match within de minimis threshold
Accounts Receivable Reconciliation¶
- Pull AR aging from accounting system
- Cross-reference with CRM/billing to identify which outstanding invoices are actually in dispute or likely uncollectible
- Flag AR > 90 days for potential write-off
- Generate AR health score: current AR / monthly revenue (should be stable or declining)
Day 4-5: Reporting and Variance Analysis¶
Cron: 0 6 4 * * — Day 4 report generation.
Financial Package¶
Generate the monthly financial package:
1. Executive Summary (1 page) - Revenue: actual vs budget, variance %, key drivers - Gross margin: actual vs target, trend - Operating income: actual vs budget - Cash position: ending balance, burn rate, runway - 2-3 key highlights and 1-2 concerns
2. Profit & Loss with Variance Analysis
| Category | Actual | Budget | Variance | Var % | Commentary |
|---|---|---|---|---|---|
| Revenue | $XXX | $XXX | $XX | X.X% | [Auto] |
| COGS | $XXX | $XXX | $XX | X.X% | [Auto] |
| Gross Profit | $XXX | $XXX | $XX | X.X% | |
| Gross Margin % | XX.X% | XX.X% | X.Xpp | | |
| Operating Expenses| | | | | |
| - Sales & Marketing| $XXX | $XXX | $XX | X.X% | |
| - R&D | $XXX | $XXX | $XX | X.X% | |
| - G&A | $XXX | $XXX | $XX | X.X% | |
| Total OpEx | $XXX | $XXX | $XX | X.X% | |
| Operating Income | $XXX | $XXX | $XX | X.X% | |
3. Balance Sheet - Assets, liabilities, equity with prior period comparison - Key ratios: current ratio, quick ratio, debt-to-equity
4. Cash Flow Summary - Operating, investing, and financing cash flows - Net cash change and ending balance - Burn rate and runway calculation (for startups)
Automated Commentary¶
For line items with variance > 5% or > $[THRESHOLD], the agent generates commentary: 1. What changed (automated data comparison) 2. Possible drivers (based on transaction detail analysis) 3. Whether this is a one-time item or a trend (compare to prior months) 4. Recommended follow-up questions for the finance team
Day 6-7: Review and Forecast¶
Cron: 0 8 6 * * — Day 6 forecast update.
Forecast Update¶
Based on the just-closed month and year-to-date results, update the rolling forecast:
- Revenue forecast: Update based on actual YTD performance, pipeline data from CRM, and seasonality patterns
- Expense forecast: Update based on actual run rate, known changes (hires, contract changes)
- Cash forecast: Project ending cash for the next [3/6/12] months based on updated revenue and expense forecasts
- Scenario modeling: Generate best-case, base-case, and worst-case scenarios with key assumptions
Close Package Distribution¶
Cron: 0 9 7 * * — Day 7 package distribution.
The completed close package is distributed: 1. Full package → finance team (email with PDF/Notion link) 2. Executive summary → leadership team (Slack message + 1-pager) 3. Department P&Ls → department heads (their actuals vs budget) 4. Investor update → if applicable, formatted for investor reporting 5. Board materials → if board meeting is within 30 days, flag topics for inclusion
Close Retrospective¶
After distribution, the agent generates a process retrospective: - What data was missing or late? - Which reconciliations took the most manual effort? - What variances were unexpected and needed investigation? - Recommended process improvements for next month
Full Cron Schedule¶
| Day | Time | Task | Cron |
|---|---|---|---|
| 1st | 06:00 | Trigger close — pull all data | 0 6 1 * * |
| 2nd | 07:00 | Run automated reconciliations | 0 7 2 * * |
| 3rd | 07:00 | Re-run reconciliations for unresolved items | 0 7 3 * * |
| 4th | 06:00 | Generate financial package and variance analysis | 0 6 4 * * |
| 5th | 08:00 | Human review of package (reminder) | 0 8 5 * * |
| 6th | 08:00 | Update rolling forecast | 0 8 6 * * |
| 7th | 09:00 | Distribute close package | 0 9 7 * * |
Mid-Month and Pre-Close¶
Don't wait for month-end to start the close process:
| Timing | Task | Cron |
|---|---|---|
| 15th | Mid-month estimate: project month-end results | 0 8 15 * * |
| 25th | Pre-close prep: identify missing transactions, chase outstanding items | 0 8 25 * * |
| Last day | Soft close: preliminary data pull to identify issues early | 0 18 L * * |
Implementation Notes¶
Materiality Thresholds¶
Not every variance needs investigation. Configure materiality thresholds:
materiality:
revenue_variance_pct: 1.0 # Flag if revenue miss > 1%
expense_line_min: 500 # Don't investigate < $500 variance
bank_reconciliation_max: 0.01 # Must match to within 1 cent
aging_alert_days: 90 # Flag AR items > 90 days
Chart of Accounts Standardization¶
The automation relies on consistent account names and numbers. If your chart of accounts changes, update the automation mappings immediately. Run a check on Day 25 of each month: do all mapped accounts still exist?
Audit Trail¶
Every automated journal entry suggestion, reconciliation adjustment, and report generation should be logged with: - Timestamp - Source data references - Calculation methodology - Human approval status
This is essential for audit readiness and debugging why a number changed between months.
Extending¶
- Connect spreadsheet-based budgets so variance analysis compares to the official budget, not last month
- Add multi-entity consolidation for organizations with subsidiaries
- Integrate tax compliance checks — estimated tax payment adequacy, sales tax collection gaps
- Connect to investor reporting templates for automatic investor update generation