Somebody in your finance team loses the first three days of every month. They export from the ERP, pull a file from the bank portal, download a CRM report, paste all of it into a workbook that has been maintained since 2019, reconcile the differences by hand, and email a PDF to eleven people.
That person is usually qualified to do analysis and spends a third of their month doing data entry instead. Here is what replacing it actually involves — not the pitch version, the real one.
Where the Three Days Actually Go
Before automating anything, time the steps. The distribution is almost always lopsided, and it is rarely where people assume.
| Step | Typical time | Automatable? |
|---|---|---|
| Exporting from source systems | 2-3 hours | Yes, fully |
| Cleaning and reformatting exports | 3-4 hours | Yes, fully |
| Reconciling differences between sources | 6-10 hours | Mostly |
| Building the workbook and charts | 2-3 hours | Yes, fully |
| Chasing missing data from other teams | 4-8 hours | No — process problem |
| Review and commentary | 2-3 hours | No — keep it human |
| Distribution | 1 hour | Yes, fully |
Two rows matter most. Reconciliation is the biggest automatable block, which is where the return concentrates. And chasing missing data is not an automation problem at all — it is a process problem, and no tool fixes a colleague who submits their numbers late.
What the Automation Actually Looks Like
Concretely, for a typical finance pack, the workflow has five stages that run on a schedule:
The shape of a month-end workflow
Trigger 1st of month, 06:00, or on-demand
1. Extract ERP -> API or scheduled export -> staging
Bank -> API or SFTP -> staging
CRM -> API -> staging
2. Validate Row counts within expected range?
Control totals present?
Required accounts all reporting?
-> if any check fails, STOP and alert
3. Transform Map account codes to reporting lines
Convert currency at month-end rate
Apply intercompany elimination
Reconcile ERP vs bank, flag variances
4. Load Write to warehouse
Refresh the Power BI semantic model
5. Distribute Generate the PDF pack
Email to the distribution list
Post the summary to Teams
Nothing here is exotic. The whole thing is a scheduled sequence of steps a person currently performs. The value is that it runs identically every month, at 6am, without anyone losing three days.
Which Tool, Honestly
There are three realistic categories and the choice matters less than people think, provided you avoid building it somewhere it cannot be maintained.
| Approach | Good for | Watch out for |
|---|---|---|
| Power Automate | Microsoft-only stacks, simple flows | Per-run costs; awkward with complex transforms |
| n8n (self-hosted) | Mixed systems, full control, no per-task fee | You run the infrastructure |
| Python + scheduler | Heavy transformation, full testability | Needs someone who maintains code |
| Azure Data Factory | Large volumes, already on Azure | Heavier setup for a small pack |
For a mid-sized finance pack touching an ERP, a bank and a CRM, self-hosted n8n is frequently the sweet spot: it connects to almost anything, the logic is visible on a canvas so a non-developer can follow it, and self-hosting means unlimited runs with no per-task billing. It also now orchestrates AI steps, which matters for the variance commentary discussed below.
What matters more than the tool: the logic must live somewhere version controlled and readable by someone other than its author. An automation nobody can modify is a worse dependency than the spreadsheet it replaced.
The Hard Part Is Not the Automation
Extracting and transforming data is routine engineering. The part that consumes the project is reconciliation logic, because it encodes judgement that currently exists only in somebody's head.
Ask your finance person what they do when the ERP and the bank disagree by 400. You will get something like: under 500 and it is timing, so it carries to next month; over 500 they investigate; if it is exactly a round number it is usually a manual journal. None of that is written down anywhere.
That conversation is the project. Three days of it, documented properly, and the build is straightforward afterwards. Skip it and you will automate the easy 60% and leave the person doing the hard 40% by hand, which saves far less than promised.
Reconciliation rules, written down
IF |variance| < 500 AND days_open < 30
-> classify: timing, carry forward, no alert
IF |variance| >= 500
-> classify: investigate, alert the controller
IF variance is an exact multiple of 1000
-> classify: likely manual journal, flag for review
IF variance appears in the same account 3 months running
-> classify: systematic, escalate
ELSE -> classify: unexplained, hold the pack
What Happens When It Breaks
It will break. A source system changes a column, an API token expires, a file arrives in a different format. The difference between a reliable automation and an unreliable one is entirely in what happens next.
The failure mode to design against is silent partial success: the workflow runs, one source returns nothing, and it publishes a pack that quietly excludes a subsidiary. Everybody trusts it because it arrived on time.
So validate before you publish. Row counts inside an expected range, control totals present, every required entity reporting. If a check fails, stop, alert a named person, and publish nothing. A pack that is late is a minor inconvenience. A pack that is wrong and on time costs you the trust that justified the project.
What It Costs to Build
For a typical finance pack with three or four source systems, expect three to five weeks: about a week on discovery and reconciliation rules, two on the build, one on parallel running until the automated output ties to the manual one, and a few days on documentation and handover.
Run it in parallel for at least two cycles. Nobody switches off a working process on the strength of one good month, and they are right not to.
Against three days a month of a qualified person's time, the payback is usually inside a year — and the second automation is considerably cheaper than the first, because the extraction and alerting plumbing is already there.
Start With One Report, Not All of Them
The instinct after a successful pilot is to automate everything at once. Resist it for a practical reason: the first automation teaches you things about your data that change how you would build the second.
You will discover that the ERP export includes a trailing summary row. That the bank file changes format in months with a public holiday. That one subsidiary reports in a different currency than everyone assumed. None of this appears in a requirements document, and all of it surfaces during the first parallel run.
Build one, run it for two cycles, then build the next with what you learned. The second takes half as long, and the third is faster again, because the extraction, alerting and validation patterns are already in place.
There is a people dimension too. The person whose three days you are removing needs to be part of building it, not have it done to them. In practice they hold most of the knowledge the project depends on, and if the automation is something that happened to them, they will keep maintaining the spreadsheet in parallel just in case. Then you have two processes instead of one.
What We Would Do
We start by sitting with whoever currently produces the pack and documenting what they do, including the judgement calls. Then we build the extraction, validation and reconciliation as a scheduled workflow with alerting, run it in parallel until it ties, and hand over documentation your team can modify.
We also say when a process is not worth automating. If the pack takes three days because two of them are spent chasing other departments, the honest answer is that a deadline change would deliver more than we would.
Phoenix Solutions builds workflow automation with n8n, Power Automate and custom pipelines, connecting ERP, CRM, banking and BI into processes that run themselves. See workflow automation, or the finance case study where reporting time halved and ETL processing dropped 85%.
