Multi-entity consolidation is where finance teams lose the most time in the monthly close: pulling trial balances from separate accounting systems, converting currencies, matching intercompany balances that never quite net to zero on the first pass, and building a group-level package by hand. This workflow validates and processes each entity independently, then consolidates, so problems surface at the entity level where they are cheap to fix rather than at the group level where they are expensive to untangle.
Workflow diagram
flowchart TD
A[Monthly Trigger] --> B[Get Entity List]
B --> C[Split By Entity]
C -->|done| P[Consolidate Group Financials]
C -->|entity| D[Pull Trial Balance]
D --> E[Validate Debits=Credits]
E --> F{Balanced?}
F -->|No| G[Alert Controller] --> H[Wait Correction]
F -->|Yes| I{Foreign Entity?}
I -->|Yes| J[Convert Currency]
I -->|No| K[Merge Currency]
J --> K
H --> L[Merge Validation]
K --> L
L --> M[Apply Eliminations]
M --> N{Mismatch?}
N -->|Yes| O[Flag Manual Reconciliation]
N -->|No| Q[Merge]
O --> Q
Q --> C
P --> R[Compare Prior Month/Budget]
R --> S[AI Variance Commentary]
S --> T[Generate Close Package]
T --> U[CFO Review Gate]
U --> V[Distribute Package]
V --> W[Lock Period]
W --> X[Log Cycle Metrics] Every branch shown here (IF/Switch outcomes) exists as a real conditional in the downloadable JSON, not a simplification for this diagram.
Validate before you consolidate, not after
Validate Debits Equal Credits checks each entity's trial balance independently before it ever touches the consolidation logic. An unbalanced entity ledger that enters consolidation produces a group-level discrepancy that could originate from any of a dozen entities, turning a five-minute entity-level fix into a multi-hour investigation.
Alert Entity Controller routes the problem to the person who can actually fix it, at their own ledger, immediately, rather than surfacing as an unexplained group-level variance days later.
Currency conversion and eliminations, the two steps that eat the most manual time
Is Foreign Entity? branches only foreign-currency entities through Convert To Group Currency, using the period-appropriate exchange rate rather than a stale or manually-entered rate, one of the more common sources of small consolidation errors that compound over a fiscal year.
Apply Intercompany Eliminations matches receivables and payables between entities that should net to zero. Elimination Mismatch? flags anything that does not, which in practice is almost always either a timing difference (one entity recorded a transaction a day before the other) or a genuine data entry error, both of which need a human to resolve rather than being silently ignored or force-balanced.
The same review-gate principle as board reporting, applied to the close
CFO Review Gate blocks Distribute Close Package the same way the Board Reporting template blocks board distribution: AI drafts the variance commentary, but a human confirms the consolidated numbers and narrative before anyone outside finance sees them.
Lock Accounting Period runs only after distribution, preventing a post-close edit in any entity's ledger from silently invalidating numbers that have already been reported and relied upon.
Node-by-node reference
| Node | Type | Role |
|---|---|---|
| Validate Debits Equal Credits | Code | Catches an unbalanced entity before it corrupts group-level numbers |
| Is Foreign Entity? / Convert To Group Currency | IF + HTTP Request | Period-appropriate FX conversion, only where actually needed |
| Apply Intercompany Eliminations | Code | Matches intercompany balances that should net to zero |
| Elimination Mismatch? | IF | Flags genuine discrepancies for human reconciliation, never force-balances |
| CFO Review Gate | Wait (webhook resume) | No consolidated package leaves finance without explicit sign-off |
| Lock Accounting Period | HTTP Request | Prevents post-distribution edits from invalidating reported numbers |
28 total nodes in the downloadable file, including sticky-note documentation embedded directly on the canvas.
Key logic, in code
Trial balance validation
const totalDebits = $json.lineItems.reduce((sum, li) => sum + (li.debit || 0), 0);
const totalCredits = $json.lineItems.reduce((sum, li) => sum + (li.credit || 0), 0);
const imbalance = Math.abs(totalDebits - totalCredits);
return [{
json: {
...$json,
totalDebits,
totalCredits,
balanced: imbalance < 0.01,
imbalance,
}
}]; Before / after
| Metric | Before | After this workflow |
|---|---|---|
| Time to identify an unbalanced entity | Discovered at group level, hard to trace | Caught at entity level, immediately |
| Intercompany reconciliation | Manual matching across entity ledgers | Automatic matching, exceptions flagged |
| Close cycle length | Days, dependent on manual consolidation | Hours of processing, review time only |
| Post-close data integrity | Vulnerable to edits after reporting | Period locked after distribution |
Prerequisites
- n8n v1.40+ with Split In Batches and webhook-resume Wait support
- Accounting API access per entity (Xero, QuickBooks, or NetSuite)
- An exchange rate API for multi-currency groups
- Anthropic API key, Google Slides OAuth2
- Airtable PAT, Slack Bot Token, Resend API key
Common pitfalls
Exchange rate timing must match your accounting policy
Using spot rate versus period-average rate produces different, both defensible, results. Confirm which your accounting policy requires before wiring the conversion logic.
Intercompany chart-of-accounts mapping needs to be exact
Elimination logic depends on correctly identifying which accounts represent intercompany balances across entities using potentially different charts of accounts.
Never let period locking happen before distribution is confirmed
Locking too early can block a legitimate last-minute correction; locking only after Distribute Close Package confirms the reported numbers are final.
Want this deployed, configured and monitored?
The template is free. Wiring in your real credentials, tuning the logic to your business, and keeping it running when an upstream API changes is what we do.
Get my free automation plan →Frequently asked questions
Can this handle entities on different accounting platforms?
Yes, each entity's Pull Entity Trial Balance node points at that entity's specific accounting API, the workflow does not require a single unified system.
How are elimination mismatches typically resolved?
Most are timing differences between when two entities recorded the same intercompany transaction. Flag For Manual Reconciliation routes these to the controller managing both entities to confirm and adjust.
Does this replace a dedicated consolidation platform like OneStream?
For groups with a handful to a dozen entities, this covers the core need at a fraction of the cost. Large, complex groups with elaborate ownership structures and minority interests benefit from dedicated consolidation software's deeper functionality.